harperdb 4.5.0-alpha.3 → 4.5.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.
Files changed (91) hide show
  1. package/README.md +1 -1
  2. package/bin/harperdb.js +82 -82
  3. package/bin/lite.js +82 -82
  4. package/launchServiceScripts/launchInstallNATSServer.js +3 -3
  5. package/launchServiceScripts/launchNatsIngestService.js +82 -82
  6. package/launchServiceScripts/launchNatsReplyService.js +82 -82
  7. package/launchServiceScripts/launchUpdateNodes4-0-0.js +81 -81
  8. package/npm-shrinkwrap.json +840 -870
  9. package/package.json +8 -8
  10. package/resources/blob.d.ts +2 -2
  11. package/server/jobs/jobProcess.js +82 -82
  12. package/server/serverHelpers/JSONStream.d.ts +14 -0
  13. package/server/serverHelpers/contentTypes.d.ts +56 -0
  14. package/server/threads/threadServer.js +82 -82
  15. package/studio/build-local/asset-manifest.json +42 -41
  16. package/studio/build-local/index.html +1 -1
  17. package/studio/build-local/static/css/main.60857e29.css +13 -0
  18. package/studio/build-local/static/js/122.830d4399.chunk.js +2 -0
  19. package/studio/build-local/static/js/122.830d4399.chunk.js.LICENSE.txt +5 -0
  20. package/studio/build-local/static/js/164.3490f18f.chunk.js +1 -0
  21. package/studio/build-local/static/js/279.7dfac9c5.chunk.js +1 -0
  22. package/studio/build-local/static/js/545.046f5738.chunk.js +1 -0
  23. package/studio/build-local/static/js/833.3aff61e3.chunk.js +1 -0
  24. package/studio/build-local/static/js/{browse-csvupload.02fdfbea.chunk.js → browse-csvupload.cdc5e843.chunk.js} +1 -1
  25. package/studio/build-local/static/js/browse-datatable.3f426683.chunk.js +1 -0
  26. package/studio/build-local/static/js/browse-entitymanager.e9b890eb.chunk.js +1 -0
  27. package/studio/build-local/static/js/{browse-jsonviewer.b690b1bb.chunk.js → browse-jsonviewer.d19731db.chunk.js} +1 -1
  28. package/studio/build-local/static/js/custom-functions.d0e98d37.chunk.js +1 -0
  29. package/studio/build-local/static/js/instance-cluster.d5a2a397.chunk.js +1 -0
  30. package/studio/build-local/static/js/instance-config.347093bf.chunk.js +1 -0
  31. package/studio/build-local/static/js/instance-logs.1aaf5d15.chunk.js +1 -0
  32. package/studio/build-local/static/js/instance-roles.7ac001d5.chunk.js +1 -0
  33. package/studio/build-local/static/js/instance-status.99235f8a.chunk.js +1 -0
  34. package/studio/build-local/static/js/instance-users-datatable.30e06140.chunk.js +1 -0
  35. package/studio/build-local/static/js/{instance-users-edit.6ea9cc6f.chunk.js → instance-users-edit.d860ecc3.chunk.js} +1 -1
  36. package/studio/build-local/static/js/{instance-users.876f6070.chunk.js → instance-users.dc880abe.chunk.js} +1 -1
  37. package/studio/build-local/static/js/instance.92e42f60.chunk.js +1 -0
  38. package/studio/build-local/static/js/instances.5ca66253.chunk.js +1 -0
  39. package/studio/build-local/static/js/main.9140b0ac.js +2 -0
  40. package/studio/build-local/static/js/offline-app.5bab91f6.chunk.js +1 -0
  41. package/studio/build-local/static/js/online-app.38675097.chunk.js +1 -0
  42. package/studio/build-local/static/js/{organization-billing.21b2d3c9.chunk.js → organization-billing.75660563.chunk.js} +1 -1
  43. package/studio/build-local/static/js/organization-users.d913dc35.chunk.js +1 -0
  44. package/studio/build-local/static/js/organization.2cbb1871.chunk.js +1 -0
  45. package/studio/build-local/static/js/organizations.b7abb2b5.chunk.js +1 -0
  46. package/studio/build-local/static/js/{profile.c05c7042.chunk.js → profile.cd02eab8.chunk.js} +1 -1
  47. package/studio/build-local/static/js/resetPassword.f56c6a03.chunk.js +1 -0
  48. package/studio/build-local/static/js/{roles-jsonviewer.bf1011d5.chunk.js → roles-jsonviewer.891faeff.chunk.js} +1 -1
  49. package/studio/build-local/static/js/signIn.426c63a1.chunk.js +1 -0
  50. package/studio/build-local/static/js/signUp.2caeeae2.chunk.js +1 -0
  51. package/studio/build-local/static/js/{structure-reloader.f65842a1.chunk.js → structure-reloader.4a977969.chunk.js} +1 -1
  52. package/studio/build-local/static/js/topnav.d2fd9b1a.chunk.js +1 -0
  53. package/studio/build-local/static/js/updatePassword.f282bf0b.chunk.js +1 -0
  54. package/studio/build-local/static/media/PPRadioGrotesk-Bold.31436818ea74a78b55af.woff +0 -0
  55. package/studio/build-local/static/media/checkmark.3d7d209874703a9cd0cc.svg +3 -0
  56. package/studio/build-local/static/media/logo_harper_db_studio.856391ec8a20ac3a6bee.png +0 -0
  57. package/utility/hdbTerms.d.ts +789 -0
  58. package/utility/scripts/restartHdb.js +82 -82
  59. package/studio/build-local/static/css/main.fee3019a.css +0 -13
  60. package/studio/build-local/static/js/279.7890bce3.chunk.js +0 -1
  61. package/studio/build-local/static/js/311.9e648b13.chunk.js +0 -2
  62. package/studio/build-local/static/js/311.9e648b13.chunk.js.LICENSE.txt +0 -38
  63. package/studio/build-local/static/js/452.d771b05a.chunk.js +0 -2
  64. package/studio/build-local/static/js/452.d771b05a.chunk.js.LICENSE.txt +0 -13
  65. package/studio/build-local/static/js/545.be2e36f9.chunk.js +0 -1
  66. package/studio/build-local/static/js/806.afb99f70.chunk.js +0 -1
  67. package/studio/build-local/static/js/833.5b133801.chunk.js +0 -1
  68. package/studio/build-local/static/js/browse-datatable.0e20a171.chunk.js +0 -1
  69. package/studio/build-local/static/js/browse-entitymanager.0db076c3.chunk.js +0 -1
  70. package/studio/build-local/static/js/custom-functions.04b93135.chunk.js +0 -1
  71. package/studio/build-local/static/js/instance-charts.217c477d.chunk.js +0 -1
  72. package/studio/build-local/static/js/instance-cluster.0ba07710.chunk.js +0 -1
  73. package/studio/build-local/static/js/instance-config.2274de0a.chunk.js +0 -1
  74. package/studio/build-local/static/js/instance-query.fdc5f922.chunk.js +0 -1
  75. package/studio/build-local/static/js/instance-roles.38ef8e77.chunk.js +0 -1
  76. package/studio/build-local/static/js/instance-status.d09551b0.chunk.js +0 -1
  77. package/studio/build-local/static/js/instance-users-datatable.9b5617bc.chunk.js +0 -1
  78. package/studio/build-local/static/js/instance.ad30f892.chunk.js +0 -1
  79. package/studio/build-local/static/js/instances.f4fec0cb.chunk.js +0 -1
  80. package/studio/build-local/static/js/main.c0a12520.js +0 -2
  81. package/studio/build-local/static/js/offline-app.31ad36fc.chunk.js +0 -1
  82. package/studio/build-local/static/js/online-app.91033fd0.chunk.js +0 -1
  83. package/studio/build-local/static/js/organization-users.6f50ca02.chunk.js +0 -1
  84. package/studio/build-local/static/js/organization.89b902c4.chunk.js +0 -1
  85. package/studio/build-local/static/js/organizations.4933fdbc.chunk.js +0 -1
  86. package/studio/build-local/static/js/resetPassword.3478535b.chunk.js +0 -1
  87. package/studio/build-local/static/js/signIn.996cf7ee.chunk.js +0 -1
  88. package/studio/build-local/static/js/signUp.c8fce52d.chunk.js +0 -1
  89. package/studio/build-local/static/js/topnav.0fa4de77.chunk.js +0 -1
  90. package/studio/build-local/static/js/updatePassword.bc881b36.chunk.js +0 -1
  91. /package/studio/build-local/static/js/{main.c0a12520.js.LICENSE.txt → main.9140b0ac.js.LICENSE.txt} +0 -0
@@ -1,133 +1,133 @@
1
- "use strict";var Kz=Object.create;var Vd=Object.defineProperty;var Yz=Object.getOwnPropertyDescriptor;var Wz=Object.getOwnPropertyNames;var zz=Object.getPrototypeOf,jz=Object.prototype.hasOwnProperty;var a=(e,t)=>Vd(e,"name",{value:t,configurable:!0});var Oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Vd(e,r,{get:t[r],enumerable:!0})},IC=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Wz(t))!jz.call(e,s)&&s!==r&&Vd(e,s,{get:()=>t[s],enumerable:!(n=Yz(t,s))||n.enumerable});return e};var L=(e,t,r)=>(r=e!=null?Kz(zz(e)):{},IC(t||!e||!e.__esModule?Vd(r,"default",{value:e,enumerable:!0}):r,e)),se=e=>IC(Vd({},"__esModule",{value:!0}),e);var v=P((xTe,UC)=>{var Kd=require("node:path"),Qz=require("node:fs");function Jz(){let e=__dirname;for(;!Qz.existsSync(Kd.join(e,"package.json"));){let t=Kd.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Jz,"getHDBPackageRoot");var Em=Jz(),Xz="harperdb-config.yaml",Zz="defaultConfig.yaml",ej="hdb",tj="config.yaml",rj="harperdb.js",nj="restartHdb.js",CC="HarperDB",HT="Custom Functions",kT="Clustering Hub",FT="Clustering Leaf",sj="Clustering Ingest Service",ij="Clustering Reply Service",oj={HDB:CC,CLUSTERING_HUB:kT,CLUSTERING_LEAF:FT,CLUSTERING_INGEST_SERVICE:sj,CLUSTERING_REPLY_SERVICE:ij,CUSTOM_FUNCTIONS:HT,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"},aj={harperdb:CC,"clustering hub":kT,"clustering leaf":FT,"custom functions":HT,custom_functions:HT,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},cj={CLUSTERING_HUB_PROC_DESCRIPTOR:kT,CLUSTERING_LEAF_PROC_DESCRIPTOR:FT},lj="hdb.pid",uj="data",dj={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},fj={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},_j={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Kd.join(Em,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Kd.join(Em,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Kd.join(Em,"launchServiceScripts/launchUpdateNodes4-0-0.js")},hj={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},PC="support@harperdb.io",mj=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${PC}`,pj="None of the specified records were found.",Ej="U+002E",gj=/\//g,Sj="U+002F",Tj=/U\+002F/g,Aj="--max-old-space-size=",Rj="system",yj=".harperdb",bj="keys",Oj="hdb_boot_properties.file",Nj=6e4,wj=448,Ij="database",Cj="schema",Pj="transactions",Dj="PROCESS_NAME",DC={SETTINGS_PATH_KEY:"settings_path"},Lj={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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Mj=250,vj={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Uj={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"},Bj="info_id",xj={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"},Hj="060493.ks",kj=".license",Fj={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},Bs={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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},qj={CSV:".csv",JSON:".json"},Gj={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},$j={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Vj={[Bs.INSERT]:Bs.INSERT,[Bs.UPDATE]:Bs.UPDATE,[Bs.UPSERT]:Bs.UPSERT,[Bs.DELETE]:Bs.DELETE},Kj={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},Yj={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Wj={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"},zj={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"},ce={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",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_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},LC={settings_path:DC.SETTINGS_PATH_KEY,hdb_root_key:ce.ROOTPATH,hdb_root:ce.ROOTPATH,rootpath:ce.ROOTPATH,server_port_key:ce.OPERATIONSAPI_NETWORK_PORT,server_port:ce.OPERATIONSAPI_NETWORK_PORT,cert_key:ce.TLS_CERTIFICATE,certificate:ce.TLS_CERTIFICATE,private_key_key:ce.TLS_PRIVATEKEY,private_key:ce.TLS_PRIVATEKEY,http_secure_enabled_key:ce.OPERATIONSAPI_NETWORK_HTTPS,https_on:ce.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:ce.OPERATIONSAPI_NETWORK_CORS,cors_on:ce.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:ce.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:ce.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:ce.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:ce.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:ce.LOGGING_LEVEL,log_level:ce.LOGGING_LEVEL,log_path_key:ce.LOGGING_ROOT,log_path:ce.LOGGING_ROOT,clustering_node_name_key:ce.CLUSTERING_NODENAME,node_name:ce.CLUSTERING_NODENAME,clustering_enabled_key:ce.CLUSTERING_ENABLED,clustering:ce.CLUSTERING_ENABLED,max_http_threads:ce.THREADS_COUNT,max_hdb_processes:ce.THREADS_COUNT,server_timeout_key:ce.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:ce.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:ce.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:ce.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:ce.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:ce.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:ce.LOGGING_AUDITLOG,disable_transaction_log:ce.LOGGING_AUDITLOG,operation_token_timeout_key:ce.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:ce.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:ce.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:ce.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:ce.HTTP_PORT,custom_functions_port:ce.HTTP_PORT,custom_functions_directory_key:ce.COMPONENTSROOT,custom_functions_directory:ce.COMPONENTSROOT,max_custom_function_processes:ce.THREADS_COUNT,logging_console:ce.LOGGING_CONSOLE,log_to_file:ce.LOGGING_FILE,log_to_stdstreams:ce.LOGGING_STDSTREAMS,local_studio_on:ce.LOCALSTUDIO_ENABLED,clustering_port:ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:ce.CLUSTERING_USER,customfunctions_network_port:ce.HTTP_PORT,customfunctions_tls_certificate:ce.TLS_CERTIFICATE,customfunctions_network_cors:ce.HTTP_CORS,customfunctions_network_corsaccesslist:ce.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:ce.HTTP_HEADERSTIMEOUT,customfunctions_network_https:ce.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:ce.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:ce.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:ce.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:ce.HTTP_TIMEOUT,customfunctions_tls:ce.TLS,http_threads:ce.THREADS_COUNT,threads:ce.THREADS_COUNT,threads_count:ce.THREADS_COUNT,customfunctions_processes:ce.THREADS_COUNT,customfunctions_root:ce.COMPONENTSROOT,operationsapi_root:ce.ROOTPATH};for(let e in ce){let t=ce[e];LC[t.toLowerCase()]=t}var jj={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Qj={csv_file_load:"csv_file_load",csv_data_load:Bs.CSV_DATA_LOAD,csv_url_load:Bs.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",restart_service:"restart_service"},Jj={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"},Xj={VERSION_DEFAULT:"2.2.0"},Zj={DEVELOPMENT:8192,DEFAULT:512},e2={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},t2=Symbol("metadata"),r2="__clustering__",MC="__createdtime__",vC="__updatedtime__",n2={CREATED_TIME:MC,UPDATED_TIME:vC},s2=[MC,vC],i2=15984864e5,o2={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},a2={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},c2={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},l2=["*","%"],u2="func_val",d2={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},f2={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},_2={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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},h2={HTTP:"http"},m2="3.x.x",p2={SUCCESS:"success",FAILURE:"failure"},E2={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};UC.exports={PACKAGE_ROOT:Em,HDB_CONFIG_FILE:Xz,HDB_DEFAULT_CONFIG_FILE:Zz,HDB_ROOT_DIR_NAME:ej,HDB_COMPONENT_CONFIG_FILE:tj,HDB_PROC_NAME:rj,HDB_RESTART_SCRIPT:nj,PROCESS_DESCRIPTORS:oj,HDB_PROCESS_SERVICES:aj,CLUSTERING_PROCESSES:cj,HDB_PID_FILE:lj,DEFAULT_DATABASE_NAME:uj,LOG_NAMES:dj,LOG_LEVELS:fj,LAUNCH_SERVICE_SCRIPTS:_j,ROLE_TYPES_ENUM:hj,HDB_SUPPORT_ADDRESS:PC,SUPPORT_HELP_MSG:mj,SEARCH_NOT_FOUND_MESSAGE:pj,UNICODE_PERIOD:Ej,FORWARD_SLASH_REGEX:gj,UNICODE_FORWARD_SLASH:Sj,ESCAPED_FORWARD_SLASH_REGEX:Tj,MEM_SETTING_KEY:Aj,SYSTEM_SCHEMA_NAME:Rj,HDB_HOME_DIR_NAME:yj,LICENSE_KEY_DIR_NAME:bj,BOOT_PROPS_FILE_NAME:Oj,RESTART_TIMEOUT_MS:Nj,HDB_FILE_PERMISSIONS:wj,DATABASES_DIR_NAME:Ij,LEGACY_DATABASES_DIR_NAME:Cj,TRANSACTIONS_DIR_NAME:Pj,PROCESS_NAME_ENV_PROP:Dj,BOOT_PROP_PARAMS:DC,INSTALL_PROMPTS:Lj,INSERT_MAX_CHARACTER_SIZE:Mj,UPGRADE_JSON_FIELD_NAMES_ENUM:vj,SYSTEM_TABLE_NAMES:Uj,INFO_TABLE_HASH_ATTRIBUTE:Bj,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:xj,REG_KEY_FILE_NAME:Hj,LICENSE_FILE_NAME:kj,JOB_STATUS_ENUM:Fj,OPERATIONS_ENUM:Bs,VALID_S3_FILE_TYPES:qj,S3_BUCKET_AUTH_KEYS:Gj,VALID_SQL_OPS_ENUM:$j,CLUSTER_OPERATIONS:Vj,SERVICE_ACTIONS_ENUM:Kj,GEO_CONVERSION_ENUM:Yj,HDB_SETTINGS_NAMES:Wj,LEGACY_CONFIG_PARAMS:zj,CONFIG_PARAMS:ce,CONFIG_PARAM_MAP:LC,DATABASES_PARAM_CONFIG:jj,JOB_TYPE_ENUM:Qj,CLUSTER_MESSAGE_TYPE_ENUM:Jj,LICENSE_VALUES:Xj,RAM_ALLOCATION_ENUM:Zj,NODE_ERROR_CODES:e2,METADATA_PROPERTY:t2,CLUSTERING_FLAG:r2,TIME_STAMP_NAMES_ENUM:n2,TIME_STAMP_NAMES:s2,PERMS_UPDATE_RELEASE_TIMESTAMP:i2,VALUE_SEARCH_COMPARATORS:o2,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:a2,PERMS_CRUD_ENUM:c2,SEARCH_WILDCARDS:l2,FUNC_VAL:u2,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:d2,JWT_ENUM:f2,ITC_EVENT_TYPES:_2,THREAD_TYPES:h2,PRE_4_0_0_VERSION:m2,AUTH_AUDIT_STATUS:p2,AUTH_AUDIT_TYPES:E2}});var Qa=P((kTe,HC)=>{"use strict";var BC=require("minimist");HC.exports=g2;function g2(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=xC(process.env),n=xC(BC(process.argv))):(r=process.env,n=BC(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(g2,"assignCMDENVVariables");function xC(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(xC,"objKeysToLowerCase")});var di=P(ui=>{"use strict";global.Resource=ui.Resource=void 0;global.tables=ui.tables={};global.databases=ui.databases={};global.getUser=ui.getUser=void 0;global.server=ui.server={};global.contentTypes=ui.contentTypes=null;global.threads=ui.threads=[];global.logger={};ui._assignPackageExport=(e,t)=>{global[e]=ui[e]=t}});var j=P((ZC,eP)=>{"use strict";var zi=require("fs-extra"),{workerData:S2,threadId:T2,isMainThread:A2}=require("worker_threads"),_i=require("path"),GC=require("yaml"),$C=require("properties-reader"),qt=v(),kC=Qa(),R2=require("os"),{PACKAGE_ROOT:VT}=v(),{_assignPackageExport:y2}=di(),FC=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),dr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},VC={STDOUT:"stdOut",STDERR:"stdErr"},b2=_i.join(VT,"logs"),O2=_i.join(VT,"config/yaml/",qt.HDB_DEFAULT_CONFIG_FILE),N2=1e4,qT,fi,os,Cr,gm,Yd,Sm,Yo,Wd;Wd===void 0&&KC();Object.assign(ZC,{notify:QC,fatal:JC,error:Tm,warn:XC,info:WC,debug:jC,trace:zC,setLogLevel:v2,log_level:Cr,loggerWithTag:C2,suppressLogging:P2,initLogSettings:KC,logCustomLevel:L2,closeLogFile:KT,logsAtLevel:w2,getLogFilePath:a(()=>Sm,"getLogFilePath"),OUTPUTS:VC,AuthAuditLog:x2});y2("logger",eP.exports);var GT;function w2(e){return dr[Cr]<=dr[e]}a(w2,"logsAtLevel");function KC(e=!1){try{if(Wd===void 0||e){KT();let t=M2(),r=kC(["ROOTPATH"]);try{Wd=$C(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!zi.pathExistsSync(_i.join(r.ROOTPATH,qt.HDB_CONFIG_FILE)))throw n}if({level:Cr,config_log_path:Yd,to_file:fi,to_stream:os}=U2(r.ROOTPATH?_i.join(r.ROOTPATH,qt.HDB_CONFIG_FILE):Wd.get("settings_path")),gm=qt.LOG_NAMES.HDB,Sm=_i.join(Yd,gm),A2)try{require("segfault-handler").registerHandler(_i.join(Yd,"crash.log"))}catch{}}}catch(t){if(Wd=void 0,t.code===qt.NODE_ERROR_CODES.ENOENT||t.code===qt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=kC(Object.keys(qt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=qt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===qt.CONFIG_PARAMS.LOGGING_LEVEL){Cr=l;continue}if(c===qt.CONFIG_PARAMS.LOGGING_STDSTREAMS){os=l;continue}c===qt.CONFIG_PARAMS.LOGGING_FILE&&(fi=c),c===qt.CONFIG_PARAMS.LOGGING_CONSOLE&&(qT=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=B2();fi=fi===void 0?s:fi,fi=qC(fi),os=os===void 0?i:os,os=qC(os),Cr=Cr===void 0?n:Cr,Yd=b2,gm=qt.LOG_NAMES.INSTALL,Sm=_i.join(Yd,gm);return}throw Tm("Error initializing log settings"),Tm(t),t}process.env.DEV_MODE&&(os=!0),I2()}a(KC,"initLogSettings");var Wo=!0;function I2(){fi&&(process.stdout.write=function(e){return typeof e=="string"&&Wo&&qT!==!1&&($T(),e=e.toString(),e[e.length-1]===`
2
- `&&(e=e.slice(0,-1)),zi.appendFileSync(Yo,xs("stdout",[e]))),FC.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Wo&&qT!==!1&&($T(),e[e.length-1]===`
3
- `&&(e=e.slice(0,-1)),zi.appendFileSync(Yo,xs("stderr",[e]))),FC.apply(process.stderr,arguments)})}a(I2,"stdioLogging");function C2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(QC,"notify"),fatal:n(JC,"fatal"),error:n(Tm,"error"),warn:n(XC,"warn"),info:n(WC,"info"),debug:n(jC,"debug"),trace:n(zC,"trace")};function n(s,i){return!t||dr[Cr]<=dr[i]?function(...o){return s(r,...o)}:null}}a(C2,"loggerWithTag");function P2(e){try{Wo=!1,e()}finally{Wo=!0}}a(P2,"suppressLogging");var D2=S2?.name?.replace(/ /g,"-")||"main";function xs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||D2+"/"+T2);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
1
+ "use strict";var $z=Object.create;var qd=Object.defineProperty;var Vz=Object.getOwnPropertyDescriptor;var Kz=Object.getOwnPropertyNames;var Yz=Object.getPrototypeOf,Wz=Object.prototype.hasOwnProperty;var a=(e,t)=>qd(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Be=(e,t)=>{for(var r in t)qd(e,r,{get:t[r],enumerable:!0})},PC=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Kz(t))!Wz.call(e,s)&&s!==r&&qd(e,s,{get:()=>t[s],enumerable:!(n=Vz(t,s))||n.enumerable});return e};var U=(e,t,r)=>(r=e!=null?$z(Yz(e)):{},PC(t||!e||!e.__esModule?qd(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>PC(qd({},"__esModule",{value:!0}),e);var _t=P((wTe,MC)=>{var{join:zz,dirname:DC}=require("node:path"),{existsSync:Qz,readFileSync:jz}=require("node:fs");function Jz(){let t=__dirname,r,n=0;for(;!Qz(r=zz(t,"package.json"));)if(t===(t=DC(t))||n++>10)throw new Error("Could not find package root");return r}a(Jz,"findPackageJson");var LC=Jz(),Xz=JSON.parse(jz(LC,"utf8")),Zz=DC(LC);MC.exports={packageJson:Xz,PACKAGE_ROOT:Zz}});var q={};Be(q,{AUTH_AUDIT_STATUS:()=>Us,AUTH_AUDIT_TYPES:()=>zo,BOOT_PROPS_FILE_NAME:()=>OQ,BOOT_PROP_PARAMS:()=>xC,CLUSTERING_FLAG:()=>XQ,CLUSTERING_PROCESSES:()=>lQ,CLUSTER_MESSAGE_TYPE_ENUM:()=>xT,CLUSTER_OPERATIONS:()=>GQ,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>BC,DATABASES_DIR_NAME:()=>Za,DATABASES_PARAM_CONFIG:()=>YQ,DEFAULT_DATABASE_NAME:()=>dQ,ESCAPED_FORWARD_SLASH_REGEX:()=>AQ,FORWARD_SLASH_REGEX:()=>SQ,FUNC_VAL:()=>s2,GEO_CONVERSION_ENUM:()=>$Q,HDB_COMPONENT_CONFIG_FILE:()=>rQ,HDB_CONFIG_FILE:()=>eQ,HDB_DEFAULT_CONFIG_FILE:()=>tQ,HDB_FILE_PERMISSIONS:()=>wQ,HDB_HOME_DIR_NAME:()=>yQ,HDB_PID_FILE:()=>uQ,HDB_PROCESS_SERVICES:()=>cQ,HDB_PROC_NAME:()=>nQ,HDB_RESTART_SCRIPT:()=>sQ,HDB_ROOT_DIR_NAME:()=>LT,HDB_SETTINGS_NAMES:()=>VQ,HDB_SUPPORT_ADDRESS:()=>UC,INFO_TABLE_HASH_ATTRIBUTE:()=>MQ,INSERT_MAX_CHARACTER_SIZE:()=>DQ,INSTALL_PROMPTS:()=>PQ,ITC_EVENT_TYPES:()=>HT,JOB_STATUS_ENUM:()=>BQ,JOB_TYPE_ENUM:()=>WQ,JWT_ENUM:()=>i2,LAUNCH_SERVICE_SCRIPTS:()=>hQ,LEGACY_CONFIG_PARAMS:()=>KQ,LEGACY_DATABASES_DIR_NAME:()=>up,LICENSE_FILE_NAME:()=>xQ,LICENSE_KEY_DIR_NAME:()=>bQ,LICENSE_VALUES:()=>zQ,LOG_LEVELS:()=>_Q,LOG_NAMES:()=>fQ,MEM_SETTING_KEY:()=>RQ,METADATA_PROPERTY:()=>JQ,NODE_ERROR_CODES:()=>jQ,OPERATIONS_ENUM:()=>$t,PERMS_CRUD_ENUM:()=>r2,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>t2,PRE_4_0_0_VERSION:()=>o2,PROCESS_DESCRIPTORS:()=>aQ,PROCESS_NAME_ENV_PROP:()=>CQ,RAM_ALLOCATION_ENUM:()=>QQ,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>_p,REG_KEY_FILE_NAME:()=>UQ,RESTART_TIMEOUT_MS:()=>NQ,ROLE_TYPES_ENUM:()=>pQ,S3_BUCKET_AUTH_KEYS:()=>kQ,SEARCH_NOT_FOUND_MESSAGE:()=>mQ,SEARCH_WILDCARDS:()=>n2,SERVICE_ACTIONS_ENUM:()=>qQ,SUPPORT_HELP_MSG:()=>EQ,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>vQ,SYSTEM_SCHEMA_NAME:()=>UT,SYSTEM_TABLE_NAMES:()=>dp,THREAD_TYPES:()=>kT,TIME_STAMP_NAMES:()=>e2,TIME_STAMP_NAMES_ENUM:()=>ZQ,TRANSACTIONS_DIR_NAME:()=>IQ,UNICODE_FORWARD_SLASH:()=>TQ,UNICODE_PERIOD:()=>gQ,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>LQ,VALID_S3_FILE_TYPES:()=>HQ,VALID_SQL_OPS_ENUM:()=>FQ,VALUE_SEARCH_COMPARATORS:()=>fp,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>BT});var cp,lp,eQ,tQ,LT,rQ,nQ,sQ,vC,DT,MT,vT,iQ,oQ,aQ,cQ,lQ,uQ,dQ,fQ,_Q,hQ,pQ,UC,EQ,mQ,gQ,SQ,TQ,AQ,RQ,UT,yQ,bQ,OQ,NQ,wQ,Za,up,IQ,CQ,xC,PQ,DQ,LQ,dp,MQ,vQ,UQ,xQ,BQ,$t,HQ,kQ,FQ,GQ,qQ,$Q,VQ,KQ,B,BC,YQ,WQ,xT,zQ,QQ,jQ,JQ,XQ,HC,kC,ZQ,e2,t2,fp,BT,r2,n2,s2,_p,i2,HT,kT,o2,Us,zo,H=be(()=>{cp=require("node:path"),lp=U(_t()),eQ="harperdb-config.yaml",tQ="defaultConfig.yaml",LT="hdb",rQ="config.yaml",nQ="harperdb.js",sQ="restartHdb.js",vC="HarperDB",DT="Custom Functions",MT="Clustering Hub",vT="Clustering Leaf",iQ="Clustering Ingest Service",oQ="Clustering Reply Service",aQ={HDB:vC,CLUSTERING_HUB:MT,CLUSTERING_LEAF:vT,CLUSTERING_INGEST_SERVICE:iQ,CLUSTERING_REPLY_SERVICE:oQ,CUSTOM_FUNCTIONS:DT,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"},cQ={harperdb:vC,"clustering hub":MT,"clustering leaf":vT,"custom functions":DT,custom_functions:DT,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},lQ={CLUSTERING_HUB_PROC_DESCRIPTOR:MT,CLUSTERING_LEAF_PROC_DESCRIPTOR:vT},uQ="hdb.pid",dQ="data",fQ={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_Q={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},hQ={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,cp.join)(lp.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,cp.join)(lp.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,cp.join)(lp.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},pQ={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},UC="support@harperdb.io",EQ=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${UC}`,mQ="None of the specified records were found.",gQ="U+002E",SQ=/\//g,TQ="U+002F",AQ=/U\+002F/g,RQ="--max-old-space-size=",UT="system",yQ=".harperdb",bQ="keys",OQ="hdb_boot_properties.file",NQ=6e4,wQ=448,Za="database",up="schema",IQ="transactions",CQ="PROCESS_NAME",xC={SETTINGS_PATH_KEY:"settings_path"},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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},DQ=250,LQ={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},dp={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"},MQ="info_id",vQ={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"},UQ="060493.ks",xQ=".license",BQ={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$t={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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key"},HQ={CSV:".csv",JSON:".json"},kQ={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},FQ={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},GQ={[$t.INSERT]:$t.INSERT,[$t.UPDATE]:$t.UPDATE,[$t.UPSERT]:$t.UPSERT,[$t.DELETE]:$t.DELETE},qQ={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},$Q={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},VQ={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"},KQ={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",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_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},BC={settings_path:xC.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];BC[t.toLowerCase()]=t}YQ={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},WQ={csv_file_load:"csv_file_load",csv_data_load:$t.CSV_DATA_LOAD,csv_url_load:$t.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",restart_service:"restart_service"},xT={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"},zQ={VERSION_DEFAULT:"2.2.0"},QQ={DEVELOPMENT:8192,DEFAULT:512},jQ={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},JQ=Symbol("metadata"),XQ="__clustering__",HC="__createdtime__",kC="__updatedtime__",ZQ={CREATED_TIME:HC,UPDATED_TIME:kC},e2=[HC,kC],t2=15984864e5,fp={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},BT={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},r2={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},n2=["*","%"],s2="func_val",_p={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},i2={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},HT={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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update"},kT={HTTP:"http"},o2="3.x.x",Us={SUCCESS:"success",FAILURE:"failure"},zo={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var ec=P((CTe,qC)=>{"use strict";var FC=require("minimist");qC.exports=a2;function a2(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=GC(process.env),n=GC(FC(process.argv))):(r=process.env,n=FC(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(a2,"assignCMDENVVariables");function GC(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(GC,"objKeysToLowerCase")});var ui=P(li=>{"use strict";global.Resource=li.Resource=void 0;global.tables=li.tables={};global.databases=li.databases={};global.getUser=li.getUser=void 0;global.server=li.server={};global.contentTypes=li.contentTypes=null;global.threads=li.threads=[];global.logger={};li._assignPackageExport=(e,t)=>{global[e]=li[e]=t}});var j=P((nP,sP)=>{"use strict";var Wi=require("fs-extra"),{workerData:c2,threadId:l2,isMainThread:u2}=require("worker_threads"),fi=require("path"),YC=require("yaml"),WC=require("properties-reader"),Vt=(H(),D(q)),$C=ec(),d2=require("os"),{PACKAGE_ROOT:$T}=_t(),{_assignPackageExport:f2}=ui(),VC=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),hr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},zC={STDOUT:"stdOut",STDERR:"stdErr"},_2=fi.join($T,"logs"),h2=fi.join($T,"config/yaml/",Vt.HDB_DEFAULT_CONFIG_FILE),p2=1e4,FT,di,is,Pr,hp,$d,pp,Qo,Vd;Vd===void 0&&QC();Object.assign(nP,{notify:eP,fatal:tP,error:Ep,warn:rP,info:JC,debug:ZC,trace:XC,setLogLevel:y2,log_level:Pr,loggerWithTag:g2,suppressLogging:S2,initLogSettings:QC,logCustomLevel:A2,closeLogFile:VT,logsAtLevel:E2,getLogFilePath:a(()=>pp,"getLogFilePath"),OUTPUTS:zC,AuthAuditLog:N2});f2("logger",sP.exports);var GT;function E2(e){return hr[Pr]<=hr[e]}a(E2,"logsAtLevel");function QC(e=!1){try{if(Vd===void 0||e){VT();let t=R2(),r=$C(["ROOTPATH"]);try{Vd=WC(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Wi.pathExistsSync(fi.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE)))throw n}if({level:Pr,config_log_path:$d,to_file:di,to_stream:is}=b2(r.ROOTPATH?fi.join(r.ROOTPATH,Vt.HDB_CONFIG_FILE):Vd.get("settings_path")),hp=Vt.LOG_NAMES.HDB,pp=fi.join($d,hp),u2)try{require("segfault-handler").registerHandler(fi.join($d,"crash.log"))}catch{}}}catch(t){if(Vd=void 0,t.code===Vt.NODE_ERROR_CODES.ENOENT||t.code===Vt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=$C(Object.keys(Vt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Vt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Vt.CONFIG_PARAMS.LOGGING_LEVEL){Pr=l;continue}if(c===Vt.CONFIG_PARAMS.LOGGING_STDSTREAMS){is=l;continue}c===Vt.CONFIG_PARAMS.LOGGING_FILE&&(di=c),c===Vt.CONFIG_PARAMS.LOGGING_CONSOLE&&(FT=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=O2();di=di===void 0?s:di,di=KC(di),is=is===void 0?i:is,is=KC(is),Pr=Pr===void 0?n:Pr,$d=_2,hp=Vt.LOG_NAMES.INSTALL,pp=fi.join($d,hp);return}throw Ep("Error initializing log settings"),Ep(t),t}process.env.DEV_MODE&&(is=!0),m2()}a(QC,"initLogSettings");var jo=!0;function m2(){di&&(process.stdout.write=function(e){return typeof e=="string"&&jo&&FT!==!1&&(qT(),e=e.toString(),e[e.length-1]===`
2
+ `&&(e=e.slice(0,-1)),Wi.appendFileSync(Qo,xs("stdout",[e]))),VC.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&jo&&FT!==!1&&(qT(),e[e.length-1]===`
3
+ `&&(e=e.slice(0,-1)),Wi.appendFileSync(Qo,xs("stderr",[e]))),VC.apply(process.stderr,arguments)})}a(m2,"stdioLogging");function g2(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(eP,"notify"),fatal:n(tP,"fatal"),error:n(Ep,"error"),warn:n(rP,"warn"),info:n(JC,"info"),debug:n(ZC,"debug"),trace:n(XC,"trace")};function n(s,i){return!t||hr[Pr]<=hr[i]?function(...o){return s(r,...o)}:null}}a(g2,"loggerWithTag");function S2(e){try{jo=!1,e()}finally{jo=!0}}a(S2,"suppressLogging");var T2=c2?.name?.replace(/ /g,"-")||"main";function xs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||T2+"/"+l2);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
4
4
  `+JSON.stringify(u)),u.cause&&(t[c--]=u.cause,u&&(n+=`
5
5
  Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Object ["+Object.keys(u)+"]"}else n+=u;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
6
- `}a(xs,"createLogRecord");function zd(e){if(fi){if(YC(e),os){Wo=!1;try{process.stdout.write(e)}finally{Wo=!0}}}else os&&process.stdout.write(e)}a(zd,"logStdOut");function Am(e){if(fi){if(YC(e),os){Wo=!1;try{process.stderr.write(e)}finally{Wo=!0}}}else os&&process.stderr.write(e)}a(Am,"logStdErr");function YC(e){$T(),Yo?zi.appendFileSync(Yo,e):GT||console.log(e)}a(YC,"logToFile");function KT(){try{zi.closeSync(Yo)}catch{}Yo=null}a(KT,"closeLogFile");function $T(){if(!Yo){try{Yo=zi.openSync(Sm,"a")}catch(e){GT||(GT=!0,console.error(e))}setTimeout(()=>{KT()},N2).unref()}}a($T,"openLogFile");function WC(...e){dr[Cr]<=dr.info&&zd(xs("info",e))}a(WC,"info");function zC(...e){dr[Cr]<=dr.trace&&zd(xs("trace",e))}a(zC,"trace");function Tm(...e){dr[Cr]<=dr.error&&Am(xs("error",e))}a(Tm,"error");function jC(...e){dr[Cr]<=dr.debug&&zd(xs("debug",e))}a(jC,"debug");function QC(...e){dr[Cr]<=dr.notify&&zd(xs("notify",e))}a(QC,"notify");function JC(...e){dr[Cr]<=dr.fatal&&Am(xs("fatal",e))}a(JC,"fatal");function XC(...e){dr[Cr]<=dr.warn&&Am(xs("warn",e))}a(XC,"warn");function L2(e,t,...r){t===VC.STDERR?Am(xs(e,r)):zd(xs(e,r))}a(L2,"logCustomLevel");function M2(){let e;try{e=R2.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=_i.join(e,qt.HDB_HOME_DIR_NAME,qt.BOOT_PROPS_FILE_NAME);return zi.existsSync(t)||(t=_i.join(VT,"utility/hdb_boot_properties.file")),t}a(M2,"getPropsFilePath");function v2(e){Cr=e}a(v2,"setLogLevel");function qC(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(qC,"autoCastBoolean");function U2(e){try{if(e.includes("config/settings.js")){let o=$C(e);return{level:o.get(qt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:_i.dirname(o.get(qt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(qt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(qt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=GC.parseDocument(zi.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===qt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(U2,"getLogConfig");function B2(){try{let e=GC.parseDocument(zi.readFileSync(O2,"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(B2,"getDefaultConfig");function x2(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(x2,"AuthAuditLog")});var YT=P(($Te,tP)=>{"use strict";var H2=require("util"),k2=require("path"),F2=require("child_process"),q2=H2.promisify(F2.execFile),G2=1e3*1e3*10;tP.exports={findPs:$2};async function $2(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await q2("ps",["wwxo",`pid,${r}`],{maxBuffer:G2});for(let s of n.trim().split(`
7
- `).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:k2.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($2,"findPs")});var Dt=P((KTe,nP)=>{"use strict";var V2="__dbis__",K2="__txns__",Y2="__environment_name__",W2="__dbi_defintion__",z2={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"},j2=["__createdtime__","__updatedtime__"],Q2="\uFFFF",rP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},J2=Object.values(rP);nP.exports={AUDIT_STORE_NAME:K2,INTERNAL_DBIS_NAME:V2,DBI_DEFINITION_NAME:W2,SEARCH_TYPES:z2,TIMESTAMP_NAMES:j2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Y2,TRANSACTIONS_DBI_NAMES_ENUM:rP,TRANSACTIONS_DBIS:J2,OVERFLOW_MARKER:Q2}});var Ln=P((YTe,fP)=>{"use strict";var sP=v(),iP=Dt(),oP={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},aP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cP={500:aP("There was an error processing your request."),400:"Invalid request"},X2=cP[oP.INTERNAL_SERVER_ERROR],Z2={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},eQ={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},tQ={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},rQ={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 ${iP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${iP.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"},nQ={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${sP.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${sP.INSERT_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"},lP={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"},sQ={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},iQ={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},oQ={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},aQ={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},cQ={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},uP={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},dP={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},lQ={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},uQ={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},dQ={...lP,...tQ,...Z2,...sQ,...iQ,...oQ,...aQ,...cQ,...nQ,...uP,...dP,...lQ,...uQ,...eQ};fP.exports={CHECK_LOGS_WRAPPER:aP,HDB_ERROR_MSGS:dQ,DEFAULT_ERROR_MSGS:cP,DEFAULT_ERROR_RESP:X2,HTTP_STATUS_CODES:oP,LMDB_ERRORS_ENUM:rQ,AUTHENTICATION_ERROR_MSGS:lP,VALIDATION_ERROR_MSGS:uP,ITC_ERRORS:dP}});var fe=P((zTe,mP)=>{"use strict";var Ml=Ln(),fQ=j(),_Q=v(),Rm=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,_P),this.statusCode=n||Ml.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ml.DEFAULT_ERROR_MSGS[n]?Ml.DEFAULT_ERROR_MSGS[n]:Ml.DEFAULT_ERROR_MSGS[Ml.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&&fQ[s](i)}},WT=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}},zT=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function _P(e,t,r,n=_Q.LOG_LEVELS.ERROR,s=null,i=!1){if(hP(e))return e;let o=new Rm(e,t,r,n,s);return i&&delete o.stack,o}a(_P,"handleHDBError");function hP(e){return e.__proto__.constructor.name===Rm.name}a(hP,"isHDBError");mP.exports={isHDBError:hP,handleHDBError:_P,ClientError:WT,ServerError:zT,hdb_errors:Ml}});var ft=P((QTe,RP)=>{"use strict";var Zd=v(),hQ=re(),sn=ne(),ef=require("path"),mQ=require("minimist"),pP=require("fs-extra"),EP=require("lodash");sn.initSync();var{CONFIG_PARAMS:zo,DATABASES_PARAM_CONFIG:jd,SYSTEM_SCHEMA_NAME:ym}=Zd,Qd,Jd,Xd;function gP(){if(Qd!==void 0)return Qd;if(sn.getHdbBasePath()!==void 0)return Qd=sn.get(zo.STORAGE_PATH)||ef.join(sn.getHdbBasePath(),Zd.DATABASES_DIR_NAME),Qd}a(gP,"getBaseSchemaPath");function SP(){if(Jd!==void 0)return Jd;if(sn.getHdbBasePath()!==void 0)return Jd=AP(ym),Jd}a(SP,"getSystemSchemaPath");function TP(){if(Xd!==void 0)return Xd;if(sn.getHdbBasePath()!==void 0)return Xd=sn.get(Zd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ef.join(sn.getHdbBasePath(),Zd.TRANSACTIONS_DIR_NAME),Xd}a(TP,"getTransactionAuditStoreBasePath");function pQ(e,t){let r=sn.get(zo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ef.join(TP(),e.toString())}a(pQ,"getTransactionAuditStorePath");function AP(e,t){e=e.toString(),t=t&&t.toString();let r=sn.get(Zd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ef.join(gP(),e)}a(AP,"getSchemaPath");function EQ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,mQ(process.argv));let n=r[zo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!hQ.isObject(n))throw o;i=n}for(let o of i){let c=o[ym];if(!c)continue;let l=sn.get(zo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[jd.PATH];if(u)return EP.set(l,[ym,jd.TABLES,t,jd.PATH],u),sn.setProperty(zo.DATABASES,l),u;let f=c?.[jd.PATH];if(f)return EP.set(l,[ym,jd.PATH],f),sn.setProperty(zo.DATABASES,l),f}}let s=r[zo.STORAGE_PATH.toUpperCase()];if(s){if(!pP.pathExistsSync(s))throw new Error(s+" does not exist");let i=ef.join(s,e);return pP.mkdirsSync(i),sn.setProperty(zo.STORAGE_PATH,s),i}return SP()}a(EQ,"initSystemSchemaPaths");function gQ(){Qd=void 0,Jd=void 0,Xd=void 0}a(gQ,"resetPaths");RP.exports={getBaseSchemaPath:gP,getSystemSchemaPath:SP,getTransactionAuditStorePath:pQ,getTransactionAuditStoreBasePath:TP,getSchemaPath:AP,initSystemSchemaPaths:EQ,resetPaths:gQ}});var on=P((eAe,wP)=>{"use strict";var SQ=Ln().LMDB_ERRORS_ENUM,XTe=require("lmdb"),TQ=Dt(),ZTe=require("buffer").Buffer,{OVERFLOW_MARKER:yP,MAX_SEARCH_KEY_LENGTH:bm}=TQ,bP=["number","string","symbol","boolean","bigint"];function AQ(e){if(e=e?.primaryStore||e,!e)throw new Error(SQ.ENV_REQUIRED)}a(AQ,"validateEnv");function RQ(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(RQ,"stringifyData");function yQ(e){return e instanceof Date?e.valueOf():e}a(yQ,"convertKeyValueToWrite");function bQ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(bP.includes(typeof e))return e.length>bm?[e.slice(0,bm)+yP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(bP.includes(typeof i))i.length>bm?r.push(i.slice(0,bm)+yP):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(bQ,"getIndexedValues");var Om=0,OP=0;function NP(){OP=Date.now()-performance.now()}a(NP,"adjustStartTime");NP();var OQ=6e4;setInterval(NP,OQ).unref();function NQ(){let e=performance.now()+OP;return e>Om?(Om=e,e):(Om+=488e-6,Om)}a(NQ,"getNextMonotonicTime");wP.exports={validateEnv:AQ,stringifyData:RQ,convertKeyValueToWrite:yQ,getNextMonotonicTime:NQ,getIndexedValues:bQ}});var tf=P((rAe,IP)=>{"use strict";var wQ=v().OPERATIONS_ENUM,jT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=wQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};IP.exports=jT});var rf=P((iAe,LP)=>{"use strict";var sAe=tf(),Nm=v(),QT=re(),CP=j(),IQ=require("uuid"),{handleHDBError:wm,hdb_errors:CQ}=fe(),{HDB_ERROR_MSGS:Im,HTTP_STATUS_CODES:Cm}=CQ;LP.exports=PP;function PP(e,t,r){for(let s=0;s<t.length;s++)DP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];PQ(i,r,e.operation)}}a(PP,"processRows");PP.validateAttribute=DP;function DP(e){if(Buffer.byteLength(String(e))>Nm.INSERT_MAX_CHARACTER_SIZE)throw wm(new Error,Im.ATTR_NAME_LENGTH_ERR(e),Cm.BAD_REQUEST,void 0,void 0,!0);if(QT.isEmptyOrZeroLength(e)||QT.isEmpty(e.trim()))throw wm(new Error,Im.ATTR_NAME_NULLISH_ERR,Cm.BAD_REQUEST,void 0,void 0,!0)}a(DP,"validateAttribute");function PQ(e,t,r){if(!e.hasOwnProperty(t)||QT.isEmptyOrZeroLength(e[t])){if(r===Nm.OPERATIONS_ENUM.INSERT||r===Nm.OPERATIONS_ENUM.UPSERT){e[t]=IQ.v4();return}throw CP.error("Update transaction aborted due to record with no hash value:",e),wm(new Error,Im.RECORD_MISSING_HASH_ERR,Cm.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Nm.INSERT_MAX_CHARACTER_SIZE)throw CP.error(e),wm(new Error,Im.HASH_VAL_LENGTH_ERR,Cm.BAD_REQUEST,void 0,void 0,!0)}a(PQ,"validateHash")});var MP,Mn,JT,vl=Oe(()=>{MP=require("events"),Mn=class extends MP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new JT;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},JT=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function qP(e){ZT=e}function vQ(){MQ=setInterval(function(){for(let e of XT)if(e.stale){let t=e.getContext()?.url;xP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},LQ).unref()}var eA,BP,xP,HP,kP,FP,vP,XT,DQ,nf,UP,ZT,Ja,Pm,LQ,MQ,Dm=Oe(()=>{eA=L(on()),BP=L(fe()),xP=L(j()),HP=L(ne()),kP=L(v()),FP=L(re()),vP=100,XT=new Set,DQ=(0,FP.convertToMS)(HP.get(kP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(qP,"replicationConfirmation");Ja=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),XT.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(XT.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(nf&&!this.overloadChecked&&performance.now()-UP>DQ)throw new BP.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,eA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let m=this.writes[_];m&&(m.before||m.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let m;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let T=g[_===0?"before":"beforeIntermediate"];if(T){let E=T();m?m.push?m.push(E):m=[m,E]:m=E}}m&&await(m.push?Promise.all(m):m)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<vP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return nf||(nf=s,UP=performance.now(),nf.then(()=>{nf=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];ZT&&_&&i.push(ZT(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+vP/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},Pm=class extends Ja{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,eA.getNextMonotonicTime)())}getReadTxn(){}},LQ=3e4;a(vQ,"startMonitoringTxns");vQ()});function At(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new Ja;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var GP,Xa=Oe(()=>{GP=L(di());Dm();a(At,"transaction");(0,GP._assignPackageExport)("transaction",At);At.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};At.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function rA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let m=e[_],S=u(m);d=d.concat(S)}let h=new Set;return d.filter(_=>{let m=_.key??_;return h.has(m)?!1:(h.add(m),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?rA(d.conditions,d.operator,r,n,s,i,o,c):xl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((m,S)=>{if(m.conditions){let E=m.operator==="or",A=f(m.conditions,!E,_);return E?(w,M)=>A.some(H=>H(w,M)):(w,M)=>A.every(H=>H(w,M))}let g=(m.attribute||m[0])===r.primaryKey,T=af(m,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=$Q(r.primaryStore,m.estimated_count,_)),T}).filter(Boolean)}a(f,"mapConditionsToFilters")}function xl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new cn.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let E=o[0],A=mi(n.attributes,E);if(A.relationship){if(o.length<2)throw new cn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=A.definition?.tableClass||A.elements?.definition?.tableClass,M=new Map,H=xl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,w,s,M);if(A.relationship.to){i[o[0]]=M;let k=!!mi(w.attributes,A.relationship.to)?.elements;H=kQ(H,A,w.primaryStore,k,M)}if(A.relationship.from){let k=a(V=>(V?.key!==void 0&&(V=V.key),xl({attribute:A.relationship.from,value:V},t,r,n,s,M)),"searchEntry");A.elements?(i[o[0]]=M,H=FQ(H,A,w.primaryStore,M,k)):H=H.flatMap(k)}return H}else if(o.length===1)o=o[0];else throw new cn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(nA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=hi.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new cn.ClientError(`Unknown query comparator "${l}"`)}let m,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>as.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,as.MAX_SEARCH_KEY_LENGTH)+as.OVERFLOW_MARKER,h=!1,m=af(e,n,null,i,S)),typeof f=="string"&&f.length>as.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,as.MAX_SEARCH_KEY_LENGTH)+as.OVERFLOW_MARKER,d=!0,m=m??af(e,n,null,i,S)),r){let E=u;u=f,f=E,E=!h,h=!d,d=E}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new cn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new cn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new cn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new cn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(m=m??af(e,n,null,i,S),!m)throw new cn.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let E=g.getRange(T).map(m?function({key:A,value:w}){return this?.isSync?w&&m(w)?A:jo.SKIP:new Promise((M,H)=>setImmediate(()=>{try{M(w&&m(w)?A:jo.SKIP)}catch(k){H(k)}}))}:A=>A.value==null&&!(A.metadataFlags&(cs|Jo))?jo.SKIP:A);return E.hasEntries=!0,E}else return g?g.getRange(T).map(m?function({key:E,value:A}){let w;return typeof E=="string"&&E.length>as.MAX_SEARCH_KEY_LENGTH?w=n.primaryStore.get(A):w={[o]:E},this.isSync?m(w)?A:jo.SKIP:new Promise((M,H)=>setImmediate(()=>{try{M(m(w)?A:jo.SKIP)}catch(k){H(k)}}))}:({value:E})=>E):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:E,value:A}){return this.isSync?A&&m(A)?E:jo.SKIP:new Promise((w,M)=>setImmediate(()=>{try{w(A&&m(A)?E:jo.SKIP)}catch(H){M(H)}}))})}function mi(e,t){if(Array.isArray(t))if(t.length>1){let r=mi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?mi(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 kQ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function FQ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[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 af(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=mi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],m=af({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!m)return;if(_){_.filters||(_.filters=[]),_.filters.push(m);return}let S=t.propertyResolvers?.[f],g,T=a((E,A)=>{let w,M;if(S){if(S.from&&m.idFilter){if(!g)if(m.idFilter.idSet?.size===1){for(let k of m.idFilter.idSet)e={attribute:S.from,value:k};g=u(S.from,m.idFilter,!0,!0)}else g=u(S.from,m.idFilter,!1,!0);let H=g(E);return g.idFilter&&(T.idFilter=g.idFilter),H}M=S(E,r,A),w=M?.value}else w=E[f];return w?Array.isArray(w)?w.some(m):m(w,M):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),nA[o]||o){case as.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,hi.compareKeys)(f,l[0])>=0&&(0,hi.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,hi.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,hi.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,hi.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,hi.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,hi.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new cn.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let m;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&Mm(t)(e),m=e.estimated_count>>4,(isNaN(m)||m>=i)&&(h=!1));let S=0,g=3;function T(E){let A=E[f],w;if(typeof A!="object"||!A||_?w=d(A):Array.isArray(A)?w=A.some(d):A instanceof Date&&(w=d(A.getTime())),h&&(g++,!w&&!T.idFilter&&++S/g*(i-g)>m)){let M=xl(e,r.transaction.getReadTxn(),!1,t).map(Hl),H=new Set(M);T.idFilter=k=>H.has(Hl(k)),T.idFilter.idSet=H}return w}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(u,"attributeComparator")}function Mm(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/ji(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=nA[n]||n,n===as.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=mi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Mm(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*ji(e.indices[i.relationship.from])/(ji(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=ji(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=xQ*ji(e.primaryStore)+1:n==="between"?r.estimated_count=BQ*ji(e.primaryStore)+1:n==="sort"?r.estimated_count=ji(e.primaryStore)+1:r.estimated_count=UQ*ji(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function vm(e){if(e)if(Qo=e,Ul.lastIndex=0,qQ.test(e))try{let t=sf(new Bl,"");if(an!==Qo.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 ${an} in '${Qo}'`,t}else return new URLSearchParams(e)}function sf(e,t){let r=Ul,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Qo);){an=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=$P}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=of(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=HQ[d],l=tA[i]?$P:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=of(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let m={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&VP(m,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(m),S.operator=u}else Lm(e,u),e.conditions.push(m)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(of(f)),s=void 0;break;case"(":Ul.lastIndex=an;let _=sf(f?[]:new Bl,")");switch(f){case"":Lm(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=KP(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}Qo[an]===","?r.lastIndex=++an:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");Ul.lastIndex=an,h=sf([],"}"),h.name=f,e.push(h),Qo[an]===","?r.lastIndex=++an:o=!0;break;case"[":Ul.lastIndex=an,f?(h=sf(new Bl,"]"),h.name=f):h=sf(e.conditions?new Bl:[],"]"),e.conditions?(Lm(e,u),e.conditions.push(h),s=null):e.push(h),Qo[an]===","?r.lastIndex=++an:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let m={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&VP(m,f),Lm(e,u),e.conditions.push(m)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(of(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?GQ:Ul,r.lastIndex=an),an===Qo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Lm(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function of(e){return e.indexOf(".")>-1?e.split(".").map(of):decodeURIComponent(e)}function $P(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new cn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function VP(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new cn.ClientError("wildcard can only be used at the end of a string")}function KP(e){let t=YP(e[0]);return e.length>1&&(t.next=KP(e.slice(1))),t}function YP(e){if(Array.isArray(e)){let t=YP(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 Hl(e){return Array.isArray(e)?e.join("\0"):e}function ji(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function $Q(e,t,r){return t*r/ji(e)}var cn,as,hi,jo,UQ,BQ,xQ,HQ,tA,nA,qQ,Ul,GQ,an,Qo,Bl,Za,cf=Oe(()=>{cn=L(fe()),as=L(Dt()),hi=require("ordered-binary"),jo=require("lmdb");lf();UQ=.3,BQ=.1,xQ=.05,HQ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},tA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(rA,"executeConditions");a(xl,"searchByIndex");a(mi,"findAttribute");a(kQ,"joinTo");a(FQ,"joinFrom");nA={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(af,"filterByType");a(Mm,"estimateCondition");qQ=/[()[\]|!<>.]|(=\w*=)/,Ul=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,GQ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(vm,"parseQuery");a(sf,"parseBlock");a(Lm,"assignOperator");a(of,"decodeProperty");a($P,"typedDecoding");a(VP,"wildcardDecoding");a(KP,"toSortObject");a(YP,"toSortEntry");Bl=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(Hl,"flattenKey");a(ji,"estimatedEntryCount");a($Q,"intersectionEstimate");Za=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var iA={};Fe(iA,{MultiPartId:()=>Bm,Resource:()=>qr,snake_case:()=>KQ,transformForSelect:()=>xm});function KQ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function WP(e,t){if(ec=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(ec=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Bm;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){ec=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return ec=!0,null;e[e.length-1]==="/"&&(ec=!0)}return t.coerceId(decodeURIComponent(e))}function vn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string"){let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let m=this.parsePath(c,o,l);m?.id!==void 0?(m.query&&(l?l=Object.assign(m.query,l):l=m.query),u=m.isCollection,c=m.id):c=m}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new Za(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return At(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let m=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(m?.then)return m.then(S=>{if(!S)throw new Um(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!m)throw new Um(o.user)}return typeof f?.then=="function"?f.then(m=>e(_,l,o,m)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function Un(e,t){let r=new QP.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 sA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 xm(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):sA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(sA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(sA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(m=>u[h.name||h]=m))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=xm(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var zP,jP,QP,VQ,qr,Um,ec,Bm,Xo=Oe(()=>{zP=require("crypto");vl();jP=L(di()),QP=L(fe());Xa();cf();VQ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=vn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=xm(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=vn(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Un(t,"put")},{hasContent:!0,type:"update"});static patch=vn(function(t,r,n,s){return t.patch?t.patch(s,r):Un(t,"patch")},{hasContent:!0,type:"update"});static delete=vn(function(t,r,n,s){return t.delete?t.delete(r):Un(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,zP.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),At(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Un(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=vn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Un(t,"delete")},{hasContent:!1,type:"update"});static post=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=vn(function(t,r,n,s){return t.connect?t.connect(s,r):Un(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Un(t,"subscribe")},{type:"read"});static publish=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):Un(t,"publish")},{hasContent:!0,type:"create"});static search=vn(function(t,r,n,s){let i=t.search?t.search(r):Un(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=xm(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=vn(function(t,r,n,s){return t.search?t.search(s,r):Un(t,"search")},{hasContent:!0,type:"read"});static copy=vn(function(t,r,n,s){return t.copy?t.copy(s,r):Un(t,"copy")},{hasContent:!0,type:"create"});static move=vn(function(t,r,n,s){return t.move?t.move(s,r):Un(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;Un(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return vm(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&&VQ[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:WP(t,this),isCollection:ec}}let i=WP(t,this);return ec?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new Mn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Mn}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.#e}getContext(){return this.#t}};(0,jP._assignPackageExport)("Resource",qr);a(KQ,"snake_case");Um=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(WP,"pathToId");Bm=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(vn,"transactional");a(Un,"missingMethod");a(sA,"selectFromObject");a(xm,"transformForSelect")});var Zo,oA=Oe(()=>{Zo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 ZP={};Fe(ZP,{Resources:()=>Hm,keyArrayToString:()=>kl,resetResources:()=>YQ,resources:()=>pi});function YQ(){return pi=new Hm}function kl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var JP,XP,Hm,pi,Fl=Oe(()=>{Xa();oA();JP=L(j()),XP=L(fe()),Hm=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,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new XP.ServerError(`Conflicting paths for ${t}`);JP.default.error(c),i.Resource=new Zo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(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 At(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(YQ,"resetResources");a(kl,"keyArrayToString")});var aA=P((IAe,eD)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c}=require("node:fs"),{isMainThread:l}=require("node:worker_threads"),{spawnSync:u,spawn:f}=require("node:child_process"),{PACKAGE_ROOT:d}=v(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],_="ts-build";if(l){let g=!1,T=!1;if((T=s(n(d,_)))?g=e.sync(h.map(E=>`${E}/**/*.ts`),{cwd:d}).some(E=>{let A=0,w=0;try{A=i(n(d,E)).mtimeMs-5e3,w=i(n(d,_,E.replace(/.ts$/,".js"))).mtimeMs}catch{}return A>w}):g=!0,g){console.log("Compiling TypeScript...");let E=u("npx",["tsc"],{cwd:d});if(E.stdout?.length&&console.log(E.stdout.toString()),E.stderr?.length&&console.log(E.stderr.toString()),T){let A=n(t(),"harperdb-tsc.pid"),w=!1;if(s(A))try{process.kill(+o(A,"utf8"),0),w=!0}catch{}if(!w){console.log("Starting background TypeScript compilation...");let M=f("npx",["tsc","--watch"],{detached:!0,cwd:d,stdio:"ignore"});c(A,M.pid.toString()),M.unref()}}}}let m=eD.constructor,S=m._findPath;m._findPath=function(g,T,E){if(g.startsWith(".")&&!E&&T.length===1&&T[0].startsWith(d)&&!T[0].includes("node_modules")){let A=r(d,T[0]),w;A.startsWith(_)?w=n(d,r(_,A)):w=n(d,_,A);let M=n(w,g),H=M+".js";if(s(H))return H;if(M.includes(".")&&s(M))return M}return S(g,T,E)}}});var tc={};Fe(tc,{server:()=>je});var tD,je,Gr=Oe(()=>{tD=L(di()),je={};(0,tD._assignPackageExport)("server",je)});var uA={};Fe(uA,{loadGQLSchema:()=>jQ,start:()=>lA,startOnMainThread:()=>zQ});function lA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],m;for(let T of d.definitions)switch(T.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(V){if(V.kind==="NonNullType"){let G=H(V.type);return G.nullable=!1,G}if(V.kind==="ListType")return{type:"array",elements:H(V.type)};let ae={type:V.name?.value};return Object.defineProperty(ae,"location",{value:V.loc.startToken}),ae};a(H,"getProperty");let E=T.name.value,A=[],w={table:null,database:null,properties:A};h.set(E,w);for(let V of T.directives){if(V.name.value==="table"){for(let ae of V.arguments)w[ae.name.value]=ae.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=E),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,_.push(w)}if(V.name.value==="sealed"&&(w.sealed=!0),V.name.value==="splitSegments"&&(w.splitSegments=!0),V.name.value==="replicate"&&(w.replicate=!0),V.name.value==="export"){w.export=!0;for(let ae of V.arguments)typeof w.export!="object"&&(w.export={}),w.export[ae.name.value]=ae.value.value}}let M=!1,k={};for(let V of T.fields){let q=H(V.type);q.name=V.name.value,A.push(q),k[q.name]=void 0;for(let ae of V.directives){let G=ae.name.value;if(G==="primaryKey")M?console.warn("Can not define two attributes as a primary key at",ae.loc):(q.isPrimaryKey=!0,M=!0);else if(G==="indexed")q.indexed=!0;else if(G==="computed"){for(let le of ae.arguments||[])if(le.name.value==="from"){let z=le.value.value;q.computed={from:g(z,le,k)},q.version==null&&(q.version=z)}else le.name.value==="version"&&(q.version=le.value.value);q.computed=q.computed||!0}else if(G==="relationship"){let le={};for(let z of ae.arguments)le[z.name.value]=z.value.value;q.relationship=le}else if(G==="createdTime")q.assignCreatedTime=!0;else if(G==="updatedTime")q.assignUpdatedTime=!0;else if(G==="expiresAt")q.expiresAt=!0;else if(G==="allow"){let le=q.authorizedRoles=[];for(let z of ae.arguments)z.name.value==="role"&&le.push(z.value.value)}else server.knownGraphQLDirectives.includes(G)&&console.warn(`@${G} is an unknown directive, at`,ae.loc)}}w.type=E,E==="Query"&&(m=w)}function S(T){let E=h.get(T.type);E?(Object.defineProperty(T,"properties",{value:E.properties}),Object.defineProperty(T,"definition",{value:E})):T.type==="array"?S(T.elements):WQ.includes(T.type)||(0,nD.getWorkerIndex)()===0&&console.error(`The type ${T.type} is unknown at line ${T.location.line}, column ${T.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let T of h.values())for(let E of T.properties)S(E);for(let T of _)T.tableClass=e(T),T.export&&(T.export.name===""?i.set((0,cA.dirname)(n),T.tableClass):i.set((0,cA.dirname)(n)+"/"+(T.export.name||T.type),T.tableClass,T.export));function g(T,E,A){return new rD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${T}; } } } } computed;`,{filename:s,lineOffset:E.loc.startToken.line-1,columnOffset:E.loc.startToken.column}).runInThisContext()(A)}a(g,"createComputedFrom")}}var cA,rD,nD,WQ,zQ,jQ,sD=Oe(()=>{cA=require("path"),rD=require("node:vm");Pe();nD=L(tt()),WQ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(lA,"start");zQ=lA,jQ=lA({ensureTable:it}).handleFile});var dD={};Fe(dD,{parse:()=>fA,streamAsJSON:()=>uf,stringify:()=>rc});function uf(e){return new dA({value:e})}function iD(e){return console.error(e),JSON.stringify(e.toString())}function oD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function rc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===lD)return uD(e);if(t.resolution)return t.resolution.then(()=>rc(e));throw t}}function uD(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+=uD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+rc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function fA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),XQ.test(e)?QQ.parse(e):JSON.parse(e)):null}var aD,cD,QQ,JQ,lD,dA,XQ,_A=Oe(()=>{aD=require("stream"),cD=L(require("json-bigint-fixes")),QQ=(0,cD.default)({useNativeBigInt:!0}),JQ=1e4,lD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw lD};a(uf,"streamAsJSON");dA=class extends aD.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(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(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),iD)}catch(s){yield iD(s)}else yield rc(t)}else yield rc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);oD(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>JQ?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 oD(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(iD,"handleError");a(oD,"when");a(rc,"stringify");a(uD,"jsStringify");XQ=/[[,:]\s*-?\d{16,}/;a(fA,"parse")});var bD=P((MAe,yD)=>{"use strict";var hA=require("recursive-iterator"),ZQ=require("alasql"),mA=require("clone"),fD=re(),{handleHDBError:_D,hdb_errors:e4}=fe(),{HDB_ERROR_MSGS:hD,HTTP_STATUS_CODES:mD}=e4,{getDatabases:t4}=(Pe(),se(rt)),r4=["DISTINCT_ARRAY"],pD=Symbol("validateTables"),pA=Symbol("validateTable"),LAe=Symbol("getAllColumns"),ED=Symbol("validateAllColumns"),km=Symbol("findColumn"),gD=Symbol("validateOrderBy"),df=Symbol("validateSegment"),EA=Symbol("validateColumn"),SD=Symbol("setColumnsForTable"),TD=Symbol("checkColumnsForAsterisk"),AD=Symbol("validateGroupBy"),RD=Symbol("hasColumns"),gA=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[pD](),this[TD](),this[ED]()}[pD](){if(this[RD]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[pA](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[pA](t.table)})}}[RD](){let t=!1,r=new hA(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[pA](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=t4();if(!r[t.databaseid])throw _D(new Error,hD.SCHEMA_NOT_FOUND(t.databaseid),mD.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw _D(new Error,hD.TABLE_NOT_FOUND(t.databaseid,t.tableid),mD.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=mA(s);i.table=mA(t),this.attributes.push(i)})}[km](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)}[TD](){let t=new hA(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[SD](r.tableid)}[SD](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new ZQ.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ED](){this[df](this.statement.columns,!1),this[df](this.statement.joins,!1),this[df](this.statement.where,!1),this[AD](this.statement.group,!1),this[df](this.statement.order,!0)}[df](t,r){if(!t)return;let n=new hA(t),s=[];for(let{node:i,path:o}of n)!fD.isEmpty(i)&&!fD.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[gD](i):s.push(this[EA](i)));return s}[AD](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&r4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=mA(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[km](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[km](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`}[gD](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[EA](t)}[EA](t){let r=this[km](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]}};yD.exports=gA});var ND=P((UAe,OD)=>{"use strict";var SA=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")}};OD.exports=SA});var ID=P((xAe,wD)=>{"use strict";var TA=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};wD.exports=TA});var Qi=P(qm=>{var Fm=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])Fm.logsAtLevel(e)&&(qm[e]=Fm[e]);qm.loggerWithTag=e=>Fm.loggerWithTag(e,!0);qm.setLogLevel=Fm.setLogLevel});var Qm={};Fe(Qm,{Blob:()=>Ei,blobsWereEncoded:()=>$l,databasePaths:()=>hf,decodeBlobsWithWrites:()=>bA,decodeFromDatabase:()=>ic,decodeWithBlobCallback:()=>OA,deleteBlob:()=>HD,deleteBlobsInObject:()=>Xi,deleteRootBlobPathsForDB:()=>yA,encodeBlobsAsBuffers:()=>u4,encodeBlobsWithFilePath:()=>jm,getFileId:()=>Wm,getFilePathForBlob:()=>FD,getRootBlobPathsForDB:()=>zm,setDeletionDelay:()=>o4});function BD(){}function HD(e){let t=FD(e);if(!t){nc.default.debug?.("No file path for blob, can not delete");return}setTimeout(()=>{(0,ze.unlink)(t,r=>{r&&nc.default.debug?.("Error trying to remove blob file",r)})},xD)}function o4(e){xD=e}function kD(e){let t=Bn.get(e);if(!t)t={storageIndex:0,fileId:null,store:Hs},Bn.set(e,t);else{if(t.saving)return t;t.store=Hs}return c4(t),t.source?AA(e,t.source,t):t.contentBuffer?a4(e,t):AA(e,_f.Readable.from(e.stream()),t),t}function AA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,ze.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.end(Buffer.concat([m(BigInt(g.length)+0xff000000000000n),g]));return}let h=!1;e.size!==void 0&&(d.write(m(e.size)),h=!0);let _;o?(h||d.write(s4),_=(0,Vm.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(n4),t.pipe(d)),t.on("error",S);function m(g){let T=BigInt(g),E=new Uint8Array(fr),A=new DataView(E.buffer);return T|=BigInt(o?RA:UD)<<48n,A.setBigInt64(0,T),E}a(m,"createHeader");function S(g){i.unlock(f,0);let T=d.fd;g?(T&&(0,ze.close)(T),u(g)):c?(0,ze.fdatasync)(T,E=>{E&&u(E),l(),(0,ze.close)(T)}):(l(),(0,ze.close)(T))}a(S,"finished"),d.on("error",S).on("finish",()=>{h?S():(0,ze.write)(d.fd,m(_?_.bytesWritten:d.bytesWritten-fr),0,fr,0,S)})}),e}function Wm(e){return Bn.get(e)?.fileId}function FD(e){let t=Bn.get(e);return t?.fileId&&mf(t)}function zm(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=hf.get(e);if(!t){if(!e.databaseName)throw new Error("No database name specified, can not determine blob storage path");let r=(0,Ym.get)(MD.CONFIG_PARAMS.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,sc.join)(n,e.databaseName)):t=[(0,sc.join)((0,Ym.getHdbBasePath)(),"blobs",e.databaseName)],hf.set(e,t)}return t}function yA(e){let t=hf.get(e),r=[];if(t){for(let n of t)r.push((0,Km.remove)(n));hf.delete(e)}return Promise.all(r)}function mf({storageIndex:e,fileId:t,store:r}){let n=zm(r);return(0,sc.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function a4(e,t){let r=t.contentBuffer,n=r.length;if(!(n<vD))return e.size=n,AA(e,_f.Readable.from([r]),t)}function c4(e){let t=zm(e.store),r=l4(),n=t?.length>1?r%t.length:0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=mf(e),o=(0,sc.dirname)(i);(0,ze.existsSync)(o)||(0,Km.ensureDirSync)(o),e.filePath=i}function l4(){let e=DD.get(Hs);if(!e){let t=0,r=zm(Hs);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,ze.existsSync)(n))for(let c of(0,ze.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,sc.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Hs.getUserSharedBuffer("blob-file-id",e.buffer)),DD.set(Hs,e)}return Number(Atomics.add(e,0,1n))}function jm(e,t,r){ql=t,Hs=r,$l=!1;try{return e()}finally{ql=void 0,Hs=void 0}}function u4(e){ln=[];let t;try{t=e()}finally{let r=ln.length<2?ln[0]:Promise.all(ln);return ln=void 0,r?r.then(()=>e()):t}}function bA(e,t){try{return ln=[],Gl=t,e()}finally{Gl=void 0;let r=ln.length<2?ln[0]:Promise.all(ln);return ln=void 0,r}}function OA(e,t){try{return Gl=t,e()}finally{Gl=void 0}}function ic(e,t){return Hs=t,e()}function Xi(e){if(e instanceof Ei)HD(e);else if(e.constructor===Object||Array.isArray(e))for(let t in e)typeof e[t]=="object"&&Xi(e[t])}function d4(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Ji,LD,ze,Vm,_f,Km,Ym,MD,sc,nc,vD,fr,UD,RA,CD,n4,s4,PD,Bn,Gl,Ei,ql,ln,Hs,$l,ff,Gm,i4,$m,xD,hf,DD,ls=Oe(()=>{Ji=require("msgpackr"),LD=require("node:fs/promises"),ze=require("node:fs"),Vm=require("node:zlib"),_f=require("node:stream"),Km=require("fs-extra"),Ym=L(ne()),MD=L(v()),sc=require("path"),nc=L(Qi()),vD=8192,fr=8,UD=0,RA=1,CD=255,n4=new Uint8Array([0,UD,255,255,255,255,255,255]),s4=new Uint8Array([0,RA,255,255,255,255,255,255]),PD=0xffffffffffff,Bn=new WeakMap,Ei=global.Blob||d4(),$l=!1,ff=new Uint8Array(8),Gm=new DataView(ff.buffer),i4=3e4;a(BD,"InstanceOfBlobWithNoConstructor");BD.prototype=Ei.prototype;$m=class e extends BD{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t!=="error")throw new Error("Only error events are supported");this.#e||(this.#e=[]),this.#e.push(r)}toJSON(){return{description:"Blob can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Bn.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=mf(t),o,c=a(async()=>{let l,u=fr;try{if(l=await(0,LD.readFile)(i),l.length>=fr){l.copy(ff,0,0,fr);let d=Gm.getBigUint64(0);if(Number(d>>48n)===CD)throw new Error("Error in blob: "+buffer.subarray(fr));u=Number(d&0xffffffffffffn),u<n&&(u=n),u<PD&&(this.size=u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error("Incomplete blob");return new Promise((m,S)=>{if(h.attemptLock(_,0,()=>(o=!0,h.unlock(_,0),m(c()))))return o=!0,h.unlock(_,0),m(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===RA?new Promise((d,h)=>{(0,Vm.deflate)(l.subarray(fr),(_,m)=>{_?h(_):d(f(m))})}):f(l.subarray(fr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Bn.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(m){m.enqueue(r),m.close()}});let i=mf(t),o,c=0,l=0,u,f,d,h=this;return new ReadableStream({start(){let m=1e3,S=a((g,T)=>{(0,ze.open)(i,"r",(E,A)=>{if(E){if(E.code==="ENOENT"&&d!==!1&&(nc.default.debug?.("File does not exist yet, waiting for it to be created",i,m),m-- >0))return setTimeout(()=>{_(),S(g,T)},20).unref();T(E),h.#e?.forEach(w=>w(E))}else o=A,g(A)})},"openFile");return new Promise(S)},pull:a(m=>{let S=0,g=100;return new Promise(a(function T(E,A){function w(H){(0,ze.close)(o),u&&u.close(),A(H),h.#e?.forEach(k=>k(H))}a(w,"onError");let M=Buffer.allocUnsafe(262144);(0,ze.read)(o,M,0,M.length,c,(H,k,V)=>{if(l+=k,H)return w(H);if(c===0){if(k<fr){g-- >0&&d!==!1?(_(),nc.default.debug?.("File was empty, waiting for data to be written",i,g),setTimeout(()=>T(E,A),20).unref()):(nc.default.debug?.("File was empty, throwing error",i,g),A(new Error(`Blob ${t.fileId} was empty`)));return}V.copy(ff,0,0,fr);let q=Gm.getBigUint64(0);if(Number(q>>48n)===CD)return w(new Error("Error in blob: "+V.subarray(fr)));S=Number(q&0xffffffffffffn),S<PD&&(h.size=S),V=V.subarray(fr,k),l-=fr}else if(k===0){let q=Buffer.allocUnsafe(8);return(0,ze.read)(o,q,0,fr,0,ae=>{if(ae)return w(ae);if(ff.set(q),S=Number(Gm.getBigUint64(0)&0xffffffffffffn),S>l){d!==!1?(f=setTimeout(()=>{w(new Error("File read timed out"))},i4).unref(),u=(0,ze.watch)(i,{persistent:!1},()=>{clearTimeout(f),u.close(),_(),T(E,A)})):w(new Error("Blob is incomplete"));return}(0,ze.close)(o),m.close(),E()})}else V=V.subarray(0,k);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=k,T(E,A);s&&l>=s&&(l>s&&(V=V.subarray(0,s-c)),l=S=s),n&&n>c&&(V=V.subarray(n-c))}c+=k;try{m.enqueue(V)}catch(q){return nc.default.debug?.("Error enqueuing chunk",q),E()}l===S&&((0,ze.close)(o),m.close()),E()})},"readMore"))},"pull"),cancel(){(0,ze.close)(o),clearTimeout(f),u&&u.close()}});function _(){if(d===void 0){let m=t.store,S=t.fileId+":blob";d=!m.attemptLock(S,0,()=>{d=!1,m.unlock(S,0)}),d||m.unlock(S,0)}return d}}slice(t,r,n){let s=Bn.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Bn.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Bn.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(!t?.primaryStore?.rootStore)throw new Error("No target table specified");return kD(this).saving??Promise.resolve()}},xD=500;a(HD,"deleteBlob");a(o4,"setDeletionDelay");global.createBlob=function(e,t){let r=new $m(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Bn.set(r,n),e instanceof Uint8Array)n.contentBuffer=e;else if(e instanceof _f.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=_f.Readable.from(e);else throw new Error("Invalid source type");return r};a(kD,"saveBlob");a(AA,"writeBlobWithStream");a(Wm,"getFileId");a(FD,"getFilePathForBlob");hf=new Map;a(zm,"getRootBlobPathsForDB");a(yA,"deleteRootBlobPathsForDB");a(mf,"getFilePath");a(a4,"writeBlobWithBuffer");a(c4,"generateFilePath");DD=new Map;a(l4,"getNextFileId");a(jm,"encodeBlobsWithFilePath");a(u4,"encodeBlobsAsBuffers");a(bA,"decodeBlobsWithWrites");a(OA,"decodeWithBlobCallback");a(ic,"decodeFromDatabase");a(Xi,"deleteBlobsInObject");(0,Ji.addExtension)({Class:Ei,type:11,unpack:a(function(e){let t=(0,Ji.unpack)(e),r=new $m;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(!Hs)throw new Error("No store specified, can not load blob from storage");if(Bn.set(r,{storageIndex:t[1],fileId:t[2],store:Hs}),Gl)return Gl(r)??r}else Bn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]});return r},"unpack"),pack:a(function(e){let t=Bn.get(e);if(ql!==void 0&&($l=!0,t?.recordId!==void 0&&t.recordId!==ql))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<vD)return r.size=t.contentBuffer.length,(0,Ji.pack)([r,t.contentBuffer])}if(ql!==void 0){if(t=kD(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=ql,(0,Ji.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,ze.readFileSync)(mf(t));if(n.length>=fr&&(n.copy(ff,0,0,fr),Number(Gm.getBigUint64(0)&0xffffffffffffn)===n.length-fr))return Buffer.concat([(0,Ji.pack)([r]),n]);if(ln)ln.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&ln)return ln.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ji.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(d4,"polyfillBlob")});var VD={};Fe(VD,{HAS_EXPIRATION:()=>ep,HAS_RESIDENCY_ID:()=>LA,HAS_STRUCTURE_UPDATE:()=>rp,LAST_TIMESTAMP_PLACEHOLDER:()=>Sf,LOCAL_TIMESTAMP:()=>f4,METADATA:()=>pf,NO_TIMESTAMP:()=>NA,PENDING_LOCAL_TIME:()=>MA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>DA,RecordEncoder:()=>PA,TIMESTAMP_ASSIGN_LAST:()=>h4,TIMESTAMP_ASSIGN_NEW:()=>GD,TIMESTAMP_ASSIGN_PREVIOUS:()=>$D,TIMESTAMP_PLACEHOLDER:()=>Jm,TIMESTAMP_RECORD_PREVIOUS:()=>wA,handleLocalTimeForGets:()=>np,recordUpdater:()=>vA,removeEntry:()=>ac});function p4(){return gf[0]=gf[0]^64,_4.getFloat64(0)}function np(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[pf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[pf]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[pf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,oc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<oc.length;u++){let f=oc[u].deref();(!f||f.isDone||f.isCommitted)&&oc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function vA(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?Vl=i?.localTime?wA|$D:NA:Vl=l?i?.localTime?wA|16384:GD|16384:NA;let _=u?.expiresAt;if(_>=0&&(c|=ep),Ef=c,IA=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let m={version:o,instructedWrite:Vl>0},S,g=0;try{let T=i?.residencyId,E=u?.residencyId;E&&(CA=E,Ef|=LA,g|=cc),T!==E&&(g|=lc,T||(T=0)),c&ep&&(g|=Af),u?.originatingOperation&&(g|=Tf),d&&(m.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&ks&&(r.getBinaryFast(i.localTime)||Xi(i.value));let A=jm(()=>e.put(n,s,m),n,e.rootStore);if($l&&(g|=ks),l){let w=u?.user?.username;if(h&&(Xm=jm(()=>e.encoder.encode(h),n,e.rootStore)),e.encoder.hasStructureUpdate&&(g|=rp,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let M=i?.localTime,H=r.get(M);if(H){let k=Rt(H).previousLocalTime;return r.put(M,Kl(o,t,n,k,u?.nodeId??server.replication.getThisNodeId(r)??0,w,f,Xm,g,E,T,_),{ifVersion:S}),A}}r.put(Sf,Kl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,f,Xm,g,E,T,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return A}catch(T){throw T.message+=" id: "+n+" options: "+m,T}}}function ac(e,t,r){if(t)return t.value&&t.metadataFlags&ks&&!e.auditStore.getBinaryFast(t.localTime)&&Xi(t.value),e.remove(t.key,r)}var qD,Zm,Jm,Sf,DA,f4,pf,gf,_4,NA,GD,h4,$D,wA,ep,LA,MA,rp,m4,Xm,Vl,Ef,IA,CA,PA,oc,Yl=Oe(()=>{qD=require("msgpackr");Zi();Zm=L(j());ls();ls();Jm=new Uint8Array([1,1,1,1,4,64,0,0]),Sf=new Uint8Array([1,1,1,1,1,0,0,0]),DA=new Uint8Array([1,1,1,1,3,64,0,0]),f4=Symbol("local-timestamp"),pf=Symbol("metadata"),gf=new Uint8Array(8),_4=new DataView(gf.buffer,0,8),NA=0,GD=0,h4=1,$D=3,wA=4,ep=16,LA=32,MA=1,rp=256,Vl=0,Ef=-1,IA=-1,CA=0,PA=class extends qD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Vl||Ef>=0){let o=0,c=Vl;c&&(o+=8,Vl=0);let l=Ef,u=IA,f=CA;l>=0&&(o+=4,Ef=-1,u>=0&&(o+=8,IA=-1),f&&(o+=4,CA=0));let d=m4=r.call(this,s,i|2048|o);Xm=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(Jm[4]=c,Jm[5]=c>>8,d.set(Jm,h),h+=8),$l&&(l|=ks),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|tp<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(gf,0,c),c+=8;else for(let h=0;h<8;h++)gf[h]=t[c++];l=p4(),i=t[c]}let u,f;i<32&&(i===tp?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&ep&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&LA&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=ic(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[pf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:ic(()=>super.decode(t,r),this.rootStore)}catch(c){return Zm.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(p4,"getTimestamp");a(np,"handleLocalTimeForGets");oc=[];setInterval(()=>{for(let e=0;e<oc.length;e++){let t=oc[e].deref();!t||t.isDone||t.isCommitted?oc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Zm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Zm.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(vA,"recordUpdater");a(ac,"removeEntry")});var Rf=P((WAe,YD)=>{"use strict";var KD=ne(),E4=v(),{RecordEncoder:g4}=(Yl(),se(VD)),YAe=require("fs");KD.initSync();var S4=KD.get(E4.CONFIG_PARAMS.STORAGE_CACHING)!==!1,UA=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=S4&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:g4})}};YD.exports=UA});var yf=P((jAe,WD)=>{"use strict";var xn=ne(),us=v();xn.initSync();var sp=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=xn.get(us.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xn.get(us.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xn.get(us.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xn.get(us.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=xn.get(us.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=xn.get(us.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),xn.get(us.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=xn.get(us.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=xn.get(us.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};WD.exports=sp;sp.MAX_DBS=1e4});var ot=P((JAe,nL)=>{"use strict";var xA=require("lmdb"),Fs=require("fs-extra"),Hn=require("path"),ip=on(),QD=j(),un=Ln().LMDB_ERRORS_ENUM,op=ID(),HA=Rf(),JD=yf(),ea=Dt(),zD=v(),{table:T4,resetDatabases:A4}=(Pe(),se(rt)),jD=ne(),qs=ea.INTERNAL_DBIS_NAME,XD=ea.DBI_DEFINITION_NAME,R4="data.mdb",y4="lock.mdb",bf=".mdb",b4="-lock",BA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ds(t,r),this.key_type=this.dbi[ea.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ea.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new xA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ap(e,t){if(e===void 0)throw new Error(un.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(un.ENV_NAME_REQUIRED)}a(ap,"pathEnvNameValidation");async function kA(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(un.INVALID_BASE_PATH):n}try{let n=Hn.join(e,t+bf);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Hn.join(e,t,R4),Fs.constants.R_OK|Fs.constants.F_OK),Hn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(un.INVALID_ENVIRONMENT)}else throw new Error(un.INVALID_ENVIRONMENT);throw n}}a(kA,"validateEnvironmentPath");function cp(e,t){if(ip.validateEnv(e),t===void 0)throw new Error(un.DBI_NAME_REQUIRED)}a(cp,"validateEnvDBIName");async function O4(e,t,r=!1,n=!1){ap(e,t);let s=Hn.basename(e);t=t.toString();let i=jD.get(zD.CONFIG_PARAMS.DATABASES);i||jD.setProperty(zD.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await kA(e,t,n),ZD(e,t,r)}catch(o){if(o.message===un.INVALID_ENVIRONMENT){let c=Hn.join(e,t);await Fs.mkdirp(n?c:e);let l=new JD(n?c:c+bf,!1),u=xA.open(l);u.dbis=Object.create(null);let f=new HA(!1);u.openDB(qs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=FA(e,t,r);return u[ea.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(O4,"createEnvironment");async function N4(e,t,r,n=!0){ap(e,t),t=t.toString();let s=Hn.join(e,t);return T4({table:t,database:Hn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(N4,"copyEnvironment");async function ZD(e,t,r=!1){ap(e,t),t=t.toString();let n=FA(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 kA(e,t),i=Hn.join(e,t+bf),o=s!=i,c=new JD(s,o),l=xA.open(c);l.dbis=Object.create(null);let u=tL(l);for(let f=0;f<u.length;f++)ds(l,u[f]);return l[ea.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(ZD,"openEnvironment");async function w4(e,t,r=!1){ap(e,t),t=t.toString();let n=Hn.join(e,t+bf),s=await kA(e,t);if(global.lmdb_map!==void 0){let i=FA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await eL(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+b4:Hn.join(Hn.dirname(s),y4))}a(w4,"deleteEnvironment");async function eL(e){ip.validateEnv(e);let t=e[ea.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(eL,"closeEnvironment");function FA(e,t,r=!1){let s=`${Hn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(FA,"getCachedEnvironmentName");function I4(e){ip.validateEnv(e);let t=Object.create(null),r=ds(e,qs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==qs)try{t[n]=Object.assign(new op,s)}catch{QD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(I4,"listDBIDefinitions");function tL(e){ip.validateEnv(e);let t=[],r=ds(e,qs);for(let{key:n}of r.getRange({start:!1}))n!==qs&&t.push(n);return t}a(tL,"listDBIs");function C4(e,t){let n=ds(e,qs).getEntry(t),s=new op;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{QD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(C4,"getDBIDefinition");function rL(e,t,r,n=!r){if(cp(e,t),t=t.toString(),t===qs)throw new Error(un.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ds(e,t)}catch(s){if(s.message===un.DBI_DOES_NOT_EXIST){let i=new HA(r,n===!0),o=e.openDB(t,i),c=new op(r===!0,n);return o[XD]=c,ds(e,qs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(rL,"createDBI");function ds(e,t){if(cp(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==qs?r=C4(e,t):r=new op,r===void 0)throw new Error(un.DBI_DOES_NOT_EXIST);let n;try{let s=new HA(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(un.DBI_DOES_NOT_EXIST):s}return n[XD]=r,e.dbis[t]=n,n}a(ds,"openDBI");function P4(e,t){cp(e,t),t=t.toString();let r=ds(e,t),n=r.getStats();return r[ea.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(P4,"statDBI");async function D4(e,t){try{let r=Hn.join(e,t+bf);return(await Fs.stat(r)).size}catch{throw new Error(un.INVALID_ENVIRONMENT)}}a(D4,"environmentDataSize");function L4(e,t){if(cp(e,t),t=t.toString(),t===qs)throw new Error(un.CANNOT_DROP_INTERNAL_DBIS_NAME);ds(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ds(e,qs).removeSync(t)}a(L4,"dropDBI");function M4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ds(e,i)}catch(o){if(o.message===un.DBI_DOES_NOT_EXIST)rL(e,i,i!==t,i===t),n=!0;else throw o}}n&&A4()}a(M4,"initializeDBIs");nL.exports={openDBI:ds,openEnvironment:ZD,createEnvironment:O4,listDBIs:tL,listDBIDefinitions:I4,createDBI:rL,dropDBI:L4,statDBI:P4,deleteEnvironment:w4,initializeDBIs:M4,TransactionCursor:BA,environmentDataSize:D4,copyEnvironment:N4,closeEnvironment:eL}});var iL=P((ZAe,sL)=>{"use strict";var qA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};sL.exports=qA});var aL=P((tRe,oL)=>{"use strict";var GA=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}};oL.exports=GA});var lL=P((nRe,cL)=>{"use strict";var $A=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};cL.exports=$A});var dc=P((cRe,fL)=>{"use strict";var v4=ot(),U4=iL(),B4=aL(),x4=lL(),gi=on(),Of=Ln().LMDB_ERRORS_ENUM,H4=Dt(),eo=v(),k4=re(),F4=require("uuid"),iRe=require("lmdb"),{handleHDBError:q4,hdb_errors:G4}=fe(),{OVERFLOW_MARKER:oRe,MAX_SEARCH_KEY_LENGTH:aRe}=H4,uL=ne();uL.initSync();var lp=uL.get(eo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),VA=eo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,uc=eo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function $4(e,t,r,n,s=gi.getNextMonotonicTime()){zA(e,t,r,n),KA(e,t,r);let i=new U4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];dL(u,!0,s);let f=V4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return YA(o,c,n,i,s)}a($4,"insertRecords");function V4(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 f=c([[{}]]);Array.isArray(f)&&(c=f[0][eo.FUNC_VAL],n[o]=c)}let l=gi.getIndexedValues(c),u=e.dbis[o];if(l){lp&&u.prefetch(l.map(f=>({key:f,value:s})),up);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}lp&&e.dbis[t].prefetch([s],up),e.dbis[t].put(s,n,n[uc])})}a(V4,"insertRecord");function K4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(K4,"removeSkippedRecords");function dL(e,t,r){let n=r>0;(n||!Number.isInteger(e[uc]))&&(e[uc]=r||(r=gi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[VA]))&&(e[VA]=r||gi.getNextMonotonicTime()):delete e[VA]}a(dL,"setTimestamps");function KA(e,t,r){r.indexOf(eo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(eo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(eo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(eo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),v4.initializeDBIs(e,t,r)}a(KA,"initializeTransaction");async function Y4(e,t,r,n,s=gi.getNextMonotonicTime()){zA(e,t,r,n),KA(e,t,r);let i=new B4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=WA(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return YA(c,l,n,i,s,o)}a(Y4,"updateRecords");async function W4(e,t,r,n,s=gi.getNextMonotonicTime()){try{zA(e,t,r,n)}catch(l){throw q4(l,l.message,G4.HTTP_STATUS_CODES.BAD_REQUEST)}KA(e,t,r);let i=new x4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;k4.isEmpty(u[t])?(f=F4.v4(),u[t]=f):f=u[t];let d=WA(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return YA(o,c,n,i,s)}a(W4,"upsertRecords");async function YA(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||gi.getNextMonotonicTime(),K4(r,i),n}a(YA,"finalizeWrite");function WA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(dL(r,!f,o),Number.isInteger(r[uc])&&u[uc]>r[uc])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let S=r[m],g=e.dbis[m];if(g===void 0)continue;let T=u[m];if(typeof S=="function"){let A=S([[u]]);Array.isArray(A)&&(S=A[0][eo.FUNC_VAL],r[m]=S)}if(S===T)continue;let E=gi.getIndexedValues(T);if(E){lp&&g.prefetch(E.map(A=>({key:A,value:n})),up);for(let A=0,w=E.length;A<w;A++)g.remove(E[A],n)}if(E=gi.getIndexedValues(S),E){lp&&g.prefetch(E.map(A=>({key:A,value:n})),up);for(let A=0,w=E.length;A<w;A++)g.put(E[A],n)}}let _={...u,...r};c.put(n,_,_[uc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:WA(e,t,r,n,s,i,o))}a(WA,"updateUpsertRecord");function z4(e,t,r){if(gi.validateEnv(e),t===void 0)throw new Error(Of.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Of.WRITE_ATTRIBUTES_REQUIRED):new Error(Of.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(z4,"validateBasic");function zA(e,t,r,n){if(z4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Of.RECORDS_REQUIRED):new Error(Of.RECORDS_MUST_BE_ARRAY)}a(zA,"validateWrite");function up(){}a(up,"noop");fL.exports={insertRecords:$4,updateRecords:Y4,upsertRecords:W4}});var to=P((uRe,j4)=>{j4.exports={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:"hash_function"},{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:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var Ti=P((dRe,mL)=>{"use strict";var hL=re(),_L=v(),Wl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),ta={schema_format:{pattern:Wl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Q4=Si.alternatives(Si.string().min(1).max(ta.schema_length.maximum).pattern(Wl).messages({"string.pattern.base":"{:#label} "+ta.schema_format.message}),Si.number(),Si.array()).required(),J4=Si.alternatives(Si.string().min(1).max(ta.schema_length.maximum).pattern(Wl).messages({"string.pattern.base":"{:#label} "+ta.schema_format.message}),Si.number()),X4=Si.alternatives(Si.string().min(1).max(ta.schema_length.maximum).pattern(Wl).messages({"string.pattern.base":"{:#label} "+ta.schema_format.message}),Si.number()).required();function Z4(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ta.schema_length.maximum?`'${e}' maximum of 250 characters`:Wl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Z4,"checkValidTable");function eJ(e,t){return hL.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(eJ,"validateSchemaExists");function tJ(e,t){let r=t.state.ancestors[0].schema;return hL.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(tJ,"validateTableExists");function rJ(e,t){return e.toLowerCase()===_L.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${_L.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(rJ,"validateSchemaName");mL.exports={common_validators:ta,schema_regex:Wl,hdb_schema_table:Q4,validateSchemaExists:eJ,validateTableExists:tJ,validateSchemaName:rJ,checkValidTable:Z4,hdb_database:J4,hdb_table:X4}});var _t=P((_Re,pL)=>{"use strict";var dn=require("validate.js");dn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dn.validators.type.checks[t](e)?null:` must be a '${t}' value`};dn.validators.type.checks={Object:a(function(e){return dn.isObject(e)&&!dn.isArray(e)},"Object"),Array:dn.isArray,Integer:dn.isInteger,Number:dn.isNumber,String:dn.isString,Date:dn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};dn.validators.hasValidFileExt=function(e,t){return dn.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};pL.exports={validateObject:nJ,validateObjectAsync:sJ,validateBySchema:iJ};function nJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dn(e,t,{format:"flat"});return r?new Error(r):null}a(nJ,"validateObject");async function sJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(sJ,"validateObjectAsync");function iJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(iJ,"validateBySchema")});var dp=P((mRe,EL)=>{var{common_validators:Ai}=Ti(),wf=_t(),Nf="is required",Qt={database:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},schema:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},table:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},hash_attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length}};function If(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(If,"makeAttributesStrings");function oJ(e){return e=If(e),Qt.table.presence=!1,Qt.attribute.presence=!1,Qt.hash_attribute.presence=!1,wf.validateObject(e,Qt)}a(oJ,"schema_object");function aJ(e){return e=If(e),Qt.table.presence={message:Nf},Qt.attribute.presence=!1,Qt.hash_attribute.presence=!1,wf.validateObject(e,Qt)}a(aJ,"table_object");function cJ(e){return e=If(e),Qt.table.presence={message:Nf},Qt.attribute.presence=!1,wf.validateObject(e,Qt)}a(cJ,"create_table_object");function lJ(e){return e=If(e),Qt.table.presence={message:Nf},Qt.attribute.presence={message:Nf},Qt.hash_attribute.presence=!1,wf.validateObject(e,Qt)}a(lJ,"attribute_object");function uJ(e){return e=If(e),Qt.table.presence={message:Nf},Qt.attribute.presence=!1,Qt.hash_attribute.presence=!1,wf.validateObject(e,Qt)}a(uJ,"describe_table");function dJ(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(dJ,"validateTableResidence");EL.exports={schema_object:oJ,create_table_object:cJ,table_object:aJ,attribute_object:lJ,describe_table:uJ,validateTableResidence:dJ}});var SL=P((ERe,gL)=>{"use strict";var fJ=require("uuid"),jA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||fJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};gL.exports=jA});var fp=P((SRe,TL)=>{"use strict";var _J=SL(),QA=class extends _J{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}};TL.exports=QA});var RL=P((ARe,AL)=>{"use strict";AL.exports=mJ;var hJ="inserted";function mJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===hJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(mJ,"returnObject")});var _p=P((bRe,NL)=>{"use strict";var pJ=v(),JA=ot(),EJ=dc(),{getSystemSchemaPath:gJ,getSchemaPath:SJ}=ft(),yRe=to(),TJ=dp(),AJ=fp(),RJ=RL(),{handleHDBError:yL,hdb_errors:OL}=fe(),bL=re(),{HTTP_STATUS_CODES:yJ}=OL,bJ="inserted";NL.exports=OJ;async function OJ(e){let t=TJ.attribute_object(e);if(t)throw yL(new Error,t.message,OL.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&bL.checkGlobalSchemaTable(e.schema,e.table);if(r)throw yL(new Error,r,yJ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=bL.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 AJ(e.schema,e.table,e.attribute,e.id);try{let i=await JA.openEnvironment(SJ(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}`);JA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await JA.openEnvironment(gJ(),pJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await EJ.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return RJ(bJ,c,{records:[s]},l)}catch(i){throw i}}a(OJ,"lmdbCreateAttribute")});var ZA=P((NRe,IL)=>{var{hdb_table:NJ,hdb_database:wL}=Ti(),wJ=_t(),XA=require("joi"),IJ={undefined:"undefined",null:"null"},CJ=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||IJ[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"),PJ=XA.object({database:wL,schema:wL,table:NJ,records:XA.array().items(XA.object().custom(CJ)).required()});IL.exports=function(e){return wJ.validateBySchema(e,PJ)}});var Cf=P((CRe,PL)=>{"use strict";var ro=re(),CL=j(),IRe=ZA(),{getDatabases:DJ}=(Pe(),se(rt)),{ClientError:fc}=fe();PL.exports=LJ;function LJ(e){if(ro.isEmpty(e))throw new fc("invalid update parameters defined.");if(ro.isEmptyOrZeroLength(e.schema))throw new fc("invalid schema specified.");if(ro.isEmptyOrZeroLength(e.table))throw new fc("invalid table specified.");if(!Array.isArray(e.records))throw new fc("records must be an array");let t=DJ()[e.schema]?.[e.table];if(ro.isEmpty(t))throw new fc(`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&&ro.isEmptyOrZeroLength(o[r]))throw CL.error("a valid hash attribute must be provided with update record:",o),new fc("a valid hash attribute must be provided with update record, check log for more info");if(!ro.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CL.error(`a valid hash value must be provided with ${e.operation} record:`,o),new fc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ro.isEmpty(o[r])&&o[r]!==""&&n.has(ro.autoCast(o[r]))&&(o.skip=!0),n.add(ro.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(LJ,"insertUpdateValidate")});var LL=P((DRe,DL)=>{"use strict";var eR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};DL.exports=eR});var UL=P((MRe,vL)=>{"use strict";var tR=ot(),MJ=j(),ML=Ln().LMDB_ERRORS_ENUM;vL.exports=vJ;async function vJ(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 tR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==ML.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await tR.closeEnvironment(global.lmdb_map[n]),await tR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==ML.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){MJ.error(t)}}a(vJ,"cleanLMDBMap")});var no=P((URe,kL)=>{"use strict";var Pf=require("crypto"),UJ=ne(),{CONFIG_PARAMS:BJ}=v(),xL="aes-256-cbc",xJ=32,HJ=16,rR=64,HL=32,kJ=rR+HL,BL=new Map;kL.exports={encrypt:FJ,decrypt:qJ,createNatsTableStreamName:GJ};function FJ(e){let t=Pf.randomBytes(xJ),r=Pf.randomBytes(HJ),n=Pf.createCipheriv(xL,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(FJ,"encrypt");function qJ(e){let t=e.substr(0,rR),r=e.substr(rR,HL),n=e.substr(kJ,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Pf.createDecipheriv(xL,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(qJ,"decrypt");function GJ(e,t){let r=UJ.get(BJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=BL.get(r);return n||(n=Pf.createHash("md5").update(r).digest("hex"),BL.set(r,n)),n}a(GJ,"createNatsTableStreamName")});var so=P((HRe,GL)=>{"use strict";var xRe=$r(),Df=j(),FL=dp(),$J=no(),hp=re(),{handleHDBError:mp,hdb_errors:VJ}=fe(),{HDB_ERROR_MSGS:pp,HTTP_STATUS_CODES:nR}=VJ,qL=ne();qL.initSync();var{getDatabases:sR}=(Pe(),se(rt)),KJ=require("fs-extra"),YJ=v();GL.exports={describeAll:WJ,describeTable:Ep,describeSchema:zJ};async function WJ(e={}){try{let t=hp.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=sR(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let m;if(t||s||r)m=await Ep({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;m=await Ep({schema:d,table:_,exact_count:u},S)}m&&l.push(m)}catch(m){Df.error(m)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return Df.error("Got an error in describeAll"),Df.error(t),mp(new Error,pp.DESCRIBE_ALL_ERR)}}a(WJ,"describeAll");async function Ep(e,t){hp.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=FL.describe_table(e);if(i)throw i;let c=sR()[r];if(!c)throw mp(new Error,pp.SCHEMA_NOT_FOUND(e.schema),nR.NOT_FOUND);let l=c[n];if(!l)throw mp(new Error,pp.TABLE_NOT_FOUND(e.schema,e.table),nR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(m=>({type:m.type,name:m.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(m=>{m.describe&&(_[m.attribute_name]=!0)}),l.attributes.forEach(m=>{_[m.name]&&u(m)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await KJ.stat(l.primaryStore.env.path)).size}catch(_){Df.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),qL.get(YJ.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=$J.createNatsTableStreamName(h.schema,h.name));try{let _=l.getRecordCount({exactCount:e.exact_count==="true"});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let m=l.auditStore;if(m)for(let S of m.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Df.warn(`unable to stat table dbi due to ${_}`)}return h}a(Ep,"descTable");async function zJ(e){hp.transformReq(e);let t=FL.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=sR()[n];if(!i)throw mp(new Error,pp.SCHEMA_NOT_FOUND(e.schema),nR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),hp.isEmpty(l)||l.describe){let u=await Ep({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(zJ,"describeSchema")});var Gs=P((GRe,WL)=>{var jJ=to(),{callbackify:VL,promisify:QJ}=require("util"),{getDatabases:KL}=(Pe(),se(rt));WL.exports={setSchemaDataToGlobal:$L,getTableSchema:JJ,getSystemSchema:XJ,setSchemaDataToGlobalAsync:QJ($L)};var YL=so(),FRe=VL(YL.describeAll),qRe=VL(YL.describeTable);function $L(e){global.hdb_schema=KL(),e&&e()}a($L,"setSchemaDataToGlobal");function JJ(e,t,r){let n=KL()[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(JJ,"getTableSchema");function XJ(){return jJ}a(XJ,"getSystemSchema")});var fn=P((VRe,JL)=>{"use strict";var Sp=ZA(),Pr=re(),ZJ=require("util"),Tp=kn(),e3=Gs(),zL=j(),{handleHDBError:_c,hdb_errors:t3}=fe(),{HTTP_STATUS_CODES:hc}=t3,r3=ZJ.promisify(e3.getTableSchema),n3="updated",jL="inserted",QL="upserted";JL.exports={insert:i3,update:o3,upsert:a3,validation:s3,flush:c3};async function s3(e){if(Pr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Pr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Pr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await r3(e.schema,e.table),r=Sp(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&&Pr.isEmptyOrZeroLength(c[n]))throw zL.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(!Pr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw zL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Pr.isEmpty(c[n])&&c[n]!==""&&s.has(Pr.autoCast(c[n]))&&(c.skip=!0),s.add(Pr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(s3,"validation");async function i3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Sp(e);if(t)throw _c(new Error,t.message,hc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw _c(new Error,r,hc.BAD_REQUEST);let n=await Tp.createRecords(e);return gp(jL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(i3,"insertData");async function o3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Sp(e);if(t)throw _c(new Error,t.message,hc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw _c(new Error,r,hc.BAD_REQUEST);let n=await Tp.updateRecords(e);return Pr.isEmpty(n.existing_rows)?gp(n3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):gp(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(o3,"updateData");async function a3(e){if(e.operation!=="upsert")throw _c(new Error,"invalid operation, must be upsert",hc.INTERNAL_SERVER_ERROR);let t=Sp(e);if(t)throw _c(new Error,t.message,hc.BAD_REQUEST);Pr.transformReq(e);let r=Pr.checkSchemaTableExist(e.schema,e.table);if(r)throw _c(new Error,r,hc.BAD_REQUEST);let n=await Tp.upsertRecords(e);return gp(QL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(a3,"upsertData");function gp(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===jL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===QL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(gp,"returnObject");function c3(e){return Pr.transformReq(e),Tp.flush(e.schema,e.table)}a(c3,"flush")});var oR=P((YRe,eM)=>{var l3=_t(),iR=require("joi"),{hdb_table:u3,hdb_database:XL}=Ti(),ZL={schema:XL,database:XL,table:u3},d3={date:iR.date().iso().required()},f3={timestamp:iR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eM.exports=function(e,t){let r=t==="timestamp"?{...ZL,...f3}:{...ZL,...d3},n=iR.object(r);return l3.validateBySchema(e,n)}});var nM=P((WRe,rM)=>{var _3=_t(),aR=require("joi"),{hdb_table:h3,hdb_database:tM}=Ti(),m3=aR.object({schema:tM,database:tM,table:h3,hash_values:aR.array().required(),ids:aR.array()});rM.exports=function(e){return _3.validateBySchema(e,m3)}});var dR=P((zRe,sM)=>{"use strict";var cR=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}},lR=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}},uR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};sM.exports={InsertObject:cR,NoSQLSeachObject:lR,DeleteResponseObject:uR}});var Ec=P((QRe,lM)=>{"use strict";var oM=oR(),p3=nM(),mc=re(),iM=require("moment"),aM=j(),{promisify:E3,callbackify:g3}=require("util"),pc=v(),S3=Gs(),fR=E3(S3.getTableSchema),_R=kn(),{DeleteResponseObject:T3}=dR(),{handleHDBError:ra,hdb_errors:A3}=fe(),{HDB_ERROR_MSGS:Ap,HTTP_STATUS_CODES:na}=A3,R3="records successfully deleted",y3=g3(cM);lM.exports={delete:y3,deleteRecord:cM,deleteFilesBefore:b3,deleteAuditLogsBefore:O3};async function b3(e){let t=oM(e,"date");if(t)throw ra(t,t.message,na.BAD_REQUEST,void 0,void 0,!0);if(mc.transformReq(e),!iM(e.date,iM.ISO_8601).isValid())throw ra(new Error,Ap.INVALID_DATE,na.BAD_REQUEST,pc.LOG_LEVELS.ERROR,Ap.INVALID_DATE,!0);let n=mc.checkSchemaTableExist(e.schema,e.table);if(n)throw ra(new Error,n,na.NOT_FOUND,pc.LOG_LEVELS.ERROR,n,!0);let s=await _R.deleteRecordsBefore(e);if(await fR(e.schema,e.table),aM.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(b3,"deleteFilesBefore");async function O3(e){let t=oM(e,"timestamp");if(t)throw ra(t,t.message,na.BAD_REQUEST,void 0,void 0,!0);if(mc.transformReq(e),isNaN(e.timestamp))throw ra(new Error,Ap.INVALID_VALUE("Timestamp"),na.BAD_REQUEST,pc.LOG_LEVELS.ERROR,Ap.INVALID_VALUE("Timestamp"),!0);let r=mc.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.NOT_FOUND,pc.LOG_LEVELS.ERROR,r,!0);let n=await _R.deleteAuditLogsBefore(e);return await fR(e.schema,e.table),aM.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(O3,"deleteAuditLogsBefore");async function cM(e){e.ids&&(e.hash_values=e.ids);let t=p3(e);if(t)throw ra(t,t.message,na.BAD_REQUEST,void 0,void 0,!0);mc.transformReq(e);let r=mc.checkSchemaTableExist(e.schema,e.table);if(r)throw ra(new Error,r,na.NOT_FOUND,pc.LOG_LEVELS.ERROR,r,!0);try{await fR(e.schema,e.table);let n=await _R.deleteRecords(e);return mc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${R3}`),n}catch(n){if(n.message===pc.SEARCH_NOT_FOUND_MESSAGE){let s=new T3;return s.message=pc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(cM,"deleteRecord")});var yp={};Fe(yp,{HASH_FUNCTION:()=>Rp,hash:()=>w3,validate:()=>I3});function hR(e=Mf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Lf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function w3(e,t=Rp[fM?.toUpperCase()]??"sha256"){return mR[t](e)}function I3(e,t,r=Rp[fM?.toUpperCase()]??"sha256"){return e?N3[r](e,t):!1}var Lf,zl,uM,dM,fM,Mf,_M,Rp,mR,N3,bp=Oe(()=>{Lf=L(require("node:crypto")),zl=L(require("argon2")),uM=L(ne()),dM=L(v()),fM=(0,uM.get)(dM.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Mf=16,_M=9,Rp=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(Rp||{});a(hR,"generateSalt");mR={md5:a((e,t=void 0)=>{t=t??hR(_M);let r=Lf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??hR(Mf);let r=Lf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=hR(Mf),r=await zl.hash(e,{type:zl.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},N3={md5:a((e,t)=>{let r=e.slice(0,_M);return e===mR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Mf);return e===mR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await zl.verify(e.slice(Mf),t),"argon2id")};a(w3,"hash");a(I3,"validate")});var mM=P((ZRe,hM)=>{var pR=_t(),Vr={username:{presence:!0,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 C3(e){return Vr.password.presence=!0,Vr.username.presence=!0,Vr.role.presence=!0,Vr.active.presence=!0,pR.validateObject(e,Vr)}a(C3,"addUserValidation");function P3(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,pR.validateObject(e,Vr)}a(P3,"alterUserValidation");function D3(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,pR.validateObject(e,Vr)}a(D3,"dropUserValidation");hM.exports={addUserValidation:C3,alterUserValidation:P3,dropUserValidation:D3}});var yt=P((rye,EM)=>{"use strict";var{platform:tye}=require("os"),L3="nats-server.zip",ER="nats-server",M3=process.platform==="win32"?`${ER}.exe`:ER,v3=/^[^\s.,*>]+$/,pM="__request__",U3=a(e=>`${e}.${pM}`,"REQUEST_SUBJECT"),B3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},x3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},H3={HUB:"hub.pid",LEAF:"leaf.pid"},k3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},F3={SUCCESS:"success",ERROR:"error"},q3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},G3={TXN:"txn",MSGID:"msgid"},jl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},$3={[jl.ERR]:1,[jl.WRN]:2,[jl.INF]:3,[jl.DBG]:4,[jl.TRC]:5},V3={debug:"-D",trace:"-DVV"};EM.exports={NATS_SERVER_ZIP:L3,NATS_SERVER_NAME:ER,NATS_BINARY_NAME:M3,PID_FILES:H3,NATS_CONFIG_FILES:x3,SERVER_SUFFIX:k3,NATS_TERM_CONSTRAINTS_RX:v3,REQUEST_SUFFIX:pM,UPDATE_REMOTE_RESPONSE_STATUSES:F3,CLUSTER_STATUS_STATUSES:q3,REQUEST_SUBJECT:U3,SUBJECT_PREFIXES:G3,MSG_HEADERS:B3,LOG_LEVELS:jl,LOG_LEVEL_FLAGS:V3,LOG_LEVEL_HIERARCHY:$3}});var gR=P(gM=>{"use strict";var K3={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
8
- `),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
9
- `)},Y3="certificate.pem",W3="privateKey.pem",z3="caCertificate.pem",j3="natsCertificate.pem",Q3="natsCaCertificate.pem",pt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},J3={tls_certificate:pt.SERVER,tls_certificateAuthority:pt.CA,customFunctions_tls_certificate:pt.SERVER,customFunctions_tls_certificateAuthority:pt.CA,operationsApi_tls_certificate:pt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:pt["OPERATIONS-CA"]},X3={[pt.SERVER]:2,[pt.DEFAULT]:1},Z3={[pt["OPERATIONS-API"]]:3,[pt.SERVER]:2,[pt.DEFAULT]:1},eX={[pt["OPERATIONS-API"]]:3,[pt.SERVER]:2,[pt.DEFAULT]:1},tX={[pt["OPERATIONS-CA"]]:3,[pt.CA]:2,[pt["DEFAULT-CA"]]:1},rX={[pt["OPERATIONS-CA"]]:3,[pt.CA]:2,[pt["DEFAULT-CA"]]:1},nX={[pt.CA]:2,[pt["DEFAULT-CA"]]:1};Object.assign(gM,{CERTIFICATE_PEM_NAME:Y3,PRIVATEKEY_PEM_NAME:W3,CA_PEM_NAME:z3,CERT_NAME:pt,CERT_CONFIG_NAME_MAP:J3,CERT_PREFERENCE_APP:X3,CERT_PREFERENCE_OPS:Z3,CERT_PREFERENCE_REP:eX,CA_CERT_PREFERENCE_REP:tX,CA_CERT_PREFERENCE_OPS:rX,CA_CERT_PREFERENCE_APP:nX,CERTIFICATE_VALUES:K3,NATS_CERTIFICATE_PEM_NAME:j3,NATS_CA_PEM_NAME:Q3})});var TR=P((oye,bM)=>{"use strict";var RM=require("fs-extra"),Ee=require("joi"),sX=require("os"),{boolean:Be,string:Et,number:Jt,array:Sc}=Ee.types(),{totalmem:SM}=require("os"),gc=require("path"),iX=j(),SR=re(),iye=gR(),TM=v(),oX=_t(),AM="log",aX="components",cX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",lX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",uX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",dX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",fX="rootPath config parameter is undefined",_n=Ee.alternatives([Jt.min(0),Et]).optional().empty(null),Op=Ee.alternatives([Sc.items(Et,{host:Et.required(),port:_n},{hostname:Et.required(),port:_n}).empty(null),Sc.items(Et)]),Ri,yM=!1;bM.exports={configValidator:_X,routesValidator:SX,route_constraints:Op};function _X(e,t=!1){if(yM=t,Ri=e.rootPath,SR.isEmpty(Ri))throw fX;let r=Be.optional(),n=Jt.min(0).max(1e3).empty(null).default(gX),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(vf),i=Et.optional().empty(null),o=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Ee.string().empty(null).default(vf),l=Ee.custom(mX).empty(null).default(vf),u=e.clustering?.enabled,f=Ee.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Ee.object({enabled:r,hubServer:Ee.object({cluster:Ee.object({name:Ee.required().empty(null),network:Ee.object({port:_n,routes:Op}).required()}).required(),leafNodes:Ee.object({network:Ee.object({port:_n}).required()}).required(),network:Ee.object({port:_n}).required()}).required(),leafServer:Ee.object({network:Ee.object({port:_n,routes:Op}).required(),streams:Ee.object({maxAge:Jt.min(120).allow(null).optional(),maxBytes:Jt.min(1).allow(null).optional(),maxMsgs:Jt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Be.optional(),databaseLevel:Be.optional(),tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Be.required(),verify:Be.optional()}),user:Et.optional().empty(null)}).optional():d=Ee.object({enabled:r,tls:Ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Be.optional()})}).optional(),Ee.object({authentication:Ee.alternatives(Ee.object({authorizeLocal:Be,cacheTTL:Jt.required(),enableSessions:Be,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),Be).optional(),analytics:Ee.object({aggregatePeriod:Jt}),replication:Ee.object({hostname:Ee.alternatives(Et,Jt).optional().empty(null),url:Et.optional().empty(null),port:_n,securePort:_n,routes:Sc.optional().empty(null),databases:Ee.alternatives(Et,Sc),enableRootCAs:Be.optional(),copyTablesToCatchUp:Be.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Ee.object({enabled:r}).required(),logging:Ee.object({auditAuthEvents:Ee.object({logFailed:Be,logSuccessful:Be}),file:Be.required(),level:Ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Ee.object({enabled:Be.optional(),compress:Be.optional(),interval:Et.custom(EX).optional().empty(null),maxSize:Et.custom(pX).optional().empty(null),path:Et.optional().empty(null).default(vf)}).required(),root:s,stdStreams:Be.required(),auditLog:Be.required()}).required(),operationsApi:Ee.object({network:Ee.object({cors:Be.optional(),corsAccessList:Sc.optional(),headersTimeout:Jt.min(1).optional(),keepAliveTimeout:Jt.min(1).optional(),port:_n,domainSocket:Ee.optional().empty("hdb/operations-server").default(vf),securePort:_n,timeout:Jt.min(1).optional()}).optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Ee.object({network:Ee.object({port:_n,securePort:_n,mtls:Ee.alternatives([Be.optional(),Ee.object({user:Et.optional(),certificateAuthority:i,required:Be.optional()})])}).required(),webSocket:Be.optional(),requireAuthentication:Be.optional()}),http:Ee.object({compressionThreshold:Jt.optional(),cors:Be.optional(),corsAccessList:Sc.optional(),headersTimeout:Jt.min(1).optional(),port:_n,securePort:_n,maxHeaderSize:Jt.optional(),mtls:Ee.alternatives([Be.optional(),Ee.object({user:Et.optional(),certificateAuthority:i,required:Be.optional()})]),threadRange:Ee.alternatives([Sc.optional(),Et.optional()])}).required(),threads:Ee.alternatives(n.optional(),Ee.object({count:n.optional(),debug:Ee.alternatives(Be.optional(),Ee.object({startingPort:Jt.min(1).optional(),host:Et.optional(),waitForDebugger:Be.optional()})),maxHeapMemory:Jt.min(0).optional()})),storage:Ee.object({writeAsync:Be.required(),overlappingSync:Be.optional(),caching:Be.optional(),compression:Ee.alternatives([Be.optional(),Ee.object({dictionary:Et.optional(),threshold:Jt.optional()})]),compactOnStart:Be.optional(),compactOnStartKeepBackup:Be.optional(),noReadAhead:Be.optional(),path:l,prefetchWrites:Be.optional(),maxFreeSpaceToLoad:Jt.optional(),maxFreeSpaceToRetain:Jt.optional()}).required(),ignoreScripts:Be.optional(),tls:Ee.alternatives([Ee.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(_X,"configValidator");function hX(e){return yM||RM.existsSync(e)?null:`Specified path ${e} does not exist.`}a(hX,"doesPathExist");function mX(e,t){Ee.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=hX(e);if(r)return t.message(r)}a(mX,"validatePath");function pX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(cX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(uX):e}a(pX,"validateRotationMaxSize");function EX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(lX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(dX):e}a(EX,"validateRotationInterval");function gX(e,t){let r=t.state.path.join("."),n=sX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||SM();return i=Math.round(Math.min(i,SM())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),iX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(gX,"setDefaultThreads");function vf(e,t){let r=t.state.path.join(".");if(!SR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(SR.isEmpty(Ri))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return gc.join(Ri,aX);case"logging.root":return gc.join(Ri,AM);case"clustering.leafServer.streams.path":return gc.join(Ri,"clustering","leaf");case"storage.path":let n=gc.join(Ri,TM.LEGACY_DATABASES_DIR_NAME);return RM.existsSync(n)?n:gc.join(Ri,TM.DATABASES_DIR_NAME);case"logging.rotation.path":return gc.join(Ri,AM);case"operationsApi.network.domainSocket":return r==null?null:gc.join(Ri,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(vf,"setDefaultRoot");function SX(e){let t=Ee.object({routes:Op});return oX.validateBySchema({routes:e},t)}a(SX,"routesValidator")});var Ot=P(vM=>{"use strict";var hn=v(),_r=re(),Xt=j(),{configValidator:TX,routesValidator:OM}=TR(),Kr=require("fs-extra"),wM=require("yaml"),qn=require("path"),AX=require("is-number"),IM=require("properties-reader"),RX=require("lodash"),{handleHDBError:yX}=fe(),{HTTP_STATUS_CODES:bX,HDB_ERROR_MSGS:Ql}=Ln(),{server:OX}=(Gr(),se(tc)),{DATABASES_PARAM_CONFIG:Uf,CONFIG_PARAMS:Fn,CONFIG_PARAM_MAP:$s}=hn,NX="Unable to get config value because config is uninitialized",wX="Config successfully initialized",IX="Error backing up config file",CX="Empty parameter sent to getConfigValue",CM=qn.join(hn.PACKAGE_ROOT,"config","yaml",hn.HDB_DEFAULT_CONFIG_FILE),PX=qn.join(hn.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),DX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",NM={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"},Np,bt,wp;Object.assign(vM,{createConfigFile:LX,getDefaultConfig:MX,getConfigValue:DM,initConfig:Ip,flattenConfig:Jl,updateConfigValue:LM,updateConfigObject:UX,getConfiguration:HX,setConfiguration:kX,readConfigFile:bR,getClusteringRoutes:FX,initOldConfig:MM,getConfigFromFile:qX,getConfigFilePath:Tc,addConfig:GX,deleteConfigFromFile:$X,getConfigObj:VX,resolvePath:AR,getFlatConfigObj:KX});function AR(e){if(e?.startsWith("~/"))return qn.join(_r.getHomeDir(),e.slice(1));let t=ne();return qn.resolve(t.getHdbBasePath(),e)}a(AR,"resolvePath");function LX(e,t=!1){let r=sa(CM);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=wM.parseDocument(Kr.readFileSync(PX,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}Np=Jl(r.toJSON());let n;for(let c in e){let l=$s[c.toLowerCase()];if(l===Fn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=RR(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){Xt.error(d)}}}n&&PM(r,n),yR(r,t);let s=r.toJSON();bt=Jl(s);let i=r.getIn(["rootPath"]),o=qn.join(i,hn.HDB_CONFIG_FILE);Kr.createFileSync(o),Kr.writeFileSync(o,String(r)),Xt.trace(`Config file written to ${o}`)}a(LX,"createConfigFile");function PM(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!_r.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Uf.TABLES))for(let i in n[s][Uf.TABLES])for(let o in n[s][Uf.TABLES][i]){let c=n[s][Uf.TABLES][i][o],l=[Fn.DATABASES,s,Uf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Fn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Xt.error("Error parsing schemas CLI/env config arguments",n)}}a(PM,"setSchemasConfig");function MX(e){if(Np===void 0){let r=sa(CM);Np=Jl(r.toJSON())}let t=$s[e.toLowerCase()];if(t!==void 0)return Np[t.toLowerCase()]}a(MX,"getDefaultConfig");function DM(e){if(e==null){Xt.info(CX);return}if(bt===void 0){Xt.trace(NX);return}let t=$s[e.toLowerCase()];if(t!==void 0)return bt[t.toLowerCase()]}a(DM,"getConfigValue");function Tc(e=_r.getPropsFilePath()){let t=_r.getEnvCliRootPath();if(t)return AR(qn.join(t,hn.HDB_CONFIG_FILE));let r=IM(e);return AR(r.get(hn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Tc,"getConfigFilePath");function Ip(e=!1){if(bt===void 0||e){let t;if(!_r.noBootFile()){t=_r.getPropsFilePath();try{Kr.accessSync(t,Kr.constants.F_OK|Kr.constants.R_OK)}catch(i){throw Xt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Tc(t),n;if(r.includes("config/settings.js"))try{MM(r);return}catch(i){if(i.code!==hn.NODE_ERROR_CODES.ENOENT)throw i}try{n=sa(r)}catch(i){if(i.code===hn.NODE_ERROR_CODES.ENOENT){Xt.trace(`HarperDB config file not found at ${r}.
10
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Xt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}vX(n,r),yR(n);let s=n.toJSON();if(OX.config=s,bt=Jl(s),bt.logging_rotation_rotate)for(let i in NM)bt[i]&&Xt.error(`Config ${NM[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Xt.trace(wX)}}a(Ip,"initConfig");function vX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(Xt.trace("Updating config file with missing config params"),Kr.writeFileSync(t,String(e)))}a(vX,"checkForUpdatedConfig");function yR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Ql.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Ql.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=TX(r,t);if(n.error)throw Ql.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(yR,"validateConfig");function UX(e,t){bt===void 0&&(bt={});let r=$s[e.toLowerCase()];if(r===void 0){Xt.trace(`Unable to update config object because config param '${e}' does not exist`);return}bt[r.toLowerCase()]=t}a(UX,"updateConfigObject");function LM(e,t,r=void 0,n=!1,s=!1,i=!1){bt===void 0&&Ip();let o=DM($s.hdb_root),c=qn.join(o,hn.HDB_CONFIG_FILE),l=sa(c),u;if(r&&bt){let h=!1;for(let _ in r)if(r[_]!=bt[_.toLowerCase()]){h=!0;break}if(!h){Xt.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Fn.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=$s[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),m=RR(h,t);l.setIn([..._],m)}else for(let h in r){let _=$s[h.toLowerCase()];if(_===Fn.HTTP_SECUREPORT&&r[h]===bt[Fn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Fn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===bt[Fn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Fn.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let m=l.getIn(["threads"]);m>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],m))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let m=_.split("_"),S=hn.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,m=S.split("_"));let g=RR(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{m.length>1&&typeof l.getIn(m.slice(0,-1))=="boolean"&&l.deleteIn(m.slice(0,-1)),l.setIn([...m],g)}catch(T){Xt.error(T)}}}u&&PM(l,u),yR(l);let f=l.getIn(["rootPath"]),d=qn.join(f,hn.HDB_CONFIG_FILE);n===!0&&BX(c,f),Kr.writeFileSync(d,String(l)),s&&(bt=Jl(l.toJSON())),Xt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(LM,"updateConfigValue");function BX(e,t){try{let r=qn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${hn.HDB_CONFIG_FILE}.bak`);Kr.copySync(e,r),Xt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Xt.error(IX),Xt.error(r)}}a(BX,"backupConfigFile");var xX=["databases"];function Jl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),wp=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])&&!xX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Fn[l.toUpperCase()]&&$s[l]&&(s[$s[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Jl,"flattenConfig");function RR(e,t){if(e===Fn.CLUSTERING_NODENAME||e===Fn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(AX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_r.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 _r.autoCast(t)}a(RR,"castConfigValue");function HX(){let e=_r.getPropsFilePath(),t=Tc(e);return sa(t).toJSON()}a(HX,"getConfiguration");async function kX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return LM(void 0,void 0,s,!0),DX}catch(i){throw typeof i=="string"||i instanceof String?yX(i,i,bX.BAD_REQUEST,void 0,void 0,!0):i}}a(kX,"setConfiguration");function bR(){let e=_r.getPropsFilePath();try{Kr.accessSync(e,Kr.constants.F_OK|Kr.constants.R_OK)}catch(n){if(!_r.noBootFile())throw Xt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Tc(e);return sa(t).toJSON()}a(bR,"readConfigFile");function sa(e){return wM.parseDocument(Kr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(sa,"parseYamlDoc");function FX(){let e=bR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_r.isEmptyOrZeroLength(t)?[]:t;let r=OM(t);if(r)throw Ql.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=_r.isEmptyOrZeroLength(n)?[]:n;let s=OM(n);if(s)throw Ql.CONFIG_VALIDATION(s.message);if(!_r.isEmptyOrZeroLength(n)&&!_r.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!_r.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ql.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(FX,"getClusteringRoutes");function MM(e){let t=IM(e);bt={};for(let r in $s){let n=t.get(r.toUpperCase());if(_r.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=$s[r].toLowerCase();s===Fn.LOGGING_ROOT?bt[s]=qn.dirname(n):bt[s]=n}return bt}a(MM,"initOldConfig");function qX(e){let t=bR();return RX.get(t,e.replaceAll("_","."))}a(qX,"getConfigFromFile");async function GX(e,t){let r=sa(Tc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kr.writeFile(Tc(),String(r))}a(GX,"addConfig");function $X(e){let t=Tc(_r.getPropsFilePath()),r=sa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=qn.join(n,hn.HDB_CONFIG_FILE);Kr.writeFileSync(s,String(r))}a($X,"deleteConfigFromFile");function VX(){return wp||(Ip(),wp)}a(VX,"getConfigObj");function KX(){return bt||Ip(),bt}a(KX,"getFlatConfigObj")});var Gn=P((uye,Rr)=>{"use strict";var xM="username is required",HM="nothing to update, must supply active, role or password to update",kM="password cannot be an empty string",FM="If role is specified, it cannot be empty.",qM="active must be true or false";Rr.exports.addUser=e5;Rr.exports.alterUser=t5;Rr.exports.dropUser=n5;Rr.exports.getSuperUser=c5;Rr.exports.userInfo=s5;Rr.exports.listUsers=Cp;Rr.exports.listUsersExternal=i5;Rr.exports.setUsersWithRolesCache=Ac;Rr.exports.findAndValidateUser=YM;Rr.exports.getClusterUser=l5;Rr.exports.getUsersWithRolesCache=a5;Rr.exports.USERNAME_REQUIRED=xM;Rr.exports.ALTERUSER_NOTHING_TO_UPDATE=HM;Rr.exports.EMPTY_PASSWORD=kM;Rr.exports.EMPTY_ROLE=FM;Rr.exports.ACTIVE_BOOLEAN=qM;var GM=fn(),YX=Ec(),Bf=(bp(),se(yp)),$M=mM(),xf=$r(),CR=oo(),yi=re(),VM=require("validate.js"),PR=j(),{promisify:WX}=require("util"),DR=no(),NR=v(),UM=yt(),zX=Ot(),jX=ne(),QX=to(),{hdb_errors:JX,ClientError:Vs}=fe(),{HTTP_STATUS_CODES:io,AUTHENTICATION_ERROR_MSGS:OR,HDB_ERROR_MSGS:Xl}=JX,{UserEventMsg:LR}=Ks(),wR=require("lodash"),{server:MR}=(Gr(),se(tc)),XX=j();MR.getUser=(e,t)=>YM(e,t,t!=null);var KM={username:!0,active:!0,role:!0,password:!0},BM=new Map,ZX=WX(YX.delete),IR=jX.get(NR.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Bf.HASH_FUNCTION.SHA256,bi;async function e5(e){let t=VM.cleanAttributes(e,KM),r=$M.addUserValidation(t);if(r)throw new Vs(r.message);let n=await xf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Vs(Xl.ROLE_NAME_NOT_FOUND(t.role),io.NOT_FOUND);if(n.length>1)throw new Vs(Xl.DUP_ROLES_FOUND(t.role),io.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=DR.encrypt(t.password)),t.password=await Bf.hash(t.password,IR),t.hash_function=IR,t.role=n[0].id;let s=await GM.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(PR.debug(s),await Ac(),s.skipped_hashes.length===1)throw new Vs(Xl.USER_ALREADY_EXISTS(t.username),io.CONFLICT);return CR.signalUserChange(new LR(process.pid)),`${t.username} successfully added`}a(e5,"addUser");async function t5(e){let t=VM.cleanAttributes(e,KM);if(yi.isEmptyOrZeroLength(t.username))throw new Error(xM);if(yi.isEmptyOrZeroLength(t.password)&&yi.isEmptyOrZeroLength(t.role)&&yi.isEmptyOrZeroLength(t.active))throw new Error(HM);if(!yi.isEmpty(t.password)&&yi.isEmptyOrZeroLength(t.password.trim()))throw new Error(kM);if(!yi.isEmpty(t.active)&&!yi.isBoolean(t.active))throw new Error(qM);if(!yi.isEmpty(t.password)&&!yi.isEmptyOrZeroLength(t.password.trim())&&(r5(t.username)&&(t.hash=DR.encrypt(t.password)),t.password=await Bf.hash(t.password,IR)),t.role==="")throw new Error(FM);if(t.role){let n=await xf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Vs(Xl.ALTER_USER_ROLE_NOT_FOUND(t.role),io.NOT_FOUND);if(n.length>1)throw new Vs(Xl.DUP_ROLES_FOUND(t.role),io.CONFLICT);t.role=n[0].id}let r=await GM.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Ac(),CR.signalUserChange(new LR(process.pid)),r}a(t5,"alterUser");function r5(e){let t=!1,r=bi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(r5,"isClusterUser");async function n5(e){let t=$M.dropUserValidation(e);if(t)throw new Vs(t.message);if(bi.get(e.username)===void 0)throw new Vs(Xl.USER_NOT_EXIST(e.username),io.NOT_FOUND);let r=await ZX({table:"hdb_user",schema:"system",hash_values:[e.username]});return PR.debug(r),await Ac(),CR.signalUserChange(new LR(process.pid)),`${e.username} successfully deleted`}a(n5,"dropUser");async function s5(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=wR.cloneDeep(e.hdb_user);let r=await xf.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(s5,"userInfo");async function i5(){let e=await Cp();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(i5,"listUsersExternal");async function Cp(){let e=await xf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=wR.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await xf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=wR.cloneDeep(s),s.role=t[s.role],o5(s.role),n.set(s.username,s);return n}a(Cp,"listUsers");function o5(e){if(!e){PR.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(QX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(o5,"appendSystemTablesToRole");async function Ac(e=void 0){e?bi=e:bi=await Cp()}a(Ac,"setUsersWithRolesCache");async function a5(){return bi||await Ac(),bi}a(a5,"getUsersWithRolesCache");async function YM(e,t,r=!0){bi||await Ac();let n=bi.get(e);if(!n){if(!r)return{username:e};throw new Vs(OR.GENERIC_AUTH_FAIL,io.UNAUTHORIZED)}if(n&&!n.active)throw new Vs(OR.USER_INACTIVE,io.UNAUTHORIZED);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(BM.get(t)===n.password)return s;{let i=Bf.validate(n.password,t,n.hash_function||Bf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)BM.set(t,n.password);else throw new Vs(OR.GENERIC_AUTH_FAIL,io.UNAUTHORIZED)}}return s}a(YM,"findAndValidateUser");async function c5(){bi||await Ac();for(let[,e]of bi)if(e.role.role==="super_user")return e}a(c5,"getSuperUser");async function l5(){let e=await Cp(),t=zX.getConfigFromFile(NR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==NR.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=DR.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+UM.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+UM.SERVER_SUFFIX.ADMIN,r}a(l5,"getClusterUser");var WM=[];MR.invalidateUser=function(e){for(let t of WM)try{t(e)}catch(r){XX.error("Error invalidating user",r)}};MR.onInvalidatedUser=function(e){WM.push(e)}});var kf=P((hye,JM)=>{"use strict";var Rc=j(),$n=v(),u5=UL(),fye=Gs(),_ye=so(),d5=Gn(),{validateEvent:zM}=Ks(),Hf=kn(),f5=require("process"),{resetDatabases:_5}=(Pe(),se(rt)),h5={[$n.ITC_EVENT_TYPES.SCHEMA]:m5,[$n.ITC_EVENT_TYPES.USER]:QM};async function m5(e){let t=zM(e);if(t){Rc.error(t);return}Rc.trace("ITC schemaHandler received schema event:",e),await u5(e.message),await p5(e.message)}a(m5,"schemaHandler");async function p5(e){try{Hf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Hf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Hf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=_5();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Rc.error(t)}}a(p5,"syncSchemaMetadata");var jM=[];async function QM(e){try{try{Hf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Hf.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Rc.warn(r)}let t=zM(e);if(t){Rc.error(t);return}Rc.trace(`ITC userHandler ${$n.HDB_ITC_CLIENT_PREFIX}${f5.pid} received user event:`,e),await d5.setUsersWithRolesCache();for(let r of jM)r()}catch(t){Rc.error(t)}}a(QM,"userHandler");QM.addListener=function(e){jM.push(e)};JM.exports=h5});var Ks=P((Tye,ZM)=>{"use strict";var pye=j(),vR=re(),E5=v(),{ITC_ERRORS:Ff}=Ln(),{parentPort:Eye,threadId:g5,isMainThread:S5,workerData:gye}=require("worker_threads"),{onMessageFromWorkers:T5,broadcast:Sye,broadcastWithAcknowledgement:A5}=tt();ZM.exports={sendItcEvent:R5,validateEvent:XM,SchemaEventMsg:y5,UserEventMsg:b5};var Pp;T5(async(e,t)=>{Pp=Pp||kf(),XM(e),Pp[e.type]&&await Pp[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function R5(e){return!S5&&e.message&&(e.message.originator=g5),A5(e)}a(R5,"sendItcEvent");function XM(e){if(typeof e!="object")return Ff.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||vR.isEmpty(e.type))return Ff.MISSING_TYPE;if(!e.hasOwnProperty("message")||vR.isEmpty(e.message))return Ff.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||vR.isEmpty(e.message.originator))return Ff.MISSING_ORIGIN;if(E5.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ff.INVALID_EVENT(e.type)}a(XM,"validateEvent");function y5(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(y5,"SchemaEventMsg");function b5(e){this.originator=e}a(b5,"UserEventMsg")});var oo=P((yye,nv)=>{"use strict";var ev=v(),Rye=re(),Dp=j(),tv=LL(),Zl,{sendItcEvent:rv}=Ks();function O5(e){try{Dp.info("signalSchemaChange called with message:",e),Zl=Zl||kf();let t=new tv(ev.ITC_EVENT_TYPES.SCHEMA,e);return Zl.schema(t),rv(t)}catch(t){Dp.error(t)}}a(O5,"signalSchemaChange");function N5(e){try{Dp.trace("signalUserChange called with message:",e),Zl=Zl||kf();let t=new tv(ev.ITC_EVENT_TYPES.USER,e);return Zl.user(t),rv(t)}catch(t){Dp.error(t)}}a(N5,"signalUserChange");nv.exports={signalSchemaChange:O5,signalUserChange:N5}});var Lp=P((Oye,iv)=>{"use strict";var sv=re(),w5=v(),I5=j(),C5=_p(),P5=fp(),D5=oo(),{SchemaEventMsg:L5}=Ks(),M5="already exists in";iv.exports=v5;async function v5(e,t,r){if(sv.isEmptyOrZeroLength(r))return r;let n=[];sv.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 U5(e,t.schema,t.name,i)})),s}a(v5,"lmdbCheckForNewAttributes");async function U5(e,t,r,n){let s=new P5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await B5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(M5))I5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(U5,"createNewAttribute");async function B5(e){let t;return t=await C5(e),D5.signalSchemaChange(new L5(process.pid,w5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(B5,"createAttribute")});var eu=P((wye,ov)=>{"use strict";var UR=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}};ov.exports=UR});var cv=P((Cye,av)=>{"use strict";var x5=eu(),H5=v().OPERATIONS_ENUM,BR=class extends x5{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(H5.INSERT,r,n,s,i),this.records=t}};av.exports=BR});var uv=P((Dye,lv)=>{"use strict";var k5=eu(),F5=v().OPERATIONS_ENUM,xR=class extends k5{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(F5.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};lv.exports=xR});var fv=P((Mye,dv)=>{"use strict";var q5=eu(),G5=v().OPERATIONS_ENUM,HR=class extends q5{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(G5.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};dv.exports=HR});var hv=P((Uye,_v)=>{"use strict";var $5=eu(),V5=v().OPERATIONS_ENUM,kR=class extends $5{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(V5.DELETE,n,s,t,i),this.original_records=r}};_v.exports=kR});var qf=P((Hye,gv)=>{"use strict";var xye=require("path"),mv=ot(),K5=cv(),Y5=uv(),W5=fv(),z5=hv(),tu=Dt(),pv=re(),{CONFIG_PARAMS:j5}=v(),Ev=ne();Ev.initSync();var Mp=v().OPERATIONS_ENUM,{getTransactionAuditStorePath:Q5}=ft();gv.exports=J5;async function J5(e,t){if(Ev.get(j5.LOGGING_AUDITLOG)===!1)return;let r=Q5(e.schema,e.table),n=await mv.openEnvironment(r,e.table,!0),s=X5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){mv.initializeDBIs(n,tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,tu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),pv.isEmpty(s.user_name)||n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[tu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(J5,"writeTransaction");function X5(e,t){let r=pv.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Mp.INSERT)return new K5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Mp.UPDATE)return new Y5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Mp.UPSERT)return new W5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Mp.DELETE)return new z5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(X5,"createTransactionObject")});var FR=P((qye,Sv)=>{"use strict";var Z5=Cf(),Fye=tf(),Gf=v(),e6=rf(),t6=dc().insertRecords,r6=ot(),n6=j(),s6=Lp(),{getSchemaPath:i6}=ft(),o6=qf();Sv.exports=a6;async function a6(e){try{let{schema_table:t,attributes:r}=Z5(e);e6(e,r,t.hash_attribute),e.schema!==Gf.SYSTEM_SCHEMA_NAME&&(r.includes(Gf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await s6(e.hdb_auth_header,t,r),s=i6(e.schema,e.table),i=await r6.openEnvironment(s,e.table),o=await t6(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await o6(e,o)}catch(c){n6.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(a6,"lmdbCreateRecords")});var Rv=P(($ye,Av)=>{"use strict";var Tv=v(),c6=FR(),l6=tf(),u6=require("fs-extra"),{getSchemaPath:d6}=ft();Av.exports=f6;async function f6(e){let t=[{name:e.schema,createddate:Date.now()}],r=new l6(Tv.SYSTEM_SCHEMA_NAME,Tv.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await c6(r),await u6.mkdirp(d6(e.schema))}a(f6,"lmdbCreateSchema")});var bv=P((Kye,yv)=>{"use strict";var qR=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}};yv.exports=qR});var Iv=P((Qye,wv)=>{"use strict";var Ov=ot(),GR=on(),$R=Ln().LMDB_ERRORS_ENUM,_6=Dt(),Nv=j(),Wye=re(),h6=require("lmdb"),m6=bv(),p6=v(),{OVERFLOW_MARKER:zye,MAX_SEARCH_KEY_LENGTH:jye}=_6,E6=p6.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function g6(e,t,r,n){if(GR.validateEnv(e),t===void 0)throw new Error($R.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($R.IDS_REQUIRED):new Error($R.IDS_MUST_BE_ITERABLE);try{let s=Ov.listDBIs(e);Ov.initializeDBIs(e,t,s);let i=new m6,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let m=e.dbis[t].get(o);if(!m||n&&m[E6]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,h6.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let T=s[g];if(!m.hasOwnProperty(T)||T===t)continue;let E=e.dbis[T],A=m[T];if(A!=null)try{let w=GR.getIndexedValues(A);if(w)for(let M=0,H=w.length;M<H;M++)E.remove(w[M],o)}catch{Nv.warn(`cannot delete from attribute: ${T}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(m)}catch(m){Nv.warn(m),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=GR.getNextMonotonicTime(),i}catch(s){throw s}}a(g6,"deleteRecords");wv.exports={deleteRecords:g6}});var $f=P((Xye,Pv)=>{"use strict";var ru=re(),S6=Iv(),T6=ot(),{getSchemaPath:A6}=ft(),R6=qf(),y6=j();Pv.exports=b6;async function b6(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(ru.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(ru.isEmptyOrZeroLength(e.hash_values)&&!ru.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];ru.isEmpty(l)||e.hash_values.push(l)}}if(ru.isEmptyOrZeroLength(e.hash_values))return Cv([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(ru.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=A6(e.schema,e.table),i=await T6.openEnvironment(s,e.table),o=await S6.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await R6(e,o)}catch(c){y6.error(`unable to write transaction due to ${c.message}`)}return Cv(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(b6,"lmdbDeleteRecords");function Cv(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(Cv,"createDeleteResponse")});var KR=P((tbe,Dv)=>{"use strict";var O6=v(),ebe=on();function VR(e,t){let r=Object.create(null);if(t.length===1&&O6.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(VR,"parseRow");function N6(e,t,r,n){let s=VR(r,e);n.push(s)}a(N6,"searchAll");function w6(e,t,r,n){let s=VR(r,e);n[t]=s}a(w6,"searchAllToMap");function I6(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(I6,"iterateDBI");function yc(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(yc,"pushResults");function C6(e,t,r,n,s,i){t.toString().endsWith(e)&&yc(t,r,n,s,i)}a(C6,"endsWith");function P6(e,t,r,n,s,i){t.toString().includes(e)&&yc(t,r,n,s,i)}a(P6,"contains");function D6(e,t,r,n,s,i){t>e&&yc(t,r,n,s,i)}a(D6,"greaterThanCompare");function L6(e,t,r,n,s,i){t>=e&&yc(t,r,n,s,i)}a(L6,"greaterThanEqualCompare");function M6(e,t,r,n,s,i){t<e&&yc(t,r,n,s,i)}a(M6,"lessThanCompare");function v6(e,t,r,n,s,i){t<=e&&yc(t,r,n,s,i)}a(v6,"lessThanEqualCompare");Dv.exports={parseRow:VR,searchAll:N6,searchAllToMap:w6,iterateDBI:I6,endsWith:C6,contains:P6,greaterThanCompare:D6,greaterThanEqualCompare:L6,lessThanCompare:M6,lessThanEqualCompare:v6,pushResults:yc}});var nu=P((obe,Hv)=>{"use strict";var ia=ot(),nbe=j(),Vn=on(),vp=Dt(),Gt=Ln().LMDB_ERRORS_ENUM,sbe=re(),U6=v(),Up=KR(),{parseRow:B6}=Up,ibe=require("lmdb"),{OVERFLOW_MARKER:Lv,MAX_SEARCH_KEY_LENGTH:x6}=vp;function Mv(e,t,r,n=!1,s=void 0,i=void 0){return bc(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(Mv,"iterateFullIndex");function Vf(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return bc(e,t,r,(f,d,h,_)=>{let E={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(E.values=!1,d.getRange(E).map(A=>({value:A}))):d.getRange(E)})}a(Vf,"iterateRangeBetween");function bc(e,t,r,n){let s=e.database||e,i=ia.openDBI(s,r);i[vp.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ia.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(bc,"setupTransaction");function vv(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(Lv)){if(!s)if(r)s=ia.openDBI(e,r);else{let l=ia.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ia.openDBI(e,l[u]),!s[vp.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(vv,"getOverflowCheck");function H6(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Gt.HASH_ATTRIBUTE_REQUIRED);return bc(e,t,t,(o,c,l)=>(Bp(r),r=Kf(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>B6(u.value,r))))}a(H6,"searchAll");function k6(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Gt.HASH_ATTRIBUTE_REQUIRED);Bp(r),r=Kf(e.database||e,r);let o=new Map;for(let{key:c,value:l}of Mv(e,t,t,n,s,i))o.set(c,Up.parseRow(l,r));return o}a(k6,"searchAllToMap");function F6(e,t,r=!1,n=void 0,s=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Gt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Mv(e,void 0,t,r,n,s),c=o.transaction,l=vv(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(F6,"iterateDBI");function q6(e,t){if(Vn.validateEnv(e),t===void 0)throw new Error(Gt.HASH_ATTRIBUTE_REQUIRED);return ia.statDBI(e,t).entryCount}a(q6,"countAll");function G6(e,t,r,n,s=!1,i=void 0,o=void 0){return oa(e,r,n),bc(e,t,r,(c,l,u,f)=>(n=Vn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(G6,"equals");function $6(e,t,r){return oa(e,t,r),ia.openDBI(e,t).getValuesCount(r)}a($6,"count");function V6(e,t,r,n,s=!1,i=void 0,o=void 0){return oa(e,r,n),bc(e,null,r,(c,l)=>{n=Vn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(V6,"startsWith");function K6(e,t,r,n,s=!1,i=void 0,o=void 0){return Uv(e,t,r,n,s,i,o,!0)}a(K6,"endsWith");function Uv(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return oa(e,r,n),bc(e,null,r,(l,u,f,d)=>{let h=vv(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let m=_.toString();return m.endsWith(Lv)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?m.endsWith(n):m.includes(n))?u[vp.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Uv,"contains");function Y6(e,t,r,n,s=!1,i=void 0,o=void 0){oa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Vf(e,t,r,n,l,s,i,o,!0,!1)}a(Y6,"greaterThan");function W6(e,t,r,n,s=!1,i=void 0,o=void 0){oa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Vf(e,t,r,n,l,s,i,o,!1,!1)}a(W6,"greaterThanEqual");function z6(e,t,r,n,s=!1,i=void 0,o=void 0){oa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Vf(e,t,r,l,n,s,i,o,!1,!0)}a(z6,"lessThan");function j6(e,t,r,n,s=!1,i=void 0,o=void 0){oa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Vf(e,t,r,l,n,s,i,o,!1,!1)}a(j6,"lessThanEqual");function Q6(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Vn.validateEnv(e),r===void 0)throw new Error(Gt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Gt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Gt.END_VALUE_REQUIRED);if(n=Vn.convertKeyValueToWrite(n),s=Vn.convertKeyValueToWrite(s),n>s)throw new Error(Gt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Vf(e,t,r,n,s,i,o,c)}a(Q6,"between");function J6(e,t,r,n){Vn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Gt.HASH_ATTRIBUTE_REQUIRED);if(Bp(r),r=Kf(s,r),n===void 0)throw new Error(Gt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Up.parseRow(c,r)),o}a(J6,"searchByHash");function X6(e,t,r){Vn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Gt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Gt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(X6,"checkHashExists");function Z6(e,t,r,n,s=[]){return xv(e,t,r,n,s),Bv(e,t,r,n,s).map(i=>i[1])}a(Z6,"batchSearchByHash");function eZ(e,t,r,n,s=[]){xv(e,t,r,n,s);let i=new Map;for(let[o,c]of Bv(e,t,r,n,s))i.set(o,c);return i}a(eZ,"batchSearchByHashToMap");function Bv(e,t,r,n,s=[]){return bc(e,t,t,(i,o,c)=>{r=Kf(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,Up.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(Bv,"batchHashSearch");function xv(e,t,r,n,s){if(Vn.validateEnv(e),t===void 0)throw new Error(Gt.HASH_ATTRIBUTE_REQUIRED);if(Bp(r),n==null)throw new Error(Gt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Gt.IDS_MUST_BE_ITERABLE)}a(xv,"initializeBatchSearchByHash");function Bp(e){if(!Array.isArray(e))throw e===void 0?new Error(Gt.FETCH_ATTRIBUTES_REQUIRED):new Error(Gt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Bp,"validateFetchAttributes");function oa(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(Gt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Gt.SEARCH_VALUE_REQUIRED);if(r?.length>x6)throw new Error(Gt.SEARCH_VALUE_TOO_LARGE)}a(oa,"validateComparisonFunctions");function Kf(e,t){return t.length===1&&U6.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ia.listDBIs(e)),t}a(Kf,"setGetWholeRowAttributes");Hv.exports={searchAll:H6,searchAllToMap:k6,count:$6,countAll:q6,equals:G6,startsWith:V6,endsWith:K6,contains:Uv,searchByHash:J6,setGetWholeRowAttributes:Kf,batchSearchByHash:Z6,batchSearchByHashToMap:eZ,checkHashExists:X6,iterateDBI:F6,greaterThan:Y6,greaterThanEqual:W6,lessThan:z6,lessThanEqual:j6,between:Q6}});var su=P((cbe,$v)=>{var kv=require("lodash"),Fv=_t(),xe=require("joi"),tZ=re(),{hdb_schema_table:Yf,checkValidTable:qv,hdb_table:Gv,hdb_database:xp}=Ti(),{handleHDBError:rZ,hdb_errors:nZ}=fe(),{getDatabases:sZ}=(Pe(),se(rt)),{HTTP_STATUS_CODES:iZ}=nZ,oZ=xe.object({database:xp,schema:xp,table:Gv,search_attribute:Yf,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(Yf,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),aZ=xe.object({database:xp,schema:xp,table:Gv,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(Yf,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(Yf,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(Yf,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});$v.exports=function(e,t){let r=null;switch(t){case"value":r=Fv.validateBySchema(e,oZ);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(qv("database",e.schema)),i(qv("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=Fv.validateBySchema(e,aZ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=tZ.checkGlobalSchemaTable(e.schema,e.table);if(s)return rZ(new Error,s,iZ.NOT_FOUND);let o=sZ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=kv.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!kv.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var YR=P((ube,Vv)=>{"use strict";var cZ=ot(),lZ=su(),{getSchemaPath:uZ}=ft();Vv.exports=dZ;function dZ(e){let t=lZ(e,"hashes");if(t)throw t;let r=uZ(e.schema,e.table);return cZ.openEnvironment(r,e.table)}a(dZ,"initialize")});var WR=P((fbe,Kv)=>{"use strict";var fZ=nu(),_Z=YR();Kv.exports=hZ;async function hZ(e){let t=await _Z(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return fZ.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(hZ,"lmdbGetDataByHash")});var iu=P((hbe,Yv)=>{"use strict";var zR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Yv.exports=zR});var zv=P((Ebe,Wv)=>{"use strict";var pbe=iu(),mZ=nu(),pZ=YR();Wv.exports=EZ;async function EZ(e){let t=await pZ(e),r=global.hdb_schema[e.schema][e.table];return mZ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(EZ,"lmdbSearchByHash")});var Ys=P((Sbe,jv)=>{"use strict";var jR=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};jv.exports=jR});var Hp=P((Abe,tU)=>{"use strict";var Yr=nu(),gZ=ot(),SZ=re(),He=Dt(),Oc=v(),TZ=to(),Qv=Ln().LMDB_ERRORS_ENUM,{getSchemaPath:AZ}=ft(),ao=Oc.SEARCH_WILDCARDS;async function RZ(e,t,r){let n;e.schema===Oc.SYSTEM_SCHEMA_NAME?n=TZ[e.table]:n=global.hdb_schema[e.schema][e.table];let s=eU(e,n.hash_attribute,r,t);return Xv(e,s,n.hash_attribute,r)}a(RZ,"prepSearch");async function Xv(e,t,r,n){let s=AZ(e.schema,e.table),i=await gZ.openEnvironment(s,e.table),o=Zv(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(yZ(e,r)===!1){let f=e.search_attribute;if(f===r)return n?Jv(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?Jv(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?Yr.batchSearchByHashToMap(c,r,e.get_attributes,u):Yr.batchSearchByHash(c,r,e.get_attributes,u)}a(Xv,"executeSearch");function Zv(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case He.SEARCH_TYPES.EQUALS:s=Yr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case He.SEARCH_TYPES.CONTAINS:s=Yr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case He.SEARCH_TYPES.ENDS_WITH:case He.SEARCH_TYPES._ENDS_WITH:s=Yr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case He.SEARCH_TYPES.STARTS_WITH:case He.SEARCH_TYPES._STARTS_WITH:s=Yr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case He.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Yr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case He.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Yr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case He.SEARCH_TYPES.SEARCH_ALL:return Yr.searchAll(e,n,t.get_attributes,o,c,l);case He.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Yr.searchAllToMap(e,n,t.get_attributes,o,c,l);case He.SEARCH_TYPES.BETWEEN:s=Yr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case He.SEARCH_TYPES.GREATER_THAN:case He.SEARCH_TYPES._GREATER_THAN:s=Yr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case He.SEARCH_TYPES.GREATER_THAN_EQUAL:case He.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Yr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case He.SEARCH_TYPES.LESS_THAN:case He.SEARCH_TYPES._LESS_THAN:s=Yr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case He.SEARCH_TYPES.LESS_THAN_EQUAL:case He.SEARCH_TYPES._LESS_THAN_EQUAL:s=Yr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(Zv,"searchByType");function Jv(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(Jv,"createMapFromIterable");function yZ(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(yZ,"checkToFetchMore");function eU(e,t,r,n){if(SZ.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),ao.indexOf(s)>-1)return r===!0?He.SEARCH_TYPES.SEARCH_ALL_TO_MAP:He.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ao[0])<0&&s.indexOf(ao[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(ao.indexOf(i)>=0&&ao.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),He.SEARCH_TYPES.CONTAINS;if(ao.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),He.SEARCH_TYPES.ENDS_WITH;if(ao.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),He.SEARCH_TYPES.STARTS_WITH;if(s.includes(ao[0])||s.includes(ao[1]))return He.SEARCH_TYPES.EQUALS;throw new Error(Qv.UNKNOWN_SEARCH_TYPE)}else switch(n){case Oc.VALUE_SEARCH_COMPARATORS.BETWEEN:return He.SEARCH_TYPES.BETWEEN;case Oc.VALUE_SEARCH_COMPARATORS.GREATER:return He.SEARCH_TYPES.GREATER_THAN;case Oc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return He.SEARCH_TYPES.GREATER_THAN_EQUAL;case Oc.VALUE_SEARCH_COMPARATORS.LESS:return He.SEARCH_TYPES.LESS_THAN;case Oc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return He.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Qv.UNKNOWN_SEARCH_TYPE)}}a(eU,"createSearchTypeFromSearchObject");tU.exports={executeSearch:Xv,createSearchTypeFromSearchObject:eU,prepSearch:RZ,searchByType:Zv}});var nU=P((bbe,rU)=>{"use strict";var ybe=Ys(),bZ=su(),OZ=re(),NZ=v(),wZ=Hp();rU.exports=IZ;function IZ(e,t){if(!OZ.isEmpty(t)&&NZ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=bZ(e,"value");if(n)throw n;return wZ.prepSearch(e,t,!0)}a(IZ,"lmdbGetDataByValue")});var Wf=P((wbe,sU)=>{"use strict";var Nbe=Ys(),CZ=su(),PZ=re(),DZ=v(),LZ=Hp();sU.exports=MZ;async function MZ(e,t){if(!PZ.isEmpty(t)&&DZ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=CZ(e,"value");if(n)throw n;return LZ.prepSearch(e,t,!1)}a(MZ,"lmdbSearchByValue")});var oU=P((Pbe,iU)=>{"use strict";var Cbe=Dt(),QR=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}},JR=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},XR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};iU.exports={SearchByConditionsObject:QR,SearchCondition:JR,SortAttribute:XR}});var dU=P((vbe,uU)=>{"use strict";var Lbe=oU().SearchByConditionsObject,vZ=Ys(),UZ=su(),ZR=nu(),kp=Dt(),{Resource:Mbe}=(Xo(),se(iA)),lU=Hp(),BZ=KR(),xZ=require("lodash"),{getSchemaPath:HZ}=ft(),aU=ot(),{handleHDBError:kZ,hdb_errors:FZ}=fe(),{HTTP_STATUS_CODES:qZ}=FZ,GZ=1e8;uU.exports=$Z;async function $Z(e){let t=UZ(e,"conditions");if(t)throw kZ(t,t.message,qZ.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=HZ(e.schema,e.table),n=await aU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)aU.openDBI(n,u.search_attribute);let i=xZ.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===kp.SEARCH_TYPES.EQUALS?u.estimated_count=ZR.count(n,u.search_attribute,u.search_value):f===kp.SEARCH_TYPES.CONTAINS||f===kp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=GZ}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await cU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(lU.filterByType),d=f.length,h=ZR.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let m=0;m<d;m++)if(!f[m](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>BZ.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await cU(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=ZR.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a($Z,"lmdbSearchByConditions");async function cU(e,t,r,n){let s=new vZ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===kp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,lU.searchByType(e,s,i,n).map(o=>o.value)}a(cU,"executeConditionSearch")});var zf=P((Bbe,fU)=>{"use strict";var VZ=v().OPERATIONS_ENUM,ey=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=VZ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};fU.exports=ey});var ty=P((Hbe,TU)=>{"use strict";var pU=Ys(),EU=zf(),gU=Wf(),SU=$f(),mn=v(),_U=re(),hU=ot(),{getTransactionAuditStorePath:KZ,getSchemaPath:YZ}=ft(),mU=j();TU.exports=WZ;async function WZ(e){try{if(_U.isEmpty(global.hdb_schema[e.schema])||_U.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await zZ(e),await jZ(e);let t=YZ(e.schema,e.table);try{await hU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")mU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=KZ(e.schema,e.table);await hU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")mU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(WZ,"lmdbDropTable");async function zZ(e){let t=new pU(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await gU(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 EU(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await SU(s)}a(zZ,"deleteAttributesFromSystem");async function jZ(e){let t=new pU(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,mn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await gU(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 EU(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await SU(s)}catch(i){throw i}}a(jZ,"dropTableFromSystem")});var RU=P((Fbe,AU)=>{"use strict";var QZ=require("fs-extra"),JZ=Ys(),XZ=iu(),ZZ=zf(),e8=ty(),t8=$f(),r8=WR(),n8=Wf(),co=v(),{getSchemaPath:s8}=ft(),{handleHDBError:i8,hdb_errors:o8}=fe(),{HDB_ERROR_MSGS:a8,HTTP_STATUS_CODES:c8}=o8;AU.exports=l8;async function l8(e){let t;try{t=await u8(e.schema);let r=new JZ(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await n8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await e8(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new ZZ(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await t8(s);let i=s8(t);await QZ.remove(i)}catch(r){throw r}}a(l8,"lmdbDropSchema");async function u8(e){let t=new XZ(co.SYSTEM_SCHEMA_NAME,co.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[co.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await r8(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw i8(new Error,a8.SCHEMA_NOT_FOUND(e),c8.NOT_FOUND,void 0,void 0,!0);return n}a(u8,"validateDropSchema")});var jf=P((Gbe,yU)=>{"use strict";var ry=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};yU.exports=ry});var sy=P((Kbe,bU)=>{"use strict";var d8=require("fs-extra"),Fp=ot(),{getTransactionAuditStorePath:f8}=ft(),ny=Dt(),Vbe=jf();bU.exports=_8;async function _8(e){let t;try{let r=f8(e.schema,e.table);await d8.mkdirp(r),t=await Fp.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{Fp.createDBI(t,ny.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Fp.createDBI(t,ny.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Fp.createDBI(t,ny.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(_8,"createTransactionsAuditEnvironment")});var wU=P((zbe,NU)=>{"use strict";var iy=v(),OU=ot(),h8=dc(),{getSystemSchemaPath:m8,getSchemaPath:p8}=ft(),Wbe=to(),E8=_p(),oy=fp(),g8=j(),S8=sy();NU.exports=T8;async function T8(e,t){let r=p8(t.schema,t.table),n=new oy(t.schema,t.table,iy.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new oy(t.schema,t.table,iy.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new oy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await OU.createEnvironment(r,t.table),e!==void 0){let o=await OU.openEnvironment(m8(),iy.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await h8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await ay(n),await ay(s),await ay(i)}await S8(t)}catch(o){throw o}}a(T8,"lmdbCreateTable");async function ay(e){try{await E8(e)}catch(t){g8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ay,"createAttribute")});var CU=P((Qbe,IU)=>{"use strict";var A8=Cf(),R8=rf(),y8=Lp(),Qf=v(),b8=dc().updateRecords,O8=ot(),{getSchemaPath:N8}=ft(),w8=qf(),I8=j();IU.exports=C8;async function C8(e){try{let{schema_table:t,attributes:r}=A8(e);R8(e,r,t.hash_attribute),e.schema!==Qf.SYSTEM_SCHEMA_NAME&&(r.includes(Qf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Qf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Qf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Qf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await y8(e.hdb_auth_header,t,r),s=N8(e.schema,e.table),i=await O8.openEnvironment(s,e.table),o=await b8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await w8(e,o)}catch(c){I8.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(C8,"lmdbUpdateRecords")});var DU=P((Xbe,PU)=>{"use strict";var P8=v().OPERATIONS_ENUM,cy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=P8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};PU.exports=cy});var MU=P((tOe,LU)=>{"use strict";var eOe=DU(),D8=Cf(),L8=rf(),M8=Lp(),Jf=v(),v8=dc().upsertRecords,U8=ot(),{getSchemaPath:B8}=ft(),x8=qf(),H8=j(),{handleHDBError:k8,hdb_errors:F8}=fe();LU.exports=q8;async function q8(e){let t;try{t=D8(e)}catch(l){throw k8(l,l.message,F8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;L8(e,n,r.hash_attribute),e.schema!==Jf.SYSTEM_SCHEMA_NAME&&(n.includes(Jf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Jf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Jf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Jf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await M8(e.hdb_auth_header,r,n),i=B8(e.schema,e.table),o=await U8.openEnvironment(i,e.table),c=await v8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await x8(e,c)}catch(l){H8.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(q8,"lmdbUpsertRecords")});var UU=P((nOe,vU)=>{"use strict";var ly=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};vU.exports=ly});var xU=P((iOe,BU)=>{"use strict";var uy=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}};BU.exports=uy});var FU=P((cOe,kU)=>{"use strict";var dy=ot(),{getTransactionAuditStorePath:G8}=ft(),aOe=UU(),Xf=Dt(),$8=re(),HU=xU(),V8=require("util").promisify,K8=V8(setTimeout),Y8=1e4,W8=100;kU.exports=z8;async function z8(e){let t=G8(e.schema,e.table),r=await dy.openEnvironment(t,e.table,!0),n=dy.listDBIs(r);dy.initializeDBIs(r,Xf.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new HU;do s=await j8(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 K8(W8);while(s.transactions_deleted>0);return i}a(z8,"deleteAuditLogsBefore");async function j8(e,t){let r=new HU;try{let n=e.dbis[Xf.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[Xf.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];$8.isEmpty(c)||(s=e.dbis[Xf.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Xf.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Y8)break}return await s,r}catch(n){throw n}}a(j8,"deleteTransactions")});var GU=P((uOe,qU)=>{"use strict";var fy=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};qU.exports=fy});var VU=P((_Oe,$U)=>{"use strict";var Q8=Ys(),J8=zf(),fOe=GU(),Oi=v(),X8=re(),_y=ot(),Z8=to(),e9=Wf(),t9=$f(),{getSchemaPath:r9}=ft();$U.exports=n9;async function n9(e,t=!0){let r;e.schema===Oi.SYSTEM_SCHEMA_NAME?r=Z8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await i9(e),s=r9(e.schema,e.table),i=await _y.openEnvironment(s,e.table);return t===!0&&await s9(e,i,r.hash_attribute),_y.dropDBI(i,e.attribute),n}a(n9,"lmdbDropAttribute");async function s9(e,t,r){let n=_y.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(s9,"removeAttributeFromAllObjects");async function i9(e){let t=new Q8(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await e9(t)).filter(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(X8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Oi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new J8(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return t9(i)}a(i9,"dropAttributeFromSystem")});var QU=P((pOe,jU)=>{"use strict";var hy=ot(),ou=Dt(),mOe=on(),my=v(),KU=re(),{getTransactionAuditStorePath:o9}=ft(),a9=nu(),qp=eu(),c9=j();jU.exports=l9;async function l9(e){let t=o9(e.schema,e.table),r=await hy.openEnvironment(t,e.table,!0),n=hy.listDBIs(r);hy.initializeDBIs(r,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case my.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return YU(r,e.search_values);case my.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,d9(r,e.search_values,s);case my.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return u9(r,e.search_values);default:return YU(r)}}a(l9,"readAuditLog");function YU(e,t=[0,Date.now()]){KU.isEmpty(t[0])&&(t[0]=0),KU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ou.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 qp,s))}a(YU,"searchTransactionsByTimestamp");function u9(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[ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,zU(e,i))}return Object.fromEntries(r)}a(u9,"searchTransactionsByUsername");function d9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=a9.equals(e,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=zU(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);WU(l,"records",r,f,o),WU(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(d9,"searchTransactionsByHashValues");function WU(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new qp(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new qp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(WU,"loopRecords");function zU(e,t){let r=[];try{let n=e.dbis[ou.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 qp,i);r.push(o)}}catch(i){c9.warn(i)}return r}catch(n){throw n}}a(zU,"batchSearchTransactions")});var XU=P((TOe,JU)=>{"use strict";var{getSchemaPath:gOe}=ft(),SOe=ot(),{database:f9}=(Pe(),se(rt));JU.exports={writeTransaction:_9};async function _9(e,t,r){return f9({database:e,table:t}).transaction(r)}a(_9,"writeTransaction")});var r0=P((ROe,t0)=>{"use strict";var{getSchemaPath:ZU}=ft(),e0=ot();t0.exports={flush:h9,resetReadTxn:m9};async function h9(e,t){return(await e0.openEnvironment(ZU(e,t),t.toString())).flushed}a(h9,"flush");async function m9(e,t){try{(await e0.openEnvironment(ZU(e,t),t.toString())).resetReadTxn()}catch{}}a(m9,"resetReadTxn")});var o0=P((bOe,i0)=>{"use strict";var{Readable:p9}=require("stream"),{getDatabases:E9}=(Pe(),se(rt)),{readSync:g9,openSync:S9,createReadStream:n0}=require("fs"),{open:T9}=require("lmdb"),s0=Rf(),A9=yf(),{AUDIT_STORE_OPTIONS:R9}=(Zi(),se(a0)),{INTERNAL_DBIS_NAME:y9,AUDIT_STORE_NAME:b9}=Dt();i0.exports=N9;var py=32768,O9=100;async function N9(e){let t=e.database||e.schema||"data",r=E9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=T9({noSync:!0,maxDbs:A9.MAX_DBS}),h,_=d.openDB(y9,new s0(!1)),m=f.useReadTransaction(),S=0,g=a(async function(E,A){A.encoding="binary",A.encoder=void 0;let w=d.openDB(E,A),M=f.openDB(E,A);for(let{key:H,version:k,value:V}of M.getRange({start:null,transaction:m,versions:M.useVersions}))h=w.put(H,V,k),S++%O9===0&&(await new Promise(q=>setTimeout(q,20)),m.openTimer&&(m.openTimer=0))},"copyDatabase");for(let{key:E,value:A}of f.getRange({transaction:m,start:!1}))if(s.some(w=>E.startsWith?.(w+"/"))){_.put(E,A);let[,w]=E.split("/"),M=!w,H=new s0(!M,M);await g(E,H)}e.include_audit&&await g(b9,{...R9}),await h;let T=n0(d.path);return T.headers=l(),T.on("close",()=>{m.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=S9(o.path);return o.transaction(()=>{let u=Buffer.alloc(py);g9(c,u,0,py),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=n0(null,{fd:c,start:py}),h=new p9.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(N9,"getBackup")});var u0=P((NOe,l0)=>{"use strict";var w9=j(),{handleHDBError:I9}=fe(),C9=ND(),P9=_p(),D9=FR(),L9=Rv(),M9=$f(),v9=WR(),U9=zv(),B9=nU(),x9=Wf(),H9=dU(),k9=RU(),F9=wU(),q9=CU(),G9=MU(),$9=FU(),V9=ty(),K9=VU(),Y9=QU(),W9=XU(),c0=r0(),z9=o0(),Ey=class extends C9{static{a(this,"LMDBBridge")}async searchByConditions(t){return H9(t)}async getDataByHash(t){return await v9(t)}async searchByHash(t){return await U9(t)}async getDataByValue(t,r){return await B9(t,r)}async searchByValue(t){return await x9(t)}async createSchema(t){return await L9(t)}async dropSchema(t){return await k9(t)}async createTable(t,r){return await F9(t,r)}async dropTable(t){return await V9(t)}async createAttribute(t){return await P9(t)}async createRecords(t){return await D9(t)}async updateRecords(t){return await q9(t)}async upsertRecords(t){try{return await G9(t)}catch(r){throw I9(r,null,null,w9.ERR,r)}}async deleteRecords(t){return await M9(t)}async dropAttribute(t){return await K9(t)}async deleteAuditLogsBefore(t){return await $9(t)}async readAuditLog(t){return await Y9(t)}writeTransaction(t,r,n){return W9.writeTransaction(t,r,n)}flush(t,r){return c0.flush(t,r)}resetReadTxn(t,r){return c0.resetReadTxn(t,r)}getBackup(t){return z9(t)}};l0.exports=Ey});var Sy={};Fe(Sy,{add:()=>Gp,applyReverse:()=>d0,getRecordAtTime:()=>gy,rebuildUpdateBefore:()=>$p});function Gp(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function $p(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,Gp(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function d0(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=j9[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=f0}}function gy(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Rt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":d0(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===f0&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Rt(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var j9,f0,Vp=Oe(()=>{Zi();a(Gp,"add");Gp.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};j9={add:Gp};a($p,"rebuildUpdateBefore");a(d0,"applyReverse");f0={};a(gy,"getRecordAtTime")});function pn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function zp(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a number, attempt to assign ${h}`);pn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be a number, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Kn.ClientError(`${l} must be a Date, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof Ei||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);pn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){pn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be an object, attempt to assign ${d}`);pn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let m=this.getRecord()?.[l];return _.update(m)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=Ty(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Kn.ClientError("Can not add a property to a sealed table schema");pn(this)[c]=l}),i("deleteProperty",function(c){pn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,h0);break}o=c}while(o&&o!==h0)}function Ty(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends Zf{static{a(this,"TrackedObject")}},zp(r,t)),new r(e)):new Zf(e);case Array:let n=new Yp(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Ty(o,t?.elements)),n[s]=o}return n;default:return e}}function jp(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=jp(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function wc(e,t=e.getChanges?.()){let r;if(e.getRecord&&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=wc(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={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Sy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=wc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)Q9.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function Kp(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Nc]||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?.getRecord?.()===s){if(Kp(i))return!0}else return!0}}else{let r=e.getChanges?.();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.getRecord?.()===i){if(Kp(s))return!0}else return!0}else return!0}}return!1}var Kn,_0,h0,Zf,Q9,Nc,Yp,Wp,Ay=Oe(()=>{Kn=L(fe());Vp();ls();a(pn,"getChanges");a(zp,"assignTrackedAccessors");_0=Object.prototype,h0=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(_0[t])return _0[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()[t];if(s&&typeof s=="object"){let i=Ty(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Ty,"trackObject");Zf=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};zp(Zf,{});a(jp,"collapseData");Q9=Object.prototype.hasOwnProperty;a(wc,"updateAndFreeze");a(Kp,"hasChanges");Nc=Symbol.for("has-array-changes"),Yp=class extends Array{static{a(this,"TrackedArray")}#e;[Nc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Nc]=!0,super.splice(...t)}push(...t){return this[Nc]=!0,super.push(...t)}pop(){return this[Nc]=!0,super.pop()}unshift(...t){return this[Nc]=!0,super.unshift(...t)}shift(){return this[Nc]=!0,super.shift()}};Yp.prototype.constructor=Array;Wp=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var R0={};Fe(R0,{ResourceBridge:()=>by});function Oy({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 p0(e,t){let r=Ni(e),n=Oy(e,r);if(!r)throw new Ws.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,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;At(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&jp(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ni(e){let t=e.database||e.schema||X9,r=Qe()[t];if(!r)throw(0,Ws.handleHDBError)(new Error,J9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function E0(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*g0(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var S0,Qp,Ws,T0,zs,Ry,yy,A0,J9,X9,Z9,e7,m0,by,y0=Oe(()=>{"use strict";S0=L(u0()),Qp=L(su()),Ws=L(fe());Pe();T0=L(Cf()),zs=L(v()),Ry=L(oo()),yy=L(Ks()),A0=L(re());Xa();Ay();({HDB_ERROR_MSGS:J9}=Ws.hdb_errors),X9="data",Z9=1e4,e7=10,by=class extends S0.default{static{a(this,"ResourceBridge")}constructor(t){super(t),m0=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,Qp.default)(t,"conditions");if(r)throw(0,Ws.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ni(t);if(!n)throw new Ws.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:Oy(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}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 Ws.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}]}it({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ni(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ni(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ni(t).dropTable()}createSchema(t){return au({database:t.schema,table:null}),Ry.signalSchemaChange(new yy.SchemaEventMsg(process.pid,zs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Ny(t.schema),Ry.signalSchemaChange(new yy.SchemaEventMsg(process.pid,zs.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,m0.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,T0.default)(t),s,i=Qe()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),At(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=jp(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let m=f[_];if(typeof m=="function")try{let S=m([[h]]);Array.isArray(S)&&(m=S[0].func_val,f[_]=m)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Qe()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),At(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return E0(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Qe()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ws.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:zs.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,A0.async_set_timeout)(e7),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%Z9===0&&await u();return l.length>0&&await u(),s?E0(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Qp.default)(t,"hashes");if(r)throw r;return p0(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of p0(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&zs.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,Qp.default)(t,"value");if(n)throw n;let s=Ni(t);if(!s)throw new Ws.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===zs.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,sort:t.sort,select:Oy(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ni(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){Ni({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ni(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ni(t),n={};switch(t.search_type){case zs.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.operation??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 zs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of g0(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return g0(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Oy,"getSelect");a(p0,"getRecords");a(Ni,"getTable");a(E0,"createDeleteResponse");a(g0,"groupRecordsInHistory")});var kn=P((HOe,b0)=>{"use strict";var{ResourceBridge:t7}=(y0(),se(R0)),r7=ne();r7.initSync();var Jp;function n7(){return Jp||(Jp=new t7,Jp)}a(n7,"getBridge");b0.exports=n7()});var I0=P((FOe,w0)=>{"use strict";var O0=require("lodash"),e_=require("mathjs"),s7=require("jsonata"),N0=re();w0.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?O0.uniqWith(e,O0.isEqual):e,"distinct_array"),searchJSON:i7,mad:t_.bind(null,e_.mad),mean:t_.bind(null,e_.mean),mode:t_.bind(null,e_.mode),prod:t_.bind(null,e_.prod),median:t_.bind(null,e_.median)};function t_(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(t_,"aggregateFunction");function i7(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(N0.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),N0.isEmpty(this.__ala__.res[r])){let n=s7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(i7,"searchJSON")});var P0=P((GOe,C0)=>{"use strict";var Zt=require("moment"),wy="YYYY-MM-DDTHH:mm:ss.SSSZZ";Zt.suppressDeprecationWarnings=!0;C0.exports={current_date:a(()=>Zt().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>Zt().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return Zt(e).utc().format("YYYY");case"month":return Zt(e).utc().format("MM");case"day":return Zt(e).utc().format("DD");case"hour":return Zt(e).utc().format("HH");case"minute":return Zt(e).utc().format("mm");case"second":return Zt(e).utc().format("ss");case"millisecond":return Zt(e).utc().format("SSS");default:break}},"extract"),date:a(e=>Zt(e).utc().format(wy),"date"),date_format:a((e,t)=>Zt(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>Zt(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>Zt(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=Zt(e).utc(),s=Zt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>Zt().utc().valueOf(),"now"),get_server_time:a(()=>Zt().format(wy),"get_server_time"),offset_utc:a((e,t)=>Zt(e).utc().utcOffset(t).format(wy),"offset_utc")}});var v0=P((VOe,M0)=>{"use strict";var o7=require("@turf/area"),a7=require("@turf/length"),c7=require("@turf/circle"),l7=require("@turf/difference"),u7=require("@turf/distance"),d7=require("@turf/boolean-contains"),f7=require("@turf/boolean-equal"),_7=require("@turf/boolean-disjoint"),h7=require("@turf/helpers"),D0=v(),qe=re(),lo=j();M0.exports={geoArea:m7,geoLength:p7,geoCircle:E7,geoDifference:g7,geoDistance:L0,geoNear:S7,geoContains:T7,geoEqual:A7,geoCrosses:R7,geoConvert:y7};function m7(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return o7.default(e)}catch(t){return lo.trace(t,e),NaN}}a(m7,"geoArea");function p7(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return a7.default(e,{units:t||"kilometers"})}catch(r){return lo.trace(r,e),NaN}}a(p7,"geoLength");function E7(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return c7.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(E7,"geoCircle");function g7(e,t){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return l7(e,t)}catch(r){return lo.trace(r,e,t),NaN}}a(g7,"geoDifference");function L0(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return u7.default(e,t,{units:r||"kilometers"})}catch(n){return lo.trace(n,e,t),NaN}}a(L0,"geoDistance");function S7(e,t,r,n){if(qe.isEmpty(e)||qe.isEmpty(t))return!1;if(qe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return L0(e,t,n)<=r}catch(s){return lo.trace(s,e,t),!1}}a(S7,"geoNear");function T7(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return d7.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(T7,"geoContains");function A7(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return f7.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(A7,"geoEqual");function R7(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return!_7.default(e,t)}catch(r){return lo.trace(r,e,t),!1}}a(R7,"geoCrosses");function y7(e,t,r){if(qe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(qe.isEmpty(t))throw new Error("geo_type is required");if(qe.isEmpty(D0.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(D0.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),h7[t](e,r)}a(y7,"geoConvert")});var Xp=P((YOe,U0)=>{var Ic=I0(),Yn=P0(),wi=v0();U0.exports=e=>{e.aggr.mad=e.aggr.MAD=Ic.mad,e.aggr.mean=e.aggr.MEAN=Ic.mean,e.aggr.mode=e.aggr.MODE=Ic.mode,e.aggr.prod=e.aggr.PROD=Ic.prod,e.aggr.median=e.aggr.MEDIAN=Ic.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ic.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ic.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Yn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Yn.current_time,e.fn.extract=e.fn.EXTRACT=Yn.extract,e.fn.date=e.fn.DATE=Yn.date,e.fn.date_format=e.fn.DATE_FORMAT=Yn.date_format,e.fn.date_add=e.fn.DATE_ADD=Yn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Yn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Yn.date_diff,e.fn.now=e.fn.NOW=Yn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Yn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Yn.get_server_time,e.fn.getdate=e.fn.GETDATE=Yn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Yn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wi.geoNear}});var k0=P((WOe,H0)=>{"use strict";var r_=require("lodash"),En=require("alasql");En.options.cache=!1;var b7=Xp(),B0=require("clone"),Zp=require("recursive-iterator"),ve=j(),Ye=re(),cu=kn(),O7=v(),{hdb_errors:N7}=fe(),{getDatabases:x0}=(Pe(),se(rt)),w7="IS NULL",js="There was a problem performing this search. Please check the logs and try again.";b7(En);var Iy=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ye.isEmpty(t))throw ve.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(),Ye.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ye.isEmptyOrZeroLength(n))return ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ve.error(n),new Error(js)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ve.error(n),new Error(js)}if(Object.keys(this.data).length===0)return ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ve.error("Error thrown from processJoins in SQLSearch class method search."),ve.error(n),new Error(js)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ve.error(n),new Error(js)}try{return t=await this._finalSQL(),t}catch(n){throw ve.error("Error thrown from finalSQL in SQLSearch class method search."),ve.error(n),new Error(js)}}_getColumns(){let t=new Zp(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(B0(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=r_.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=x0()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ye.isEmpty(this.statement.where)){ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Zp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ye.isEmpty(r)&&r.right)if(Ye.isNotEmptyAndHasValue(r.right.value)){let n=Ye.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new En.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ye.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new En.yy.LogicValue({value:i}):n instanceof En.yy.StringValue&&Ye.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new En.yy.NumValue({value:i}))});if(t){ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Zp(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(!Ye.isEmpty(O7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ye.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ye.isEmptyOrZeroLength(r.left.columnid)||Ye.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(Ye.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"=":!Ye.isEmpty(r.right.value)||!Ye.isEmpty(r.left.value)?n.add(Ye.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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(Ye.isEmptyOrZeroLength(this.all_table_attributes)&&Ye.isEmptyOrZeroLength(this.statement.from)&&Ye.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&&r_.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(Ye.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ye.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(Ye.isEmptyOrZeroLength(this.all_table_attributes)&&!Ye.isEmptyOrZeroLength(this.columns.columns))return t;if(Ye.isEmptyOrZeroLength(this.all_table_attributes)&&Ye.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await En.promise(r)}catch(r){throw ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ve.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(B0(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(Ye.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(w7)>-1&&this.tables.forEach(s=>{let i={columnid:x0()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=r_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Ye.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!Ye.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await cu.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ve.error(f),new Error(js)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await cu.getDataByValue(d);for(let[_,m]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ve.error(f),new Error(js)}else if(!Ye.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!Ye.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let m=await cu.getDataByValue(c,_.operation);if(l)for(let[S]of m)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of m)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ve.error(f),new Error(js)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await cu.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ve.error(f),new Error(js)}}}_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 En.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 En.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new En.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 En.yy.FuncValue:new En.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(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let m=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(m+=" ON "+_.on.toString()),i.push(m),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let m=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${m}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${m}\` AS "${S}.${m}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,m=this._convertColumnsToIndexes(_,s);h=await En.promise(m,t),t=null}catch(_){throw ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ve.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,m=h.length;_<m;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let m=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=r_.difference(m,[..._.keys].map(g=>g.toString()));for(let g=0,T=S.length;g<T;g++){let E=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[E]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Zp(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=r_.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 ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ve.error(i),new Error(js)}}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 f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await cu.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let m=0;m<u;m++){let S=s.columns[m],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}catch(r){throw ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ve.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ve.trace(`Final SQL: ${s}`),n=await En.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ve.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 ve.error(N7.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,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 cu.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw ve.error("There was an error when processing this SQL operation. Check your logs"),ve.error(o),new Error(js)}}return Object.values(Object.values(this.data)[0].__merged_data)}};H0.exports=Iy});var $r=P((jOe,F0)=>{"use strict";var I7=bD();F0.exports={searchByConditions:P7,searchByHash:D7,searchByValue:L7,search:M7};var Cy=kn(),{transformReq:Py}=re(),C7=k0();async function P7(e){return Py(e),Cy.searchByConditions(e)}a(P7,"searchByConditions");async function D7(e){Py(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Cy.searchByHash(e))r&&t.push(r);return t}a(D7,"searchByHash");async function L7(e){Py(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Cy.searchByValue(e))t.push(r);return t}a(L7,"searchByValue");function M7(e,t){try{let r=new I7(e);r.validate(),new C7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(M7,"search")});var eE=P((JOe,q0)=>{"use strict";var v7=kn();q0.exports={writeTransaction:U7};function U7(e,t,r){return v7.writeTransaction(e,t,r)}a(U7,"writeTransaction")});var K0=P((eNe,V0)=>{"use strict";var B7=$r(),x7=Gs(),G0=j(),H7=fn(),ZOe=eE(),k7=require("clone"),Ly=require("alasql"),F7=Xp(),$0=require("util"),q7=$0.promisify(x7.getTableSchema),G7=$0.promisify(B7.search),$7=v(),Dy=re();F7(Ly);V0.exports={update:K7};var V7="There was a problem performing this update. Please check the logs and try again.";async function K7({statement:e,hdb_user:t}){let r=await q7(e.table.databaseid,e.table.tableid),n=Y7(e.columns);Dy.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=k7(s),c=Dy.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=Ly.parse(l).statements[0],f=await G7(u),d=W7(n,f);return z7(o,d,t)}a(K7,"update");function Y7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Ly.compile(`SELECT ${r.expression.toString()} AS [${$7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw G0.error(t),new Error(V7)}}a(Y7,"createUpdateRecord");function W7(e,t){return Dy.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(W7,"buildUpdateRecords");async function z7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){G0.error(`Error delete new_attributes from update response: ${i}`)}return s}a(z7,"updateRecords")});var W0=P((sNe,Y0)=>{var j7=require("alasql"),Q7=$r(),J7=j(),X7=kn(),vy=require("util"),My=re(),Z7=v(),eee=Gs(),rNe=eE(),nNe=fn(),tee="record",ree="successfully deleted",nee=vy.callbackify(aee),see=vy.promisify(Q7.search),iee=vy.promisify(eee.getTableSchema);Y0.exports={convertDelete:nee};function oee(e){return`${e.deleted_hashes.length} ${tee}${e.deleted_hashes.length===1?"":"s"} ${ree}`}a(oee,"generateReturnMessage");async function aee({statement:e,hdb_user:t}){let r=await iee(e.table.databaseid,e.table.tableid);My.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=My.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j7.parse(o).statements[0],l={operation:Z7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await see(c);let u=await X7.deleteRecords(l);return My.isEmptyOrZeroLength(u.message)&&(u.message=oee(u)),delete u.txn_time,u}catch(u){throw J7.error(u),u.hdb_code?u.message:u}}a(aee,"convertDelete")});var X0=P((oNe,J0)=>{"use strict";var cee=so(),{hdb_errors:z0}=fe(),{getDatabases:j0}=(Pe(),se(rt));J0.exports={checkSchemaExists:Q0,checkSchemaTableExists:lee,schema_describe:cee};async function Q0(e){if(!j0()[e])return z0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Q0,"checkSchemaExists");async function lee(e,t){let r=await Q0(e);if(r)return r;if(!j0()[e][t])return z0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(lee,"checkSchemaTableExists")});function Uy(e){let t=e.get(tE),r=t?(0,lu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Je(),s=!1;r.nodeName=Je();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:s_(e)??1,nodes:[]})})}i[n]=0,e.putSync(tE,(0,lu.pack)(r))}return r}function n_(e){return Uy(e).remoteNameToId}function eB(e,t,r){let n=Uy(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let f=0;for(let d in s){let h=s[d];h>f&&(f=h)}u=f+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(tE,(0,lu.pack)(n)),i}function rE(e,t){let r=Uy(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(tE,(0,lu.pack)(r))}return Z0.trace?.("The remote node name map",e,n,s),s}var Z0,lu,tE,By=Oe(()=>{Z0=L(Qi());fs();lu=require("msgpackr"),tE=Symbol.for("remote-ids");a(Uy,"getIdMappingRecord");a(n_,"exportIdMapping");a(eB,"remoteToLocalNodeId");a(rE,"getIdOfRemoteNode")});var xy={};Fe(xy,{commits_awaiting_replication:()=>fu,getHDBNodeTable:()=>hr,getReplicationSharedStatus:()=>nE,iterateRoutes:()=>o_,shouldReplicateToNode:()=>i_,subscribeToNodeUpdates:()=>_u});function hr(){return tB||(tB=it({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function nE(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function _u(e){hr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;iB.debug?.("adding node",n,"on node",Je()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==Je()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function i_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&hr().primaryStore.get(Je())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function uee(){_u(e=>{aa({},(t,r)=>{let n=e.name,s=rB.get(n);if(s||rB.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=nE(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of fu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*o_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=uu.default.get(du.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!uu.default.get(du.CONFIG_PARAMS.REPLICATION_PORT)&&uu.default.get(du.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||uu.default.get(du.CONFIG_PARAMS.REPLICATION_PORT)||uu.default.get(du.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){nB.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var nB,sB,uu,du,iB,tB,rB,fu,Cc=Oe(()=>{Pe();fs();Dm();nB=require("worker_threads"),sB=L(fe()),uu=L(ne()),du=L(v()),iB=L(Qi());server.nodes=[];a(hr,"getHDBNodeTable");a(nE,"getReplicationSharedStatus");a(_u,"subscribeToNodeUpdates");a(i_,"shouldReplicateToNode");rB=new Map;qP((e,t,r)=>{if(r>server.nodes.length)throw new sB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);fu||(fu=new Map,uee());let n=fu.get(e);return n||(n=[],fu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(uee,"startSubscriptionToReplications");a(o_,"iterateRoutes")});var uB={};Fe(uB,{connectedToNode:()=>Pc,disconnectedFromNode:()=>pu,ensureNode:()=>fo,requestClusterStatus:()=>lB,startOnMainThread:()=>ky});async function ky(e){let t=0,r=Qe();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){sE.set(i,s_(l.auditStore));break}}}Ii.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of o_(e))try{let c=!o.subscriptions;if(c){let u=Je();hr().primaryStore.get(u)===void 0&&await fo(u,{name:u,url:e.url??ca(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}_u(s)});let n;function s(i,o=i?.name){let c=Je()&&o===Je()||ca()&&i?.url===ca();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of hr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(nt.trace("Setting up node replication for",i),!i){for(let[d,h]of uo){let _;for(let[m,{worker:S,nodes:g}]of h){let T=g[0];if(T&&T.name==o){_=!0;for(let[E,{worker:A}]of h)h.delete(E),nt.warn("Node was deleted, unsubscribing from node",o,E,d),A?.postMessage({type:"unsubscribe-from-node",node:o,database:E,url:d});break}}if(_){uo.get(d).iterator.remove(),uo.delete(d);return}}return}if(c)return;if(!i.url){nt.info(`Node ${i.name} is missing url`);return}let l=uo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(nt.info(`Added node ${i.name} at ${i.url} for process ${Je()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of hu)if(i.url===h.url){hu.delete(d);break}hu.set(i.name,i)}let u=Qe();if(l||(l=new Map,uo.set(i.url,l)),l.iterator=aa(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(nt.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){nt.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),m,S=[{replicateByDefault:h,...i}];sE.has(d)&&(S.push({replicateByDefault:h,name:Je(),start_time:sE.get(d),end_time:Date.now(),replicates:!0}),sE.delete(d));let g=i_(i,d),T=Ii.workers.filter(E=>E.name==="http");if(_?(m=_.worker,_.nodes=S):g&&(t=t%T.length,m=T[t++],l.set(d,{worker:m,nodes:S,url:i.url}),m?.on("exit",()=>{l.get(d)?.worker===m&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let E={type:"subscribe-to-node",database:d,nodes:S};m?m.postMessage(E):mu(E)},dee);else{nt.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],hr().primaryStore.get(Je())?.replicates),hr().primaryStore.get(Je())?.replicates||(n=!1);let E={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};m?m.postMessage(E):oE(E)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),pu=a(function(i){try{nt.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(hu.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){nt.warn("Disconnected node not found in node map",i.name,o);return}let u=uo.get(i.url),f=u?.get(i.database);if(!f){nt.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],m=hu.get(_);u=uo.get(m.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:T}=S,E=!1;for(let A of f.nodes){if(T.some(w=>w.name===A.name)){nt.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}T.push(A),E=!0}if(!E){nt.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,nt.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):mu({database:i.database,nodes:T});return}nt.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){nt.error("Error failing over node",o)}},"disconnectedFromNode"),Pc=a(function(i){let o=uo.get(i.url),c=o?.get(i.database);if(!c){nt.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):mu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Ii.onMessageByType)("disconnected-from-node",pu),(0,Ii.onMessageByType)("connected-to-node",Pc),(0,Ii.onMessageByType)("request-cluster-status",lB)}function lB(e,t){let r=[];for(let[n,s]of hu)try{let i=uo.get(s.url);nt.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,Hy.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){nt.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function fo(e,t){let r=hr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new cB.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){nt.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(nt.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!oB.default.get(aB.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Hy.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}nt.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ii,iE,nt,Hy,oB,aB,cB,dee,uo,pu,Pc,hu,sE,a_=Oe(()=>{Pe();Ii=L(tt());fs();iE=require("worker_threads");Cc();nt=L(j()),Hy=require("lodash"),oB=L(ne()),aB=L(v()),cB=require("crypto"),dee=200,uo=new Map,hu=new Map,sE=new Map;a(ky,"startOnMainThread");a(lB,"requestClusterStatus");iE.parentPort&&(pu=a(e=>{iE.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Pc=a(e=>{iE.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ii.onMessageByType)("subscribe-to-node",e=>{mu(e)}),(0,Ii.onMessageByType)("unsubscribe-from-node",e=>{oE(e)}));a(fo,"ensureNode")});var aE=P((ANe,dB)=>{"use strict";var fee=v().OPERATIONS_ENUM,Fy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=fee.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};dB.exports=Fy});var _B=P((yNe,fB)=>{"use strict";var _ee={OPERATION:"operation",REFRESH:"refresh"},qy=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Gy=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};fB.exports={JWTTokens:qy,TOKEN_TYPE_ENUM:_ee,JWTRSAKeys:Gy}});var Eu=P((ONe,pB)=>{"use strict";var l_=require("jsonwebtoken"),$y=require("fs-extra"),Vy=re(),_s=v(),{handleHDBError:gn,hdb_errors:hee}=fe(),{HTTP_STATUS_CODES:Sn,AUTHENTICATION_ERROR_MSGS:Tn}=hee,c_=j(),cE=(bp(),se(yp)),Wy=Gn(),mee=fn().update,pee=aE(),Eee=oo(),{UserEventMsg:gee}=Ks(),la=ne();la.initSync();var Ky=require("path"),{JWTTokens:See,JWTRSAKeys:Tee,TOKEN_TYPE_ENUM:lE}=_B(),Aee=la.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?la.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Ree=la.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?la.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",uE="RS256",Yy;pB.exports={createTokens:yee,validateOperationToken:Oee,refreshOperationToken:bee,validateRefreshToken:mB,getJWTRSAKeys:u_};async function yee(e){if(Vy.isEmpty(e)||typeof e!="object")throw gn(new Error,Tn.INVALID_AUTH_OBJECT,Sn.BAD_REQUEST,void 0,void 0,!0);if(Vy.isEmpty(e.username))throw gn(new Error,Tn.USERNAME_REQUIRED,Sn.BAD_REQUEST,void 0,void 0,!0);if(Vy.isEmpty(e.password))throw gn(new Error,Tn.PASSWORD_REQUIRED,Sn.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Wy.findAndValidateUser(e.username,e.password),!t)throw gn(new Error,Tn.INVALID_CREDENTIALS,Sn.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw c_.error(h),gn(new Error,Tn.INVALID_CREDENTIALS,Sn.UNAUTHORIZED,void 0,void 0,!0)}let r=await u_(),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 hB(i,r.private_key,r.passphrase),c=await l_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Ree,algorithm:uE,subject:lE.REFRESH}),l=cE.hash(c,cE.HASH_FUNCTION.SHA256),u=new pee(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),f,d;try{f=await mee(u)}catch(h){c_.error(h),d=h}if(d!==void 0||f.skipped_hashes.length>0)throw gn(new Error,Tn.REFRESH_TOKEN_SAVE_FAILED,Sn.INTERNAL_SERVER_ERROR);return Eee.signalUserChange(new gee(process.pid)),new See(o,c)}a(yee,"createTokens");async function hB(e,t,r){return await l_.sign(e,{key:t,passphrase:r},{expiresIn:Aee,algorithm:uE,subject:lE.OPERATION})}a(hB,"signOperationToken");async function u_(){if(Yy===void 0)try{let e=Ky.join(la.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ky.join(la.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ky.join(la.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await $y.readFile(e)).toString(),s=(await $y.readFile(t)).toString(),i=(await $y.readFile(r)).toString();Yy=new Tee(i,s,n)}catch(e){throw c_.error(e),gn(new Error,Tn.NO_ENCRYPTION_KEYS,Sn.INTERNAL_SERVER_ERROR)}return Yy}a(u_,"getJWTRSAKeys");async function bee(e){if(!e)throw gn(new Error,Tn.INVALID_BODY,Sn.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw gn(new Error,Tn.REFRESH_TOKEN_REQUIRED,Sn.BAD_REQUEST,void 0,void 0,!0);await mB(e.refresh_token);let t=await u_(),r=await l_.decode(e.refresh_token);return{operation_token:await hB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(bee,"refreshOperationToken");async function Oee(e){try{let t=await u_(),r=await l_.verify(e,t.public_key,{algorithms:uE,subject:lE.OPERATION});return await Wy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw c_.warn(t),t.name&&t.name==="TokenExpiredError"?gn(new Error,Tn.TOKEN_EXPIRED,Sn.FORBIDDEN):gn(new Error,Tn.INVALID_TOKEN,Sn.UNAUTHORIZED)}}a(Oee,"validateOperationToken");async function mB(e){let t;try{let r=await u_(),n=await l_.verify(e,r.public_key,{algorithms:uE,subject:lE.REFRESH});t=await Wy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw c_.warn(r),r.name&&r.name==="TokenExpiredError"?gn(new Error,Tn.TOKEN_EXPIRED,Sn.FORBIDDEN):gn(new Error,Tn.INVALID_TOKEN,Sn.UNAUTHORIZED)}if(!cE.validate(t.refresh_token,e,cE.HASH_FUNCTION.SHA256))throw gn(new Error,Tn.INVALID_TOKEN,Sn.UNAUTHORIZED);return t}a(mB,"validateRefreshToken")});var Zs=P(kB=>{"use strict";var er=require("path"),An=require("fs-extra"),gu=require("node-forge"),RB=require("net"),{generateKeyPair:jy,X509Certificate:_o,createPrivateKey:yB}=require("crypto"),Nee=require("util");jy=Nee.promisify(jy);var gt=gu.pki,Js=require("joi"),{v4:bB}=require("uuid"),{validateBySchema:Zy}=_t(),at=j(),hs=ne(),ms=v(),{CONFIG_PARAMS:Su}=ms,Xs=gR(),{ClientError:da}=fe(),dE=require("node:tls"),{relative:OB,join:wee}=require("node:path"),{CERT_PREFERENCE_APP:wNe,CERTIFICATE_VALUES:EB}=Xs,Iee=Qa(),Qy=Ot(),{table:Cee,getDatabases:Pee,databases:zy}=(Pe(),se(rt)),{getJWTRSAKeys:gB}=Eu();Object.assign(kB,{generateKeys:rb,updateConfigCert:MB,createCsr:Hee,signCertificate:kee,setCertTable:Tu,loadCertificates:PB,reviewSelfSignedCert:sb,createTLSSelector:UB,listCertificates:xB,addCertificate:Kee,removeCertificate:Wee,createNatsCerts:Gee,generateCertsKeys:qee,getReplicationCert:f_,getReplicationCertAuth:xee,renewSelfSigned:$ee,hostnamesFromCert:HB,getKey:zee});var{urlToNodeName:NB,getThisNodeUrl:Dee,getThisNodeName:_E,clearThisNodeName:Lee}=(fs(),se(ha)),{readFileSync:Mee,watchFile:vee,statSync:wB}=require("node:fs"),INe=ne(),{getTicketKeys:Uee,onMessageFromWorkers:Bee}=tt(),ua=j(),{isMainThread:IB}=require("worker_threads"),{TLSSocket:CB,createSecureContext:CNe}=require("node:tls"),eb=3650,d_=["127.0.0.1","localhost","::1"],tb=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Bee(async e=>{e.type===ms.ITC_EVENT_TYPES.RESTART&&(hs.initSync(!0),await sb())});var Dr;function _a(){return Dr||(Dr=Pee().system.hdb_certificate,Dr||(Dr=Cee({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Dr}a(_a,"getCertTable");async function f_(){let e=UB("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(_E());if(!r)return;let n=new _o(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(f_,"getReplicationCert");async function xee(){_a();let e=(await f_()).options.cert,r=new _o(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(xee,"getReplicationCertAuth");var SB,fa=new Map;function PB(){if(SB)return;SB=!0;let e=[{configKey:Su.TLS},{configKey:Su.OPERATIONSAPI_TLS}];_a();let t=er.dirname(Qy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Qy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&OB(wee(t,"keys"),o);c&&TB(o,l=>{fa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&IB){let f;TB(u,d=>{if(EB.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=vB(u),m=new _o(_),S;try{S=ib(m)}catch(A){at.error("error extracting common name from certificate",A);return}if(S==null){at.error("error extracting common name from certificate");return}if(m.checkIssued(new _o(EB.cert)))return;let g=Dr.primaryStore.get(S),T=wB(u).mtimeMs,E=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&T<=E){T<E&&at.info(`Certificate ${S} at ${u} is older (${new Date(T)}) than the certificate in the database (${E>1?new Date(E):"only self signed certificate available"})`);return}r=Dr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:T,details:{issuer:m.issuer.replace(/\n/g," "),subject:m.subject.replace(/\n/g," "),subject_alt_name:m.subjectAltName,serial_number:m.serialNumber,valid_from:m.validFrom,valid_to:m.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(PB,"loadCertificates");function TB(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&IB&&at.warn(`Reloading ${r}:`,e),n=c,t(vB(e)))}catch(c){at.error(`Error loading ${r}:`,e,c)}},"loadFile");An.existsSync(e)?s(wB(e)):at.error(`${r} file not found:`,e),vee(e,{persistent:!1},s)}a(TB,"loadAndWatch");function Jy(){let e=Dee();if(e==null){let t=d_[0];return at.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return NB(e)}a(Jy,"getHost");function fE(){let e=_E();if(e==null){let t=d_[0];return at.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(fE,"getCommonName");async function Hee(){let e=await f_(),t=gt.certificateFromPem(e.options.cert),r=gt.privateKeyFromPem(e.options.key);at.info("Creating CSR with cert named:",e.name);let n=gt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:fE()},...tb];at.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:DB()}];return at.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),gu.pki.certificationRequestToPem(n)}a(Hee,"createCsr");function DB(){let e=d_.includes(fE())?d_:[...d_,fE()];return e.includes(Jy())||e.push(Jy()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>RB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(DB,"certExtensions");async function kee(e){let t={},r=er.join(hs.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;_a();for await(let f of Dr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(fa.has(f.private_key_name)){n=fa.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await An.exists(er.join(r,f.private_key_name))){n=An.readFile(er.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await Xy();s=f.ca,n=f.private_key}n=gt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=gt.certificateFromPem(s.certificate);at.info("Signing CSR with cert named",s.name);let o=gt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return at.error(f),new Error("Error verifying CSR: "+f.message)}let c=gu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+eb),at.info("sign cert setting validity:",c.validity),at.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),at.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;at.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,gu.md.sha256.create()),t.certificate=gt.certificateToPem(c)}else at.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(kee,"signCertificate");async function Fee(e,t){await Tu({name:_E(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Tu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:gt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Fee,"createCertificateTable");async function Tu(e){let t=new _o(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},_a(),await Dr.patch(e)}a(Tu,"setCertTable");async function rb(){let e=await jy("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:gt.publicKeyFromPem(e.publicKey),private_key:gt.privateKeyFromPem(e.privateKey)}}a(rb,"generateKeys");async function nb(e,t,r){let n=gt.createCertificate();if(!t){let o=await f_();t=gt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+eb);let i=[{name:"commonName",value:fE()},...tb];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(DB()),n.sign(e,gu.md.sha256.create()),gt.certificateToPem(n)}a(nb,"generateCertificates");async function Xy(){let e=await xB(),t;for(let r of e){if(!r.is_authority)continue;let n=await BB(r.private_key_name);if(r.private_key_name&&n&&new _o(r.certificate).checkPrivateKey(yB(n))){at.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;at.trace("No CA found with matching private key")}a(Xy,"getCertAuthority");async function LB(e,t,r=!0){let n=gt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+eb);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${hs.get(Su.REPLICATION_HOSTNAME)??NB(hs.get(Su.REPLICATION_URL))??bB().split("-")[0]}`},...tb];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,gu.md.sha256.create());let o=er.join(hs.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),c=er.join(o,Xs.PRIVATEKEY_PEM_NAME);return r&&await An.writeFile(c,gt.privateKeyToPem(e)),n}a(LB,"generateCertAuthority");async function qee(){let{private_key:e,public_key:t}=await rb(),r=await LB(e,t),n=await nb(e,t,r);await Fee(n,r),MB()}a(qee,"generateCertsKeys");async function Gee(){let e=await nb(gt.privateKeyFromPem(Xs.CERTIFICATE_VALUES.key),void 0,gt.certificateFromPem(Xs.CERTIFICATE_VALUES.cert)),t=er.join(hs.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),r=er.join(t,Xs.NATS_CERTIFICATE_PEM_NAME);await An.exists(r)||await An.writeFile(r,e);let n=er.join(t,Xs.NATS_CA_PEM_NAME);await An.exists(n)||await An.writeFile(n,Xs.CERTIFICATE_VALUES.cert)}a(Gee,"createNatsCerts");async function $ee(){_a();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await sb()}a($ee,"renewSelfSigned");async function sb(){Lee(),await PB(),_a();let e=await Xy();if(!e){at.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=hs.get(Su.TLS_PRIVATEKEY),n=er.join(hs.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),s,i=OB(n,r);try{s=gt.privateKeyFromPem(await An.readFile(r))}catch(c){at.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await rb(),await An.exists(er.join(n,Xs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${bB().split("-")[0]}.pem`),await An.writeFile(er.join(n,i),gt.privateKeyToPem(s))}let o=await LB(s,gt.setRsaPublicKey(s.n,s.e),!1);await Tu({name:o.subject.getField("CN").value,uses:["https"],certificate:gt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await f_()){let r=_E();at.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Xy();let n=gt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await nb(gt.privateKeyFromPem(e.private_key),s,n);await Tu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(sb,"reviewSelfSignedCert");function MB(){let e=Iee(Object.keys(ms.CONFIG_PARAM_MAP),!0),t=er.join(hs.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME),r=er.join(t,Xs.PRIVATEKEY_PEM_NAME),n=er.join(t,Xs.NATS_CERTIFICATE_PEM_NAME),s=er.join(t,Xs.NATS_CA_PEM_NAME),i=ms.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),Qy.updateConfigValue(void 0,void 0,o,!1,!0)}a(MB,"updateConfigCert");function vB(e){return e.startsWith("-----BEGIN")?e:Mee(e,"utf8")}a(vB,"readPEM");var AB=dE.createSecureContext;dE.createSecureContext=function(e){if(!e.cert||!e.key)return AB(e);let t={...e};delete t.key,delete t.cert;let r=AB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Vee=CB.prototype._init;CB.prototype._init=function(e,t){Vee.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Dc=new Map;function UB(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Dc.clear();let f=0;for await(let d of zy.system.hdb_certificate.search([])){let h=d.certificate,_=new _o(h);d.is_authority&&(_.asString=h,Dc.set(_.subject,h))}for await(let d of zy.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let m=await BB(d.private_key_name),S=d.certificate,g=new _o(S);if(Dc.has(g.issuer)&&(S+=`
11
- `+Dc.get(g.issuer)),!m||!S)throw new Error("Missing private key or certificate for secure server");let T={ciphers:d.ciphers,ticketKeys:Uee(),availableCAs:Dc,ca:t&&Array.from(Dc.values()),cert:S,key:m,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(T.sessionIdContext=o.sessionIdContext);let E=dE.createSecureContext(T);E.name=d.name,E.options=T,E.quality=_,E.certificateAuthorities=Array.from(Dc),E.certStart=S.toString().slice(0,100);let A=d.hostnames??HB(g);Array.isArray(A)||(A=[A]);let w;for(let M of A)if(M){M[0]==="*"&&(s=!0,M=M.slice(1)),M===Jy()&&(_+=2),RB.isIP(M)&&(w=!0);let H=r.get(M)?.quality??0;_>H&&r.set(M,E)}else ua.error("No hostname found for certificate at",dE.certificate);ua.trace("Adding TLS",E.name,"for",o.ports||"client","cert named",d.name,"hostnames",A,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=E,f=_,o&&(o.defaultContext=E))}catch(h){ua.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),zy.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ua.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return ua.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?ua.debug("No certificate found to match",o,"using the default certificate"):ua.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):ua.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(UB,"createTLSSelector");async function BB(e){let t=fa.get(e);return!t&&e?await An.readFile(er.join(hs.get(Su.ROOTPATH),ms.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(BB,"getPrivateKeyByName");async function xB(){_a();let e=[];for await(let t of Dr.search([]))e.push(t);return e}a(xB,"listCertificates");async function Kee(e){let t=Zy(e,Js.object({name:Js.string().required(),certificate:Js.string().required(),is_authority:Js.boolean().required(),private_key:Js.string(),hosts:Js.array(),uses:Js.array()}));if(t)throw new da(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new _o(n),c=!1,l=!1,u;for(let[_,m]of fa)!s&&!c&&o.checkPrivateKey(yB(m))&&(c=!0,u=_),s&&s===m&&(l=!0,u=_);if(!i&&!s&&!c)throw new da("A suitable private key was not found for this certificate");let f;if(!r){try{f=ib(o)}catch(_){at.error(_)}if(f==null)throw new da("Error extracting certificate common name, please provide a name parameter")}let d=Yee(r??f);s&&!c&&!l&&(await An.writeFile(er.join(hs.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME,d+".pem"),s),fa.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),await Tu(h),"Successfully added certificate: "+d}a(Kee,"addCertificate");function Yee(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Yee,"sanitizeName");async function Wee(e){let t=Zy(e,Js.object({name:Js.string().required()}));if(t)throw new da(t.message);let{name:r}=e;_a();let n=await Dr.get(r);if(!n)throw new da(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Dr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(at.info("Removing private key named",s),await An.remove(er.join(hs.getHdbBasePath(),ms.LICENSE_KEY_DIR_NAME,s)))}return await Dr.delete(r),"Successfully removed "+r}a(Wee,"removeCertificate");function ib(e){return e.subject.match(/CN=(.*)/)?.[1]}a(ib,"extractCommonName");function HB(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[ib(e)]}a(HB,"hostnamesFromCert");async function zee(e){if(e.bypass_auth!==!0)throw new da("Unauthorized","401");let t=Zy(e,Js.object({name:Js.string().required()}));if(t)throw new da(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await gB()).private_key;if(r===".jwtPublic")return(await gB()).public_key;if(fa.get(r))return fa.get(e.name);throw new da("Key not found")}a(zee,"getKey")});var S_={};Fe(S_,{addAnalyticsListener:()=>g_,calculateCPUUtilization:()=>sx,diffResourceUsage:()=>ix,recordAction:()=>mr,recordActionBinary:()=>Wn,setAnalyticsEnabled:()=>jee});function jee(e){ZB=e}function Qee(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function Jee(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},mE.set(e,o)}function mr(e,t,r,n,s){if(!ZB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=mE.get(i);o?Qee(e,o):Jee(i,e,t,r,n,s),hE||Xee()}function Wn(e,t,r,n,s){mr(!!e,t,r,n,s)}function g_(e){rx.push(e)}function Xee(){hE=performance.now(),setTimeout(async()=>{let e=performance.now()-hE;hE=0;let t=[],r={time:Date.now(),period:e,threadId:Lc.threadId,metrics:t};for(let[s,i]of mE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of nx){let h=Math.floor(c*d),_=o[h-1];if(h>l){let m=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+m}:S.count+=m}else u.push(m>1?{value:_,count:m}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 ox()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Lc.threadId,byThread:!0,...n});for(let s of rx)s(t);mE=new Map,Lc.parentPort?Lc.parentPort.postMessage({type:tx,report:r}):lx({report:r})},ex).unref()}function pE(e,t,r){let n={id:(0,m_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function sx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function ix(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Zee(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};pE(e,"table-size",l),p_.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function FB(e,t){for(let[r,n]of Object.entries(t)){let[s]=Object.values(n),i=s.getAuditSize(),o=XB.default.statSync(s.primaryStore.env.path).size,c=Zee(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};pE(e,"database-size",u),p_.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}}function qB(e,t){for(let[r,n]of Object.entries(t)){let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};pE(e,"storage-volume",o),p_.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}}async function ete(e,t=6e4){let r=cb(),n=ax(),s=new Promise(E=>{let A=performance.now();setImmediate(()=>{let w=performance.now();w-A>5e3&&p_.warn?.("Unusually high event queue latency on the main thread of "+Math.round(w-A)+"ms"),A=performance.now()}),n.primaryStore.prefetch([1],()=>{let w=performance.now();w-A>5e3&&p_.warn?.("Unusually high task queue latency on the main thread of "+Math.round(w-A)+"ms"),E(w-A)})}),i;for(let E of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(E.value?.time){i=E.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:E,value:A}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!A)continue;if(o){if(E>o+t)break}else o=E;f=E;let{metrics:w,threadId:M}=A;for(let H of w||[]){let{path:k,method:V,type:q,metric:ae,count:G,total:le,distribution:z,threads:Ae,...ge}=H;G||(G=1);let Ce=ae+(k?"-"+k:"");V!==void 0&&(Ce+="-"+V),q!==void 0&&(Ce+="-"+q);let he=c.get(Ce);if(he){if(he.threads){let kt=he.threads[M];if(kt)he=kt;else{he.threads[M]={...ge};continue}}he.count||(he.count=1);let Ht=he.count;for(let kt in ge){let zt=ge[kt];typeof zt=="number"&&(he[kt]=(he[kt]*Ht+zt*G)/(Ht+G))}he.count+=G,le>=0&&(he.total+=le,he.ratio=he.total/he.count)}else he={period:t,...H},delete he.distribution,c.set(Ce,he),he.byThread&&(he.threads=[],he.threads[M]={...ge},u.push(he));if(z){z=z.map(kt=>typeof kt=="number"?{value:kt,count:1}:kt);let Ht=l.get(Ce);Ht?Ht.push(...z):l.set(Ce,z)}}await ox()}for(let E of u){let{path:A,method:w,type:M,metric:H,count:k,total:V,distribution:q,threads:ae,...G}=E;ae=ae.filter(le=>le);for(let le in G){if(typeof E[le]!="number")continue;let z=0;for(let Ae of ae){let ge=Ae[le];typeof ge=="number"&&(z+=ge)}E[le]=z}E.count=ae.length,delete E.threads,delete E.byThread}for(let[E,A]of l){let w=c.get(E);A.sort((kt,zt)=>kt.value>zt.value?1:-1);let M=w.count-1,H=[],k=0,V=0,q;for(let kt of nx){let zt=M*kt;for(;k<zt;)q=A[V++],k+=q.count,V===1&&k--;let lr=A[V>1?V-2:0];q||(q=A[0]),H.push(q.value-(q.value-lr.value)*(k-zt)/q.count)}let[ae,G,le,z,Ae,ge,Ce,he,Ht]=H;Object.assign(w,{p1:ae,p10:G,p25:le,median:z,p75:Ae,p90:ge,p95:Ce,p99:he,p999:Ht})}let d;for(let[E,A]of c)A.id=(0,m_.getNextMonotonicTime)(),A.time=f,n.primaryStore.put(A.id,A,{append:!0}).then(w=>{w||n.primaryStore.put(A.id,A)}),d=!0;let h=Date.now(),{idle:_,active:m}=performance.eventLoopUtilization();if(d||m*10>_){let E=(0,m_.getNextMonotonicTime)(),A={id:E,metric:"main-thread-utilization",idle:_-GB,active:m-$B,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(E,A,{append:!0}).then(w=>{w||n.primaryStore.put(E,A)})}GB=_,$B=m;let S=process.resourceUsage(),g=ix(__,S);g.time=h,g.period=__.time?h-__.time:t,g.cpuUtilization=sx(__,g.period),pE(n,"resource-usage",g),__=g;let T=Qe();FB(n,T),FB(n,{system:T.system}),qB(n,T),qB(n,{system:T.system})}async function VB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function cb(){return KB||(KB=it({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ax(){return YB||(YB=it({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function nte(){cx=!0;let e=(0,E_.get)(ab.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await ete(ex,e),await VB(cb(),tte),await VB(ax(),rte)},Math.min(e/2,2147483647)).unref()}function lx(e,t){let r=e.report;r.threadId=t?.threadId||Lc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(WB+=n.mean*n.count);r.totalBytesProcessed=WB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(zB.get(t))}),zB.set(t,t.performance.eventLoopUtilization())),r.id=(0,m_.getNextMonotonicTime)(),cb().primaryStore.put(r.id,r),cx||nte(),ste&&(ux=ote(r))}async function ote(e){if(await ux,!ma){let r=(0,h_.dirname)((0,QB.getLogFilePath)());try{ma=await(0,ob.open)((0,h_.join)(r,"analytics.log"),"r+")}catch{ma=await(0,ob.open)((0,h_.join)(r,"analytics.log"),"w+")}}let t=(await ma.stat()).size;if(t>ite){let r=Buffer.alloc(t);await ma.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ma.write(r,{position:0}),await ma.truncate(r.length),t=r.length}await ma.write(JSON.stringify(e)+`
12
- `,t)}var Lc,jB,QB,JB,h_,ob,m_,E_,ab,XB,p_,mE,ZB,hE,ex,tx,rx,nx,GB,$B,__,ox,tte,rte,KB,YB,cx,WB,zB,ste,ux,ma,ite,Ci=Oe(()=>{Lc=require("worker_threads"),jB=L(tt());Pe();QB=L(j()),JB=L(Qi()),h_=require("path"),ob=require("fs/promises"),m_=L(on()),E_=L(ne()),ab=L(v());Gr();XB=L(require("node:fs")),p_=(0,JB.loggerWithTag)("analytics");(0,E_.initSync)();mE=new Map,ZB=(0,E_.get)(ab.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(jee,"setAnalyticsEnabled");a(Qee,"recordExistingAction");a(Jee,"recordNewAction");a(mr,"recordAction");je.recordAnalytics=mr;a(Wn,"recordActionBinary");hE=0,ex=1e3,tx="analytics-report",rx=[];a(g_,"addAnalyticsListener");nx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Xee,"sendAnalytics");a(pE,"storeMetric");a(sx,"calculateCPUUtilization");a(ix,"diffResourceUsage");a(Zee,"storeTableSizeMetrics");a(FB,"storeDBSizeMetrics");a(qB,"storeVolumeMetrics");a(ete,"aggregation");GB=0,$B=0,__={},ox=a(()=>new Promise(setImmediate),"rest");a(VB,"cleanup");tte=36e5,rte=31536e6;a(cb,"getRawAnalyticsTable");a(ax,"getAnalyticsTable");(0,jB.setChildListenerByType)(tx,lx);a(nte,"startScheduledTasks");WB=0,zB=new Map,ste=!1;a(lx,"recordAnalytics");ite=1e6;a(ote,"logAnalytics")});var Px={};Fe(Px,{CONFIRMATION_STATUS_POSITION:()=>Cx,NodeReplicationConnection:()=>T_,OPERATION_REQUEST:()=>_b,RECEIVED_TIME_POSITION:()=>mb,RECEIVED_VERSION_POSITION:()=>hb,SENDING_TIME_POSITION:()=>AE,createWebSocket:()=>yE,database_subscriptions:()=>Ea,replicateOverWS:()=>A_,table_update_listeners:()=>gb});async function yE(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Je(),i;if(e.includes("wss://")){if(!ub){let l=(0,Nx.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),ub=u.secureContexts}if(i=ub.get(s),i&&oe.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,Ix.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=wx.createSecureContext({...i.options,ca:Array.from(Mc)})),new bx.WebSocket(e,"harperdb-replication-v1",c)}function A_(e,t,r){let n=t.port||t.securePort,s=Eb.pid%1e3+"-"+Ox.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||Ea,d,h,_=!1,m=t.subscription;m?.then&&m.then(R=>m=R);let S=t.tables||u&&Qe()[u];if(!r){oe.error?.("No authorization provided"),mt(1008,"Unauthorized");return}let g=new Map,T=[],E=r.name;E&&t.connection&&(t.connection.nodeName=E);let A,w,M,H,k,V,q,ae=1e3,G,le=0,z=0,Ae=0,ge=new Map,Ce=[],he=0,Ht;if(t.url){let R=a(()=>{k&&z===e._socket?.bytesRead&&Ae===e._socket?.bytesWritten?e.terminate():(k=performance.now(),e.ping(),z=e._socket?.bytesRead,Ae=e._socket?.bytesWritten)},"send_ping");M=setInterval(R,Tx).unref(),R()}else kt();e._socket?.setMaxListeners(200);function kt(){clearTimeout(H),z=e._socket?.bytesRead,Ae=e._socket?.bytesWritten,H=setTimeout(()=>{z===e._socket?.bytesRead&&Ae===e._socket?.bytesWritten&&(oe.warn?.(`Timeout waiting for ping from ${E}, terminating connection and reconnecting`),e.terminate())},Tx*2).unref()}a(kt,"resetPingTimer");function zt(){return h||(h=nE(d,u,E)),h}a(zt,"getSharedStatus"),u&&qd(u);let lr,Ud,Ka=[],DT=[],LT,Ct=[],Bd=[],xd=[],MT=150,dm=25,Hd=0,De=0,kd=!1,Yi,wr,Dn,Ya;e.on("message",R=>{le=performance.now();try{let y=R.dataView=new vc(R.buffer,R.byteOffset,R.byteLength);if(R[0]>127){let D=(0,We.decode)(R),[B,N,U]=D;switch(B){case fx:{if(N){if(E){if(E!==N){oe.error?.(s,`Node name mismatch, expecting to connect to ${E}, but peer reported name as ${N}, disconnecting`),e.send((0,We.encode)([Au])),mt(1008,"Node name mismatch");return}}else if(E=N,t.connection?.tentativeNode){let te=t.connection.tentativeNode;te.name=E,t.connection.tentativeNode=null,fo(E,te)}if(t.connection&&(t.connection.nodeName=E),oe.debug?.(s,"received node name:",E,"db:",u),!u)try{qd(u=D[2]),u==="system"&&(lr=aa(t,(te,ie)=>{Wi(ie)&&$o(ie)}),e.on("close",()=>{lr?.remove()}))}catch(te){oe.warn?.(s,"Error setting database",te),e.send((0,We.encode)([Au])),mt(1008,te.message);return}Dl()}break}case gx:{oe.debug?.(s,"Received table definitions for",N.map(te=>te.table));for(let te of N){let ie=D[2];te.database=ie;let ee;Wi(ie)&&(ie==="system"?Ge[ie]?.[te.table]||(ee=db(te,Ge[ie]?.[te.table])):ee=db(te,Ge[ie]?.[te.table]),d||(d=ee?.auditStore),S||(S=Qe()?.[ie]))}break}case Au:mt();break;case _b:try{let te=r?.replicates||r?.subscribers||r?.name;server.operation(N,{user:r},!te).then(ie=>{Array.isArray(ie)&&(ie={results:ie}),ie.requestId=N.requestId,e.send((0,We.encode)([gE,ie]))},ie=>{e.send((0,We.encode)([gE,{requestId:N.requestId,error:ie instanceof Error?ie.toString():ie}]))})}catch(te){e.send((0,We.encode)([gE,{requestId:N.requestId,error:te instanceof Error?te.toString():te}]))}break;case gE:let{resolve:F,reject:K}=g.get(N.requestId);N.error?K(new Error(N.error)):F(N),g.delete(N.requestId);break;case lb:let Z=D[3];S||(u?oe.error?.(s,"No tables found for",u):oe.error?.(s,"Database name never received"));let x=S[Z];x=db({table:Z,database:u,attributes:N.attributes,schemaDefined:N.schemaDefined},x),Ka[U]={name:Z,decoder:new We.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:N.typedStructs,structures:N.structures}),getEntry(te){return x.primaryStore.getEntry(te)},rootStore:x.primaryStore.rootStore};break;case _x:Ya=d?eB(E,N,d):new Map,LT=D[2],oe.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${LT}`);break;case hx:let Me=U;xd[Me]=N;break;case Ex:zt()[Cx]=N,oe.trace?.(s,"received and broadcasting committed update",N),zt().buffer.notify();break;case px:A=N,m.send({type:"end_txn",localTime:A,remoteNodeIds:T});break;case SE:{let te=D[1],{fileId:ie,size:ee,finished:W,error:de}=te,_e=ge.get(ie);oe.debug?.("Received blob",ie,"has stream",!!_e,"connectedToBlob",!!_e?.connectedToBlob,"length",D[2].length,"finished",W),_e||(_e=new fb.PassThrough,_e.expectedSize=ee,ge.set(ie,_e)),_e.lastChunk=Date.now(),W?(de?(_e.on("error",()=>{}),_e.destroy(new Error("Blob error: "+de))):_e.end(D[2]),_e.connectedToBlob&&ge.delete(ie)):_e.write(D[2]);break}case mx:{let te=N,ie;try{let ee=D[3],W=DT[U]||(DT[U]=S[D[4]]);if(!W)return oe.warn?.("Unknown table id trying to handle record request",U);let de=W.primaryStore.getBinaryFast(Symbol.for("structures")),_e=de.length;if(_e!==De){De=_e;let Le=(0,We.decode)(de);e.send((0,We.encode)([lb,{typedStructs:Le.typed,structures:Le.named},U,W.tableName]))}let Re=W.primaryStore.getBinaryFast(ee);if(Re){let Le=W.primaryStore.decoder.decode(Re,{valueAsBuffer:!0});ie=(0,We.encode)([EE,te,{value:Le.value,expiresAt:Le.expiresAt,version:Le.version,residencyId:Le.residencyId,nodeId:Le.nodeId,user:Le.user}])}else ie=(0,We.encode)([EE,te])}catch(ee){ie=(0,We.encode)([EE,te,{error:ee.message}])}e.send(ie);break}case EE:{let{resolve:te,reject:ie,tableId:ee,key:W}=g.get(D[1]),de=D[2];if(de?.error)ie(new Error(de.error));else if(de){let _e=Ka[ee].decoder.decode(de.value);de.value=_e,de.key=W,te(de)}else te();g.delete(D[1]);break}case dx:{Dn=N;let te,ie,ee=!1;if(m){if(u!==m.databaseName&&!m.then){oe.error?.("Subscription request for wrong database",u,m.databaseName);return}}else m=f.get(u);if(oe.debug?.(s,"received subscription request for",u,"at",Dn),!m){let Se;m=new Promise(Tt=>{oe.debug?.("Waiting for subscription to database "+u),Se=Tt}),m.ready=Se,Ea.set(u,m)}if(r.name)ie=hr().subscribe(r.name),ie.then(async Se=>{te=Se;for await(let Tt of te){let jt=Tt.value;if(!(jt?.replicates===!0||jt?.replicates?.receives||jt?.subscriptions?.some(ur=>(ur.database||ur.schema)===u&&ur.publish!==!1))){ee=!0,e.send((0,We.encode)([Au])),mt(1008,`Unauthorized database subscription to ${u}`);return}}},Se=>{oe.error?.(s,"Error subscribing to HDB nodes",Se)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,We.encode)([Au])),mt(1008,`Unauthorized database subscription to ${u}`);return}if(wr&&(oe.debug?.(s,"stopping previous subscription",u),wr.emit("close")),Dn.length===0)return;let W=Dn[0],de=a(Se=>{if(Se&&(W.replicateByDefault?!W.tables.includes(Se.tableName):W.tables.includes(Se.tableName)))return{table:Se}},"tableToTableEntry"),_e={txnTime:0},Re,Le,Ze=1/0,kr,Ir=a((Se,Tt)=>{if(Se.type==="end_txn"){_e.txnTime&&(o[i]!==66&&oe.error?.("Invalid encoding of message"),Vo(9),Vo(RE),p(kr=Tt),vs()),i=c,_e.txnTime=0;return}let jt=Se.nodeId,ur=Se.tableId,Ft=Le[ur];if(!Ft&&(Ft=Le[ur]=de(m.tableById[ur]),!Ft))return oe.debug?.("Not subscribed to table",ur);let Fr=Ft.table,Wa=Fr.primaryStore,Pt=Wa.encoder;(Se.extendedType&rp||!Pt.typedStructs)&&(Pt._mergeStructures(Pt.getStructures()),Pt.typedStructs&&(Pt.lastTypedStructuresLength=Pt.typedStructs.length));let hm=Re[jt];if(!(hm&&hm.startTime<Tt&&(!hm.endTime||hm.endTime>Tt)))return TE&&oe.trace?.(s,"skipping replication update",Se.recordId,"to:",E,"from:",jt,"subscribed:",Re),wC();TE&&oe.trace?.(s,"sending replication update",Se.recordId,"to:",E,"from:",jt,"subscribed:",Re);let vT=Se.version;_e.txnTime!==vT&&(_e.txnTime&&(TE&&oe.trace?.(s,"new txn time, sending queued txn",_e.txnTime),o[i]!==66&&oe.error?.("Invalid encoding of message"),vs()),_e.txnTime=vT,i=c,p(vT));let za=Se.residencyId,UT=Fd(za,Fr),mm;if(UT&&!UT.includes(E)){let ja=Fd(Se.previousResidencyId,Fr);if(ja&&!ja.includes(E)&&(Se.type==="put"||Se.type==="patch")||Fr.getResidencyById)return wC();let $d=Se.recordId;oe.trace?.(s,"sending invalidation",$d,E,"from",jt);let Ko=0;za&&(Ko|=cc),Se.previousResidencyId&&(Ko|=lc);let Us,nn=null;for(let pm in Fr.indices){if(!nn){if(Us=Se.getValue(Wa,!0),!Us)break;nn={}}nn[pm]=Us[pm]}mm=Kl(Se.version,ur,$d,null,jt,Se.user,Se.type==="put"||Se.type==="patch"?"invalidate":Se.type,Pt.encode(nn),Ko,za,Se.previousResidencyId,Se.expiresAt)}function wC(){oe.trace?.(s,"skipping audit record",Se.recordId),V||(V=setTimeout(()=>{V=null,(kr||0)+Sx/2<Ze&&(TE&&oe.trace?.(s,"sending skipped sequence update",Ze),e.send((0,We.encode)([px,Ze])))},Sx).unref())}a(wC,"skipAuditRecord");let BT=Pt.typedStructs,xT=Pt.structures;if((BT?.length!=Ft.typed_length||xT?.length!=Ft.structure_length)&&(Ft.typed_length=BT?.length,Ft.structure_length=xT.length,oe.debug?.(s,"send table struct",Ft.typed_length,Ft.structure_length),Ft.sentName||(Ft.sentName=!0),e.send((0,We.encode)([lb,{typedStructs:BT,structures:xT,attributes:Fr.attributes,schemaDefined:Fr.schemaDefined},ur,Ft.table.tableName]))),za&&!Bd[za]&&(e.send((0,We.encode)([hx,UT,za])),Bd[za]=!0),mm)Vo(mm.length),Y(mm);else{let ja=Se.encoded;Se.extendedType&ks&&OA(()=>Se.getValue(Wa),async Ko=>{let Us=Wm(Ko);try{let nn;he++;for await(let pm of Ko.stream()){if(nn&&(oe.debug?.("Sending blob chunk",Us,"length",nn.length),e.send((0,We.encode)([SE,{fileId:Us,size:Ko.size},nn]))),nn=pm,ee)return;e._socket.writableNeedDrain&&(oe.debug?.("draining",Us),await new Promise(Vz=>e._socket.once("drain",Vz)),oe.debug?.("drained",Us))}oe.debug?.("Sending final blob chunk",Us,"length",nn.length),e.send((0,We.encode)([SE,{fileId:Us,size:Ko.size,finished:!0},nn]))}catch(nn){oe.debug?.("Error sending blob",nn),e.send((0,We.encode)([SE,{fileId:Us,finished:!0,error:nn.toString()},Buffer.alloc(0)]))}finally{he--,he<dm&&Ht?.()}});let $d=ja[0]===66?8:0;Vo(ja.length-$d),Y(ja,$d),oe.trace?.("wrote record",Se.recordId,"length:",ja.length)}},"sendAuditRecord"),vs=a(()=>{c-i>8?(e.send(o.subarray(i,c)),oe.debug?.(s,"Sent message, size:",c-i)):oe.debug?.(s,"skipping empty transaction")},"sendQueuedData");wr=new pb.EventEmitter,wr.once("close",()=>{ee=!0,te?.end()});for(let{startTime:Se}of Dn)Se<Ze&&(Ze=Se);(ie||Promise.resolve()).then(async()=>{m=await m,d=m.auditStore,Le=m.tableById.map(de),Re=[];for(let{name:Tt,startTime:jt,endTime:ur}of Dn){let Ft=rE(Tt,d);oe.debug?.("subscription to",Tt,"using local id",Ft,"starting",jt),Re[Ft]={startTime:jt,endTime:ur}}$o(u),lr||(lr=Uc(Tt=>{Tt.databaseName===u&&$o(u)}),Ud=R_(Tt=>{Tt===u&&(e.send((0,We.encode)([Au])),mt())}),e.on("close",()=>{lr?.remove(),Ud?.remove()})),e.send((0,We.encode)([_x,n_(m.auditStore),Dn.map(({name:Tt})=>Tt)]));let Se=!0;do{isFinite(Ze)||(oe.warn?.("Invalid sequence id "+Ze),mt(1008,"Invalid sequence id"+Ze));let Tt;if(Se&&!ee&&(Se=!1,!(Tb(d)<=Ze)&&Rx.default.get(yx.CONFIG_PARAMS.REPLICATION_COPYTABLESTOCATCHUP)!==!1&&server.nodes[0]?.name===E)){oe.info?.("Replicating all tables to",E);let ur=Ze,Ft=bE(d);for(let Fr in S){if(!de(Fr))continue;let Wa=S[Fr];for(let Pt of Wa.primaryStore.getRange({snapshot:!1})){if(ee)return;Pt.localTime>=Ze&&(oe.trace?.(s,"Copying record from",u,Fr,Pt.key,Pt.localTime),ur=Math.max(Pt.localTime,ur),Tt=!0,zt()[AE]=1,Ir({recordId:Pt.key,tableId:Wa.tableId,type:"put",getValue(){return Pt.value},encoded:Wa.primaryStore.getBinary(Pt.key),version:Pt.version,residencyId:Pt.residencyId,nodeId:Ft,extendedType:Pt.metadataFlags},Pt.localTime))}}Ze=ur}for(let{key:jt,value:ur}of d.getRange({start:Ze||1,exclusiveStart:!0,snapshot:!1})){if(ee)return;let Ft=Rt(ur);oe.debug?.("sending audit record",new Date(jt)),zt()[AE]=jt,Ze=jt,Ir(Ft,jt),e._socket.writableNeedDrain?await new Promise(Fr=>{oe.debug?.(`Waiting for remote node ${E} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Fr)}):he>dm?await new Promise(Fr=>{Ht=Fr}):await new Promise(setImmediate),wr.startTime=jt,Tt=!0}Tt&&Ir({type:"end_txn"},Ze),zt()[AE]=0,await Dx(d)}while(!ee)}).catch(Se=>{oe.error?.(s,"Error handling subscription to node",Se),mt(1008,"Error handling subscription to node")});break}}return}y.position=8;let O=!0,C,I;do{zt();let D=y.readInt();if(D===9&&y.getUint8(y.position)==RE){y.position++,A=I=y.readFloat64(),h[hb]=A,h[mb]=Date.now(),oe.trace?.("received remote sequence update",A,u);break}let B=y.position,N=Rt(R,B,B+D),U=Ka[N.tableId];U||oe.error?.(`No table found with an id of ${N.tableId}`);let F;N.residencyId&&(F=xd[N.residencyId],oe.trace?.(s,"received residency list",F,N.type,N.recordId));try{bA(()=>{C={table:U.name,id:N.recordId,type:N.type,nodeId:Ya.get(N.nodeId),residencyList:F,timestamp:N.version,value:N.getValue(U),user:N.user,beginTxn:O,expiresAt:N.expiresAt}},K=>{let Z=Wm(K),x=ge.get(Z);oe.debug?.("Received transaction with blob",Z,"has stream",!!x,"ended",!!x?.writableEnded),x?x.writableEnded&&ge.delete(Z):(x=new fb.PassThrough,ge.set(Z,x)),x.connectedToBlob=!0,x.lastChunk=Date.now();let Me=createBlob(x,{size:x.expectedSize}),te=Me.save({primaryStore:m.auditStore});return te&&(te.blobId=Z,Ce.push(te),te.finally(()=>{oe.debug?.(`Finished receiving blob stream ${Z}`),Ce.splice(Ce.indexOf(te),1)})),Me})}catch(K){throw K.message+="typed structures for current decoder"+JSON.stringify(U.decoder.typedStructs),K}O=!1,oe.trace?.(s,"received replication message",N.type,"id",C.id,"version",new Date(N.version),"nodeId",C.nodeId),h[hb]=N.version,h[mb]=Date.now(),m.send(C),y.position=B+D}while(y.position<R.byteLength);Hd++,mr(R.byteLength,"bytes-received",E+"."+u+"."+C.table,"replication","ingest"),Hd>MT&&!kd&&(kd=!0,e.pause(),oe.debug?.(`Commit backlog causing replication back-pressure, requesting that ${E} pause replication`)),m.send({type:"end_txn",localTime:A,remoteNodeIds:T,async onCommit(){if(C){let D=Date.now()-C.timestamp;mr(D,"replication-latency",E+"."+u+"."+C.table,C.type,"ingest")}Hd--,kd&&(kd=!1,e.resume(),oe.debug?.(`Replication resuming ${E}`)),Ce.length>0&&await Promise.all(Ce),oe.trace?.("All blobs finished"),!w&&I&&(oe.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,We.encode)([Ex,w])),oe.trace?.(s,"sent confirmation of a commit at",w),w=null},ate)),w=I,oe.debug?.("last sequence committed",new Date(I),u)}})}catch(y){oe.error?.(s,"Error handling incoming replication message",y)}}),e.on("ping",kt),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-k,Pc({name:E,database:u,url:t.url,latency:t.connection.latency})),k=null}),e.on("close",(R,y)=>{clearInterval(M),clearTimeout(H),clearInterval(q),wr&&wr.emit("close"),Yi&&Yi.end();for(let[O,{reject:C}]of g)C(new Error(`Connection closed ${y?.toString()} ${R}`));oe.debug?.(s,"closed",R,y?.toString())});function fm(){}a(fm,"recordRemoteNodeSequence");function mt(R,y){e.isFinished=!0,e.close(R,y)}a(mt,"close");function Dl(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Dl)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let R=new Map;try{for(let C of m?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of C.value.nodes||[])I.lastTxnTime>(R.get(I.id)??0)&&R.set(I.id,I.lastTxnTime)}catch(C){if(!C.message.includes("Can not re"))throw C}let y=t.connection?.nodeSubscriptions?.[0];T=[];let O=t.connection?.nodeSubscriptions.map((C,I)=>{let D=[],{replicateByDefault:B}=C;if(C.subscriptions){for(let K of C.subscriptions)if(K.subscribe&&(K.schema||K.database)===u){let Z=K.table;S?.[Z]?.replicate!==!1&&D.push(Z)}B=!1}else for(let K in S)(B?S[K].replicate===!1:S[K].replicate)&&D.push(K);let N=d&&rE(C.name,d),U=m?.dbisDB?.get([Symbol.for("seq"),N])??1,F=Math.max(U?.seqId??1,(typeof C.start_time=="string"?new Date(C.start_time).getTime():C.start_time)??1);if(oe.debug?.("Starting time recorded in db",C.name,N,u,U?.seqId,"start time:",F,new Date(F)),y!==C){F>5e3&&(F-=5e3);let K=d&&rE(y.name,d),Z=m?.dbisDB?.get([Symbol.for("seq"),K])??1;for(let x of Z?.nodes||[])x.name===C.name&&(F=x.seqId,oe.debug?.("Using sequence id from proxy node",y.name,F))}return T.push(N),R.get(N)>F&&(F=R.get(N),oe.debug?.("Updating start time from more recent txn recorded",y.name,F)),{name:C.name,replicateByDefault:B,tables:D,startTime:F,endTime:C.end_time}});if(O)if(oe.debug?.(s,"sending subscription request",O,m?.dbisDB?.path),clearTimeout(G),O.length>0)e.send((0,We.encode)([dx,O]));else{let C=a(()=>{let I=performance.now();G=setTimeout(()=>{le<=I?mt(1008,"No nodes to subscribe to"):C()},ae)},"schedule_close");C()}}a(Dl,"sendSubscriptionRequestUpdate");function Fd(R,y){if(!R)return;let O=Ct[R];return O||(O=y.getResidencyRecord(R),Ct[R]=O),O}a(Fd,"getResidence");function Wi(R){return!(pa&&pa!="*"&&!pa[R]&&!pa.includes?.(R)&&!pa.some?.(y=>y.name===R))}a(Wi,"checkDatabaseAccess");function qd(R){if(m=m||f.get(R),!Wi(R))throw new Error(`Access to database "${R}" is not permitted`);m||oe.warn?.(`No database named "${R}" was declared and registered`),d=m?.auditStore,S||(S=Qe()?.[R]);let y=Je();if(y===E)throw y?new Error("Should not connect to self",y):new Error("Node name not defined");return Ll(y,R),!0}a(qd,"setDatabase");function Ll(R,y){let O=Qe()?.[y],C=[];for(let I in O){let D=O[I];C.push({table:I,schemaDefined:D.schemaDefined,attributes:D.attributes.map(B=>({name:B.name,type:B.type,isPrimaryKey:B.isPrimaryKey}))})}oe.trace?.("Sending database info for node",R,"database name",y),e.send((0,We.encode)([fx,R,y,C]))}a(Ll,"sendNodeDBName");function $o(R){let y=Qe()?.[R],O=[];for(let C in y){if(Dn&&!Dn.some(D=>D.replicateByDefault?!D.tables.includes(C):D.tables.includes(C)))continue;let I=y[C];O.push({table:C,schemaDefined:I.schemaDefined,attributes:I.attributes.map(D=>({name:D.name,type:D.type,isPrimaryKey:D.isPrimaryKey}))})}e.send((0,We.encode)([gx,O,R]))}a($o,"sendDBSchema"),q=setInterval(()=>{for(let[R,y]of ge)y.lastChunk+3e4<Date.now()&&(oe.warn?.(`Timeout waiting for blob stream to finish ${R} from ${E}`),ge.delete(R),y.end())},3e4).unref();let Gd=1,_m=[];return{end(){Yi&&Yi.end(),wr&&wr.emit("close")},getRecord(R){let y=Gd++;return new Promise((O,C)=>{let I=[mx,y,R.table.tableId,R.id];_m[R.table.tableId]||(I.push(R.table.tableName),_m[R.table.tableId]=!0),e.send((0,We.encode)(I)),g.set(y,{tableId:R.table.tableId,key:R.id,resolve(D){let{table:B,entry:N}=R;O(D),D&&B._recordRelocate(N,D)},reject:C})})},sendOperation(R){let y=Gd++;return R.requestId=y,e.send((0,We.encode)([_b,R])),new Promise((O,C)=>{g.set(y,{resolve:O,reject:C})})}};function Vo(R){b(5),R<128?o[c++]=R:R<16384?(l.setUint16(c,R|32768),c+=2):R<1056964608?(l.setUint32(c,R|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,R),c+=5)}function Y(R,y=0,O=R.length){let C=O-y;b(C),R.copy(o,c,y,O),c+=C}function p(R){b(8),l.setFloat64(c,R),c+=8}function b(R){if(R+16>o.length-c){let y=Buffer.allocUnsafeSlow(c+R-i+65536>>10<<11);o.copy(y,0,i,c),c=c-i,i=0,o=y,l=new DataView(o.buffer,0,o.length)}}}function db(e,t){let r=e.database??"data";if(r!=="data"&&!Ge[r]){oe.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(oe.debug?.("(Re)creating",e),it({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var Rx,yx,We,bx,Ox,oe,pb,Nx,wx,Eb,Ix,fb,dx,fx,_x,Au,hx,lb,mx,EE,_b,gE,px,Ex,gx,SE,Cx,hb,mb,AE,gb,Ea,TE,Sx,ate,Tx,ub,Ax,T_,Sb=Oe(()=>{Pe();Zi();By();Ab();fs();Rx=L(ne()),yx=L(v());Yl();We=require("msgpackr"),bx=require("ws"),Ox=require("worker_threads"),oe=L(Qi());a_();pb=require("events"),Nx=L(Zs()),wx=L(require("node:tls"));Cc();Eb=L(require("node:process")),Ix=require("node:net");Ci();ls();fb=require("node:stream"),dx=129,fx=140,_x=141,Au=142,hx=130,lb=132,mx=133,EE=134,_b=136,gE=137,px=143,Ex=144,gx=145,SE=146,Cx=0,hb=1,mb=2,AE=3,gb=new Map,Ea=new Map,TE=!0,Sx=300,ate=2,Tx=3e4;a(yE,"createWebSocket");Ax=1e3,T_=class extends pb.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Qs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=Ax;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await yE(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;oe.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Eb.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),oe.info?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=Ax,Pc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=A_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(oe.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?oe.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):oe.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(pu({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();oe.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(A_,"replicateOverWS");a(db,"ensureTableIfChanged")});var ha={};Fe(ha,{clearThisNodeName:()=>mte,disableReplication:()=>dte,enabled_databases:()=>pa,forEachReplicatedDatabase:()=>aa,getThisNodeId:()=>bE,getThisNodeName:()=>Je,getThisNodeUrl:()=>ca,hostnameToUrl:()=>IE,lastTimeInAuditStore:()=>s_,monitorNodeCAs:()=>kx,replicateOperation:()=>Ete,replication_certificate_authorities:()=>Mc,sendOperationToNode:()=>b_,servers:()=>lte,setReplicator:()=>qx,start:()=>ute,startOnMainThread:()=>ky,subscribeToNode:()=>mu,unsubscribeFromNode:()=>oE,urlToNodeName:()=>Qs});function ute(e){if(e.port||(e.port=ps.default.get(Bc.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=ps.default.get(Bc.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),!Je())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of o_(e))t.set(Qs(n.url),n);fte(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=je.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),A_(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&pr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,je.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&pr.error(`Incoming client connection from ${n.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,n._nodeRequest.socket.authorizationError);let i=hr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));c?n.user=c:pr.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:pr.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Mc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=wE.createSecureContext(l)}catch(c){pr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),kx(s),ps.default.get(Bc.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function kx(e){let t=0;_u(r=>{r?.ca&&(Mc.add(r.ca),Mc.size!==t&&(t=Mc.size,e?.()))})}function dte(e=!0){Hx=e}function fte(e){Hx||(Qe(),pa=e.databases,aa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ea;for(let[s,i]of y_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];qx(r,s,e),gb.get(s)?.forEach(i=>i(s))}}))}function qx(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class Fx extends qr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ea,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(pr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Mn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=_te(h,Fx.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new Bx.ServerError("No connection to any other nodes are available",502);let d={requestId:cte++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;pr.warn("Error in load from node",NE,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Gx(e,t,r,n,s){let i=y_.get(e);i||y_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new T_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function _te(e,t,r){let n=Lx.get(e)?.get(r);if(n)return n;let s=hr().primaryStore.get(e);return s?.url&&(n=Gx(s.url,t,r,e,s.authorization),Lx.set(e,y_.get(s.url))),n}async function b_(e,t,r){r||(r={}),r.serverName=e.name;let n=await yE(e.url,r),s=A_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{pr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function mu(e){try{xx.isMainThread&&pr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ea.get(e.database);if(!t){let n;t=new Promise(s=>{pr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ea.set(e.database,t)}let r=Gx(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>i_(n,e.database)),e.replicateByDefault)}catch(t){pr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function oE({name:e,url:t,database:r}){pr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(hr().primaryStore.getRange({})));let n=y_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function hte(){if(Rb!==void 0)return Rb;let e=ps.default.get(Bc.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE)||ps.default.get(Bc.CONFIG_PARAMS.TLS_CERTIFICATE);if(e)return Rb=new vx.X509Certificate((0,Ux.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Je(){return NE||(NE=ps.default.get("replication_hostname")??Qs(ps.default.get("replication_url"))??hte()??Mx("operationsapi_network_secureport")??Mx("operationsapi_network_port")??"127.0.0.1")}function mte(){NE=void 0}function Mx(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function OE(e){let t=ps.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function bE(e){return n_(e)?.[Je()]}function ca(){let e=ps.default.get("replication_url");return e||IE(Je())}function IE(e){let t=OE("replication_port");if(t)return`ws://${e}:${t}`;if(t=OE("replication_secureport"),t)return`wss://${e}:${t}`;if(t=OE("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=OE("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Qs(e){if(e)return new URL(e).hostname}function aa(e,t){for(let n of Object.getOwnPropertyNames(Ge))r(n);return R_(n=>{r(n)}),Uc((n,s)=>{r(n.databaseName)});function r(n){let s=Ge[n];pr.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):pte(n)&&t(s,n,!1)}a(r,"forDatabase")}function pte(e){let t=Ge[e];for(let r in t)if(t[r].replicate)return!0}function s_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Ete(e){let t={message:""};if(e.replicated){e.replicated=!1,pr.trace?.("Replicating operation",e.operation,"to nodes",je.nodes.map(n=>n.name));let r=await Promise.allSettled(je.nodes.map(n=>b_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=je.nodes[s]?.name,i})}return t}var ps,pr,vx,Ux,Bc,wE,Bx,xx,Hx,cte,lte,Mc,pa,y_,Lx,Rb,NE,fs=Oe(()=>{Pe();Xo();vl();Sb();Gr();ps=L(ne()),pr=L(j()),vx=require("crypto"),Ux=require("fs");a_();Cc();Bc=L(v());By();wE=L(require("node:tls")),Bx=L(fe()),xx=require("worker_threads"),cte=1,lte=[],Mc=ps.default.get(Bc.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1?new Set(wE.rootCertificates):new Set;a(ute,"start");a(kx,"monitorNodeCAs");a(dte,"disableReplication");a(fte,"assignReplicationSource");a(qx,"setReplicator");y_=new Map;a(Gx,"getConnection");Lx=new Map;a(_te,"getConnectionByName");a(b_,"sendOperationToNode");a(mu,"subscribeToNode");a(oE,"unsubscribeFromNode");a(hte,"getCommonNameFromCert");a(Je,"getThisNodeName");a(mte,"clearThisNodeName");Object.defineProperty(je,"hostname",{get(){return Je()}});a(Mx,"getHostFromListeningPort");a(OE,"getPortFromListeningPort");a(bE,"getThisNodeId");je.replication={getThisNodeId:bE,exportIdMapping:n_};a(ca,"getThisNodeUrl");a(IE,"hostnameToUrl");a(Qs,"urlToNodeName");a(aa,"forEachReplicatedDatabase");a(pte,"hasExplicitlyReplicatedTable");a(s_,"lastTimeInAuditStore");a(Ete,"replicateOperation")});var LE=P((nwe,Wx)=>{"use strict";var Ru=dp(),yu=X0(),gte=j(),Ste=require("uuid").v4,rwe=require("clone"),PE=oo(),bu=v(),Tte=require("util"),ga=kn(),{handleHDBError:Rn,hdb_errors:Ate}=fe(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:yn}=Ate,{SchemaEventMsg:DE}=Ks(),$x=Er(),{getDatabases:Rte}=(Pe(),se(rt)),{transformReq:Ou}=re(),{replicateOperation:Vx}=(fs(),se(ha));Wx.exports={createSchema:yte,createSchemaStructure:Kx,createTable:bte,createTableStructure:Yx,createAttribute:Cte,dropSchema:Ote,dropTable:Nte,dropAttribute:wte,getBackup:Pte};async function yte(e){let t=await Kx(e);return PE.signalSchemaChange(new DE(process.pid,e.operation,e.schema)),t}a(yte,"createSchema");async function Kx(e){let t=Ru.schema_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);if(Ou(e),!await yu.checkSchemaExists(e.schema))throw Rn(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),yn.BAD_REQUEST,bu.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await ga.createSchema(e),`database '${e.schema}' successfully created`}a(Kx,"createSchemaStructure");async function bte(e){return Ou(e),e.hash_attribute=e.primary_key??e.hash_attribute,await Yx(e)}a(bte,"createTable");async function Yx(e){let t=Ru.create_table_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);if(Ru.validateTableResidence(e.residence),!await yu.checkSchemaTableExists(e.schema,e.table))throw Rn(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),yn.BAD_REQUEST,bu.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Ste(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ga.createTable(n,e);else throw Rn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",yn.BAD_REQUEST);else await ga.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(Yx,"createTableStructure");async function Ote(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ru.schema_object(e),n=t??r;if(n)throw Rn(n,n.message,yn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let s=await yu.checkSchemaExists(e.schema);if(s)throw Rn(new Error,s,yn.NOT_FOUND,bu.LOG_LEVELS.ERROR,s,!0);let i=await yu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await ga.dropSchema(e),PE.signalSchemaChange(new DE(process.pid,e.operation,e.schema)),await $x.purgeSchemaTableStreams(e.schema,o);let c=await Vx(e);return c.message=`successfully deleted '${e.schema}'`,c}a(Ote,"dropSchema");async function Nte(e){let t=Ru.table_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let r=await yu.checkSchemaTableExists(e.schema,e.table);if(r)throw Rn(new Error,r,yn.NOT_FOUND,bu.LOG_LEVELS.ERROR,r,!0);await ga.dropTable(e),await $x.purgeTableStream(e.schema,e.table);let n=await Vx(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Nte,"dropTable");async function wte(e){let t=Ru.attribute_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);Ou(e);let r=await yu.checkSchemaTableExists(e.schema,e.table);if(r)throw Rn(new Error,r,yn.NOT_FOUND,bu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Rn(new Error,"You cannot drop a hash attribute",yn.BAD_REQUEST,void 0,void 0,!0);if(bu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Rn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,yn.BAD_REQUEST,void 0,void 0,!0);try{return await ga.dropAttribute(e),Ite(e),PE.signalSchemaChange(new DE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw gte.error(`Got an error deleting attribute ${Tte.inspect(e)}.`),n}}a(wte,"dropAttribute");function Ite(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(Ite,"dropAttributeFromGlobal");async function Cte(e){Ou(e);let t=Rte()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Rn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,yn.BAD_REQUEST,void 0,void 0,!0);return await ga.createAttribute(e),PE.signalSchemaChange(new DE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Cte,"createAttribute");function Pte(e){return ga.getBackup(e)}a(Pte,"getBackup")});var jx=P((iwe,zx)=>{"use strict";var{OPERATIONS_ENUM:Dte}=v(),yb=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Dte.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};zx.exports=yb});var bb=P((cwe,eH)=>{"use strict";var Lte=kn(),awe=jx(),ME=re(),vE=v(),Mte=ne(),{handleHDBError:Qx,hdb_errors:vte}=fe(),{HDB_ERROR_MSGS:Jx,HTTP_STATUS_CODES:Xx}=vte,Ute=Object.values(vE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Zx="To use this operation audit log must be enabled in harperdb-config.yaml";eH.exports=Bte;async function Bte(e){if(ME.isEmpty(e.schema))throw new Error(Jx.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(Jx.TABLE_REQUIRED_ERR);if(!Mte.get(vE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Qx(new Error,Zx,Xx.BAD_REQUEST,vE.LOG_LEVELS.ERROR,Zx,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw Qx(new Error,t,Xx.NOT_FOUND,vE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&Ute.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Lte.readAuditLog(e)}a(Bte,"readAuditLog")});var rH=P((uwe,tH)=>{"use strict";var{OPERATIONS_ENUM:xte}=v(),Ob=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=xte.GET_BACKUP,this.schema=t,this.table=r}};tH.exports=Ob});var iH=P((hwe,sH)=>{"use strict";var Hte=kn(),fwe=rH(),Nb=re(),kte=v(),_we=ne(),{handleHDBError:Fte,hdb_errors:qte}=fe(),{HDB_ERROR_MSGS:nH,HTTP_STATUS_CODES:Gte}=qte;sH.exports=$te;async function $te(e){if(Nb.isEmpty(e.schema))throw new Error(nH.SCHEMA_REQUIRED_ERR);if(Nb.isEmpty(e.table))throw new Error(nH.TABLE_REQUIRED_ERR);let t=Nb.checkSchemaTableExist(e.schema,e.table);if(t)throw Fte(new Error,t,Gte.NOT_FOUND,kte.LOG_LEVELS.ERROR,t,!0);return await Hte.getBackup(read_audit_log_object)}a($te,"getBackup")});var dH=P((pwe,uH)=>{var Nu=require("validate.js"),aH=_t(),wu=v(),{handleHDBError:Vte,hdb_errors:Kte}=fe(),{HDB_ERROR_MSGS:$t,HTTP_STATUS_CODES:Yte}=Kte,wb=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Wte={STRUCTURE_USER:"structure_user"},oH=Object.values(wu.ROLE_TYPES_ENUM),zte="attribute_permissions",jte="attribute_name",{PERMS_CRUD_ENUM:Iu}=wu,Qte=[zte,...Object.values(Iu)],cH=[Iu.READ,Iu.INSERT,Iu.UPDATE],Jte=[jte,...cH];function Xte(e){let t=wb();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lH(e,t)}a(Xte,"addRoleValidation");function Zte(e){let t=wb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lH(e,t)}a(Zte,"alterRoleValidation");function ere(e){let t=wb();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,aH.validateObject(e,t)}a(ere,"dropRoleValidation");var tre=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function lH(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)tre.includes(n[o])||s.push(n[o]);s.length>0&&tr($t.INVALID_ROLE_JSON_KEYS(s),r);let i=aH.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{tr(o,r)}),e.permission){let o=rre(e);o&&tr(o,r),oH.forEach(c=>{e.permission[c]&&!Nu.isBoolean(e.permission[c])&&tr($t.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(oH.indexOf(o)<0){if(o===Wte.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||tr($t.SCHEMA_NOT_FOUND(d),r)}continue}tr($t.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){tr($t.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){tr($t.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{Qte.includes(f)||tr($t.INVALID_PERM_KEY(f),r,o,l)}),Object.values(Iu).forEach(f=>{Nu.isDefined(u[f])?Nu.isBoolean(u[f])||tr($t.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):tr($t.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){tr($t.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){tr($t.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!Jte.includes(S)&&S!==Iu.DELETE&&tr($t.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!Nu.isDefined(_.attribute_name)){tr($t.ATTR_PERM_MISSING_NAME,r,o,l);continue}let m=_.attribute_name;if(!f.includes(m)){tr($t.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,l);continue}cH.forEach(S=>{Nu.isDefined(_[S])?Nu.isBoolean(_[S])||tr($t.ATTR_PERM_NOT_BOOLEAN(S,m),r,o,l):tr($t.ATTR_PERM_MISSING(S,m),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;tr($t.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return nre(r)}a(lH,"customValidate");uH.exports={addRoleValidation:Xte,alterRoleValidation:Zte,dropRoleValidation:ere};function rre(e){let{operation:t,permission:r}=e;if(t===wu.OPERATIONS_ENUM.ADD_ROLE||t===wu.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 $t.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?wu.ROLE_TYPES_ENUM.SUPER_USER:wu.ROLE_TYPES_ENUM.CLUSTER_USER;return $t.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(rre,"validateNoSUPerms");function nre(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:$t.ROLE_PERMS_ERROR,...e};return Vte(new Error,n,Yte.BAD_REQUEST)}else return null}a(nre,"generateRolePermResponse");function tr(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(tr,"addPermError")});var N_=P((Swe,mH)=>{"use strict";var fH=fn(),_H=$r(),sre=Ec(),Cb=dH(),Pb=oo(),gwe=require("uuid").v4,ire=require("util"),UE=v(),ore=re(),Db=_H.searchByValue,are=_H.searchByHash,cre=ire.promisify(sre.delete),lre=Ys(),ure=iu(),{hdb_errors:dre,handleHDBError:xc}=fe(),{HDB_ERROR_MSGS:hH,HTTP_STATUS_CODES:O_}=dre,{UserEventMsg:Lb}=Ks();mH.exports={addRole:fre,alterRole:_re,dropRole:hre,listRoles:mre};function Ib(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(Ib,"scrubRoleDetails");async function fre(e){let t=Cb.addRoleValidation(e);if(t)throw t;e=Ib(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 Db(r)||[])}catch(i){throw xc(i)}if(n&&n.length>0)throw xc(new Error,hH.ROLE_ALREADY_EXISTS(e.role),O_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await fH.insert(s),Pb.signalUserChange(new Lb(process.pid)),e=Ib(e),e}a(fre,"addRole");async function _re(e){let t=Cb.alterRoleValidation(e);if(t)throw t;e=Ib(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await fH.update(r)}catch(s){throw xc(s)}if(n&&n?.message==="updated 0 of 1 records")throw xc(new Error,"Invalid role id",O_.BAD_REQUEST,void 0,void 0,!0);return await Pb.signalUserChange(new Lb(process.pid)),e}a(_re,"alterRole");async function hre(e){let t=Cb.dropRoleValidation(e);if(t)throw xc(new Error,t,O_.BAD_REQUEST,void 0,void 0,!0);let r=new ure(UE.SYSTEM_SCHEMA_NAME,UE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await are(r));if(n.length===0)throw xc(new Error,hH.ROLE_NOT_FOUND,O_.NOT_FOUND,void 0,void 0,!0);let s=new lre(UE.SYSTEM_SCHEMA_NAME,UE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Db(s)),o=!1;if(ore.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw xc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,O_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await cre(c),Pb.signalUserChange(new Lb(process.pid)),`${n[0].role} successfully deleted`}a(hre,"dropRole");async function mre(){return Db({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(mre,"listRoles")});var SH=P((Awe,gH)=>{"use strict";var pre=ne(),Sa=require("joi"),Ere=_t(),pH=require("moment"),gre=require("fs-extra"),Mb=require("path"),Sre=require("lodash"),w_=v(),{LOG_LEVELS:Hc}=v(),Tre="YYYY-MM-DD hh:mm:ss",Are=Mb.resolve(__dirname,"../logs");gH.exports=function(e){return Ere.validateBySchema(e,Rre)};var Rre=Sa.object({from:Sa.custom(EH),until:Sa.custom(EH),level:Sa.valid(Hc.NOTIFY,Hc.FATAL,Hc.ERROR,Hc.WARN,Hc.INFO,Hc.DEBUG,Hc.TRACE),order:Sa.valid("asc","desc"),limit:Sa.number().min(1),start:Sa.number().min(0),log_name:Sa.custom(yre)});function EH(e,t){if(pH(e,pH.ISO_8601).format(Tre)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(EH,"validateDatetime");function yre(e,t){if(Sre.invert(w_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=pre.get(w_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?w_.LOG_NAMES.HDB:e,i=s===w_.LOG_NAMES.INSTALL?Mb.join(Are,w_.LOG_NAMES.INSTALL):Mb.join(n,s);return gre.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(yre,"validateReadLogPath")});var Ub=P((ywe,AH)=>{"use strict";var BE=v(),bre=j(),Ore=ne(),Nre=SH(),vb=require("path"),TH=require("fs-extra"),{once:wre}=require("events"),{handleHDBError:Ire,hdb_errors:Cre}=fe(),{PACKAGE_ROOT:Pre}=v(),Dre=vb.join(Pre,"logs"),Lre=1e3,Mre=200;AH.exports=vre;async function vre(e){let t=Nre(e);if(t)throw Ire(t,t.message,Cre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Ore.get(BE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?BE.LOG_NAMES.HDB:e.log_name,s=n===BE.LOG_NAMES.INSTALL?vb.join(Dre,BE.LOG_NAMES.INSTALL):vb.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?Lre:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,m=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(TH.statSync(s).size-(m+5)*Mre,0));let g=TH.createReadStream(s,{start:S});g.on("error",H=>{bre.error(H)});let T=0,E=[],A="",w;g.on("data",H=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=A+H;let V=0,q;for(;(q=k.exec(H))&&!g.destroyed;){w&&(w.message=H.slice(V,q.index),M(w));let[ae,G,le]=q,z=le.split("] ["),Ae=z[0],ge=z[1];z.splice(0,2),w={timestamp:G,thread:Ae,level:ge,tags:z,message:""},V=q.index+ae.length}A=H.slice(V)}),g.on("end",H=>{g.destroyed||w&&(w.message=A.trim(),M(w))}),g.resume();function M(H){let k,V,q;switch(!0){case(i&&c&&u):k=new Date(H.timestamp),V=new Date(l),q=new Date(f),H.level===o&&k>=V&&k<=q&&T<_?T++:H.level===o&&k>=V&&k<=q&&(Ta(H,h,E),T++,T===m&&g.destroy());break;case(i&&c):k=new Date(H.timestamp),V=new Date(l),H.level===o&&k>=V&&T<_?T++:H.level===o&&k>=V&&(Ta(H,h,E),T++,T===m&&g.destroy());break;case(i&&u):k=new Date(H.timestamp),q=new Date(f),H.level===o&&k<=q&&T<_?T++:H.level===o&&k<=q&&(Ta(H,h,E),T++,T===m&&g.destroy());break;case(c&&u):k=new Date(H.timestamp),V=new Date(l),q=new Date(f),k>=V&&k<=q&&T<_?T++:k>=V&&k<=q&&(Ta(H,h,E),T++,T===m&&g.destroy());break;case i:H.level===o&&T<_?T++:H.level===o&&(Ta(H,h,E),T++,T===m&&g.destroy());break;case c:k=new Date(H.timestamp),V=new Date(l),k>=V&&T<_?T++:k>=V&&T>=_&&(Ta(H,h,E),T++,T===m&&g.destroy());break;case u:k=new Date(H.timestamp),q=new Date(f),k<=q&&T<_?T++:k<=q&&T>=_&&(Ta(H,h,E),T++,T===m&&g.destroy());break;default:T<_?T++:(Ta(H,h,E),T++,T===m&&g.destroy())}}return a(M,"onLogMessage"),await wre(g,"close"),E}a(vre,"readLog");function Ta(e,t,r){t==="desc"?Ure(e,r):t==="asc"?Bre(e,r):r.push(e)}a(Ta,"pushLineToResult");function Ure(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(Ure,"insertDescending");function Bre(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(Bre,"insertAscending")});var xE=P((Cwe,OH)=>{"use strict";var Bb=require("joi"),{string:Cu,boolean:RH,date:xre}=Bb.types(),Hre=_t(),{validateSchemaExists:Owe,validateTableExists:Nwe,validateSchemaName:wwe}=Ti(),kre=v(),Fre=yt(),yH=ne();yH.initSync();var Iwe=Cu.invalid(yH.get(kre.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Fre.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),bH={operation:Cu.valid("add_node","update_node","set_node_replication"),node_name:Cu.optional(),subscriptions:Bb.array().items({table:Cu.optional(),schema:Cu.optional(),database:Cu.optional(),subscribe:RH.required(),publish:RH.required().custom(Gre),start_time:xre.iso()})};function qre(e){return Hre.validateBySchema(e,Bb.object(bH))}a(qre,"addUpdateNodeValidator");function Gre(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(Gre,"checkForFalsy");OH.exports={addUpdateNodeValidator:qre,validation_schema:bH}});var wH=P((Dwe,NH)=>{var $re=_t(),Vre={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};NH.exports=function(e){return $re.validateObject(e,Vre)}});var xb=P((Mwe,PH)=>{"use strict";var Kre=wH(),Pu=require("passport"),Yre=require("passport-local").Strategy,Wre=require("passport-http").BasicStrategy,zre=require("util"),jre=Gn(),CH=zre.callbackify(jre.findAndValidateUser),Lwe=Ln(),Qre=v(),IH=Eu();Pu.use(new Yre(function(e,t,r){CH(e,t,r)}));Pu.use(new Wre(function(e,t,r){CH(e,t,r)}));Pu.serializeUser(function(e,t){t(null,e)});Pu.deserializeUser(function(e,t){t(null,e)});function Jre(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":Pu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Qre.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?IH.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):IH.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Pu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Jre,"authorize");function Xre(e,t){let r=Kre(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(Xre,"checkPermissions");PH.exports={authorize:Jre,checkPermissions:Xre}});var Du=P((Uwe,DH)=>{"use strict";var Hb=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},kb=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};DH.exports={Node:Hb,NodeSubscription:kb}});var MH=P((xwe,LH)=>{"use strict";var Zre=v().OPERATIONS_ENUM,Fb=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Zre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};LH.exports=Fb});var I_=P((kwe,vH)=>{"use strict";var qb=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},Gb=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)}};vH.exports={RemotePayloadObject:qb,RemotePayloadSubscription:Gb}});var BH=P((qwe,UH)=>{"use strict";var $b=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}};UH.exports=$b});var HH=P((Wwe,xH)=>{"use strict";var ene=BH(),$we=Dt(),Vwe=ot(),tne=j(),{getSchemaPath:Kwe,getTransactionAuditStorePath:Ywe}=ft(),{getDatabases:rne}=(Pe(),se(rt));xH.exports=nne;async function nne(e){let t=new ene;try{let r=rne()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){tne.warn(`unable to stat table dbi due to ${r}`)}return t}a(nne,"lmdbGetTableSize")});var FH=P((jwe,kH)=>{"use strict";var Vb=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}};kH.exports=Vb});var Mu=P((tIe,VH)=>{"use strict";var sne=require("fs-extra"),ine=require("path"),Wr=require("systeminformation"),Aa=j(),qH=Er(),Jwe=yt(),Lu=v(),one=HH(),ane=so(),{getThreadInfo:GH}=tt(),C_=ne();C_.initSync();var cne=FH(),{openEnvironment:Xwe}=ot(),{getSchemaPath:Zwe}=ft(),{database:eIe,databases:Kb}=(Pe(),se(rt)),HE;VH.exports={getHDBProcessInfo:jb,getNetworkInfo:Jb,getDiskInfo:Qb,getMemoryInfo:zb,getCPUInfo:Wb,getTimeInfo:Yb,getSystemInformation:Xb,systemInformation:lne,getTableSize:Zb,getMetrics:eO};function Yb(){return Wr.time()}a(Yb,"getTimeInfo");async function Wb(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await Wr.cpu();f.cpu_speed=await Wr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:m,raw_currentload_system:S,raw_currentload_user:g,cpus:T,...E}=await Wr.currentLoad();return E.cpus=[],T.forEach(A=>{let{raw_load:w,raw_load_idle:M,raw_load_irq:H,raw_load_nice:k,raw_load_system:V,raw_load_user:q,...ae}=A;E.cpus.push(ae)}),f.current_load=E,f}catch(e){return Aa.error(`error in getCPUInfo: ${e}`),{}}}a(Wb,"getCPUInfo");async function zb(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Wr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Aa.error(`error in getMemoryInfo: ${e}`),{}}}a(zb,"getMemoryInfo");async function jb(){let e={core:[],clustering:[]};try{let t=await Wr.processes(),r;try{r=Number.parseInt(await sne.readFile(ine.join(C_.get(Lu.CONFIG_PARAMS.ROOTPATH),Lu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Lu.NODE_ERROR_CODES.ENOENT)Aa.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return Aa.error(`error in getHDBProcessInfo: ${t}`),e}}a(jb,"getHDBProcessInfo");async function Qb(){let e={};try{if(!C_.get(Lu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Wr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Wr.fsStats();return e.read_write=u,e.size=await Wr.fsSize(),e}catch(t){return Aa.error(`error in getDiskInfo: ${t}`),e}}a(Qb,"getDiskInfo");async function Jb(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return C_.get(Lu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Wr.networkInterfaceDefault(),e.latency=await Wr.inetChecksite("google.com"),(await Wr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await Wr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Aa.error(`error in getNetworkInfo: ${t}`),e}}a(Jb,"getNetworkInfo");async function Xb(){if(HE!==void 0)return HE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Wr.osInfo();e=c;let l=await Wr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,HE=e,HE}catch(t){return Aa.error(`error in getSystemInformation: ${t}`),e}}a(Xb,"getSystemInformation");async function Zb(){let e=[],t=await ane.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await one(n));return e}a(Zb,"getTableSize");async function eO(){let e={};for(let t in Kb){let r=e[t]={},n=r.tables={};for(let s in Kb[t])try{let i=Kb[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Aa.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(eO,"getMetrics");async function $H(){if(C_.get(Lu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await qH.getNATSReferences(),t=await qH.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a($H,"getNatsStreamInfo");async function lne(e){let t=new cne;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Xb(),t.time=Yb(),t.cpu=await Wb(),t.memory=await zb(),t.disk=await Qb(),t.network=await Jb(),t.harperdb_processes=await jb(),t.table_size=await Zb(),t.metrics=await eO(),t.threads=await GH(),t.replication=await $H(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Xb();break;case"time":t.time=Yb();break;case"cpu":t.cpu=await Wb();break;case"memory":t.memory=await zb();break;case"disk":t.disk=await Qb();break;case"network":t.network=await Jb();break;case"harperdb_processes":t.harperdb_processes=await jb();break;case"table_size":t.table_size=await Zb();break;case"database_metrics":case"metrics":t.metrics=await eO();break;case"threads":t.threads=await GH();break;case"replication":t.replication=await $H();break;default:break}return t}a(lne,"systemInformation")});var vu=P((nIe,une)=>{une.exports={name:"harperdb",version:"4.5.0-alpha.3",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && 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 --no-clean --reporter=lcovonly npm run test:security && 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:replication && 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 && npm run test:security && 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","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","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",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix","cluster:local":"docker compose -f utility/dev/docker-compose.yml --project-directory . build && docker compose -f utility/dev/docker-compose.yml --project-directory . up","cluster:latest":"docker compose -f utility/dev/docker-compose.yml --project-directory . pull && docker compose -f utility/dev/docker-compose.yml --project-directory . up"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@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",argon2:"0.41.1","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","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.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-as-promised":"7.1.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",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.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var kc=P((sIe,KH)=>{"use strict";KH.exports={version:dne,printVersion:fne};var kE=vu();function dne(){if(kE)return kE.version}a(dne,"version");function fne(){kE&&console.log(`HarperDB Version ${kE.version}`)}a(fne,"printVersion")});var ho=P((cIe,jH)=>{"use strict";var _ne=fn(),tO=re(),hne=require("util"),Fc=v(),YH=ne();YH.initSync();var mne=xb(),WH=$r(),{Node:oIe,NodeSubscription:aIe}=Du(),pne=iu(),Ene=MH(),{RemotePayloadObject:gne,RemotePayloadSubscription:Sne}=I_(),{handleHDBError:Tne,hdb_errors:Ane}=fe(),{HTTP_STATUS_CODES:Rne,HDB_ERROR_MSGS:yne}=Ane,bne=Ys(),One=Mu(),Nne=kc(),{getDatabases:wne}=(Pe(),se(rt)),Ine=hne.promisify(mne.authorize),Cne=WH.searchByHash,Pne=WH.searchByValue;jH.exports={authHeaderToUser:Dne,isEmpty:Lne,getNodeRecord:Mne,upsertNodeRecord:vne,buildNodePayloads:Une,checkClusteringEnabled:Bne,getAllNodeRecords:xne,getSystemInfo:Hne,reverseSubscription:zH};async function Dne(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Ine(t,null),e}a(Dne,"authHeaderToUser");function Lne(e){return e==null}a(Lne,"isEmpty");async function Mne(e){let t=new pne(Fc.SYSTEM_SCHEMA_NAME,Fc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Cne(t)}a(Mne,"getNodeRecord");async function vne(e){let t=new Ene(Fc.SYSTEM_SCHEMA_NAME,Fc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return _ne.upsert(t)}a(vne,"upsertNodeRecord");function zH(e){if(tO.isEmpty(e.subscribe)||tO.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(zH,"reverseSubscription");function Une(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=tO.getTableHashAttribute(l,u),{subscribe:d,publish:h}=zH(c),_=wne()[l]?.[u],m=new Sne(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(m)}return new gne(r,t,s,n)}a(Une,"buildNodePayloads");function Bne(){if(!YH.get(Fc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Tne(new Error,yne.CLUSTERING_NOT_ENABLED,Rne.BAD_REQUEST,void 0,void 0,!0)}a(Bne,"checkClusteringEnabled");async function xne(){let e=new bne(Fc.SYSTEM_SCHEMA_NAME,Fc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Pne(e))}a(xne,"getAllNodeRecords");async function Hne(){let e=await One.getSystemInformation();return{hdb_version:Nne.version(),node_version:e.node_version,platform:e.platform}}a(Hne,"getSystemInfo")});var rO=P((uIe,nk)=>{"use strict";var FE=Er(),QH=re(),JH=yt(),XH=v(),qE=j(),ZH=LE(),kne=jf(),{RemotePayloadObject:Fne}=I_(),{handleHDBError:ek,hdb_errors:qne}=fe(),{HTTP_STATUS_CODES:tk}=qne,{NodeSubscription:rk}=Du();nk.exports=Gne;async function Gne(e,t){let r;try{r=await FE.request(`${t}.${JH.REQUEST_SUFFIX}`,new Fne(XH.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),qE.trace("Response from remote describe all request:",r)}catch(o){qE.error(`addNode received error from describe all request to remote node: ${o}`);let c=FE.requestErrorHandler(o,"add_node",t);throw ek(new Error,c,tk.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===JH.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ek(new Error,o,tk.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===XH.SYSTEM_SCHEMA_NAME){await FE.createLocalTableStream(l,c);let m=new rk(l,c,o.publish,o.subscribe);m.start_time=o.start_time,i.push(m);continue}let u=QH.doesSchemaExist(l),f=n[l]!==void 0,d=c?QH.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(qE.trace(`addNode creating schema: ${l}`),await ZH.createSchema({operation:"create_schema",schema:l})),!d&&h){qE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let m=new kne(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(m.attributes=n[l][c].attributes),await ZH.createTable(m)}await FE.createLocalTableStream(l,c);let _=new rk(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(Gne,"reviewSubscriptions")});var qc={};Fe(qc,{addNodeBack:()=>Wne,removeNodeBack:()=>zne,setNode:()=>Yne});async function Yne(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Qs(t)):t=IE(r);let n=(0,ik.validateBySchema)(e,Kne);if(n)throw(0,mo.handleHDBError)(n,n.message,Vne.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new mo.ClientError("url or hostname is required for remove_node operation");let _=r,m=hr(),S=await m.get(_);if(!S)throw new mo.ClientError(_+" does not exist");try{await b_({url:S.url},{operation:P_.OPERATIONS_ENUM.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?Je():_},void 0)}catch(g){zn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await m.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new mo.ClientError("url required for this operation");let s=ca();if(s==null)throw new mo.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Es.getReplicationCert)();let _=await(0,Es.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Es.createCsr)(),zn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,zn.info("Sending CA named",_.name,"to target node",t))}let l={operation:P_.OPERATIONS_ENUM.ADD_NODE_BACK,hostname:(0,ok.get)(P_.CONFIG_PARAMS.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(sk):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=sk(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await b_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,zn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(zn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Es.setCertTable)({name:$ne.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Es.setCertTable)({name:Je(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await fo(Je(),_)}await fo(u?u.nodeName:d.name??Qs(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function Wne(e){zn.trace("addNodeBack received request:",e);let t=await(0,Es.signCertificate)(e),r;e.csr?(r=t.signingCA,zn.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,zn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization);let s=await(0,Es.getReplicationCertAuth)();if(n.replicates){let i={url:ca(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await fo(Je(),i)}return await fo(e.hostname,n),t.nodeName=Je(),t.usingCA=s?.certificate,zn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function zne(e){zn.trace("removeNodeBack received request:",e),await hr().delete(e.name)}function sk(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Es,ik,Uu,ok,P_,zn,mo,$ne,Vne,Kne,Gc=Oe(()=>{Es=L(Zs()),ik=L(_t()),Uu=L(require("joi")),ok=L(ne()),P_=L(v());a_();Cc();fs();zn=L(j()),mo=L(fe()),{pki:$ne}=require("node-forge"),{HTTP_STATUS_CODES:Vne}=mo.hdb_errors,Kne=Uu.default.object({hostname:Uu.default.string(),verify_tls:Uu.default.boolean(),replicates:Uu.default.boolean(),subscriptions:Uu.default.array()});a(Yne,"setNode");a(Wne,"addNodeBack");a(zne,"removeNodeBack");a(sk,"reverseSubscription")});var YE=P((gIe,ck)=>{"use strict";var{handleHDBError:GE,hdb_errors:jne}=fe(),{HTTP_STATUS_CODES:$E}=jne,{addUpdateNodeValidator:Qne}=xE(),VE=j(),KE=v(),ak=yt(),Jne=re(),D_=Er(),L_=ho(),nO=ne(),Xne=rO(),{Node:Zne,NodeSubscription:ese}=Du(),{broadcast:tse}=tt(),{setNode:rse}=(Gc(),se(qc)),pIe=ne(),EIe=v(),nse="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",sse="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ise=nO.get(KE.CONFIG_PARAMS.CLUSTERING_NODENAME);ck.exports=ose;async function ose(e,t=!1){if(VE.trace("addNode called with:",e),nO.get(KE.CONFIG_PARAMS.REPLICATION_URL)||nO.get(KE.CONFIG_PARAMS.REPLICATION_HOSTNAME))return rse(e);L_.checkClusteringEnabled();let r=Qne(e);if(r)throw GE(r,r.message,$E.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await L_.getNodeRecord(n);if(!Jne.isEmptyOrZeroLength(d))throw GE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,$E.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Xne(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=nse,o;let c=L_.buildNodePayloads(s,ise,KE.OPERATIONS_ENUM.ADD_NODE,await L_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new ese(_.schema,_.table,_.publish,_.subscribe))}VE.trace("addNode sending remote payload:",c);let u;try{u=await D_.request(`${n}.${ak.REQUEST_SUFFIX}`,c)}catch(d){VE.error(`addNode received error from request: ${d}`);for(let _=0,m=s.length;_<m;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await D_.updateRemoteConsumer(S,n)}let h=D_.requestErrorHandler(d,"add_node",n);throw GE(new Error,h,$E.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===ak.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw GE(new Error,d,$E.INTERNAL_SERVER_ERROR,"error",d)}VE.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await D_.updateRemoteConsumer(_,n),_.subscribe===!0&&await D_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new Zne(n,l,u.system_info);return await L_.upsertNodeRecord(f),tse({type:"nats_update"}),i.length>0?o.message=sse:o.message=`Successfully added '${n}' to manifest`,o}a(ose,"addNode")});var aO=P((AIe,uk)=>{"use strict";var{handleHDBError:sO,hdb_errors:ase}=fe(),{HTTP_STATUS_CODES:iO}=ase,{addUpdateNodeValidator:cse}=xE(),M_=j(),WE=v(),lk=yt(),TIe=re(),v_=Er(),U_=ho(),oO=ne(),{cloneDeep:lse}=require("lodash"),use=rO(),{Node:dse,NodeSubscription:fse}=Du(),{broadcast:_se}=tt(),{setNode:hse}=(Gc(),se(qc)),mse="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",pse="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ese=oO.get(WE.CONFIG_PARAMS.CLUSTERING_NODENAME);uk.exports=gse;async function gse(e){if(M_.trace("updateNode called with:",e),oO.get(WE.CONFIG_PARAMS.REPLICATION_URL)??oO.get(WE.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hse(e);U_.checkClusteringEnabled();let t=cse(e);if(t)throw sO(t,t.message,iO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await U_.getNodeRecord(r);s.length>0&&(n=lse(s));let{added:i,skipped:o}=await use(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=mse,c;let l=U_.buildNodePayloads(i,Ese,WE.OPERATIONS_ENUM.UPDATE_NODE,await U_.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];M_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}M_.trace("updateNode sending remote payload:",l);let u;try{u=await v_.request(`${r}.${lk.REQUEST_SUFFIX}`,l)}catch(f){M_.error(`updateNode received error from request: ${f}`);let d=v_.requestErrorHandler(f,"update_node",r);throw sO(new Error,d,iO.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===lk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw sO(new Error,f,iO.INTERNAL_SERVER_ERROR,"error",f)}M_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await v_.updateRemoteConsumer(h,r),h.subscribe===!0?await v_.updateConsumerIterator(h.schema,h.table,r,"start"):await v_.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new dse(r,[],u.system_info)]),await Sse(n[0],i,u.system_info),o.length>0?c.message=pse:c.message=`Successfully updated '${r}'`,c}a(gse,"updateNode");async function Sse(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new fse(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await U_.upsertNodeRecord(n),_se({type:"nats_update"})}a(Sse,"updateNodeTable")});var mk=P((yIe,hk)=>{"use strict";var _k=require("joi"),{string:dk}=_k.types(),Tse=_t(),fk=v(),Ase=ne(),Rse=yt();hk.exports=yse;function yse(e){let t=dk.invalid(Ase.get(fk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Rse.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=_k.object({operation:dk.valid(fk.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Tse.validateBySchema(e,r)}a(yse,"removeNodeValidator")});var zE=P((OIe,Tk)=>{"use strict";var{handleHDBError:pk,hdb_errors:bse}=fe(),{HTTP_STATUS_CODES:Ek}=bse,Ose=mk(),B_=j(),gk=ho(),Nse=re(),Bu=v(),Sk=yt(),cO=Er(),lO=ne(),{RemotePayloadObject:wse}=I_(),{NodeSubscription:Ise}=Du(),Cse=zf(),Pse=Ec(),{broadcast:Dse}=tt(),{setNode:Lse}=(Gc(),se(qc)),Mse=lO.get(Bu.CONFIG_PARAMS.CLUSTERING_NODENAME);Tk.exports=vse;async function vse(e){if(B_.trace("removeNode called with:",e),lO.get(Bu.CONFIG_PARAMS.REPLICATION_URL)??lO.get(Bu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Lse(e);gk.checkClusteringEnabled();let t=Ose(e);if(t)throw pk(t,t.message,Ek.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await gk.getNodeRecord(r);if(Nse.isEmptyOrZeroLength(n))throw pk(new Error,`Node '${r}' was not found.`,Ek.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new wse(Bu.OPERATIONS_ENUM.REMOVE_NODE,Mse,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await cO.updateConsumerIterator(f.schema,f.table,r,"stop");try{await cO.updateRemoteConsumer(new Ise(f.schema,f.table,!1,!1),r)}catch(d){B_.error(d)}}try{i=await cO.request(`${r}.${Sk.REQUEST_SUFFIX}`,s),B_.trace("Remove node reply from remote node:",r,i)}catch(l){B_.error("removeNode received error from request:",l),o=!0}let c=new Cse(Bu.SYSTEM_SCHEMA_NAME,Bu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Pse.deleteRecord(c),Dse({type:"nats_update"}),i?.status===Sk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(B_.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(vse,"removeNode")});var yk=P((wIe,Rk)=>{"use strict";var Ak=require("joi"),{string:Use,array:Bse}=Ak.types(),xse=_t(),Hse=xE();Rk.exports=kse;function kse(e){let t=Ak.object({operation:Use.valid("configure_cluster").required(),connections:Bse.items(Hse.validation_schema).required()});return xse.validateBySchema(e,t)}a(kse,"configureClusterValidator")});var uO=P((CIe,Ik)=>{"use strict";var bk=v(),jE=j(),Fse=re(),qse=ne(),Gse=zE(),$se=YE(),Vse=ho(),Kse=yk(),{handleHDBError:Ok,hdb_errors:Yse}=fe(),{HTTP_STATUS_CODES:Nk}=Yse,Wse="Configure cluster complete.",zse="Failed to configure the cluster. Check the logs for more details.",jse="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Ik.exports=Qse;async function Qse(e){jE.trace("configure cluster called with:",e);let t=Kse(e);if(t)throw Ok(t,t.message,Nk.BAD_REQUEST,void 0,void 0,!0);let r=await Vse.getAllNodeRecords(),n=[];if(qse.get(bk.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await wk(Gse,{operation:bk.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}jE.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await wk($se,d,d.node_name);s.push(h)}jE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(jE.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(Fse.isEmptyOrZeroLength(o))return{message:Wse,connections:c};if(l)return{message:jse,failed_nodes:o,connections:c};throw Ok(new Error,zse,Nk.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Qse,"configureCluster");async function wk(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(wk,"functionWrapper")});var Lk=P((DIe,Dk)=>{"use strict";var x_=require("joi"),Jse=_t(),{validateSchemaExists:Ck,validateTableExists:Xse,validateSchemaName:Pk}=Ti(),Zse=x_.object({operation:x_.string().valid("purge_stream"),schema:x_.string().custom(Ck).custom(Pk).optional(),database:x_.string().custom(Ck).custom(Pk).optional(),table:x_.string().custom(Xse).required()});function eie(e){return Jse.validateBySchema(e,Zse)}a(eie,"purgeStreamValidator");Dk.exports=eie});var dO=P((MIe,Mk)=>{"use strict";var{handleHDBError:tie,hdb_errors:rie}=fe(),{HTTP_STATUS_CODES:nie}=rie,sie=Lk(),iie=Er(),oie=ho();Mk.exports=aie;async function aie(e){e.schema=e.schema??e.database;let t=sie(e);if(t)throw tie(t,t.message,nie.BAD_REQUEST,void 0,void 0,!0);oie.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await iie.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(aie,"purgeStream")});var hO=P((UIe,Fk)=>{"use strict";var _O=ho(),cie=Er(),JE=ne(),xu=v(),$c=yt(),lie=re(),fO=j(),{RemotePayloadObject:uie}=I_(),{ErrorCode:vk}=require("nats"),{parentPort:Uk}=require("worker_threads"),{onMessageByType:die}=tt(),{getThisNodeName:fie}=(fs(),se(ha)),{requestClusterStatus:_ie}=(a_(),se(uB)),{getReplicationSharedStatus:hie}=(Cc(),se(xy)),{CONFIRMATION_STATUS_POSITION:mie,RECEIVED_VERSION_POSITION:pie,RECEIVED_TIME_POSITION:Eie,SENDING_TIME_POSITION:gie}=(Sb(),se(Px)),Bk=JE.get(xu.CONFIG_PARAMS.CLUSTERING_ENABLED),xk=JE.get(xu.CONFIG_PARAMS.CLUSTERING_NODENAME);Fk.exports={clusterStatus:Sie,buildNodeStatus:kk};var Hk;die("cluster-status",async e=>{Hk(e)});async function Sie(){if(JE.get(xu.CONFIG_PARAMS.REPLICATION_URL)||JE.get(xu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(Uk){Uk.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{Hk=s});for(let s of n.connections){let i=s.name;for(let o of s.database_sockets){let c=o.database,l;for(let f of Object.values(databases[c]||{}))if(l=f.auditStore,l)break;if(!l)continue;let u=hie(l,c,i);o.lastCommitConfirmed=QE(u[mie]),o.lastReceivedRemoteTime=QE(u[pie]),o.lastReceivedLocalTime=QE(u[Eie]),o.sendingMessage=QE(u[gie])}}}else n=_ie();return n.node_name=fie(),n.is_enabled=!0,n}let e={node_name:xk,is_enabled:Bk,connections:[]};if(!Bk)return e;let t=await _O.getAllNodeRecords();if(lie.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(kk(t[n],e.connections));return await Promise.allSettled(r),e}a(Sie,"clusterStatus");function QE(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(QE,"asDate");async function kk(e,t){let r=e.name,n=new uie(xu.OPERATIONS_ENUM.CLUSTER_STATUS,xk,void 0,await _O.getSystemInfo()),s,i,o=$c.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await cie.request($c.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===$c.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=$c.CLUSTER_STATUS_STATUSES.CLOSED,fO.error(`Error getting node status from ${r} `,s))}catch(l){fO.warn(`Error getting node status from ${r}`,l),l.code===vk.NoResponders?o=$c.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===vk.Timeout?o=$c.CLUSTER_STATUS_STATUSES.TIMEOUT:o=$c.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Tie(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==xu.PRE_4_0_0_VERSION&&await _O.upsertNodeRecord(l)}catch(l){fO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(kk,"buildNodeStatus");function Tie(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(Tie,"NodeStatusObject")});var pO=P((xIe,qk)=>{"use strict";var{handleHDBError:Aie,hdb_errors:Rie}=fe(),{HTTP_STATUS_CODES:yie}=Rie,bie=Er(),Oie=ho(),mO=re(),XE=require("joi"),Nie=_t(),wie=2e3,Iie=XE.object({timeout:XE.number().min(1),connected_nodes:XE.boolean(),routes:XE.boolean()});qk.exports=Cie;async function Cie(e){Oie.checkClusteringEnabled();let t=Nie.validateBySchema(e,Iie);if(t)throw Aie(t,t.message,yie.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||mO.autoCastBoolean(n),o=s===void 0||mO.autoCastBoolean(s),c={nodes:[]},l=await bie.getServerList(r??wie),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let m={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(m.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{m.connected_nodes.includes(S.name.slice(0,-4))||m.connected_nodes.push(S.name.slice(0,-4))})),o&&(m.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:mO.autoCast(S.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(Cie,"clusterNetwork")});var Kk=P((kIe,Vk)=>{"use strict";var EO=require("joi"),Gk=_t(),{route_constraints:$k}=TR();Vk.exports={setRoutesValidator:Pie,deleteRoutesValidator:Die};function Pie(e){let t=EO.object({server:EO.valid("hub","leaf"),routes:$k.required()});return Gk.validateBySchema(e,t)}a(Pie,"setRoutesValidator");function Die(e){let t=EO.object({routes:$k.required()});return Gk.validateBySchema(e,t)}a(Die,"deleteRoutesValidator")});var ZE=P((qIe,Xk)=>{"use strict";var po=Ot(),gO=re(),gs=v(),Hu=ne(),Yk=Kk(),{handleHDBError:Wk,hdb_errors:Lie}=fe(),{HTTP_STATUS_CODES:zk}=Lie,jk="cluster routes successfully set",Qk="cluster routes successfully deleted";Xk.exports={setRoutes:vie,getRoutes:Uie,deleteRoutes:Bie};function Mie(e){let t=po.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=gO.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:jk,set:i,skipped:s}}a(Mie,"setRoutesNats");function vie(e){let t=Yk.setRoutesValidator(e);if(t)throw Wk(t,t.message,zk.BAD_REQUEST,void 0,void 0,!0);if(Hu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Mie(e);let r=[],n=[],s=Hu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{Jk(s,i)?n.push(i):(s.push(i),r.push(i))}),po.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:jk,set:r,skipped:n}}a(vie,"setRoutes");function Jk(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(Jk,"existsInArray");function Uie(){if(Hu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=po.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Hu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Uie,"getRoutes");function Bie(e){let t=Yk.deleteRoutesValidator(e);if(t)throw Wk(t,t.message,zk.BAD_REQUEST,void 0,void 0,!0);if(Hu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return xie(e);let r=[],n=[],s=Hu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{Jk(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),po.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:Qk,deleted:r,skipped:n}}a(Bie,"deleteRoutes");function xie(e){let t=po.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let m=r[h];if(f.host===m.host&&f.port===m.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,m=n.length;_<m;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=gO.isEmptyOrZeroLength(r)?null:r,po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=gO.isEmptyOrZeroLength(n)?null:n,po.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Qk,deleted:s,skipped:i}}a(xie,"deleteRoutesNats")});var eF=P(($Ie,Zk)=>{"use strict";var H_=require("alasql"),Vc=require("recursive-iterator"),ei=j(),Hie=re(),k_=v(),SO=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,Fie(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=>k_.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=>!k_.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][k_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=kie(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!k_.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new H_.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function kie(e){return e.filter(t=>t[k_.PERMS_CRUD_ENUM.READ])}a(kie,"filterReadRestrictedAttrs");function Fie(e,t,r,n,s){qie(e,t,r,n,s)}a(Fie,"interpretAST");function F_(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(F_,"addSchemaTableToMap");function qie(e,t,r,n,s){if(!e){ei.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof H_.yy.Insert?Kie(e,t,r):e instanceof H_.yy.Select?Gie(e,t,r,n,s):e instanceof H_.yy.Update?$ie(e,t,r):e instanceof H_.yy.Delete?Vie(e,t,r):ei.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(qie,"getRecordAttributesAST");function Gie(e,t,r,n,s){if(!e){ei.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Hie.isEmptyOrZeroLength(i)){ei.error("No schema specified");return}e.from.forEach(c=>{F_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),F_(c.table,t,r,n,s)});let o=new Vc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{ei.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Vc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Vc(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{ei.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new Vc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{ei.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(Gie,"getSelectAttributes");function $ie(e,t,r){if(!e){ei.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Vc(e.columns),s=e.table.databaseid;F_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.table.tableid,s,i.columnid,t,r)}a($ie,"getUpdateAttributes");function Vie(e,t,r){if(!e){ei.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Vc(e.where),s=e.table.databaseid;F_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.table.tableid,s,i.columnid,t,r)}a(Vie,"getDeleteAttributes");function Kie(e,t,r){if(!e){ei.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Vc(e.columns),s=e.into.databaseid;F_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.into.tableid,s,i.columnid,t,r)}a(Kie,"getInsertAttributes");function TO(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(TO,"pushAttribute");Zk.exports=SO});var rF=P((KIe,tF)=>{"use strict";var eg=v(),tg=class{static{a(this,"BaseLicense")}constructor(t=0,r=eg.RAM_ALLOCATION_ENUM.DEFAULT,n=eg.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},AO=class extends tg{static{a(this,"ExtendedLicense")}constructor(t=0,r=eg.RAM_ALLOCATION_ENUM.DEFAULT,n=eg.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};tF.exports={BaseLicense:tg,ExtendedLicense:AO}});var qu=P((WIe,cF)=>{"use strict";var Fu=require("fs-extra"),rg=(bp(),se(yp)),sF=require("crypto"),Yie=require("moment"),Wie=require("uuid").v4,zr=j(),yO=require("path"),zie=re(),Kc=v(),{totalmem:nF}=require("os"),jie=rF().ExtendedLicense,ku="invalid license key format",Qie="061183",Jie="mofi25",Xie="aes-256-cbc",Zie=16,eoe=32,iF=ne(),{resolvePath:oF}=Ot();iF.initSync();var RO;cF.exports={validateLicense:aF,generateFingerPrint:roe,licenseSearch:NO,getLicense:ioe,checkMemoryLimit:ooe};function bO(){return yO.join(iF.getHdbBasePath(),Kc.LICENSE_KEY_DIR_NAME,Kc.LICENSE_FILE_NAME)}a(bO,"getLicenseDirPath");function toe(){let e=bO();return oF(yO.join(e,Kc.LICENSE_FILE_NAME))}a(toe,"getLicenseFilePath");function OO(){let e=bO();return oF(yO.join(e,Kc.REG_KEY_FILE_NAME))}a(OO,"getFingerPrintFilePath");async function roe(){let e=OO();try{return await Fu.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await noe();throw zr.error(`Error writing fingerprint file to ${e}`),zr.error(t),new Error("There was an error generating the fingerprint")}}a(roe,"generateFingerPrint");async function noe(){let e=Wie(),t=rg.hash(e,rg.HASH_FUNCTION.MD5),r=OO();try{await Fu.mkdirp(bO()),await Fu.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw zr.error(`Error writing fingerprint file to ${r}`),zr.error(n),new Error("There was an error generating the fingerprint")}return t}a(noe,"writeFingerprint");function aF(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Kc.RAM_ALLOCATION_ENUM.DEFAULT,version:Kc.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return zr.error("empty license key passed to validate."),r;let n=OO(),s=!1;try{s=Fu.statSync(n)}catch(i){zr.error(i)}if(s){let i;try{i=Fu.readFileSync(n,"utf8")}catch{zr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Jie),c=o[1];c=Buffer.concat([Buffer.from(c)],Zie);let l=Buffer.concat([Buffer.from(i)],eoe),u=sF.createDecipheriv(Xie,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=soe(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ku),zr.error(ku),new Error(ku)}let d;if(isNaN(f))try{d=JSON.parse(f),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(ku),zr.error(ku),new Error(ku)}else r.exp_date=f;r.exp_date<Yie().valueOf()&&(r.valid_date=!1),rg.validate(o[1],`${Qie}${i}${t}`,rg.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||zr.error("Invalid licence"),r}a(aF,"validateLicense");function soe(e,t){try{let r=sF.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{zr.warn("Check old license failed")}}a(soe,"checkOldLicense");function NO(){let e=new jie,t=[];try{t=Fu.readFileSync(toe(),"utf-8").split(`\r
13
- `)}catch(r){r.code==="ENOENT"?zr.debug("no license file found"):zr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(zie.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=aF(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){zr.error("There was an error parsing the license string."),zr.error(s),e.ram_allocation=Kc.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return RO=e,e}a(NO,"licenseSearch");async function ioe(){return RO||await NO(),RO}a(ioe,"getLicense");function ooe(){let e=NO().ram_allocation,t=process.constrainedMemory?.()||nF();if(t=Math.round(Math.min(t,nF())/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(ooe,"checkMemoryLimit")});var CO=P((jIe,fF)=>{var ng=qu(),lF=require("chalk"),jn=j(),uF=require("prompt"),{promisify:aoe}=require("util"),wO=v(),coe=require("fs-extra"),loe=require("path"),uoe=re(),doe=kc(),dF=ne();dF.initSync();var foe=require("moment"),_oe=aoe(uF.get),hoe=loe.join(dF.getHdbBasePath(),wO.LICENSE_KEY_DIR_NAME,wO.LICENSE_FILE_NAME,wO.LICENSE_FILE_NAME);fF.exports={getFingerprint:poe,setLicense:moe,parseLicense:IO,register:Eoe,getRegistrationInfo:Soe};async function moe(e){if(e&&e.key&&e.company){try{jn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await IO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw jn.error(r),jn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(moe,"setLicense");async function poe(){let e={};try{e=await ng.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw jn.error(r),jn.error(t),new Error(r)}return e}a(poe,"getFingerprint");async function IO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");jn.info("Validating license input...");let r=ng.validateLicense(e,t);if(jn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(jn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(jn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{jn.info("writing license to disk"),await coe.writeFile(hoe,JSON.stringify({license_key:e,company:t}))}catch(n){throw jn.error("Failed to write License"),n}return"Registration successful."}a(IO,"parseLicense");async function Eoe(){let e=await goe();return IO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Eoe,"register");async function goe(){let e=await ng.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:lF.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:lF.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{uF.start()}catch(n){jn.error(n)}let r;try{r=await _oe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(goe,"promptForRegistration");async function Soe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ng.getLicense()}catch(r){throw jn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(uoe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=doe.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=foe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Soe,"getRegistrationInfo")});var hF=P((JIe,_F)=>{"use strict";var Toe=yt(),PO=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,m){this.port=t,o===null&&(o=void 0),this.server_name=r+Toe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:m}},this.system_account="SYS"}};_F.exports=PO});var EF=P((ZIe,pF)=>{"use strict";var mF=yt(),DO=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+mF.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+mF.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};pF.exports=DO});var SF=P((tCe,gF)=>{"use strict";var LO=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};gF.exports=LO});var AF=P((nCe,TF)=>{"use strict";var Aoe=yt(),MO=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Aoe.SERVER_SUFFIX.ADMIN,this.password=r}};TF.exports=MO});var ag=P((iCe,bF)=>{"use strict";var Yc=require("path"),Wc=require("fs-extra"),Roe=hF(),yoe=EF(),boe=SF(),Ooe=AF(),vO=Gn(),$u=re(),bn=Ot(),ig=v(),q_=yt(),{CONFIG_PARAMS:Vt}=ig,Vu=j(),G_=ne(),RF=no(),UO=Er(),Noe=Zs(),Gu="clustering",woe=1e4,yF=50;bF.exports={generateNatsConfig:Coe,removeNatsConfig:Poe,getHubConfigPath:Ioe};function Ioe(){let e=G_.get(Vt.ROOTPATH);return Yc.join(e,Gu,q_.NATS_CONFIG_FILES.HUB_SERVER)}a(Ioe,"getHubConfigPath");async function Coe(e=!1,t=void 0){let r=G_.get(Vt.ROOTPATH);Wc.ensureDirSync(Yc.join(r,"clustering","leaf")),G_.initSync();let n=bn.getConfigFromFile(Vt.CLUSTERING_TLS_CERT_AUTH),s=bn.getConfigFromFile(Vt.CLUSTERING_TLS_PRIVATEKEY),i=bn.getConfigFromFile(Vt.CLUSTERING_TLS_CERTIFICATE);!await Wc.exists(i)&&!await Wc.exists(!n)&&await Noe.createNatsCerts();let o=Yc.join(r,Gu,q_.PID_FILES.HUB),c=Yc.join(r,Gu,q_.PID_FILES.LEAF),l=bn.getConfigFromFile(Vt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Yc.join(r,Gu,q_.NATS_CONFIG_FILES.HUB_SERVER),f=Yc.join(r,Gu,q_.NATS_CONFIG_FILES.LEAF_SERVER),d=bn.getConfigFromFile(Vt.CLUSTERING_TLS_INSECURE),h=bn.getConfigFromFile(Vt.CLUSTERING_TLS_VERIFY),_=bn.getConfigFromFile(Vt.CLUSTERING_NODENAME),m=bn.getConfigFromFile(Vt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await UO.checkNATSServerInstalled()||og("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await vO.listUsers(),g=bn.getConfigFromFile(Vt.CLUSTERING_USER),T=await vO.getClusterUser();($u.isEmpty(T)||T.active!==!0)&&og(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await sg(Vt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await sg(Vt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await sg(Vt.CLUSTERING_HUBSERVER_NETWORK_PORT),await sg(Vt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let E=[],A=[];for(let[ae,G]of S.entries())G.role?.role===ig.ROLE_TYPES_ENUM.CLUSTER_USER&&G.active&&(E.push(new Ooe(G.username,RF.decrypt(G.hash))),A.push(new boe(G.username,RF.decrypt(G.hash))));let w=[],{hub_routes:M}=bn.getClusteringRoutes();if(!$u.isEmptyOrZeroLength(M))for(let ae of M)w.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${ae.host}:${ae.port}`);let H=new Roe(bn.getConfigFromFile(Vt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,m,bn.getConfigFromFile(Vt.CLUSTERING_HUBSERVER_CLUSTER_NAME),bn.getConfigFromFile(Vt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,E,A);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=$u.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ig.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Wc.writeJson(u,H),Vu.trace(`Hub server config written to ${u}`));let k=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${m}`,V=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${m}`,q=new yoe(bn.getConfigFromFile(Vt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[k],[V],E,A,i,s,n,d);n==null&&delete q.tls.ca_file,(t===void 0||t===ig.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Wc.writeJson(f,q),Vu.trace(`Leaf server config written to ${f}`))}a(Coe,"generateNatsConfig");async function sg(e){let t=G_.get(e);return $u.isEmpty(t)&&og(`port undefined for '${e}'`),await $u.isPortTaken(t)&&og(`'${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(sg,"isPortAvailable");function og(e){let t=`Error generating clustering config: ${e}`;Vu.error(t),console.error(t),process.exit(1)}a(og,"generateNatsConfigError");async function Poe(e){let{port:t,config_file:r}=UO.getServerConfig(e),{username:n,decrypt_hash:s}=await vO.getClusterUser(),i=0,o=2e3;for(;i<yF;){try{let f=await UO.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){Vu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=yF)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.`);let u=o*(i*2);u>3e4&&Vu.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await $u.async_set_timeout(u)}let c="0".repeat(woe),l=Yc.join(G_.get(Vt.ROOTPATH),Gu,r);await Wc.writeFile(l,c),await Wc.remove(l),Vu.notify(e,"started.")}a(Poe,"removeNatsConfig")});var PF=P((aCe,CF)=>{"use strict";var Qn=ne(),Doe=qu(),ke=v(),$_=yt(),Eo=require("path"),{PACKAGE_ROOT:lg}=v(),OF=ne(),cg=re(),Ku="/dev/null",Loe=Eo.join(lg,"launchServiceScripts"),NF=Eo.join(lg,"utility/scripts"),Moe=Eo.join(NF,ke.HDB_RESTART_SCRIPT),wF=Eo.resolve(lg,"dependencies",`${process.platform}-${process.arch}`,$_.NATS_BINARY_NAME);function IF(){let t=Doe.licenseSearch().ram_allocation||ke.RAM_ALLOCATION_ENUM.DEFAULT,r=ke.MEM_SETTING_KEY+t,n={[ke.PROCESS_NAME_ENV_PROP]:ke.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return cg.noBootFile()&&(n[ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=cg.getEnvCliRootPath()),{name:ke.PROCESS_DESCRIPTORS.HDB,script:ke.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:lg}}a(IF,"generateMainServerConfig");var voe=9930;function Uoe(){Qn.initSync(!0);let e=Qn.get(ke.CONFIG_PARAMS.ROOTPATH),t=Eo.join(e,"clustering",$_.NATS_CONFIG_FILES.HUB_SERVER),r=Eo.join(Qn.get(ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ke.LOG_NAMES.HDB),n=OF.get(ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$_.LOG_LEVEL_FLAGS[Qn.get(ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==voe?"-"+n:""),script:wF,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ke.PROCESS_NAME_ENV_PROP]:ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qn.get(ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ku,i.error_file=Ku),i}a(Uoe,"generateNatsHubServerConfig");var Boe=9940;function xoe(){Qn.initSync(!0);let e=Qn.get(ke.CONFIG_PARAMS.ROOTPATH),t=Eo.join(e,"clustering",$_.NATS_CONFIG_FILES.LEAF_SERVER),r=Eo.join(Qn.get(ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ke.LOG_NAMES.HDB),n=OF.get(ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$_.LOG_LEVEL_FLAGS[Qn.get(ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Boe?"-"+n:""),script:wF,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ke.PROCESS_NAME_ENV_PROP]:ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qn.get(ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Ku,i.error_file=Ku),i}a(xoe,"generateNatsLeafServerConfig");function Hoe(){Qn.initSync();let e=Eo.join(Qn.get(ke.CONFIG_PARAMS.LOGGING_ROOT),ke.LOG_NAMES.HDB),t={name:ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ke.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ke.PROCESS_NAME_ENV_PROP]:ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Loe,autorestart:!1};return Qn.get(ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Ku,t.error_file=Ku),t}a(Hoe,"generateClusteringUpgradeV4ServiceConfig");function koe(){let e={[ke.PROCESS_NAME_ENV_PROP]:ke.PROCESS_DESCRIPTORS.RESTART_HDB};return cg.noBootFile()&&(e[ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=cg.getEnvCliRootPath()),{...{name:ke.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:NF},script:Moe}}a(koe,"generateRestart");function Foe(){return{apps:[IF()]}}a(Foe,"generateAllServiceConfigs");CF.exports={generateAllServiceConfigs:Foe,generateMainServerConfig:IF,generateRestart:koe,generateNatsHubServerConfig:Uoe,generateNatsLeafServerConfig:xoe,generateClusteringUpgradeV4ServiceConfig:Hoe}});var K_=P((uCe,VF)=>{"use strict";var Xe=v(),qoe=re(),So=ag(),ug=Er(),go=yt(),Ra=PF(),dg=ne(),zc=j(),Goe=ho(),{startWorker:DF,onMessageFromWorkers:$oe}=tt(),Voe=Mu(),lCe=require("util"),Koe=require("child_process"),Yoe=require("fs"),{execFile:Woe}=Koe,$e;VF.exports={enterPM2Mode:zoe,start:ya,stop:BO,reload:MF,restart:vF,list:xO,describe:xF,connect:To,kill:Zoe,startAllServices:eae,startService:HO,getUniqueServicesList:HF,restartAllServices:tae,isServiceRegistered:kF,reloadStopStart:FF,restartHdb:BF,deleteProcess:Joe,startClusteringProcesses:GF,startClusteringThreads:$F,isHdbRestartRunning:Xoe,isClusteringRunning:nae,stopClustering:rae,reloadClustering:sae,expectedRestartOfChildren:UF};var V_=!1;$oe(e=>{e.type==="restart"&&dg.initSync(!0)});function zoe(){V_=!0}a(zoe,"enterPM2Mode");function To(){return $e||($e=require("pm2")),new Promise((e,t)=>{$e.connect((r,n)=>{r&&t(r),e(n)})})}a(To,"connect");var jr,joe=10,LF;function ya(e,t=!1){if(V_)return Qoe(e);let r=Woe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=jr.indexOf(r);o>-1&&jr.splice(o,1),!LF&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<joe&&(Yoe.existsSync(So.getHubConfigPath())?ya(e):(await So.generateNatsConfig(!0),ya(e),await new Promise(c=>setTimeout(c,3e3)),await So.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await So.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=dg.get(Xe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&go.LOG_LEVEL_HIERARCHY[o]>=go.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===go.LOG_LEVELS.ERR||f===go.LOG_LEVELS.WRN?zc.OUTPUTS.STDERR:zc.OUTPUTS.STDOUT;zc.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=go.LOG_LEVELS[h]}if(go.LOG_LEVEL_HIERARCHY[o]>=go.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===go.LOG_LEVELS.ERR||f===go.LOG_LEVELS.WRN?zc.OUTPUTS.STDERR:zc.OUTPUTS.STDOUT;zc.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!jr&&(jr=[],!t)){let i=a(()=>{LF=!0,jr&&(jr.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)}jr.push(r)}a(ya,"start");function Qoe(e){return new Promise(async(t,r)=>{try{await To()}catch(n){r(n)}$e.start(e,(n,s)=>{n&&($e.disconnect(),r(n)),$e.disconnect(),t(s)})})}a(Qoe,"startWithPM2");function BO(e){if(!V_){for(let t of jr||[])t.name===e&&(jr.splice(jr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await To()}catch(n){r(n)}$e.stop(e,async(n,s)=>{n&&($e.disconnect(),r(n)),$e.delete(e,(i,o)=>{i&&($e.disconnect(),r(n)),$e.disconnect(),t(o)})})})}a(BO,"stop");function MF(e){return new Promise(async(t,r)=>{try{await To()}catch(n){r(n)}$e.reload(e,(n,s)=>{n&&($e.disconnect(),r(n)),$e.disconnect(),t(s)})})}a(MF,"reload");function vF(e){if(!V_){UF();for(let t of jr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await To()}catch(n){r(n)}$e.restart(e,(n,s)=>{$e.disconnect(),t(s)})})}a(vF,"restart");function UF(){for(let e of jr||[])e.config&&(e.config.restarts=0)}a(UF,"expectedRestartOfChildren");function Joe(e){return new Promise(async(t,r)=>{try{await To()}catch(n){r(n)}$e.delete(e,(n,s)=>{n&&($e.disconnect(),r(n)),$e.disconnect(),t(s)})})}a(Joe,"deleteProcess");async function BF(){await ya(Ra.generateRestart())}a(BF,"restartHdb");async function Xoe(){let e=await xO();for(let t in e)if(e[t].name===Xe.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Xoe,"isHdbRestartRunning");function xO(){return new Promise(async(e,t)=>{try{await To()}catch(r){t(r)}$e.list((r,n)=>{r&&($e.disconnect(),t(r)),$e.disconnect(),e(n)})})}a(xO,"list");function xF(e){return new Promise(async(t,r)=>{try{await To()}catch(n){r(n)}$e.describe(e,(n,s)=>{n&&($e.disconnect(),r(n)),$e.disconnect(),t(s)})})}a(xF,"describe");function Zoe(){if(!V_){for(let e of jr||[])e.kill();jr=[];return}return new Promise(async(e,t)=>{try{await To()}catch(r){t(r)}$e.killDaemon((r,n)=>{r&&($e.disconnect(),t(r)),$e.disconnect(),e(n)})})}a(Zoe,"kill");async function eae(){try{await GF(),await $F(),await ya(Ra.generateAllServiceConfigs())}catch(e){throw $e?.disconnect(),e}}a(eae,"startAllServices");async function HO(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Xe.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ra.generateMainServerConfig();break;case Xe.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ra.generateNatsIngestServiceConfig();break;case Xe.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ra.generateNatsReplyServiceConfig();break;case Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ra.generateNatsHubServerConfig(),await ya(r,t),await So.removeNatsConfig(e);return;case Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ra.generateNatsLeafServerConfig(),await ya(r,t),await So.removeNatsConfig(e);return;case Xe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ra.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ya(r)}catch(r){throw $e?.disconnect(),r}}a(HO,"startService");async function HF(){try{let e=await xO(),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 $e?.disconnect(),e}}a(HF,"getUniqueServicesList");async function tae(e=[]){try{let t=!1,r=await HF();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Xe.PROCESS_DESCRIPTORS.HDB?t=!0:await vF(o))}t&&await FF(Xe.PROCESS_DESCRIPTORS.HDB)}catch(t){throw $e?.disconnect(),t}}a(tae,"restartAllServices");async function kF(e){if(jr?.find(r=>r.name===e))return!0;let t=await Voe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(kF,"isServiceRegistered");async function FF(e){let t=dg.get(Xe.CONFIG_PARAMS.THREADS_COUNT)??dg.get(Xe.CONFIG_PARAMS.THREADS),r=await xF(e),n=qoe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await BO(e),await HO(e)):e===Xe.PROCESS_DESCRIPTORS.HDB?await BF():await MF(e)}a(FF,"reloadStopStart");var qF;async function GF(e=!1){for(let t in Xe.CLUSTERING_PROCESSES){let r=Xe.CLUSTERING_PROCESSES[t];await HO(r,e)}}a(GF,"startClusteringProcesses");async function $F(){qF=DF(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Xe.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ug.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ug.updateLocalStreams();let e=await Goe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Xe.PRE_4_0_0_VERSION){zc.info("Starting clustering upgrade 4.0.0 process"),DF(Xe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a($F,"startClusteringThreads");async function rae(){for(let e in Xe.CLUSTERING_PROCESSES)if(e!==Xe.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Xe.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await qF.terminate();else{let t=Xe.CLUSTERING_PROCESSES[e];await BO(t)}}a(rae,"stopClustering");async function nae(){for(let e in Xe.CLUSTERING_PROCESSES){let t=Xe.CLUSTERING_PROCESSES[e];if(await kF(t)===!1)return!1}return!0}a(nae,"isClusteringRunning");async function sae(){await So.generateNatsConfig(!0),await ug.reloadNATSHub(),await ug.reloadNATSLeaf(),await So.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await So.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(sae,"reloadClustering")});var qO={};Fe(qO,{compactOnStart:()=>iae,copyDb:()=>QF});async function iae(){ba.notify("Running compact on start"),console.log("Running compact on start");let e=(0,kO.get)(Oa.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Qe();(0,FO.updateConfigValue)(Oa.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,fg.join)(e,"backup",n+".mdb"),o=(0,fg.join)(e,Oa.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await KF(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){ba.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await QF(n,o),console.log("Backing up",n,"to",i),await(0,jc.move)(s,i,{overwrite:!0})}try{Yu()}catch(n){ba.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,jc.move)(i,s,{overwrite:!0}),await(0,jc.remove)((0,fg.join)(e,Oa.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{Yu()}catch(n){ba.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){ba.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,FO.updateConfigValue)(Oa.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,jc.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Yu(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await KF(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
14
- Total record count before compaction: ${i}, total after: ${c}.
15
- Database backup has not been removed and can be found here: ${s}`;ba.error(l),console.error(l)}(0,kO.get)(Oa.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,jc.remove)(s))}}async function KF(e){let t=await(0,jF.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function QF(e,t){console.log("copyDb start");let r=Qe()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,YF.open)(new WF.default(t)),c=o.openDB(_g.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let m=_.is_hash_attribute||_.isPrimaryKey,S,g;if(m&&(S=_.compression,g=hg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(m||_.indexed))continue;let T=new zF.default(!m,m);T.encoding="binary",T.compression=S;let E=n.openDB(h,T);E.decoder=null,E.decoderCopies=!1,E.encoding="binary",T.compression=g;let A=o.openDB(h,T);A.encoder=null,console.log("copying",h,"from",e,"to",t),await d(E,A,m,f)}if(i){let h=n.openDB(_g.AUDIT_STORE_NAME,Y_);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,m,S){let g=0,T=0,E=1e7,A=null;for(;E-- >0;)try{for(let w of h.getKeys({start:A,transaction:S}))try{A=w;let{value:M,version:H}=h.getEntry(w,{transaction:S});l=_.put(w,M,m?H:void 0),g++,S.openTimer&&(S.openTimer=0),T+=(w?.length||10)+M.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"bytes"),u=0)}catch(M){console.error("Error copying record",typeof w=="symbol"?"symbol":w,"from",e,"to",t,M)}console.log("finish copying, copied",g,"entries",T,"bytes");return}catch{if(typeof A=="string"){if(A==="z")return console.error("Reached end of dbi",A,"for",e,"to",t);A=A.slice(0,-2)+"z"}else if(typeof A=="number")A++;else return console.error("Unknown key type",A,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var YF,fg,jc,kO,WF,zF,_g,Oa,jF,FO,ba,GO=Oe(()=>{Pe();YF=require("lmdb"),fg=require("path"),jc=require("fs-extra"),kO=L(ne()),WF=L(yf()),zF=L(Rf()),_g=L(Dt()),Oa=L(v());Zi();jF=L(so()),FO=L(Ot()),ba=L(j());a(iae,"compactOnStart");a(KF,"getTotalDBRecordCount");a(QF,"copyDb")});var zu=P((gCe,nq)=>{"use strict";var oae=require("minimist"),{isMainThread:VO,parentPort:z_,threadId:mCe}=require("worker_threads"),et=v(),Pi=j(),KO=re(),pg=ag(),mg=Er(),pCe=yt(),eq=Ot(),ti=K_(),JF=Mu(),{compactOnStart:aae}=(GO(),se(qO)),cae=Qa(),{restartWorkers:Eg,onMessageByType:lae}=tt(),{handleHDBError:uae,hdb_errors:dae}=fe(),{HTTP_STATUS_CODES:fae}=dae,j_=ne(),{sendOperationToNode:XF,getThisNodeName:_ae,monitorNodeCAs:hae}=(fs(),se(ha)),{getHDBNodeTable:ECe}=(Cc(),se(xy));j_.initSync();var W_=`Restarting HarperDB. This may take up to ${et.RESTART_TIMEOUT_MS/1e3} seconds.`,mae="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",ZF="Clustering is not enabled so cannot be restarted",pae="Invalid service",Wu,Ss;nq.exports={restart:tq,restartService:YO};VO&&lae(et.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await YO({service:e.workerType}):tq({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function tq(e){Ss=Object.keys(e).length===0,Wu=await ti.isServiceRegistered(et.PROCESS_DESCRIPTORS.HDB);let t=oae(process.argv);if(t.service){await YO(t);return}if(Ss&&!Wu){console.error(mae);return}if(Ss&&console.log(W_),Wu){ti.enterPM2Mode(),Pi.notify(W_);let r=cae(Object.keys(et.CONFIG_PARAM_MAP),!0);return KO.isEmptyOrZeroLength(Object.keys(r))||eq.updateConfigValue(void 0,void 0,r,!0,!0),Eae(),W_}return VO?(Pi.notify(W_),j_.get(et.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await aae(),setTimeout(()=>{Eg()},50)):z_.postMessage({type:et.ITC_EVENT_TYPES.RESTART}),W_}a(tq,"restart");async function YO(e){let{service:t}=e;if(et.HDB_PROCESS_SERVICES[t]===void 0)throw uae(new Error,pae,fae.BAD_REQUEST,void 0,void 0,!0);if(ti.expectedRestartOfChildren(),Wu=await ti.isServiceRegistered(et.PROCESS_DESCRIPTORS.HDB),!VO){e.replicated&&hae(),z_.postMessage({type:et.ITC_EVENT_TYPES.RESTART,workerType:t}),z_.ref(),await new Promise(s=>{z_.on("message",i=>{i.type==="restart-complete"&&(s(),z_.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===_ae())continue;let{job_id:i}=await XF(s,e);n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await XF(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case et.HDB_PROCESS_SERVICES.clustering:if(!j_.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZF;break}Ss&&console.log("Restarting clustering"),Pi.notify("Restarting clustering"),await rq();break;case et.HDB_PROCESS_SERVICES.clustering_config:case et.HDB_PROCESS_SERVICES["clustering config"]:if(!j_.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZF;break}Ss&&console.log("Restarting clustering_config"),Pi.notify("Restarting clustering_config"),await ti.reloadClustering();break;case"custom_functions":case"custom functions":case et.HDB_PROCESS_SERVICES.harperdb:case et.HDB_PROCESS_SERVICES.http_workers:case et.HDB_PROCESS_SERVICES.http:if(Ss&&!Wu){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}Ss&&console.log("Restarting http_workers"),Pi.notify("Restarting http_workers"),Ss?await ti.restart(et.PROCESS_DESCRIPTORS.HDB):await Eg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Pi.error(r),Ss&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(YO,"restartService");async function Eae(){await rq(),await ti.restart(et.PROCESS_DESCRIPTORS.HDB),await KO.async_set_timeout(2e3),j_.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await $O(),Ss&&(await mg.closeConnection(),process.exit(0))}a(Eae,"restartPM2Mode");async function rq(){if(!eq.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JF.getHDBProcessInfo()).clustering.length===0)Pi.trace("Clustering not running, restart will start clustering services"),await pg.generateNatsConfig(!0),await ti.startClusteringProcesses(),await ti.startClusteringThreads(),await $O(),Ss&&await mg.closeConnection();else{await pg.generateNatsConfig(!0),Wu?(Pi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ti.restart(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.restart(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JF.getHDBProcessInfo()).clustering.forEach(s=>{Pi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await KO.async_set_timeout(3e3),await $O(),await mg.updateLocalStreams(),Ss&&await mg.closeConnection(),Pi.trace("Restart clustering restarting ingest and reply service threads");let t=Eg(et.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Eg(et.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(rq,"restartClustering");async function $O(){await pg.removeNatsConfig(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await pg.removeNatsConfig(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a($O,"removeNatsConfig")});var hq=P((ACe,_q)=>{"use strict";var TCe=require("lodash"),On=v(),{handleHDBError:sq,hdb_errors:gae}=fe(),{HDB_ERROR_MSGS:Sae,HTTP_STATUS_CODES:Tae}=gae,WO=j();_q.exports={getRolePermissions:Rae};var Qc=Object.create(null),Aae=a(e=>({key:e,perms:{}}),"perms_template_obj"),cq=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),lq=a((e=!1,t=!1,r=!1,n=!1)=>({[On.PERMS_CRUD_ENUM.READ]:e,[On.PERMS_CRUD_ENUM.INSERT]:t,[On.PERMS_CRUD_ENUM.UPDATE]:r,[On.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),zO=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...lq(t,r,n,s)}),"table_perms_template"),iq=a((e,t=lq())=>({attribute_name:e,describe:fq(t),[Q_]:t[Q_],[jO]:t[jO],[QO]:t[QO]}),"attr_perms_template"),oq=a((e,t=!1)=>({attribute_name:e,describe:t,[Q_]:t}),"timestamp_attr_perms_template"),{READ:Q_,INSERT:jO,UPDATE:QO}=On.PERMS_CRUD_ENUM,uq=Object.values(On.PERMS_CRUD_ENUM),dq=[Q_,jO,QO];function Rae(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[On.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Qc[t]&&Qc[t].key===n)return Qc[t].perms;let s=yae(e,r);return Qc[t]?Qc[t].key=n:Qc[t]=Aae(n),Qc[t].perms=s,s}catch(r){if(!e[On.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[On.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<On.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 WO.error(n),WO.debug(r),sq(new Error,Sae.OUTDATED_PERMS_TRANSLATION_ERROR,Tae.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
- ${r.stack}`;throw WO.error(n),sq(new Error)}}}a(Rae,"getRolePermissions");function yae(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[On.SYSTEM_SCHEMA_NAME]=n[On.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]=bae(t[i]);return}r[i]=cq(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=Oae(c,l);r[i].describe||uq.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=zO()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=zO()})}),r}a(yae,"translateRolePermissions");function bae(e){let t=cq(!0);return Object.keys(e).forEach(r=>{t.tables[r]=zO(!0,!0,!0,!0,!0)}),t}a(bae,"createStructureUserPermissions");function Oae(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return On.TIME_STAMP_NAMES.includes(d)&&(h=oq(d,f[Q_])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=iq(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=fq(f),s.attribute_permissions.push(f),c||Nae(f,l)}else if(u!==o){let f;On.TIME_STAMP_NAMES.includes(u)?f=oq(u):f=iq(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=aq(s),s}else return e.describe=aq(e),e}a(Oae,"getTableAttrPerms");function aq(e){return uq.filter(t=>e[t]).length>0}a(aq,"getSchemaTableDescribePerm");function fq(e){return dq.filter(t=>e[t]).length>0}a(fq,"getAttributeDescribePerm");function Nae(e,t){dq.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Nae,"checkForHashPerms")});var mq={};Fe(mq,{Headers:()=>Ao,appendHeader:()=>gg,mergeHeaders:()=>JO});function gg(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function JO(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Ao(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Ao,J_=Oe(()=>{Ao=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(gg,"appendHeader");a(JO,"mergeHeaders")});var X_={};Fe(X_,{authentication:()=>Rq,bypassAuth:()=>Mae,login:()=>Uae,logout:()=>Bae,start:()=>vae});function Mae(){Aq=!0}async function Rq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?Pae?Cae:[]:Iae?wae:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let m=new Ao([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Sg&&m.set("Access-Control-Allow-Credentials","true"),{status:200,headers:m}}o.push("Access-Control-Allow-Origin",i),Sg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Sg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",m=s?.split(/;\s+/)||[];for(let S of m)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await pq.get(l);break}e.session=u||(u={})}let f=a((_,m,S)=>{let g=new ju.AuthAuditLog(_,m,yr.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),m===yr.AUTH_AUDIT_STATUS.SUCCESS?XO.notify(g):XO.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&XO.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await je.getUser(_,null,e),f(_,yr.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,ju.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=Jc.get(n),!d){let _=n.indexOf(" "),m=n.slice(0,_),S=n.slice(_+1),g,T;try{switch(m){case"Basic":let E=atob(S),A=E.indexOf(":");g=E.slice(0,A),T=E.slice(A+1),d=g||T?await je.getUser(g,T,e):null;break;case"Bearer":try{d=await(0,Tg.validateOperationToken)(S)}catch(w){if(w.message==="invalid token")try{return await(0,Tg.validateRefreshToken)(S),c({status:-1})}catch{throw w}}break}}catch(E){return Lae&&(Jc.get(S)||(Jc.set(S,S),f(g,yr.AUTH_AUDIT_STATUS.FAILURE,m))),c({status:401,body:Xc({error:E.message},e)})}Jc.set(n,d),Dae&&f(d.username,yr.AUTH_AUDIT_STATUS.SUCCESS,m)}e.user=d}else u?.user?e.user=await je.getUser(u.user,null,e):(Aq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,gq.getSuperUser)());Sg&&(e.session.update=function(_){if(!l){l=(0,Sq.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):h?.headers?.set&&h.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")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,pq.put(_)},e.login=async function(_,m){let S=e.user=await je.getUser(_,m,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&pi.loginPath?(h.status=302,h.headers.set("Location",pi.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new Ao);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function vae({server:e,port:t,securePort:r}){e.http(Rq,t||r?{port:t,securePort:r}:{port:"all"}),Eq||(Eq=!0,setInterval(()=>{Jc=new Map},Ts.get(yr.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),Tq.user.addListener(()=>{Jc=new Map}))}async function Uae(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 Bae(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var gq,Tg,Sq,Ts,yr,ju,Tq,XO,wae,Iae,Cae,Pae,pq,Sg,Aq,Dae,Lae,Jc,Eq,Ag=Oe(()=>{gq=L(Gn());Gr();Fl();Tg=L(Eu());Pe();Sq=require("uuid"),Ts=L(ne()),yr=L(v()),ju=L(j()),Tq=L(kf());J_();Zc();XO=(0,ju.loggerWithTag)("auth-event");Ts.initSync();wae=Ts.get(yr.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Iae=Ts.get(yr.CONFIG_PARAMS.HTTP_CORS),Cae=Ts.get(yr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Pae=Ts.get(yr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),pq=it({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Sg=Ts.get(yr.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,Aq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Ts.get(yr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Dae=Ts.get(yr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Lae=Ts.get(yr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Jc=new Map;je.onInvalidatedUser(()=>{Jc=new Map});a(Mae,"bypassAuth");a(Rq,"authentication");a(vae,"start");a(Uae,"login");a(Bae,"logout")});var Cq=P((PCe,Iq)=>{"use strict";var ye=require("joi"),yq=require("fs-extra"),bq=require("path"),Jn=_t(),Oq=ne(),Nq=v(),wq=j(),{hdb_errors:xae}=fe(),{HDB_ERROR_MSGS:Qr}=xae,Ro=/^[a-zA-Z0-9-_]+$/,Hae=/^[a-zA-Z0-9-_]+$/;Iq.exports={getDropCustomFunctionValidator:Fae,setCustomFunctionValidator:qae,addComponentValidator:Kae,dropCustomFunctionProjectValidator:Yae,packageComponentValidator:Wae,deployComponentValidator:zae,setComponentFileValidator:Gae,getComponentFileValidator:Vae,dropComponentFileValidator:$ae,addSSHKeyValidator:jae,updateSSHKeyValidator:Qae,deleteSSHKeyValidator:Jae,setSSHKnownHostsValidator:Xae};function Rg(e,t,r){try{let n=Oq.get(Nq.CONFIG_PARAMS.COMPONENTSROOT),s=bq.join(n,t);return yq.existsSync(s)?e?t:r.message(Qr.PROJECT_EXISTS):e?r.message(Qr.NO_PROJECT):t}catch(n){return wq.error(n),r.message(Qr.VALIDATION_ERR)}}a(Rg,"checkProjectExists");function Z_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Z_,"checkFilePath");function kae(e,t,r,n){try{let s=Oq.get(Nq.CONFIG_PARAMS.COMPONENTSROOT),i=bq.join(s,e,t,r+".js");return yq.existsSync(i)?r:n.message(Qr.NO_FILE)}catch(s){return wq.error(s),n.message(Qr.VALIDATION_ERR)}}a(kae,"checkFileExists");function Fae(e){let t=ye.object({project:ye.string().pattern(Ro).custom(Rg.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().pattern(Ro).custom(kae.bind(null,e.project,e.type)).custom(Z_).required().messages({"string.pattern.base":Qr.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(Fae,"getDropCustomFunctionValidator");function qae(e){let t=ye.object({project:ye.string().pattern(Ro).custom(Rg.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().custom(Z_).required(),function_content:ye.string().required()});return Jn.validateBySchema(e,t)}a(qae,"setCustomFunctionValidator");function Gae(e){let t=ye.object({project:ye.string().pattern(Ro).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),file:ye.string().custom(Z_).required(),payload:ye.string().allow("").optional(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(Gae,"setComponentFileValidator");function $ae(e){let t=ye.object({project:ye.string().pattern(Ro).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),file:ye.string().custom(Z_).optional()});return Jn.validateBySchema(e,t)}a($ae,"dropComponentFileValidator");function Vae(e){let t=ye.object({project:ye.string().required(),file:ye.string().custom(Z_).required(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(Vae,"getComponentFileValidator");function Kae(e){let t=ye.object({project:ye.string().pattern(Ro).custom(Rg.bind(null,!1)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Kae,"addComponentValidator");function Yae(e){let t=ye.object({project:ye.string().pattern(Ro).custom(Rg.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(Yae,"dropCustomFunctionProjectValidator");function Wae(e){let t=ye.object({project:ye.string().pattern(Ro).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),skip_node_modules:ye.boolean(),skip_symlinks:ye.boolean()});return Jn.validateBySchema(e,t)}a(Wae,"packageComponentValidator");function zae(e){let t=ye.object({project:ye.string().pattern(Ro).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),package:ye.string().optional(),restart:ye.alternatives().try(ye.boolean(),ye.string().valid("rolling")).optional()});return Jn.validateBySchema(e,t)}a(zae,"deployComponentValidator");function jae(e){let t=ye.object({name:ye.string().pattern(Hae).required().messages({"string.pattern.base":Qr.BAD_SSH_KEY_NAME}),key:ye.string().required(),host:ye.string().required(),hostname:ye.string().required(),known_hosts:ye.string().optional()});return Jn.validateBySchema(e,t)}a(jae,"addSSHKeyValidator");function Qae(e){let t=ye.object({name:ye.string().required(),key:ye.string().required()});return Jn.validateBySchema(e,t)}a(Qae,"updateSSHKeyValidator");function Jae(e){let t=ye.object({name:ye.string().required()});return Jn.validateBySchema(e,t)}a(Jae,"deleteSSHKeyValidator");function Xae(e){let t=ye.object({known_hosts:ye.string().required()});return Jn.validateBySchema(e,t)}a(Xae,"setSSHKnownHostsValidator")});var eh=P((LCe,Uq)=>{"use strict";var yg=require("joi"),Na=require("path"),Qu=require("fs-extra"),{exec:Zae}=require("child_process"),ece=require("util"),Pq=ece.promisify(Zae),el=v(),{handleHDBError:Ju,hdb_errors:tce}=fe(),{HTTP_STATUS_CODES:Xu}=tce,tl=ne(),rce=_t(),rl=j();tl.initSync();var ZO=tl.get(el.CONFIG_PARAMS.COMPONENTSROOT),Dq="npm install --force --omit=dev --json",nce=`${Dq} --dry-run`,sce=tl.get(el.CONFIG_PARAMS.ROOTPATH),bg=Na.join(sce,"ssh");Uq.exports={installModules:cce,auditModules:lce,installAllRootModules:ice,uninstallRootModule:oce,linkHarperdb:ace,runCommand:Zu};async function ice(e=!1,t=tl.get(el.CONFIG_PARAMS.ROOTPATH)){await Og();let r=!1,n=process.env;Qu.pathExistsSync(bg)&&Qu.readdirSync(bg).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Na.join(bg,"config")+" -o UserKnownHostsFile="+Na.join(bg,"known_hosts"),...process.env},r=!0)});try{let s=tl.get(el.CONFIG_PARAMS.ROOTPATH),i=Na.join(s,"node_modules","harperdb");Qu.lstatSync(i).isSymbolicLink()&&Qu.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&rl.error("Error removing symlink:",s)}await Zu(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}a(ice,"installAllRootModules");async function oce(e){await Zu(`npm uninstall ${e}`,tl.get(el.CONFIG_PARAMS.ROOTPATH))}a(oce,"uninstallRootModule");async function ace(){await Og(),await Zu(`npm link ${el.PACKAGE_ROOT}`,tl.get(el.CONFIG_PARAMS.ROOTPATH))}a(ace,"linkHarperdb");async function Zu(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await Pq(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
17
- `,""))}return s&&!s.includes("Debugger listening")&&!s.includes("warn using --force")&&rl.error("Error running NPM command:",e,s),rl.trace(n,s),n?.replace(`
18
- `,"")}a(Zu,"runCommand");async function cce(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";rl.warn(t,e);let r=vq(e);if(r)throw Ju(r,r.message,Xu.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?nce:Dq;await Og(),await Mq(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=Na.join(ZO,u),d,h=null;try{let{stdout:_,stderr:m}=await Pq(i,{cwd:f});d=_?_.replace(`
19
- `,""):null,h=m?m.replace(`
20
- `,""):null}catch(_){_.stderr?o[u].npm_error=Lq(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return rl.info(`finished installModules with response ${o}`),o.warning=t,o}a(cce,"installModules");function Lq(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
21
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(Lq,"parseNPMStdErr");async function lce(e){rl.info(`starting auditModules for request: ${e}`);let t=vq(e);if(t)throw Ju(t,t.message,Xu.BAD_REQUEST);let{projects:r}=e;await Og(),await Mq(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Na.join(ZO,o);n[o]={npm_output:null,npm_error:null};try{let l=await Zu("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=Lq(l.stderr)}}return rl.info(`finished auditModules with response ${n}`),n}a(lce,"auditModules");async function Og(){try{return await Zu("npm -v"),!0}catch{throw Ju(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Xu.BAD_REQUEST,void 0,void 0,!0)}}a(Og,"checkNPMInstalled");async function Mq(e){if(!Array.isArray(e)||e.length===0)throw Ju(new Error,"projects argument must be an array with at least 1 element",Xu.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=Na.join(ZO,i.toString());if(!await Qu.pathExists(o)){t.push(i);continue}let l=Na.join(o,"package.json");await Qu.pathExists(l)||r.push(i)}if(t.length>0)throw Ju(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Xu.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ju(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Xu.BAD_REQUEST,void 0,void 0,!0)}a(Mq,"checkProjectPaths");function vq(e){let t=yg.object({projects:yg.array().min(1).items(yg.string()).required(),dry_run:yg.boolean().default(!1)});return rce.validateBySchema(e,t)}a(vq,"modulesValidator")});var eN=P((vCe,qq)=>{"use strict";var As=require("fs-extra"),rh=require("path"),th=j(),Bq=re(),Ng=v(),Fq=ne(),uce=Ot();qq.exports=dce;async function dce(){let e=fce(),t=Fq.get(Ng.CONFIG_PARAMS.ROOTPATH),r=rh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Ng.PACKAGE_ROOT}},s=rh.join(t,"node_modules");As.ensureDirSync(s);let i,o=!0,c=!1;try{i=As.readJsonSync(r)}catch(l){if(Bq.isEmptyOrZeroLength(e))return;if(l.code!==Ng.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!Bq.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=Hq(u);n.dependencies[l]=f+u}if(!o){th.notify("Installing components"),await kq(r,n,null),await xq(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=Hq(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(As.statSync(new URL(u+"/package.json")).mtimeMs>As.statSync(r).mtimeMs){c=!0;break}}catch(h){th.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(th.notify("Removing component",l),c=!0);c&&(th.notify("Updating components."),await kq(r,n,i),await xq(t,e))}a(dce,"installComponents");function xq(e,t){return Promise.all(t.map(({name:r})=>{let n=rh.join(e,"node_modules",r),s=rh.join(e,"components",r);if(As.existsSync(n)&&As.lstatSync(n).isDirectory())return As.move(n,s,{overwrite:!0}).then(()=>{As.symlink(s,n)})}))}a(xq,"moveModuleToComponents");function fce(){let e=uce.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(fce,"getComponentsConfig");function Hq(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":rh.extname(e)||As.existsSync(e)?"file:":"github:"}a(Hq,"getPkgPrefix");async function kq(e,t,r){th.trace("npm installing components package.json",t),As.writeFileSync(e,JSON.stringify(t,null," "));try{await eh().installAllRootModules(Fq.get(Ng.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?As.writeFileSync(e,JSON.stringify(r,null," ")):As.unlinkSync(e),n}}a(kq,"installPackages")});var Kq={};Fe(Kq,{packageDirectory:()=>_ce});function _ce(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];$q.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,Gq.join)("cache","webpack")):void 0}).pipe((0,Vq.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var Gq,$q,Vq,Yq=Oe(()=>{Gq=require("path"),$q=L(require("tar-fs")),Vq=require("node:zlib");a(_ce,"packageDirectory")});var oN=P((kCe,Qq)=>{var Pg=require("clone"),Dg=_t(),hce=re(),Ig=v(),xCe=j(),tN=require("fs"),nN=require("joi"),{string:Cg}=nN.types(),{hdb_errors:mce,handleHDBError:wg}=fe(),{HDB_ERROR_MSGS:HCe,HTTP_STATUS_CODES:rN}=mce,{common_validators:ed}=Ti(),Wq=" is required",pce=["insert","update","upsert"],sN={database:{presence:!1,format:ed.schema_format,length:ed.schema_length},schema:{presence:!1,format:ed.schema_format,length:ed.schema_length},table:{presence:!0,format:ed.schema_format,length:ed.schema_length},action:{inclusion:{within:pce,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Ece={schema:Cg.required(),table:Cg.required(),action:Cg.valid("insert","update","upsert")},{AWS_ACCESS_KEY:gce,AWS_SECRET:Sce,AWS_BUCKET:Tce,AWS_FILE_KEY:Ace,REGION:Rce}=Ig.S3_BUCKET_AUTH_KEYS,yce={s3:{presence:!0},[`s3.${gce}`]:{presence:!0,type:"String"},[`s3.${Sce}`]:{presence:!0,type:"String"},[`s3.${Tce}`]:{presence:!0,type:"String"},[`s3.${Ace}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Rce}`]:{presence:!0,type:"String"}},zq=Pg(sN);zq.data.presence={message:Wq};var jq=Pg(sN);jq.file_path.presence={message:Wq};var bce=Object.assign(Pg(sN),yce),iN=Pg(Ece);iN.csv_url=Cg.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();iN.passthrough_headers=nN.object();function Oce(e){let t=Dg.validateObject(e,zq);return Lg(e,t)}a(Oce,"dataObject");function Nce(e){let t=Dg.validateBySchema(e,nN.object(iN));return Lg(e,t)}a(Nce,"urlObject");function wce(e){let t=Dg.validateObject(e,jq);return Lg(e,t)}a(wce,"fileObject");function Ice(e){let t=Dg.validateObject(e,bce);return Lg(e,t)}a(Ice,"s3FileObject");function Lg(e,t){if(!t){let r=hce.checkGlobalSchemaTable(e.schema,e.table);if(r)return wg(new Error,r,rN.BAD_REQUEST);if(e.operation===Ig.OPERATIONS_ENUM.CSV_FILE_LOAD)try{tN.accessSync(e.file_path,tN.constants.R_OK|tN.constants.F_OK)}catch(n){return n.code===Ig.NODE_ERROR_CODES.ENOENT?wg(n,`No such file or directory ${n.path}`,rN.BAD_REQUEST):n.code===Ig.NODE_ERROR_CODES.EACCES?wg(n,`Permission denied ${n.path}`,rN.BAD_REQUEST):wg(n)}}return t}a(Lg,"postValidateChecks");Qq.exports={dataObject:Oce,urlObject:Nce,fileObject:wce,s3FileObject:Ice}});var aN=P((qCe,Jq)=>{"use strict";var nh=j(),Mg=v();async function Cce(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===Mg.OPERATIONS_ENUM.INSERT||t.operation===Mg.OPERATIONS_ENUM.UPDATE||t.operation===Mg.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Mg.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(nh.info(i.message),i):i.http_resp_msg?(nh.error(`Error calling operation: ${e.name}`),nh.error(i.http_resp_msg),i):(nh.error(`Error calling operation: ${e.name}`),nh.error(i),i)}}a(Cce,"callOperationFunctionAsAwait");Jq.exports={callOperationFunctionAsAwait:Cce}});var cN=P(($Ce,Zq)=>{"use strict";var{S3:Pce,GetObjectCommand:Dce}=require("@aws-sdk/client-s3");Zq.exports={getFileStreamFromS3:Lce,getS3AuthObj:Xq};async function Lce(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Xq(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Dce(r))).Body}a(Lce,"getFileStreamFromS3");function Xq(e,t,r){return new Pce({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Xq,"getS3AuthObj")});var tG=P((KCe,eG)=>{"use strict";var lN=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}},uN=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};eG.exports={BulkLoadFileObject:lN,BulkLoadDataObject:uN}});var nG=P((WCe,rG)=>{"use strict";var dN=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}};rG.exports=dN});var iG=P((jCe,sG)=>{"use strict";var fN=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};sG.exports=fN});var hN=P((JCe,aG)=>{"use strict";var oG=nG(),Mce=iG(),{HDB_ERROR_MSGS:vce}=Ln(),_N=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=vce.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 oG(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Mce(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new oG(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}};aG.exports=_N});var lG=P((ZCe,cG)=>{"use strict";var mN=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};cG.exports=mN});var AN=P((iPe,NG)=>{"use strict";var vg=fn(),Bg=oN(),Uce=require("needle"),ri=v(),tPe=yt(),td=re(),{handleHDBError:Lt,hdb_errors:gG}=fe(),{HTTP_STATUS_CODES:Lr,HDB_ERROR_MSGS:gr,CHECK_LOGS_WRAPPER:sl}=gG,rd=j(),pN=require("papaparse");td.promisifyPapaParse();var ni=require("fs-extra"),Bce=require("path"),{chain:uG}=require("stream-chain"),dG=require("stream-json/streamers/StreamArray"),fG=require("stream-json/utils/Batch"),_G=require("stream-chain/utils/comp"),{finished:hG}=require("stream"),xce=ne(),SG=aN(),Hce=cN(),{BulkLoadFileObject:gN,BulkLoadDataObject:kce}=tG(),SN=hN(),{verifyBulkLoadAttributePerms:TG}=xg(),rPe=lG(),nPe=Er(),sPe=no(),{databases:Fce}=(Pe(),se(rt)),{coerceType:qce}=(lf(),se(RN)),mG="No records parsed from csv file.",nl=`${xce.get("HDB_ROOT")}/tmp`,{schema_regex:Gce}=Ti(),pG=1024*1024*2,EG=5e3,$ce={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};NG.exports={csvDataLoad:Vce,csvURLLoad:Kce,csvFileLoad:Yce,importFromS3:Wce};async function Vce(e,t){let r=Bg.dataObject(e);if(r)throw Lt(r,r.message,Lr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=yG(e.schema,e.table),i=pN.parse(e.data,{header:!0,skipEmptyLines:!0,transform:EN.bind(null,s),dynamicTyping:!1}),o=new SN;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&TG(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Lt(new Error,c,Lr.BAD_REQUEST,void 0,void 0,!0);let l=new kce(e.action,e.schema,e.table,i.data);return n=await SG.callOperationFunctionAsAwait(bG,l,null),n.message===mG?mG:OG(n.records,n.number_written)}catch(s){throw il(s)}}a(Vce,"csvDataLoad");async function Kce(e){let t=Bg.urlObject(e);if(t)throw Lt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${nl}/${r}`;try{await zce(e,r)}catch(s){throw rd.error(gr.DOWNLOAD_FILE_ERR(r)+" - "+s),Lt(s,sl(gr.DOWNLOAD_FILE_ERR(r)))}try{let s=new gN(this.job_operation_function.name,e.action,e.schema,e.table,n,ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await TN(s);return await Ug(n),i}catch(s){throw await Ug(n),il(s)}}a(Kce,"csvURLLoad");async function Yce(e){let t=Bg.fileObject(e);if(t)throw Lt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=new gN(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await TN(r)}catch(n){throw il(n)}}a(Yce,"csvFileLoad");async function Wce(e){let t=Bg.s3FileObject(e);if(t)throw Lt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Bce.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${nl}/${s}`;let i=new gN(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await jce(s,e);let o=await TN(i);return await Ug(r),o}catch(n){throw await Ug(r),il(n)}}a(Wce,"importFromS3");async function zce(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Uce("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Lt(n,s,n.statusCode,ri.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Jce(r,e.csv_url),await Qce(t,r.raw)}a(zce,"downloadCSVFile");async function jce(e,t){try{let r=`${nl}/${e}`;await ni.mkdirp(nl),await ni.writeFile(`${nl}/${e}`,"",{flag:"a+"});let n=await ni.createWriteStream(r),s=await Hce.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(){rd.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw rd.error(gr.S3_DOWNLOAD_ERR+" - "+r),Lt(r,sl(gr.S3_DOWNLOAD_ERR))}}a(jce,"downloadFileFromS3");async function Qce(e,t){try{await ni.mkdirp(nl),await ni.writeFile(`${nl}/${e}`,t)}catch(r){throw rd.error(gr.WRITE_TEMP_FILE_ERR),Lt(r,sl(gr.DEFAULT_BULK_LOAD_ERR))}}a(Qce,"writeFileToTempFolder");async function Ug(e){if(e)try{await ni.access(e),await ni.unlink(e)}catch{rd.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Ug,"deleteTempFile");function Jce(e,t){if(e.statusCode!==gG.HTTP_STATUS_CODES.OK)throw Lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Lr.BAD_REQUEST);if(!$ce[e.headers["content-type"]])throw Lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Lr.BAD_REQUEST);if(!e.raw)throw Lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Lr.BAD_REQUEST)}a(Jce,"validateURLResponse");async function TN(e){try{let t;switch(e.file_type){case ri.VALID_S3_FILE_TYPES.CSV:t=await Xce(e);break;case ri.VALID_S3_FILE_TYPES.JSON:t=await Zce(e);break;default:throw Lt(new Error,gr.DEFAULT_BULK_LOAD_ERR,Lr.BAD_REQUEST,ri.LOG_LEVELS.ERROR,gr.INVALID_FILE_EXT_ERR(e))}return OG(t.records,t.number_written)}catch(t){throw il(t)}}a(TN,"fileLoad");async function AG(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 vg.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&TG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Lt(c);r(l)}}a(AG,"validateChunk");async function RG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;td.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!td.isEmpty(c)&&!td.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await SG.callOperationFunctionAsAwait(bG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Lt(c,sl(gr.INSERT_CSV_ERR),Lr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.INSERT_CSV_ERR+" - "+c);r(l)}}a(RG,"insertChunk");async function Xce(e){let t={records:0,number_written:0},r=yG(e.schema,e.table);try{let n=new SN,s=ni.createReadStream(e.file_path,{highWaterMark:pG});s.setEncoding("utf8"),await pN.parsePromise(s,AG.bind(null,e,n),EN.bind(null,r));let i=n.getPermsResponse();if(i)throw Lt(new Error,i,Lr.BAD_REQUEST);return s=ni.createReadStream(e.file_path,{highWaterMark:pG}),s.setEncoding("utf8"),await pN.parsePromise(s,RG.bind(null,e,t),EN.bind(null,r)),s.destroy(),t}catch(n){throw Lt(n,sl(gr.PAPA_PARSE_ERR),Lr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.PAPA_PARSE_ERR+n)}}a(Xce,"callPapaParse");function yG(e,t){let r=Fce[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>qce(i,s));return n}a(yG,"createTransformMap");function EN(e,t,r){let n=e.get(r);return n?n(t):td.autoCast(t)}a(EN,"typeFunction");async function Zce(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new SN,s=uG([ni.createReadStream(e.file_path,{encoding:"utf-8"}),dG.withParser(),c=>c.value,new fG({batchSize:EG}),_G(async c=>{await AG(e,n,r,c)})]);await new Promise((c,l)=>{hG(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Lt(new Error,i,Lr.BAD_REQUEST);let o=uG([ni.createReadStream(e.file_path,{encoding:"utf-8"}),dG.withParser(),c=>c.value,new fG({batchSize:EG}),_G(async c=>{await RG(e,t,r,c)})]);return await new Promise((c,l)=>{hG(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Lt(n,sl(gr.INSERT_JSON_ERR),Lr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.INSERT_JSON_ERR+n)}}a(Zce,"insertJson");async function bG(e){let t={};try{e.data&&e.data.length>0&&ele(e.data[0])?t=await tle(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",rd.info(t.message))}catch(r){throw il(r)}return t}a(bG,"callBulkFileLoad");function ele(e){let t=Object.keys(e);for(let r of t)if(!Gce.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(ele,"validateColumnNames");async function tle(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=vg.insert;break;case"update":i=vg.update;break;case"upsert":i=vg.upsert;break;default:throw Lt(new Error,gr.INVALID_ACTION_PARAM_ERR(n),Lr.BAD_REQUEST,ri.LOG_LEVELS.ERROR,gr.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 f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=td.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw il(o)}}a(tle,"bulkFileLoad");function OG(e,t){return`successfully loaded ${t} of ${e} records`}a(OG,"buildResponseMsg");function il(e){return Lt(e,sl(gr.DEFAULT_BULK_LOAD_ERR),Lr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,gr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(il,"buildTopLevelErrMsg")});var IG=P((aPe,wG)=>{"use strict";var yN=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};wG.exports=yN});var DG=P((lPe,PG)=>{"use strict";var rle=v(),CG=require("moment"),nle=require("uuid").v4,bN=class{static{a(this,"JobObject")}constructor(){this.id=nle(),this.type=void 0,this.start_datetime=CG().valueOf(),this.created_datetime=CG().valueOf(),this.end_datetime=void 0,this.status=rle.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};PG.exports=bN});var ON=P((dPe,MG)=>{"use strict";var Rs=require("joi"),LG=_t();MG.exports={readTransactionLogValidator:sle,deleteTransactionLogsBeforeValidator:ile};function sle(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return LG.validateBySchema(e,t)}a(sle,"readTransactionLogValidator");function ile(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return LG.validateBySchema(e,t)}a(ile,"deleteTransactionLogsBeforeValidator")});var NN=P((_Pe,qG)=>{"use strict";var ole=require("uuid").v4,HG=fn(),kG=$r(),ale=Ys(),cle=iu(),lle=IG(),St=v(),ule=DG(),dle=aE(),si=j(),fle=tf(),nd=re(),{promisify:_le}=require("util"),ol=require("moment"),hle=kg(),Hg=oN(),vG=oR(),{deleteTransactionLogsBeforeValidator:mle}=ON(),{handleHDBError:UG,hdb_errors:ple,ClientError:Ele}=fe(),{HTTP_STATUS_CODES:BG}=ple,xG=kG.searchByValue,gle=kG.searchByHash,Sle=HG.insert,Tle=_le(hle.evaluateSQL),Ale=HG.update;qG.exports={addJob:ble,updateJob:Nle,handleGetJob:Rle,handleGetJobsByStartDate:yle,getJobById:FG};async function Rle(e){if(e.id===void 0)throw new Ele("'id' is required");let t=await FG(e.id);return nd.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(Rle,"handleGetJob");async function yle(e){try{let t=await Ole(e);if(si.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=ol(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ol(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 si.error(r),new Error(r)}}a(yle,"handleGetJobsByStartDate");async function ble(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||nd.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return si.info(f),t.error=f,t}if(!St.JOB_TYPE_ENUM[e.operation])return si.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case St.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Hg.fileObject(e);break;case St.OPERATIONS_ENUM.CSV_URL_LOAD:n=Hg.urlObject(e);break;case St.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Hg.dataObject(e);break;case St.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Hg.s3FileObject(e);break;case St.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case St.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=vG(e,"date");break;case St.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=vG(e,"timestamp");break;case St.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=mle(e);break;case St.OPERATIONS_ENUM.RESTART_SERVICE:if(St.HDB_PROCESS_SERVICES[e.service]===void 0)throw UG(new Error,"Invalid service",BG.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw UG(n,n.message,BG.BAD_REQUEST,void 0,void 0,!0);let s=new ule;s.type=e.operation===St.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?St.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new ale(St.SYSTEM_SCHEMA_NAME,St.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await xG(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return si.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=ole();try{o=await xG(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return si.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return si.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new fle(St.SYSTEM_SCHEMA_NAME,St.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await Sle(l)}catch(f){return si.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,si.trace(f)}return t}a(ble,"addJob");async function Ole(e){let t=ol(e.from_date,ol.ISO_8601),r=ol(e.to_date,ol.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 lle(n,e.hdb_user);try{return await Tle(s)}catch(i){throw si.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(Ole,"getJobsInDateRange");async function FG(e){if(nd.isEmptyOrZeroLength(e))return nd.errorizeMessage("Invalid job ID specified.");let t=new cle(St.SYSTEM_SCHEMA_NAME,St.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await gle(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return si.error(n),nd.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(FG,"getJobById");async function Nle(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(nd.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===St.JOB_STATUS_ENUM.COMPLETE||e.status===St.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ol().valueOf());let t=new dle(St.SYSTEM_SCHEMA_NAME,St.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Ale(t),r}a(Nle,"updateJob")});var Gg=P((mPe,WG)=>{"use strict";var wN=v(),sh=Er(),GG=re(),$G=ne(),VG=no(),KG=j(),{handleHDBError:Fg,hdb_errors:wle}=fe(),{HTTP_STATUS_CODES:qg}=wle,{readTransactionLogValidator:Ile,deleteTransactionLogsBeforeValidator:Cle}=ON(),YG=kn(),Ple="Logs successfully deleted from transaction log.",Dle="All logs successfully deleted from transaction log.";WG.exports={readTransactionLog:Lle,deleteTransactionLogsBefore:vle};async function Lle(e){let t=Ile(e);if(t)throw Fg(t,t.message,qg.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=GG.checkSchemaTableExist(e.database,e.table);if(r)throw Fg(new Error,r,qg.NOT_FOUND,void 0,void 0,!0);return $G.get(wN.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Mle(e):(KG.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),YG.readAuditLog(e))}a(Lle,"readTransactionLog");async function*Mle(e){let t=VG.createNatsTableStreamName(e.database,e.table),r=await sh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===wN.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Mle,"readTransactionLogNats");async function vle(e){let t=Cle(e);if(t)throw Fg(t,t.message,qg.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!$G.get(wN.CONFIG_PARAMS.CLUSTERING_ENABLED))return KG.info("Delete transaction logs called for Plexus"),YG.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=GG.checkSchemaTableExist(r,n);if(i)throw Fg(new Error,i,qg.NOT_FOUND,void 0,void 0,!0);let o=VG.createNatsTableStreamName(r,n),{jsm:c}=await sh.getNATSReferences(),l=await sh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=Ple,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Dle):d=(await sh.viewStream(o,parseInt(s),1))[0].nats_sequence,await sh.purgeTableStream(r,n,{seq:d}),f}a(vle,"deleteTransactionLogsBefore")});var t$=P((EPe,e$)=>{"use strict";var zG=re(),Sr=v(),Ule=require("moment"),$g=AN(),ih=j(),jG=NN(),QG=Vg(),JG=Ec(),XG=tt(),Ble=Gg(),xle=zu(),{parentPort:Hle,isMainThread:ZG}=require("worker_threads"),{onMessageByType:kle}=tt(),IN=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Fle(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(zG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(zG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Sr.JOB_TYPE_ENUM.csv_file_load:await Di(e,$g.csvFileLoad);break;case Sr.JOB_TYPE_ENUM.csv_url_load:await Di(e,$g.csvURLLoad);break;case Sr.JOB_TYPE_ENUM.csv_data_load:await Di(e,$g.csvDataLoad);break;case Sr.JOB_TYPE_ENUM.import_from_s3:await Di(e,$g.importFromS3);break;case Sr.JOB_TYPE_ENUM.empty_trash:break;case Sr.JOB_TYPE_ENUM.export_local:await Di(e,QG.export_local);break;case Sr.JOB_TYPE_ENUM.export_to_s3:await Di(e,QG.export_to_s3);break;case Sr.JOB_TYPE_ENUM.delete_files_before:case Sr.JOB_TYPE_ENUM.delete_records_before:await Di(e,JG.deleteFilesBefore);break;case Sr.JOB_TYPE_ENUM.delete_audit_logs_before:await Di(e,JG.deleteAuditLogsBefore);break;case Sr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Di(e,Ble.deleteTransactionLogsBefore);break;case Sr.JOB_TYPE_ENUM.restart_service:return await Di(e,xle.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Fle,"parseMessage");async function Di(e,t){try{e.job.status=Sr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Ule().valueOf(),await jG.updateJob(e.job),await qle(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):ih.error(`There was an error running ${t.name} job with id ${e.job.id}`),ih.error(n),e.job.message=n,e.job.status=Sr.JOB_STATUS_ENUM.ERROR;try{await jG.updateJob(e.job)}catch(s){throw ih.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Di,"runJob");async function qle(e){ih.trace("launching job thread:",e),ZG?XG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Sr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Hle.postMessage({type:Sr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(qle,"launchJobThread");ZG&&kle(Sr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{XG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Sr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){ih.error(r)}});e$.exports={parseMessage:Fle,RunnerMessage:IN}});var n$=P((SPe,r$)=>{"use strict";var CN=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};r$.exports=CN});var BN=P((RPe,UN)=>{"use strict";var jg=$r(),LN=kg(),Kg=AN(),yo=LE(),Yg=so(),ah=Ec(),Gle=bb(),oh=Gn(),Wg=N_(),Nt=xN(),zg=j(),$le=Ub(),Vle=YE(),s$=aO(),Kle=zE(),Yle=uO(),Wle=dO(),zle=hO(),jle=pO(),PN=ZE(),i$=Vg(),Qle=xg(),MN=NN(),$=v(),{hdb_errors:lh,handleHDBError:ch}=fe(),{HTTP_STATUS_CODES:o$}=lh,DN=CO(),a$=zu(),E$=require("util"),id=fn(),Jle=Gs(),Xle=Mu(),c$=t$(),l$=Eu(),u$=(Ag(),se(X_)),d$=Ot(),f$=Gg(),_$=eh(),{setServerUtilities:Zle}=(lf(),se(RN)),{CONTEXT:APe}=(Xo(),se(iA)),{_assignPackageExport:eue}=di(),{transformReq:tue}=re(),{server:rue}=(Gr(),se(tc)),Jr=zg.loggerWithTag("operation"),sd=Zs(),h$=(Gc(),se(qc)),nue=aN(),m$=jg.searchByHash,sue=jg.searchByValue,iue=E$.promisify(jg.search),oue=E$.promisify(LN.evaluateSQL),aue={[$.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.CREATE_TABLE]:!0,[$.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[$.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.DROP_TABLE]:!0,[$.OPERATIONS_ENUM.DROP_SCHEMA]:!0},J=n$();async function g$(e,t){try{if(e.body.operation!=="read_log"&&(zg.log_level===$.LOG_LEVELS.INFO||zg.log_level===$.LOG_LEVELS.DEBUG||zg.log_level===$.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;Jr.info(c)}}catch(n){Jr.error(n)}let r=await nue.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return aue[e.body.operation]&&Jle.setSchemaDataToGlobal(n=>{n&&Jr.error(n)}),r}a(g$,"processLocalTransaction");var p$=lue();UN.exports={chooseOperation:S$,getOperationFunction:T$,operation:vN,processLocalTransaction:g$,executeJob:ys};Zle(UN.exports);rue.operation=vN;function S$(e){let t;try{t=T$(e)}catch(s){throw Jr.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=LN.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LN.checkASTPermissions(e,i);if(o)throw Jr.error(`${o$.FORBIDDEN} from operation ${e.operation}`),Jr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),ch(new Error,o,lh.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.OPERATIONS_ENUM.LOGIN&&e.operation!==$.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=Qle.verifyPerms(i,s);if(o)throw Jr.error(`${o$.FORBIDDEN} from operation ${e.operation}`),Jr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),ch(new Error,o,lh.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw ch(s,"There was an error when trying to choose an operation path")}return r}a(S$,"chooseOperation");function T$(e){if(Jr.trace(`getOperationFunction with operation: ${e.operation}`),p$.has(e.operation))return p$.get(e.operation);throw ch(new Error,lh.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),lh.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(T$,"getOperationFunction");eue("operation",vN);function vN(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=S$(e);return g$({body:e},n)}a(vN,"operation");async function cue(e){Jr.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[$.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case $.OPERATIONS_ENUM.INSERT:o=await id.insert(i);break;case $.OPERATIONS_ENUM.UPDATE:o=await id.update(i);break;case $.OPERATIONS_ENUM.UPSERT:o=await id.upsert(i);break;case $.OPERATIONS_ENUM.DELETE:o=await ah.deleteRecord(i);break;default:Jr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Jr.info("Invalid operation in transaction"),Jr.error(o)}}a(cue,"catchup");async function ys(e){tue(e);let t,r;try{r=await MN.addJob(e),t=r.createdJob,Jr.info("addJob result",r);let n=new c$.RunnerMessage(t,e);return{message:await c$.parseMessage(n)??`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 Jr.error(s),ch(n,s)}}a(ys,"executeJob");function lue(){let e=new Map;return e.set($.OPERATIONS_ENUM.INSERT,new J(id.insert)),e.set($.OPERATIONS_ENUM.UPDATE,new J(id.update)),e.set($.OPERATIONS_ENUM.UPSERT,new J(id.upsert)),e.set($.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new J(jg.searchByConditions)),e.set($.OPERATIONS_ENUM.SEARCH_BY_HASH,new J(m$)),e.set($.OPERATIONS_ENUM.SEARCH_BY_ID,new J(m$)),e.set($.OPERATIONS_ENUM.SEARCH_BY_VALUE,new J(sue)),e.set($.OPERATIONS_ENUM.SEARCH,new J(iue)),e.set($.OPERATIONS_ENUM.SQL,new J(oue)),e.set($.OPERATIONS_ENUM.CSV_DATA_LOAD,new J(ys,Kg.csvDataLoad)),e.set($.OPERATIONS_ENUM.CSV_FILE_LOAD,new J(ys,Kg.csvFileLoad)),e.set($.OPERATIONS_ENUM.CSV_URL_LOAD,new J(ys,Kg.csvURLLoad)),e.set($.OPERATIONS_ENUM.IMPORT_FROM_S3,new J(ys,Kg.importFromS3)),e.set($.OPERATIONS_ENUM.CREATE_SCHEMA,new J(yo.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_DATABASE,new J(yo.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_TABLE,new J(yo.createTable)),e.set($.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new J(yo.createAttribute)),e.set($.OPERATIONS_ENUM.DROP_SCHEMA,new J(yo.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_DATABASE,new J(yo.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_TABLE,new J(yo.dropTable)),e.set($.OPERATIONS_ENUM.DROP_ATTRIBUTE,new J(yo.dropAttribute)),e.set($.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new J(Yg.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_DATABASE,new J(Yg.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_TABLE,new J(Yg.describeTable)),e.set($.OPERATIONS_ENUM.DESCRIBE_ALL,new J(Yg.describeAll)),e.set($.OPERATIONS_ENUM.DELETE,new J(ah.deleteRecord)),e.set($.OPERATIONS_ENUM.ADD_USER,new J(oh.addUser)),e.set($.OPERATIONS_ENUM.ALTER_USER,new J(oh.alterUser)),e.set($.OPERATIONS_ENUM.DROP_USER,new J(oh.dropUser)),e.set($.OPERATIONS_ENUM.LIST_USERS,new J(oh.listUsersExternal)),e.set($.OPERATIONS_ENUM.LIST_ROLES,new J(Wg.listRoles)),e.set($.OPERATIONS_ENUM.ADD_ROLE,new J(Wg.addRole)),e.set($.OPERATIONS_ENUM.ALTER_ROLE,new J(Wg.alterRole)),e.set($.OPERATIONS_ENUM.DROP_ROLE,new J(Wg.dropRole)),e.set($.OPERATIONS_ENUM.USER_INFO,new J(oh.userInfo)),e.set($.OPERATIONS_ENUM.READ_LOG,new J($le)),e.set($.OPERATIONS_ENUM.ADD_NODE,new J(Vle)),e.set($.OPERATIONS_ENUM.UPDATE_NODE,new J(s$)),e.set($.OPERATIONS_ENUM.SET_NODE_REPLICATION,new J(s$)),e.set($.OPERATIONS_ENUM.REMOVE_NODE,new J(Kle)),e.set($.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new J(Yle)),e.set($.OPERATIONS_ENUM.PURGE_STREAM,new J(Wle)),e.set($.OPERATIONS_ENUM.SET_CONFIGURATION,new J(d$.setConfiguration)),e.set($.OPERATIONS_ENUM.CLUSTER_STATUS,new J(zle.clusterStatus)),e.set($.OPERATIONS_ENUM.CLUSTER_NETWORK,new J(jle)),e.set($.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new J(PN.setRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new J(PN.getRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new J(PN.deleteRoutes)),e.set($.OPERATIONS_ENUM.EXPORT_TO_S3,new J(ys,i$.export_to_s3)),e.set($.OPERATIONS_ENUM.CREATE_CSR,new J(sd.createCsr)),e.set($.OPERATIONS_ENUM.SIGN_CERTIFICATE,new J(sd.signCertificate)),e.set($.OPERATIONS_ENUM.LIST_CERTIFICATES,new J(sd.listCertificates)),e.set($.OPERATIONS_ENUM.ADD_CERTIFICATES,new J(sd.addCertificate)),e.set($.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new J(sd.removeCertificate)),e.set($.OPERATIONS_ENUM.GET_KEY,new J(sd.getKey)),e.set($.OPERATIONS_ENUM.ADD_NODE_BACK,new J(h$.addNodeBack)),e.set($.OPERATIONS_ENUM.REMOVE_NODE_BACK,new J(h$.removeNodeBack)),e.set($.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new J(ys,ah.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new J(ys,ah.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.EXPORT_LOCAL,new J(ys,i$.export_local)),e.set($.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new J(MN.handleGetJobsByStartDate)),e.set($.OPERATIONS_ENUM.GET_JOB,new J(MN.handleGetJob)),e.set($.OPERATIONS_ENUM.GET_FINGERPRINT,new J(DN.getFingerprint)),e.set($.OPERATIONS_ENUM.SET_LICENSE,new J(DN.setLicense)),e.set($.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new J(DN.getRegistrationInfo)),e.set($.OPERATIONS_ENUM.RESTART,new J(a$.restart)),e.set($.OPERATIONS_ENUM.RESTART_SERVICE,new J(ys,a$.restartService)),e.set($.OPERATIONS_ENUM.CATCHUP,new J(cue)),e.set($.OPERATIONS_ENUM.SYSTEM_INFORMATION,new J(Xle.systemInformation)),e.set($.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new J(ys,ah.deleteAuditLogsBefore)),e.set($.OPERATIONS_ENUM.READ_AUDIT_LOG,new J(Gle)),e.set($.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new J(l$.createTokens)),e.set($.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new J(l$.refreshOperationToken)),e.set($.OPERATIONS_ENUM.LOGIN,new J(u$.login)),e.set($.OPERATIONS_ENUM.LOGOUT,new J(u$.logout)),e.set($.OPERATIONS_ENUM.GET_CONFIGURATION,new J(d$.getConfiguration)),e.set($.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new J(Nt.customFunctionsStatus)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new J(Nt.getCustomFunctions)),e.set($.OPERATIONS_ENUM.GET_COMPONENT_FILE,new J(Nt.getComponentFile)),e.set($.OPERATIONS_ENUM.GET_COMPONENTS,new J(Nt.getComponents)),e.set($.OPERATIONS_ENUM.SET_COMPONENT_FILE,new J(Nt.setComponentFile)),e.set($.OPERATIONS_ENUM.DROP_COMPONENT,new J(Nt.dropComponent)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new J(Nt.getCustomFunction)),e.set($.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new J(Nt.setCustomFunction)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new J(Nt.dropCustomFunction)),e.set($.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new J(Nt.addComponent)),e.set($.OPERATIONS_ENUM.ADD_COMPONENT,new J(Nt.addComponent)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new J(Nt.dropCustomFunctionProject)),e.set($.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Nt.packageComponent)),e.set($.OPERATIONS_ENUM.PACKAGE_COMPONENT,new J(Nt.packageComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Nt.deployComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_COMPONENT,new J(Nt.deployComponent)),e.set($.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new J(f$.readTransactionLog)),e.set($.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new J(ys,f$.deleteTransactionLogsBefore)),e.set($.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new J(_$.installModules)),e.set($.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new J(_$.auditModules)),e.set($.OPERATIONS_ENUM.GET_BACKUP,new J(yo.getBackup)),e.set($.OPERATIONS_ENUM.ADD_SSH_KEY,new J(Nt.addSSHKey)),e.set($.OPERATIONS_ENUM.UPDATE_SSH_KEY,new J(Nt.updateSSHKey)),e.set($.OPERATIONS_ENUM.DELETE_SSH_KEY,new J(Nt.deleteSSHKey)),e.set($.OPERATIONS_ENUM.LIST_SSH_KEYS,new J(Nt.listSSHKeys)),e.set($.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new J(Nt.setSSHKnownHosts)),e.set($.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new J(Nt.getSSHKnownHosts)),e}a(lue,"initializeOperationFunctionMap")});var xN=P(b$=>{"use strict";var Te=require("fs-extra"),HN=require("fast-glob"),be=require("path"),uue=require("tar-fs"),due=require("gunzip-maybe"),bPe=require("uuid").v4,kN=require("normalize-path"),Nn=Cq(),vt=j(),st=v(),Mt=ne(),Qg=Ot(),fue=re(),{PACKAGE_ROOT:_ue}=v(),{handleHDBError:Ut,hdb_errors:hue}=fe(),{basename:mue}=require("path"),pue=eN(),R$=ne(),Eue=v(),{Readable:gue}=require("stream"),{isMainThread:Sue}=require("worker_threads"),{HDB_ERROR_MSGS:al,HTTP_STATUS_CODES:Bt}=hue,y$=tt(),{replicateOperation:ii}=(fs(),se(ha)),{packageDirectory:Tue}=(Yq(),se(Kq)),A$=eh(),Aue=be.join(_ue,"application-template"),OPe=be.join(Mt.get(st.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp"),Rue=Mt.get(st.CONFIG_PARAMS.ROOTPATH),wa=be.join(Rue,"ssh"),bo=be.join(wa,"known_hosts");function yue(){vt.trace("getting custom api status");let e={};try{e={port:Mt.get(st.CONFIG_PARAMS.HTTP_PORT),directory:Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ut(new Error,al.FUNCTION_STATUS,Bt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(yue,"customFunctionsStatus");function bue(){vt.trace("getting custom api endpoints");let e={},t=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT);try{HN.sync(kN(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:HN.sync(kN(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:HN.sync(kN(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ut(new Error,al.GET_FUNCTIONS,Bt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(bue,"getCustomFunctions");function Oue(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=Nn.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=be.join(r,n,s,i+".js");try{return Te.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ut(new Error,al.GET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Oue,"getCustomFunction");async function Nue(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=Nn.setCustomFunctionValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);vt.trace("setting custom function file content");let r=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Te.outputFileSync(be.join(r,n,s,i+".js"),o);let c=await ii(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Ut(new Error,al.SET_FUNCTION,Bt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(Nue,"setCustomFunction");async function wue(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=Nn.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);vt.trace("dropping custom function file");let r=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Te.unlinkSync(be.join(r,n,s,i+".js"));let o=await ii(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Ut(new Error,al.DROP_FUNCTION,Bt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(wue,"dropCustomFunction");async function Iue(e){e.project&&(e.project=be.parse(e.project).name);let t=Nn.addComponentValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);vt.trace("adding component");let r=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=be.join(r,n);Te.mkdirSync(s,{recursive:!0}),Te.copySync(Aue,s);let i=await ii(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Ut(new Error,al.ADD_FUNCTION,Bt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(Iue,"addComponent");async function Cue(e){e.project&&(e.project=be.parse(e.project).name);let t=Nn.dropCustomFunctionProjectValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);vt.trace("dropping custom function project");let r=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Mt.get(st.CONFIG_PARAMS.APPS);if(!fue.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 Qg.updateConfigValue(st.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=be.join(r,n);Te.rmSync(i,{recursive:!0});let o=await ii(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Ut(new Error,al.DROP_FUNCTION_PROJECT,Bt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(Cue,"dropCustomFunctionProject");async function Pue(e){e.project&&(e.project=be.parse(e.project).name);let t=Nn.packageComponentValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let r=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Te.realpath(be.join(r,n))}catch(o){if(o.code!==st.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Te.realpath(be.join(Mt.get(st.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===st.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Tue(s,e)).toString("base64");return{project:n,payload:i}}a(Pue,"packageComponent");async function Due(e){e.project?e.project=be.parse(e.project).name:e.package&&(e.project=Lue(e.package));let t=Nn.deployComponentValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let r=Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=be.join(r,n),i="file:"+c,await Te.emptyDir(c);let S=gue.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((E,A)=>{S.pipe(due()).pipe(uue.extract(c,{finish:E})).on("error",A)});let g=await Te.readdir(c);g.length===1&&g[0]==="package"&&(await Te.copy(be.join(c,"package"),c),await Te.remove(be.join(c,"package")));let T=be.join(c,"node_modules");o?await A$.runCommand(o,c):Te.existsSync(T)||await A$.installAllRootModules(!1,c)}else{await Qg.addConfig(n,{package:i}),await pue();let S=R$.get(Eue.CONFIG_PARAMS.ROOTPATH);c=be.join(S,"node_modules",n)}if(Sue)return;let l=new Map;l.isWorker=!0;let u=(dh(),se(uh)),f;u.setErrorReporter(S=>f=S);let d=mue(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;vt.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let m=await ii(e);if(e.restart===!0)y$.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await BN().executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=g.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}a(Due,"deployComponent");function Lue(e){if(e.startsWith("git+ssh://"))return be.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return be.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Te.readFileSync(be.join(e,"package.json"),"utf8"));return be.basename(t)}catch{}return be.basename(e)}a(Lue,"getProjectNameFromPackage");async function Mue(){let e=a(async(s,i)=>{try{let o=await Te.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=be.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Te.stat(u),d={name:be.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return vt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),{name:Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT).split(be.sep).slice(-1).pop(),entries:[]}),n=(dh(),se(uh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Mue,"getComponents");async function vue(e){let t=Nn.getComponentFileValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let n=Qg.getConfigObj()[e.project]||e.project==="harperdb"?be.join(R$.get(st.CONFIG_PARAMS.ROOTPATH),"node_modules"):Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Te.stat(be.join(n,e.project,e.file));return{message:await Te.readFile(be.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===st.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${be.join(e.project,e.file)}'`):i}}a(vue,"getComponentFile");async function Uue(e){let t=Nn.setComponentFileValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=be.join(Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Te.ensureFile(n),await Te.outputFile(n,e.payload,r)):await Te.ensureDir(n);let s=await ii(e);return s.message="Successfully set component: "+e.file,s}a(Uue,"setComponentFile");async function Bue(e){let t=Nn.dropComponentFileValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?be.join(r,n):r,i=be.join(Mt.get(st.CONFIG_PARAMS.COMPONENTSROOT),s),o=be.join(Mt.get(st.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Te.pathExists(o)&&await Te.unlink(o),await Te.pathExists(i)&&await Te.remove(i);let c=be.join(Mt.get(st.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Te.pathExists(c)){let u=JSON.parse(await Te.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Te.writeFile(c,JSON.stringify(u,null,2),"utf8")}Qg.deleteConfigFromFile([r]);let l=await ii(e);return e.restart===!0?(y$.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Bue,"dropComponent");async function xue(e){let t=Nn.addSSHKeyValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;vt.trace("adding ssh key",r);let c=be.join(wa,r+".key"),l=be.join(wa,"config");if(await Te.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Te.outputFile(c,n),await Te.chmod(c,"0600");let u=`#${r}
22
- Host ${s}
23
- HostName ${i}
24
- User git
25
- IdentityFile ${c}
26
- IdentitiesOnly yes`;await Te.pathExists(l)?await Te.appendFile(l,`
27
- `+u):await Te.outputFile(l,u);let f="";if(await Te.pathExists(bo)||(await Te.writeFile(bo,""),await Te.chmod(bo,"0600")),i=="github.com"&&!(await Te.readFile(bo,"utf8")).includes("github.com"))try{let S=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of S)Te.appendFile(bo,"github.com "+g+`
28
- `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Te.appendFile(bo,o);let d=await ii(e);return d.message=`Added ssh key: ${r}${f}`,d}a(xue,"addSSHKey");async function Hue(e){let t=Nn.updateSSHKeyValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let{name:r,key:n}=e;vt.trace("updating ssh key",r);let s=be.join(wa,r+".key");if(!await Te.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Te.outputFile(s,n);let i=await ii(e);return i.message=`Updated ssh key: ${r}`,i}a(Hue,"updateSSHKey");async function kue(e){let t=Nn.deleteSSHKeyValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let{name:r}=e;vt.trace("deleting ssh key",r);let n=be.join(wa,r+".key"),s=be.join(wa,"config");if(!await Te.pathExists(n))throw new Error("Key does not exist");let i=await Te.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Te.outputFile(s,i),Te.removeSync(n);let c=await ii(e);return c.message=`Deleted ssh key: ${r}`,c}a(kue,"deleteSSHKey");async function Fue(e){let t=[];return await Te.pathExists(wa)&&(await Te.readdir(wa)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(Fue,"listSSHKeys");async function que(e){let t=Nn.setSSHKnownHostsValidator(e);if(t)throw Ut(t,t.message,Bt.BAD_REQUEST);let{known_hosts:r}=e;await Te.outputFile(bo,r);let n=await ii(e);return n.message="Known hosts successfully set",n}a(que,"setSSHKnownHosts");async function Gue(e){return await Te.pathExists(bo)?{known_hosts:await Te.readFile(bo,"utf8")}:{known_hosts:null}}a(Gue,"getSSHKnownHosts");Object.assign(b$,{customFunctionsStatus:yue,getCustomFunctions:bue,getCustomFunction:Oue,setCustomFunction:Nue,dropCustomFunction:wue,addComponent:Iue,dropCustomFunctionProject:Cue,packageComponent:Pue,deployComponent:Due,getComponents:Mue,getComponentFile:vue,setComponentFile:Uue,dropComponent:Bue,addSSHKey:xue,updateSSHKey:Hue,deleteSSHKey:kue,listSSHKeys:Fue,setSSHKnownHosts:que,getSSHKnownHosts:Gue})});var xg=P((PPe,q$)=>{"use strict";var FN=fn(),Jg=$r(),bs=LE(),hh=so(),qN=Ec(),$ue=bb(),Vue=iH(),mh=Gn(),Xg=N_(),Tr=j(),Kue=Ub(),Yue=YE(),Wue=aO(),zue=zE(),jue=uO(),Que=dO(),Jue=hO(),Xue=pO(),GN=ZE(),Oo=re(),Zue=eF(),$N=CO(),w$=zu(),Xr=v(),I$=hq(),ede=Mu(),C$=Eu(),P$=(Ag(),se(X_)),D$=Ot(),rr=xN(),tde=require("alasql"),L$=Gg(),M$=eh(),od=Zs(),v$=(Gc(),se(qc)),U$=hN(),{handleHDBError:wn,hdb_errors:B$}=fe(),{addNodeBack:IPe,removeNodeBack:CPe}=(Gc(),se(qc)),{HDB_ERROR_MSGS:Mr,HTTP_STATUS_CODES:fh}=B$,Q=new Map,x$="delete",Ia="insert",No="read",cl="update",_h="describe",O$=hh.describeSchema.name,N$=hh.describeTable.name,H$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},rde={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},nde="catchup",sde="handleGetJob",ide="handleGetJobsByStartDate",Zg={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},ode=[bs.createTable.name,bs.createAttribute.name,bs.dropTable.name,bs.dropAttribute.name],k$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},X=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Q.set(FN.insert.name,new X(!1,[Ia]));Q.set(FN.update.name,new X(!1,[cl]));Q.set(FN.upsert.name,new X(!1,[Ia,cl]));Q.set(Jg.searchByConditions.name,new X(!1,[No]));Q.set(Jg.searchByHash.name,new X(!1,[No]));Q.set(Jg.searchByValue.name,new X(!1,[No]));Q.set(Jg.search.name,new X(!1,[No]));Q.set(bs.createSchema.name,new X(!0,[]));Q.set(bs.createTable.name,new X(!0,[]));Q.set(bs.createAttribute.name,new X(!1,[Ia]));Q.set(bs.dropSchema.name,new X(!0,[]));Q.set(bs.dropTable.name,new X(!0,[]));Q.set(bs.dropAttribute.name,new X(!0,[]));Q.set(hh.describeSchema.name,new X(!1,[No]));Q.set(hh.describeTable.name,new X(!1,[No]));Q.set(qN.deleteRecord.name,new X(!1,[x$]));Q.set(mh.addUser.name,new X(!0,[]));Q.set(mh.alterUser.name,new X(!0,[]));Q.set(mh.dropUser.name,new X(!0,[]));Q.set(mh.listUsersExternal.name,new X(!0,[]));Q.set(Xg.listRoles.name,new X(!0,[]));Q.set(Xg.addRole.name,new X(!0,[]));Q.set(Xg.alterRole.name,new X(!0,[]));Q.set(Xg.dropRole.name,new X(!0,[]));Q.set(Kue.name,new X(!0,[]));Q.set(Yue.name,new X(!0,[]));Q.set(Wue.name,new X(!0,[]));Q.set(zue.name,new X(!0,[]));Q.set(jue.name,new X(!0,[]));Q.set(Que.name,new X(!0,[]));Q.set(GN.setRoutes.name,new X(!0,[]));Q.set(GN.getRoutes.name,new X(!0,[]));Q.set(GN.deleteRoutes.name,new X(!0,[]));Q.set(D$.setConfiguration.name,new X(!0,[]));Q.set(Jue.clusterStatus.name,new X(!0,[]));Q.set(Xue.name,new X(!0,[]));Q.set($N.getFingerprint.name,new X(!0,[]));Q.set($N.setLicense.name,new X(!0,[]));Q.set(qN.deleteFilesBefore.name,new X(!0,[]));Q.set(qN.deleteAuditLogsBefore.name,new X(!0,[]));Q.set(w$.restart.name,new X(!0,[]));Q.set(w$.restartService.name,new X(!0,[]));Q.set($ue.name,new X(!0,[]));Q.set(Vue.name,new X(!0,[No]));Q.set(ede.systemInformation.name,new X(!0,[]));Q.set(D$.getConfiguration.name,new X(!0,[]));Q.set(L$.readTransactionLog.name,new X(!0,[]));Q.set(L$.deleteTransactionLogsBefore.name,new X(!0,[]));Q.set(M$.installModules.name,new X(!0,[]));Q.set(M$.auditModules.name,new X(!0,[]));Q.set(od.createCsr.name,new X(!0,[]));Q.set(od.signCertificate.name,new X(!0,[]));Q.set(od.listCertificates.name,new X(!0,[]));Q.set(od.addCertificate.name,new X(!0,[]));Q.set(od.removeCertificate.name,new X(!0,[]));Q.set(od.getKey.name,new X(!0,[]));Q.set(v$.addNodeBack.name,new X(!0,[]));Q.set(v$.removeNodeBack.name,new X(!0,[]));Q.set(C$.createTokens.name,new X(!1,[]));Q.set(C$.refreshOperationToken.name,new X(!1,[]));Q.set(P$.login.name,new X(!1,[]));Q.set(P$.logout.name,new X(!1,[]));Q.set(rr.customFunctionsStatus.name,new X(!0,[]));Q.set(rr.getCustomFunctions.name,new X(!0,[]));Q.set(rr.getComponents.name,new X(!0,[]));Q.set(rr.getComponentFile.name,new X(!0,[]));Q.set(rr.setComponentFile.name,new X(!0,[]));Q.set(rr.dropComponent.name,new X(!0,[]));Q.set(rr.getCustomFunction.name,new X(!0,[]));Q.set(rr.setCustomFunction.name,new X(!0,[]));Q.set(rr.dropCustomFunction.name,new X(!0,[]));Q.set(rr.addComponent.name,new X(!0,[]));Q.set(rr.dropCustomFunctionProject.name,new X(!0,[]));Q.set(rr.packageComponent.name,new X(!0,[]));Q.set(rr.deployComponent.name,new X(!0,[]));Q.set(rr.addSSHKey.name,new X(!0,[]));Q.set(rr.updateSSHKey.name,new X(!0,[]));Q.set(rr.deleteSSHKey.name,new X(!0,[]));Q.set(rr.listSSHKeys.name,new X(!0,[]));Q.set(rr.setSSHKnownHosts.name,new X(!0,[]));Q.set(rr.getSSHKnownHosts.name,new X(!0,[]));Q.set($N.getRegistrationInfo.name,new X(!1,[]));Q.set(mh.userInfo.name,new X(!1,[]));Q.set(hh.describeAll.name,new X(!1,[]));Q.set(sde,new X(!1,[]));Q.set(ide,new X(!0,[]));Q.set(nde,new X(!0,[]));Q.set(Zg.CSV_DATA_LOAD,new X(!1,[Ia,cl]));Q.set(Zg.CSV_URL_LOAD,new X(!1,[Ia,cl]));Q.set(Zg.CSV_FILE_LOAD,new X(!1,[Ia,cl]));Q.set(Zg.IMPORT_FROM_S3,new X(!1,[Ia,cl]));Q.set(k$.EXPORT_TO_S3,new X(!0,[]));Q.set(k$.EXPORT_LOCAL,new X(!0,[]));Q.set(Xr.VALID_SQL_OPS_ENUM.DELETE,new X(!1,[x$]));Q.set(Xr.VALID_SQL_OPS_ENUM.SELECT,new X(!1,[No]));Q.set(Xr.VALID_SQL_OPS_ENUM.INSERT,new X(!1,[Ia]));Q.set(Xr.VALID_SQL_OPS_ENUM.UPDATE,new X(!1,[cl]));q$.exports={verifyPerms:cde,verifyPermsAst:ade,verifyBulkLoadAttributePerms:ude};function ade(e,t,r){if(Oo.isEmptyOrZeroLength(e))throw Tr.info("verify_perms_ast has an empty user parameter"),wn(new Error);if(Oo.isEmptyOrZeroLength(t))throw Tr.info("verify_perms_ast has an empty user parameter"),wn(new Error);if(Oo.isEmptyOrZeroLength(r))throw Tr.info("verify_perms_ast has a null operation parameter"),wn(new Error);try{let n=new U$,s=new Zue(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Tr.info("No schemas defined in verifyPermsAst(), will not continue."),wn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&H$[r])throw wn(new Error,Mr.DROP_SYSTEM,fh.FORBIDDEN);if(c&&!l)return null;let u=I$.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof tde.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=F$(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let m=s.getAttributesBySchemaTableName(h,d[_]),S=KN(t.role.permission,h,d[_]);VN(m,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw wn(n)}}a(ade,"verifyPermsAst");function cde(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Tr.info("null required parameter in verifyPerms"),wn(new Error,Mr.DEFAULT_INVALID_REQUEST,fh.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 U$;if(Oo.isEmptyOrZeroLength(e.hdb_user?.role)||Oo.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Tr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Mr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(Xr.SYSTEM_SCHEMA_NAME)||s===Xr.SYSTEM_SCHEMA_NAME;if(l&&f&&rde[e.operation]&&(i===Xr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&H$[r])throw wn(new Error,Mr.DROP_SYSTEM,fh.FORBIDDEN);if(l&&!f||u===!0&&(r===bs.createSchema.name||r===bs.dropSchema.name))return null;if(ode.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=I$.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===O$||r===N$){if(s===Xr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Mr.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===O$&&(!d[s]||!d[s][_h]))return c.handleInvalidItem(Mr.SCHEMA_NOT_FOUND(s));if(r===N$&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][_h]))return c.handleInvalidItem(Mr.TABLE_NOT_FOUND(s,i))}}let h=F$(e.hdb_user,r,o,c,n);if(h)return h;if(Q.get(r)&&Q.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Xr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Xr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(E=>E[Xr.PERMS_CRUD_ENUM.READ]).forEach(E=>{S.push(E.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=S)}let _=lde(e),m=KN(e.hdb_user?.role?.permission,s,i);return VN(_,m,r,i,s,c,n),c.getPermsResponse()}a(cde,"verifyPerms");function F$(e,t,r,n,s){if(Oo.arrayHasEmptyValues([e,t,r]))throw Tr.info("hasPermissions has an invalid parameter"),wn(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 Tr.info(`operation ${t} not found.`),wn(new Error,Mr.OP_NOT_FOUND(t),fh.BAD_REQUEST);if(Q.get(t)&&Q.get(t).requires_su)return Tr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Mr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][_h]===!1){n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[_h]===!1)n.addInvalidItem(Mr.TABLE_NOT_FOUND(l,f));else try{let h=[],_=Q.get(t).perms;!Oo.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let m=0;m<_.length;m++){let S=_[m],g=d[S];(g==null||g===!1)&&(Tr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Mr.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw Tr.error(_),Tr.error(h),wn(B$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(F$,"hasPermissions");function VN(e,t,r,n,s,i,o){if(!e||!t)throw Tr.info("no attributes specified in checkAttributePerms."),wn(new Error);let c=Q.get(r).perms;if(!c||c==="")throw Tr.info(`no permissions found for ${r} in checkAttributePerms().`),wn(new Error);if(Oo.isEmptyOrZeroLength(t))return Tr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[_h]===!1){i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Xr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==No)throw wn(new Error,Mr.SYSTEM_TIMESTAMP_PERMS_ERR,fh.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(VN,"checkAttributePerms");function lde(e){let t=new Set;try{if(e.action)return t;if(e.operation===Xr.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){Tr.info(r)}return t}a(lde,"getRecordAttributes");function KN(e,t,r){let n=new Map;if(Oo.isEmpty(e))return Tr.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{Tr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(KN,"getAttributePermissions");function ude(e,t,r,n,s,i,o){let c=new Set(i),l=KN(e,n,s);VN(c,l,t,s,n,o,r)}a(ude,"verifyBulkLoadAttributePerms")});var kg=P((LPe,Y$)=>{"use strict";Y$.exports={evaluateSQL:yde,processAST:K$,convertSQLToAST:V$,checkASTPermissions:$$};var dde=fn(),G$=require("util"),fde=G$.callbackify(dde.insert),_de=$r().search,hde=K0().update,mde=G$.callbackify(hde),pde=W0().convertDelete,Ca=require("alasql"),Ede=xg(),eS=j(),gde=Xp(),Sde=re(),ph=v(),{hdb_errors:Tde,handleHDBError:YN}=fe(),{HTTP_STATUS_CODES:WN}=Tde;gde(Ca);var Ade=403,Rde="There was a problem performing this insert. Please check the logs and try again.",zN=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function yde(e,t){let r=e.parsed_sql_object;if(!r){r=V$(e.sql);let n,s=r.ast.statements[0];if(s instanceof Ca.yy.Insert?n=s.into.databaseid:s instanceof Ca.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Ca.yy.Update||s instanceof Ca.yy.Delete?n=s.table.databaseid:eS.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Ca.yy.Select)&&Sde.isEmptyOrZeroLength(n))return t("No schema specified",null)}K$(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(yde,"evaluateSQL");function $$(e,t){let r;try{r=Ede.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a($$,"checkASTPermissions");function V$(e){let t=new zN;if(!e)throw YN(new Error,"The 'sql' parameter is missing from the request body",WN.BAD_REQUEST);try{let r=e.trim(),n=Ca.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
29
- `);throw n[1]?YN(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,WN.BAD_REQUEST):YN(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",WN.BAD_REQUEST)}return t}a(V$,"convertSQLToAST");function K$(e,t,r){try{let n=bde;if(!e.bypass_auth&&!t.permissions_checked){let i=$$(e,t);if(i&&i.length>0)return r(Ade,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case ph.VALID_SQL_OPS_ENUM.SELECT:n=_de,s=t.ast.statements[0];break;case ph.VALID_SQL_OPS_ENUM.INSERT:n=Ode;break;case ph.VALID_SQL_OPS_ENUM.UPDATE:n=mde;break;case ph.VALID_SQL_OPS_ENUM.DELETE:n=pde;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(K$,"processAST");function bde(e,t){eS.info(e),t("unknown sql statement")}a(bde,"nullFunction");function Ode({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=Nde(i,e.values)}catch(o){return r(o)}fde(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){eS.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Ode,"convertInsert");function Nde(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]]=Ca.compile(`SELECT ${s.toString()} AS [${ph.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw eS.error(r),new Error(Rde)}}a(Nde,"createDataObjects")});var Vg=P((vPe,tV)=>{"use strict";var QN=$r(),wde=kg(),Ide=cN(),{AsyncParser:Cde,Transform:Pde}=require("json2csv"),gh=require("stream"),Xn=re(),jN=require("fs-extra"),Dde=require("path"),Os=j(),{promisify:j$}=require("util"),Eh=re(),{handleHDBError:nr,hdb_errors:Lde}=fe(),{HDB_ERROR_MSGS:In,HTTP_STATUS_CODES:sr}=Lde,{streamAsJSON:Mde}=(_A(),se(dD)),{Upload:vde}=require("@aws-sdk/lib-storage"),W$=["search_by_value","search_by_hash","sql","search_by_conditions"],z$=["json","csv"],Q$="json",J$="csv",Ude="Successfully exported JSON locally.",Bde="Successfully exported CSV locally.",xde=1e3,Hde=QN.searchByHash,kde=QN.searchByValue,Fde=j$(wde.evaluateSQL),qde=j$(gh.finished);tV.exports={export_to_s3:Kde,export_local:Gde,toCsvStream:X$};async function Gde(e){Os.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Z$(e);if(!Xn.isEmpty(t))throw Os.error(t),nr(new Error,t,sr.BAD_REQUEST,void 0,void 0,!0);if(Xn.isEmpty(e.path))throw Os.error(In.MISSING_VALUE("path")),nr(new Error,In.MISSING_VALUE("path"),sr.BAD_REQUEST,void 0,void 0,!0);let r=(Xn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Dde.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Xn.buildFolderPath(e.path,r);await $de(e.path);let s=await eV(e);return await Vde(n,e.format,s)}a(Gde,"export_local");async function $de(e){if(Os.trace("in confirmPath"),Xn.isEmptyOrZeroLength(e))throw nr(new Error,`Invalid path: ${e}`,sr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await jN.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,Os.error(n),nr(new Error,n,sr.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 Os.error(r),nr(new Error,r,sr.BAD_REQUEST,void 0,void 0,!0)}return!0}a($de,"confirmPath");async function Vde(e,t,r){if(Os.trace("in saveToLocal"),Eh.isEmptyOrZeroLength(e))throw nr(new Error,In.INVALID_VALUE("file_path"),sr.BAD_REQUEST,void 0,void 0,!0);if(Eh.isEmptyOrZeroLength(t))throw nr(new Error,In.INVALID_VALUE("Source format"),sr.BAD_REQUEST,void 0,void 0,!0);if(Eh.isEmpty(r))throw nr(new Error,In.NOT_FOUND("Data"),sr.BAD_REQUEST,void 0,void 0,!0);if(t===Q$){let n=jN.createWriteStream(e);return Mde(r).pipe(n),await qde(n),{message:Ude,path:e}}else if(t===J$){let n=jN.createWriteStream(e),s=gh.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new Cde(i,c).fromInput(s).toOutput(n).promise(!1),{message:Bde,path:e}}throw nr(new Error,In.INVALID_VALUE("format"),sr.BAD_REQUEST)}a(Vde,"saveToLocal");async function Kde(e){if(!e.s3||Object.keys(e.s3).length===0)throw nr(new Error,In.MISSING_VALUE("S3 object"),sr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw nr(new Error,In.MISSING_VALUE("aws_access_key_id"),sr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw nr(new Error,In.MISSING_VALUE("aws_secret_access_key"),sr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.bucket))throw nr(new Error,In.MISSING_VALUE("bucket"),sr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.key))throw nr(new Error,In.MISSING_VALUE("key"),sr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.region))throw nr(new Error,In.MISSING_VALUE("region"),sr.BAD_REQUEST);let t=Z$(e);if(!Xn.isEmpty(t))throw nr(new Error,t,sr.BAD_REQUEST);Os.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await eV(e)}catch(l){throw Os.error(l),l}let n,s=await Ide.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new gh.PassThrough;if(e.format===J$){i=e.s3.key+".csv";let l=X$(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===Q$){i=e.s3.key+".json";let l=new gh.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%xde===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw nr(new Error,In.INVALID_VALUE("format"),sr.BAD_REQUEST);return new vde({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Kde,"export_to_s3");function X$(e,t){let r=gh.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 Pde(n,s);return r.pipe(i)}a(X$,"toCsvStream");function Z$(e){if(Os.trace("in exportCoreValidation"),Xn.isEmpty(e.format))return"format missing";if(z$.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${z$.join(", ")}`;let t=e.search_operation.operation;if(Xn.isEmpty(t))return"search_operation.operation missing";if(W$.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${W$.join(", ")}`}a(Z$,"exportCoreValidation");async function eV(e){Os.trace("in getRecords");let t,r;if(Eh.isEmpty(e.search_operation)||Eh.isEmptyOrZeroLength(e.search_operation.operation))throw nr(new Error,In.INVALID_VALUE("Search operation"),sr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=kde;break;case"search_by_hash":t=Hde;break;case"search_by_conditions":t=QN.searchByConditions;break;case"sql":t=Fde;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Os.error(r),nr(new Error,r,sr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(eV,"getRecords")});var lV={};Fe(lV,{contentTypes:()=>tw,findBestSerializer:()=>rS,getDeserializer:()=>Io,registerContentHandlers:()=>rw,serialize:()=>Rh,serializeMessage:()=>Xc});function Yde(e){try{return e?.[0]===123?ew(e):e}catch{return e}}function rw(e){e.register(zde,{serializers:[{regex:/^application\/json$/,serializer:uf},{regex:/^application\/cbor$/,serializer:a(function(t){return new ll.EncoderStream(Th).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Ah.Readable.from((0,Li.encodeIter)(t,Th)):(0,Li.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,tS.toCsvStream)(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Li.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,ll.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function rS(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let m of f){let S=m.indexOf("=");h[m.substring(0,S)]=m.substring(S+1)}d=+h.q;let _=Zr.get(u);if(_){let m=(_.q||1)*d;m>s&&(n=_,i=_.type||u,s=m,o=h)}}if(!n){if(r)throw new sV.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Zr.keys()).join(", "),406);n=Zr.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Rh(e,t,r){let n=nV&&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||e instanceof Ei)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=rS(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&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),ZN.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,wo.createBrotliCompress)({params:{[wo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?wo.constants.BROTLI_MODE_TEXT:wo.constants.BROTLI_MODE_GENERIC,[wo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>nV?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,wo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Xc(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return Sh(e);let r=t.serialize;if(r)return r(e);let n=rS(t);return r=t.serialize=n.serializer.serialize,r(e)}function jde(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 Jde(e){return Qde.includes(e)}function Xde(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Io(e="",t=!1){let r=Xde(e),n=r.type&&Zr.get(r.type)?.deserialize||Zde(r);return t?s=>jde(s).then(n):n}function Zde(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!Jde(e.parameters.charset)&&ZN.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return ew(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function efe(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 tS,Li,ll,wo,sV,Ah,iV,JN,XN,oV,ZN,aV,Sh,ew,Th,Zr,tw,rV,cV,Wde,zde,nV,Qde,Zc=Oe(()=>{_A();tS=L(Vg()),Li=require("msgpackr"),ll=require("cbor-x"),wo=require("zlib"),sV=L(fe()),Ah=require("stream");Gr();iV=L(di()),JN=L(ne()),XN=L(v()),oV=L(require("yaml")),ZN=L(Qi());ls();aV=JN.default.get(XN.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,Sh=aV?rc:JSON.stringify,ew=aV?fA:JSON.parse,Th={useRecords:!1,useToJSON:!0},Zr=new Map,tw=Zr;je.contentTypes=tw;(0,iV._assignPackageExport)("contentTypes",tw);Zr.set("application/json",{serializeStream:uf,serialize:Sh,deserialize(e){return ew(e)},q:.8});rV=new ll.Encoder(Th);Zr.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ll.EncoderStream(Th).end(e)},serialize:rV.encode,deserialize:rV.decode,q:1});Zr.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Ah.Readable.from((0,Li.encodeIter)(e,Th)):(0,Li.pack)(e)},serialize:Li.pack,deserialize:Li.unpack,q:.9});Zr.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,tS.toCsvStream)(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),(0,tS.toCsvStream)(e,e?.getColumns?.())},q:.1});Zr.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Ah.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});Zr.set("text/yaml",{serialize(e){return oV.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Zr.set("text/event-stream",{serializeStream:a(function(e){return Ah.Readable.from(efe(e,this.serialize))},"serializeStream"),serialize:a(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+`
30
- `),e.data){let r=e.data;typeof r=="object"&&(r=Sh(r)),t+="data: "+r+`
6
+ `}a(xs,"createLogRecord");function Kd(e){if(di){if(jC(e),is){jo=!1;try{process.stdout.write(e)}finally{jo=!0}}}else is&&process.stdout.write(e)}a(Kd,"logStdOut");function mp(e){if(di){if(jC(e),is){jo=!1;try{process.stderr.write(e)}finally{jo=!0}}}else is&&process.stderr.write(e)}a(mp,"logStdErr");function jC(e){qT(),Qo?Wi.appendFileSync(Qo,e):GT||console.log(e)}a(jC,"logToFile");function VT(){try{Wi.closeSync(Qo)}catch{}Qo=null}a(VT,"closeLogFile");function qT(){if(!Qo){try{Qo=Wi.openSync(pp,"a")}catch(e){GT||(GT=!0,console.error(e))}setTimeout(()=>{VT()},p2).unref()}}a(qT,"openLogFile");function JC(...e){hr[Pr]<=hr.info&&Kd(xs("info",e))}a(JC,"info");function XC(...e){hr[Pr]<=hr.trace&&Kd(xs("trace",e))}a(XC,"trace");function Ep(...e){hr[Pr]<=hr.error&&mp(xs("error",e))}a(Ep,"error");function ZC(...e){hr[Pr]<=hr.debug&&Kd(xs("debug",e))}a(ZC,"debug");function eP(...e){hr[Pr]<=hr.notify&&Kd(xs("notify",e))}a(eP,"notify");function tP(...e){hr[Pr]<=hr.fatal&&mp(xs("fatal",e))}a(tP,"fatal");function rP(...e){hr[Pr]<=hr.warn&&mp(xs("warn",e))}a(rP,"warn");function A2(e,t,...r){t===zC.STDERR?mp(xs(e,r)):Kd(xs(e,r))}a(A2,"logCustomLevel");function R2(){let e;try{e=d2.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=fi.join(e,Vt.HDB_HOME_DIR_NAME,Vt.BOOT_PROPS_FILE_NAME);return Wi.existsSync(t)||(t=fi.join($T,"utility/hdb_boot_properties.file")),t}a(R2,"getPropsFilePath");function y2(e){Pr=e}a(y2,"setLogLevel");function KC(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(KC,"autoCastBoolean");function b2(e){try{if(e.includes("config/settings.js")){let o=WC(e);return{level:o.get(Vt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:fi.dirname(o.get(Vt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Vt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=YC.parseDocument(Wi.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===Vt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(b2,"getLogConfig");function O2(){try{let e=YC.parseDocument(Wi.readFileSync(h2,"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(O2,"getDefaultConfig");function N2(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(N2,"AuthAuditLog")});var KT=P((MTe,iP)=>{"use strict";var w2=require("util"),I2=require("path"),C2=require("child_process"),P2=w2.promisify(C2.execFile),D2=1e3*1e3*10;iP.exports={findPs:L2};async function L2(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await P2("ps",["wwxo",`pid,${r}`],{maxBuffer:D2});for(let s of n.trim().split(`
7
+ `).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:I2.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(L2,"findPs")});var Mt=P((UTe,aP)=>{"use strict";var M2="__dbis__",v2="__txns__",U2="__environment_name__",x2="__dbi_defintion__",B2={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"},H2=["__createdtime__","__updatedtime__"],k2="\uFFFF",oP={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},F2=Object.values(oP);aP.exports={AUDIT_STORE_NAME:v2,INTERNAL_DBIS_NAME:M2,DBI_DEFINITION_NAME:x2,SEARCH_TYPES:B2,TIMESTAMP_NAMES:H2,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:U2,TRANSACTIONS_DBI_NAMES_ENUM:oP,TRANSACTIONS_DBIS:F2,OVERFLOW_MARKER:k2}});var Ln=P((xTe,EP)=>{"use strict";var cP=(H(),D(q)),lP=Mt(),uP={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},dP=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),fP={500:dP("There was an error processing your request."),400:"Invalid request"},G2=fP[uP.INTERNAL_SERVER_ERROR],q2={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},$2={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},V2={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},K2={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 ${lP.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${lP.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"},Y2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${cP.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${cP.INSERT_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"},_P={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"},W2={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},z2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},Q2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},j2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},J2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},hP={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},pP={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},X2={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},Z2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ej={..._P,...V2,...q2,...W2,...z2,...Q2,...j2,...J2,...Y2,...hP,...pP,...X2,...Z2,...$2};EP.exports={CHECK_LOGS_WRAPPER:dP,HDB_ERROR_MSGS:ej,DEFAULT_ERROR_MSGS:fP,DEFAULT_ERROR_RESP:G2,HTTP_STATUS_CODES:uP,LMDB_ERRORS_ENUM:K2,AUTHENTICATION_ERROR_MSGS:_P,VALIDATION_ERROR_MSGS:hP,ITC_ERRORS:pP}});var _e=P((HTe,SP)=>{"use strict";var vl=Ln(),tj=j(),rj=(H(),D(q)),gp=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,mP),this.statusCode=n||vl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vl.DEFAULT_ERROR_MSGS[n]?vl.DEFAULT_ERROR_MSGS[n]:vl.DEFAULT_ERROR_MSGS[vl.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&&tj[s](i)}},YT=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}},WT=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function mP(e,t,r,n=rj.LOG_LEVELS.ERROR,s=null,i=!1){if(gP(e))return e;let o=new gp(e,t,r,n,s);return i&&delete o.stack,o}a(mP,"handleHDBError");function gP(e){return e.__proto__.constructor.name===gp.name}a(gP,"isHDBError");SP.exports={isHDBError:gP,handleHDBError:mP,ClientError:YT,ServerError:WT,hdb_errors:vl}});var ht=P((FTe,NP)=>{"use strict";var jd=(H(),D(q)),nj=ae(),on=ce(),Jd=require("path"),sj=require("minimist"),TP=require("fs-extra"),AP=require("lodash");on.initSync();var{CONFIG_PARAMS:Jo,DATABASES_PARAM_CONFIG:Yd,SYSTEM_SCHEMA_NAME:Sp}=jd,Wd,zd,Qd;function RP(){if(Wd!==void 0)return Wd;if(on.getHdbBasePath()!==void 0)return Wd=on.get(Jo.STORAGE_PATH)||Jd.join(on.getHdbBasePath(),jd.DATABASES_DIR_NAME),Wd}a(RP,"getBaseSchemaPath");function yP(){if(zd!==void 0)return zd;if(on.getHdbBasePath()!==void 0)return zd=OP(Sp),zd}a(yP,"getSystemSchemaPath");function bP(){if(Qd!==void 0)return Qd;if(on.getHdbBasePath()!==void 0)return Qd=on.get(jd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Jd.join(on.getHdbBasePath(),jd.TRANSACTIONS_DIR_NAME),Qd}a(bP,"getTransactionAuditStoreBasePath");function ij(e,t){let r=on.get(Jo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Jd.join(bP(),e.toString())}a(ij,"getTransactionAuditStorePath");function OP(e,t){e=e.toString(),t=t&&t.toString();let r=on.get(jd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Jd.join(RP(),e)}a(OP,"getSchemaPath");function oj(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,sj(process.argv));let n=r[Jo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!nj.isObject(n))throw o;i=n}for(let o of i){let c=o[Sp];if(!c)continue;let l=on.get(Jo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Yd.PATH];if(u)return AP.set(l,[Sp,Yd.TABLES,t,Yd.PATH],u),on.setProperty(Jo.DATABASES,l),u;let f=c?.[Yd.PATH];if(f)return AP.set(l,[Sp,Yd.PATH],f),on.setProperty(Jo.DATABASES,l),f}}let s=r[Jo.STORAGE_PATH.toUpperCase()];if(s){if(!TP.pathExistsSync(s))throw new Error(s+" does not exist");let i=Jd.join(s,e);return TP.mkdirsSync(i),on.setProperty(Jo.STORAGE_PATH,s),i}return yP()}a(oj,"initSystemSchemaPaths");function aj(){Wd=void 0,zd=void 0,Qd=void 0}a(aj,"resetPaths");NP.exports={getBaseSchemaPath:RP,getSystemSchemaPath:yP,getTransactionAuditStorePath:ij,getTransactionAuditStoreBasePath:bP,getSchemaPath:OP,initSystemSchemaPaths:oj,resetPaths:aj}});var an=P((VTe,DP)=>{"use strict";var cj=Ln().LMDB_ERRORS_ENUM,qTe=require("lmdb"),lj=Mt(),$Te=require("buffer").Buffer,{OVERFLOW_MARKER:wP,MAX_SEARCH_KEY_LENGTH:Tp}=lj,IP=["number","string","symbol","boolean","bigint"];function uj(e){if(e=e?.primaryStore||e,!e)throw new Error(cj.ENV_REQUIRED)}a(uj,"validateEnv");function dj(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(dj,"stringifyData");function fj(e){return e instanceof Date?e.valueOf():e}a(fj,"convertKeyValueToWrite");function _j(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(IP.includes(typeof e))return e.length>Tp?[e.slice(0,Tp)+wP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(IP.includes(typeof i))i.length>Tp?r.push(i.slice(0,Tp)+wP):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(_j,"getIndexedValues");var Ap=0,CP=0;function PP(){CP=Date.now()-performance.now()}a(PP,"adjustStartTime");PP();var hj=6e4;setInterval(PP,hj).unref();function pj(){let e=performance.now()+CP;return e>Ap?(Ap=e,e):(Ap+=488e-6,Ap)}a(pj,"getNextMonotonicTime");DP.exports={validateEnv:uj,stringifyData:dj,convertKeyValueToWrite:fj,getNextMonotonicTime:pj,getIndexedValues:_j}});var Xd=P((YTe,LP)=>{"use strict";var Ej=(H(),D(q)).OPERATIONS_ENUM,zT=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=Ej.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};LP.exports=zT});var Zd=P((QTe,xP)=>{"use strict";var zTe=Xd(),Rp=(H(),D(q)),QT=ae(),MP=j(),mj=require("uuid"),{handleHDBError:yp,hdb_errors:gj}=_e(),{HDB_ERROR_MSGS:bp,HTTP_STATUS_CODES:Op}=gj;xP.exports=vP;function vP(e,t,r){for(let s=0;s<t.length;s++)UP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];Sj(i,r,e.operation)}}a(vP,"processRows");vP.validateAttribute=UP;function UP(e){if(Buffer.byteLength(String(e))>Rp.INSERT_MAX_CHARACTER_SIZE)throw yp(new Error,bp.ATTR_NAME_LENGTH_ERR(e),Op.BAD_REQUEST,void 0,void 0,!0);if(QT.isEmptyOrZeroLength(e)||QT.isEmpty(e.trim()))throw yp(new Error,bp.ATTR_NAME_NULLISH_ERR,Op.BAD_REQUEST,void 0,void 0,!0)}a(UP,"validateAttribute");function Sj(e,t,r){if(!e.hasOwnProperty(t)||QT.isEmptyOrZeroLength(e[t])){if(r===Rp.OPERATIONS_ENUM.INSERT||r===Rp.OPERATIONS_ENUM.UPSERT){e[t]=mj.v4();return}throw MP.error("Update transaction aborted due to record with no hash value:",e),yp(new Error,bp.RECORD_MISSING_HASH_ERR,Op.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Rp.INSERT_MAX_CHARACTER_SIZE)throw MP.error(e),yp(new Error,bp.HASH_VAL_LENGTH_ERR,Op.BAD_REQUEST,void 0,void 0,!0)}a(Sj,"validateHash")});var BP,Mn,jT,Ul=be(()=>{BP=require("events"),Mn=class extends BP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new jT;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},jT=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function VP(e){XT=e}function yj(){Rj=setInterval(function(){for(let e of JT)if(e.stale){let t=e.getContext()?.url;GP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},Aj).unref()}var ZT,FP,GP,qP,$P,HP,JT,Tj,ef,kP,XT,tc,Np,Aj,Rj,wp=be(()=>{ZT=U(an()),FP=U(_e()),GP=U(j()),qP=U(ce());H();$P=U(ae()),HP=100,JT=new Set,Tj=(0,$P.convertToMS)(qP.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(VP,"replicationConfirmation");tc=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),JT.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(JT.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(ef&&!this.overloadChecked&&performance.now()-kP>Tj)throw new FP.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,ZT.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let _=d;_<this.validated;_++)this.writes[_]?.validate?.(this.timestamp);let h;for(let _=d;_<this.validated;_++){let p=this.writes[_];p&&(p.before||p.beforeIntermediate)&&(h=!0)}if(h)return(async()=>{try{for(let _=0;_<2;_++){let p;for(let S=d;S<this.validated;S++){let g=this.writes[S];if(!g)continue;let T=g[_===0?"before":"beforeIntermediate"];if(T){let m=T();p?p.push?p.push(m):p=[p,m]:p=m}}p&&await(p.push?Promise.all(p):p)}}catch(_){throw this.abort(),_}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),l=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let h=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||h}else l();else for(let h of this.writes)c(h)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<HP>>n?l():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return ef||(ef=s,kP=performance.now(),ef.then(()=>{ef=null})),s.then(d=>{if(d){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let h=this.writes[0].store.rootStore.databaseName,_=this.writes[this.writes.length-1];XT&&_&&i.push(XT(h,_.store.getEntry(_.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+HP/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let f={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(h=>({txnTime:r,next:h}));f.next=d}return f}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},Np=class extends tc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,ZT.getNextMonotonicTime)())}getReadTxn(){}},Aj=3e4;a(yj,"startMonitoringTxns");yj()});function yt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new tc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var KP,rc=be(()=>{KP=U(ui());wp();a(yt,"transaction");(0,KP._assignPackageExport)("transaction",yt);yt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};yt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function tA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=u(l);for(let _=1;_<e.length;_++){let p=e[_],S=u(p);d=d.concat(S)}let h=new Set;return d.filter(_=>{let p=_.key??_;return h.has(p)?!1:(h.add(p),!0)})}else{let d=u(l),h=f(e.slice(1),!0,l.estimated_count);return h.length>0?o(d,h):d}function u(d){return d.conditions?tA(d.conditions,d.operator,r,n,s,i,o,c):Hl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function f(d,h,_){return d.map((p,S)=>{if(p.conditions){let m=p.operator==="or",A=f(p.conditions,!m,_);return m?(w,M)=>A.some(F=>F(w,M)):(w,M)=>A.every(F=>F(w,M))}let g=(p.attribute||p[0])===r.primaryKey,T=nf(p,r,i,c,g,_);return h&&S<d.length-1&&_&&(_=Lj(r.primaryStore,p.estimated_count,_)),T}).filter(Boolean)}a(f,"mapConditionsToFilters")}function Hl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new ln.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let m=o[0],A=hi(n.attributes,m);if(A.relationship){if(o.length<2)throw new ln.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let w=A.definition?.tableClass||A.elements?.definition?.tableClass,M=new Map,F=Hl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,w,s,M);if(A.relationship.to){i[o[0]]=M;let G=!!hi(w.attributes,A.relationship.to)?.elements;F=Ij(F,A,w.primaryStore,G,M)}if(A.relationship.from){let G=a(K=>(K?.key!==void 0&&(K=K.key),Hl({attribute:A.relationship.from,value:K},t,r,n,s,M)),"searchEntry");A.elements?(i[o[0]]=M,F=Cj(F,A,w.primaryStore,M,G)):F=F.flatMap(G)}return F}else if(o.length===1)o=o[0];else throw new ln.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,f,d,h;c instanceof Date&&(c=c.getTime());let _;switch(rA[l]||l){case"lt":u=!0,f=c;break;case"le":u=!0,f=c,d=!0;break;case"gt":u=c,h=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,f=c.slice(0),f[f.length-1]=_i.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),f=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),f=c[1],f instanceof Date&&(f=f.getTime()),d=l==="gele"||l==="gtle"||l==="between",h=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,f=c,d=!0;break;case"ne":if(c===null){u=c,h=!0;break}case"sort":case"contains":case"ends_with":u=!0,_=!0;break;default:throw new ln.ClientError(`Unknown query comparator "${l}"`)}let p,S=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>os.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,os.MAX_SEARCH_KEY_LENGTH)+os.OVERFLOW_MARKER,h=!1,p=nf(e,n,null,i,S)),typeof f=="string"&&f.length>os.MAX_SEARCH_KEY_LENGTH&&(f=f.slice(0,os.MAX_SEARCH_KEY_LENGTH)+os.OVERFLOW_MARKER,d=!0,p=p??nf(e,n,null,i,S)),r){let m=u;u=f,f=m,m=!h,h=!d,d=m}let g=S?n.primaryStore:n.indices[o];if(!g||g.isIndexing||_||c===null&&!g.indexNulls){if(s===!1&&!g)throw new ln.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&_)throw new ln.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(g?.isIndexing)throw new ln.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&g&&!g.indexNulls)throw new ln.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(p=p??nf(e,n,null,i,S),!p)throw new ln.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:u,end:f,inclusiveEnd:d,exclusiveStart:h,values:!0,versions:S,transaction:t,reverse:r};if(S){let m=g.getRange(T).map(p?function({key:A,value:w}){return this?.isSync?w&&p(w)?A:Xo.SKIP:new Promise((M,F)=>setImmediate(()=>{try{M(w&&p(w)?A:Xo.SKIP)}catch(G){F(G)}}))}:A=>A.value==null&&!(A.metadataFlags&(as|ea))?Xo.SKIP:A);return m.hasEntries=!0,m}else return g?g.getRange(T).map(p?function({key:m,value:A}){let w;return typeof m=="string"&&m.length>os.MAX_SEARCH_KEY_LENGTH?w=n.primaryStore.get(A):w={[o]:m},this.isSync?p(w)?A:Xo.SKIP:new Promise((M,F)=>setImmediate(()=>{try{M(p(w)?A:Xo.SKIP)}catch(G){F(G)}}))}:({value:m})=>m):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:m,value:A}){return this.isSync?A&&p(A)?m:Xo.SKIP:new Promise((w,M)=>setImmediate(()=>{try{w(A&&p(A)?m:Xo.SKIP)}catch(F){M(F)}}))})}function hi(e,t){if(Array.isArray(t))if(t.length>1){let r=hi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?hi(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 Ij(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,f)=>{let d=s.get(u);d?d.push(f):s.set(u,d=[f])},"add_entry");for(let u of e){let f=u.value??r.get(u.key??u),d=f?.[c];if(d!=null&&!s.filters?.some(h=>!h(f)))if(n)for(let h=0;h<d.length;h++)l(d[h],u);else l(d,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function Cj(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=f=>f[t.relationship.from]?.filter?.(d=>u.has(d));for(let f of e){if(n.filters){let d=r.get(f);if(n.filters.some(h=>!h(d)))continue}u.add(f)}return i=u[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 nf(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let f=c[0],d=hi(t.attributes,f),h=d.definition?.tableClass||d.elements.definition?.tableClass,_=n?.[f],p=nf({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},h,r,_?.[f]?.joined,c[1]===h.primaryKey,i);if(!p)return;if(_){_.filters||(_.filters=[]),_.filters.push(p);return}let S=t.propertyResolvers?.[f],g,T=a((m,A)=>{let w,M;if(S){if(S.from&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let G of p.idFilter.idSet)e={attribute:S.from,value:G};g=u(S.from,p.idFilter,!0,!0)}else g=u(S.from,p.idFilter,!1,!0);let F=g(m);return g.idFilter&&(T.idFilter=g.idFilter),F}M=S(m,r,A),w=M?.value}else w=m[f];return w?Array.isArray(w)?w.some(p):p(w,M):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),rA[o]||o){case os.SEARCH_TYPES.EQUALS:case void 0:return u(c,f=>f===l,!0);case"contains":return u(c,f=>f?.toString().includes(l));case"ends_with":return u(c,f=>f?.toString().endsWith(l));case"starts_with":return u(c,f=>typeof f=="string"&&f.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,f=>{if(!Array.isArray(f))return!1;for(let d=0,h=l.length;d<h;d++)if(f[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,f=>(0,_i.compareKeys)(f,l[0])>=0&&(0,_i.compareKeys)(f,l[1])<=0,!0);case"gt":return u(c,f=>(0,_i.compareKeys)(f,l)>0);case"ge":return u(c,f=>(0,_i.compareKeys)(f,l)>=0);case"lt":return u(c,f=>(0,_i.compareKeys)(f,l)<0);case"le":return u(c,f=>(0,_i.compareKeys)(f,l)<=0);case"ne":return u(c,f=>(0,_i.compareKeys)(f,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new ln.ClientError(`Unknown query comparator "${o}"`)}function u(f,d,h,_){let p;h=h&&!s&&t?.indices[f]&&i>3,h&&(e.estimated_count==null&&Cp(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(h=!1));let S=0,g=3;function T(m){let A=m[f],w;if(typeof A!="object"||!A||_?w=d(A):Array.isArray(A)?w=A.some(d):A instanceof Date&&(w=d(A.getTime())),h&&(g++,!w&&!T.idFilter&&++S/g*(i-g)>p)){let M=Hl(e,r.transaction.getReadTxn(),!1,t).map(kl),F=new Set(M);T.idFilter=G=>F.has(kl(G)),T.idFilter.idSet=F}return w}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(u,"attributeComparator")}function Cp(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/zi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=rA[n]||n,n===os.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=hi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=Cp(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*zi(e.indices[i.relationship.from])/(zi(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=zi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=Nj*zi(e.primaryStore)+1:n==="between"?r.estimated_count=Oj*zi(e.primaryStore)+1:n==="sort"?r.estimated_count=zi(e.primaryStore)+1:r.estimated_count=bj*zi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function Pp(e){if(e)if(Zo=e,xl.lastIndex=0,Pj.test(e))try{let t=tf(new Bl,"");if(cn!==Zo.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 ${cn} in '${Zo}'`,t}else return new URLSearchParams(e)}function tf(e,t){let r=xl,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Zo);){cn=r.lastIndex;let[,f,d]=n;if(o){if(f)throw new SyntaxError(`expected operator, but encountered '${f}'`);o=!1,c=!1}else c=!0;let h;switch(d){case"=":if(s!=null){if(f.length<=2)i=f;else throw new SyntaxError(`invalid FIQL operator ${f}`);l=YP}else{if(l=decodeURIComponent,i="equals",!f)throw new SyntaxError("attribute must be specified before equality comparator");s=rf(f)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=wj[d],l=eA[i]?YP:decodeURIComponent,!f)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=rf(f);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(f)};if(i==="eq"&&WP(p,f),s===""){let S=e.conditions[e.conditions.length-1];S.chainedConditions=S.chainedConditions||[],S.chainedConditions.push(p),S.operator=u}else Ip(e,u),e.conditions.push(p)}d==="&"?(u="and",s=void 0):d==="|"?(u="or",s=void 0):d==="&="?(u="and",s=""):d==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(rf(f)),s=void 0;break;case"(":xl.lastIndex=cn;let _=tf(f?[]:new Bl,")");switch(f){case"":Ip(e,u),e.conditions.push(_);break;case"limit":switch(_.length){case 1:e.limit=+_[0];break;case 2:e.offset=+_[0],e.limit=_[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(_[0])&&_.length===1&&!_[0].name?(e.select=_[0],e.select.asArray=!0):_.length===1?e.select=_[0]:_.length===2&&_[1]===""?e.select=_.slice(0,1):e.select=_;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=zP(_);break;default:throw new SyntaxError(`unknown query function call ${f}`)}Zo[cn]===","?r.lastIndex=++cn:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!f)throw new SyntaxError("property sets must have a defined parent property name");xl.lastIndex=cn,h=tf([],"}"),h.name=f,e.push(h),Zo[cn]===","?r.lastIndex=++cn:o=!0;break;case"[":xl.lastIndex=cn,f?(h=tf(new Bl,"]"),h.name=f):h=tf(e.conditions?new Bl:[],"]"),e.conditions?(Ip(e,u),e.conditions.push(h),s=null):e.push(h),Zo[cn]===","?r.lastIndex=++cn:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let p={comparator:i||"equals",attribute:s,value:l(f)};i==="eq"&&WP(p,f),Ip(e,u),e.conditions.push(p)}else if(f)throw new SyntaxError("no attribute or comparison specified")}else(f||e.length>0&&c)&&e.push(rf(f));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Dj:xl,r.lastIndex=cn),cn===Zo.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Ip(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function rf(e){return e.indexOf(".")>-1?e.split(".").map(rf):decodeURIComponent(e)}function YP(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new ln.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function WP(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new ln.ClientError("wildcard can only be used at the end of a string")}function zP(e){let t=QP(e[0]);return e.length>1&&(t.next=zP(e.slice(1))),t}function QP(e){if(Array.isArray(e)){let t=QP(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 kl(e){return Array.isArray(e)?e.join("\0"):e}function zi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Lj(e,t,r){return t*r/zi(e)}var ln,os,_i,Xo,bj,Oj,Nj,wj,eA,rA,Pj,xl,Dj,cn,Zo,Bl,nc,sf=be(()=>{ln=U(_e()),os=U(Mt()),_i=require("ordered-binary"),Xo=require("lmdb");of();bj=.3,Oj=.1,Nj=.05,wj={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},eA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(tA,"executeConditions");a(Hl,"searchByIndex");a(hi,"findAttribute");a(Ij,"joinTo");a(Cj,"joinFrom");rA={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(nf,"filterByType");a(Cp,"estimateCondition");Pj=/[()[\]|!<>.]|(=\w*=)/,xl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Dj=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(Pp,"parseQuery");a(tf,"parseBlock");a(Ip,"assignOperator");a(rf,"decodeProperty");a(YP,"typedDecoding");a(WP,"wildcardDecoding");a(zP,"toSortObject");a(QP,"toSortEntry");Bl=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(kl,"flattenKey");a(zi,"estimatedEntryCount");a(Lj,"intersectionEstimate");nc=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});var sA={};Be(sA,{MultiPartId:()=>Lp,Resource:()=>qr,snake_case:()=>vj,transformForSelect:()=>Mp});function vj(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function jP(e,t){if(sc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(sc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Lp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){sc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return sc=!0,null;e[e.length-1]==="/"&&(sc=!0)}return t.coerceId(decodeURIComponent(e))}function vn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,f;if(r?(o?(f=i,o=o.getContext?.()||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(f=s,c=f[this.primaryKey]??null,o=i.getContext?.()||i):f=i:(f=s,s=void 0,c=f.getId?.()??f[this.primaryKey]),c===null&&(u=!0)):i?o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string"){let _=c.indexOf("?");if(_>-1){let S=this.parseQuery(c.slice(_+1));l?S&&(l=Object.assign(S,l)):l=S,c=c.slice(0,_)}let p=this.parsePath(c,o,l);p?.id!==void 0?(p.query&&(l?l=Object.assign(p.query,l):l=p.query),u=p.isCollection,c=p.id):c=p}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new nc(c),c==null&&(u=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||u?(d={...t},l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),u&&(d.isCollection=!0)):d=t,o.transaction){let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)}else return yt(o,()=>{let _=this.getResource(c,o,d);return _.then?_.then(h):h(_)},d);function h(_){if(o.authorize){o.authorize=!1;let p=t.type==="read"?_.allowRead(o.user,l,o):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(o.user,f,o):_.allowUpdate(o.user,f,o):t.type==="create"?_.allowCreate(o.user,f,o):_.allowDelete(o.user,l,o);if(p?.then)return p.then(S=>{if(!S)throw new Dp(o.user);return typeof f?.then=="function"?f.then(g=>e(_,l,o,g)):e(_,l,o,f)});if(!p)throw new Dp(o.user)}return typeof f?.then=="function"?f.then(p=>e(_,l,o,p)):e(_,l,o,f)}a(h,"authorizeActionOnResource")}}function Un(e,t){let r=new ZP.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 nA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 Mp(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):nA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],f=i(nA(l,r,n));for(let d of e)u.push(f(d));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(h=>h&&typeof h=="object"?c(h):h);let u={},f=i(nA(l,r,n)),d;for(let h of e){let _=f(h);_===void 0&&o&&(_=null),_?.then?(d||(d=[]),d.push(_.then(p=>u[h.name||h]=p))):u[h.name||h]=_}return d?Promise.all(d).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let f=r[c.name]?.definition?.tableClass;l=s[c.name]=Mp(c.select||c,f)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var JP,XP,ZP,Mj,qr,Dp,sc,Lp,ta=be(()=>{JP=require("crypto");Ul();XP=U(ui()),ZP=U(_e());rc();sf();Mj={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},qr=class{static{a(this,"Resource")}#e;#t;#n;static transactions;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=vn(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Mp(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=vn(function(t,r,n,s){if(Array.isArray(s)&&t.#n){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(f=>f.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Un(t,"put")},{hasContent:!0,type:"update"});static patch=vn(function(t,r,n,s){return t.patch?t.patch(s,r):Un(t,"patch")},{hasContent:!0,type:"update"});static delete=vn(function(t,r,n,s){return t.delete?t.delete(r):Un(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,JP.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),yt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Un(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=vn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Un(t,"delete")},{hasContent:!1,type:"update"});static post=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=vn(function(t,r,n,s){return t.connect?t.connect(s,r):Un(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Un(t,"subscribe")},{type:"read"});static publish=vn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.publish(s,r):Un(t,"publish")},{hasContent:!0,type:"create"});static search=vn(function(t,r,n,s){let i=t.search?t.search(r):Un(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Mp(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=vn(function(t,r,n,s){return t.search?t.search(s,r):Un(t,"search")},{hasContent:!0,type:"read"});static copy=vn(function(t,r,n,s){return t.copy?t.copy(s,r):Un(t,"copy")},{hasContent:!0,type:"create"});static move=vn(function(t,r,n,s){return t.move?t.move(s,r):Un(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#n)return(await this.constructor.create(this.#e,t,this.#t)).#e;Un(this,"post")}static isCollection(t){return t&&t.#n}get isCollection(){return this.#n}static coerceId(t){return t}static parseQuery(t){return Pp(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&Mj[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:jP(t,this),isCollection:sc}}let i=jP(t,this);return sc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(f=>f.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let f of l){let d=f.#e,h=u.get(d);h?h.push(f):u.set(d,[f])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#n=!0),s}subscribe(t){return new Mn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Mn}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.#e}getContext(){return this.#t}};(0,XP._assignPackageExport)("Resource",qr);a(vj,"snake_case");Dp=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(jP,"pathToId");Lp=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(vn,"transactional");a(Un,"missingMethod");a(nA,"selectFromObject");a(Mp,"transformForSelect")});var ra,iA=be(()=>{ra=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 rD={};Be(rD,{Resources:()=>vp,keyArrayToString:()=>Fl,resetResources:()=>Uj,resources:()=>pi});function Uj(){return pi=new vp}function Fl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var eD,tD,vp,pi,Gl=be(()=>{rc();iA();eD=U(j()),tD=U(_e()),vp=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,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new tD.ServerError(`Conflicting paths for ${t}`);eD.default.error(c),i.Resource=new ra(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let f=this.get(c.slice(0,u));f&&(f.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(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 yt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Uj,"resetResources");a(Fl,"keyArrayToString")});var oA=P((SAe,nD)=>{if(__filename.endsWith("dev.js")){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:o,writeFileSync:c}=require("node:fs"),{isMainThread:l}=require("node:worker_threads"),{spawnSync:u,spawn:f}=require("node:child_process"),{PACKAGE_ROOT:d}=_t(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],_="ts-build";if(l){let g=!1,T=!1;if((T=s(n(d,_)))?g=e.sync(h.map(m=>`${m}/**/*.ts`),{cwd:d}).some(m=>{let A=0,w=0;try{A=i(n(d,m)).mtimeMs-5e3,w=i(n(d,_,m.replace(/.ts$/,".js"))).mtimeMs}catch{}return A>w}):g=!0,g){console.log("Compiling TypeScript...");let m=u("npx",["tsc"],{cwd:d});if(m.stdout?.length&&console.log(m.stdout.toString()),m.stderr?.length&&console.log(m.stderr.toString()),T){let A=n(t(),"harperdb-tsc.pid"),w=!1;if(s(A))try{process.kill(+o(A,"utf8"),0),w=!0}catch{}if(!w){console.log("Starting background TypeScript compilation...");let M=f("npx",["tsc","--watch"],{detached:!0,cwd:d,stdio:"ignore"});c(A,M.pid.toString()),M.unref()}}}}let p=nD.constructor,S=p._findPath;p._findPath=function(g,T,m){if(g.startsWith(".")&&!m&&T.length===1&&T[0].startsWith(d)&&!T[0].includes("node_modules")){let A=r(d,T[0]),w;A.startsWith(_)?w=n(d,r(_,A)):w=n(d,_,A);let M=n(w,g),F=M+".js";if(s(F))return F;if(M.includes(".")&&s(M))return M}return S(g,T,m)}}});var ic={};Be(ic,{server:()=>je});var sD,je,$r=be(()=>{sD=U(ui()),je={};(0,sD._assignPackageExport)("server",je)});var lA={};Be(lA,{loadGQLSchema:()=>Hj,start:()=>cA,startOnMainThread:()=>Bj});function cA({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:f}=await import("graphql"),d=o(new c(r.toString(),s)),h=new Map,_=[],p;for(let T of d.definitions)switch(T.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(K){if(K.kind==="NonNullType"){let X=F(K.type);return X.nullable=!1,X}if(K.kind==="ListType")return{type:"array",elements:F(K.type)};let ie={type:K.name?.value};return Object.defineProperty(ie,"location",{value:K.loc.startToken}),ie};a(F,"getProperty");let m=T.name.value,A=[],w={table:null,database:null,properties:A};h.set(m,w);for(let K of T.directives){if(K.name.value==="table"){for(let ie of K.arguments)w[ie.name.value]=ie.value.value;w.schema&&(w.database=w.schema),w.table||(w.table=m),w.audit&&(w.audit=w.audit!=="false"),w.attributes=w.properties,_.push(w)}if(K.name.value==="sealed"&&(w.sealed=!0),K.name.value==="splitSegments"&&(w.splitSegments=!0),K.name.value==="replicate"&&(w.replicate=!0),K.name.value==="export"){w.export=!0;for(let ie of K.arguments)typeof w.export!="object"&&(w.export={}),w.export[ie.name.value]=ie.value.value}}let M=!1,G={};for(let K of T.fields){let ee=F(K.type);ee.name=K.name.value,A.push(ee),G[ee.name]=void 0;for(let ie of K.directives){let X=ie.name.value;if(X==="primaryKey")M?console.warn("Can not define two attributes as a primary key at",ie.loc):(ee.isPrimaryKey=!0,M=!0);else if(X==="indexed")ee.indexed=!0;else if(X==="computed"){for(let re of ie.arguments||[])if(re.name.value==="from"){let z=re.value.value;ee.computed={from:g(z,re,G)},ee.version==null&&(ee.version=z)}else re.name.value==="version"&&(ee.version=re.value.value);ee.computed=ee.computed||!0}else if(X==="relationship"){let re={};for(let z of ie.arguments)re[z.name.value]=z.value.value;ee.relationship=re}else if(X==="createdTime")ee.assignCreatedTime=!0;else if(X==="updatedTime")ee.assignUpdatedTime=!0;else if(X==="expiresAt")ee.expiresAt=!0;else if(X==="allow"){let re=ee.authorizedRoles=[];for(let z of ie.arguments)z.name.value==="role"&&re.push(z.value.value)}else server.knownGraphQLDirectives.includes(X)&&console.warn(`@${X} is an unknown directive, at`,ie.loc)}}w.type=m,m==="Query"&&(p=w)}function S(T){let m=h.get(T.type);m?(Object.defineProperty(T,"properties",{value:m.properties}),Object.defineProperty(T,"definition",{value:m})):T.type==="array"?S(T.elements):xj.includes(T.type)||(0,oD.getWorkerIndex)()===0&&console.error(`The type ${T.type} is unknown at line ${T.location.line}, column ${T.location.column}, in ${s}`)}a(S,"connectPropertyType");for(let T of h.values())for(let m of T.properties)S(m);for(let T of _)T.tableClass=e(T),T.export&&(T.export.name===""?i.set((0,aA.dirname)(n),T.tableClass):i.set((0,aA.dirname)(n)+"/"+(T.export.name||T.type),T.tableClass,T.export));function g(T,m,A){return new iD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${T}; } } } } computed;`,{filename:s,lineOffset:m.loc.startToken.line-1,columnOffset:m.loc.startToken.column}).runInThisContext()(A)}a(g,"createComputedFrom")}}var aA,iD,oD,xj,Bj,Hj,aD=be(()=>{aA=require("path"),iD=require("node:vm");De();oD=U(rt()),xj=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(cA,"start");Bj=cA,Hj=cA({ensureTable:ot}).handleFile});var hD={};Be(hD,{parse:()=>dA,streamAsJSON:()=>af,stringify:()=>oc});function af(e){return new uA({value:e})}function cD(e){return console.error(e),JSON.stringify(e.toString())}function lD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function oc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===fD)return _D(e);if(t.resolution)return t.resolution.then(()=>oc(e));throw t}}function _D(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+=_D(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+oc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function dA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),Gj.test(e)?kj.parse(e):JSON.parse(e)):null}var uD,dD,kj,Fj,fD,uA,Gj,fA=be(()=>{uD=require("stream"),dD=U(require("json-bigint-fixes")),kj=(0,dD.default)({useNativeBigInt:!0}),Fj=1e4,fD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw fD};a(af,"streamAsJSON");uA=class extends uD.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(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(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),cD)}catch(s){yield cD(s)}else yield oc(t)}else yield oc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);lD(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>Fj?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 lD(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(cD,"handleError");a(lD,"when");a(oc,"stringify");a(_D,"jsStringify");Gj=/[[,:]\s*-?\d{16,}/;a(dA,"parse")});var Qi=P(xp=>{var Up=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])Up.logsAtLevel(e)&&(xp[e]=Up[e]);xp.loggerWithTag=e=>Up.loggerWithTag(e,!0);xp.setLogLevel=Up.setLogLevel});var Yp={};Be(Yp,{Blob:()=>Ei,blobsWereEncoded:()=>$l,databasePaths:()=>kp,decodeBlobsWithWrites:()=>EA,decodeFromDatabase:()=>cc,decodeWithBlobCallback:()=>mA,deleteBlob:()=>yD,deleteBlobsInObject:()=>Zi,deleteRootBlobPathsForDB:()=>pA,encodeBlobsAsBuffers:()=>Jj,encodeBlobsWithFilePath:()=>Kp,getFileId:()=>$p,getFilePathForBlob:()=>OD,getRootBlobPathsForDB:()=>Vp,setDeletionDelay:()=>Kj});function AD(){}function yD(e){let t=OD(e);if(!t){ji.default.debug?.("No file path for blob, can not delete");return}setTimeout(()=>{(0,Qe.unlink)(t,r=>{r&&ji.default.debug?.("Error trying to remove blob file",r)})},RD)}function Kj(e){RD=e}function bD(e){let t=un.get(e);if(!t)t={storageIndex:0,fileId:null,store:Bs},un.set(e,t);else{if(t.saving)return t;t.store=Bs}return Wj(t),t.source?_A(e,t.source,t):t.contentBuffer?Yj(e,t):_A(e,lf.Readable.from(e.stream()),t),t}function _A(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let f=s+":blob";if(!i.attemptLock(f,0))throw new Error(`Unable to get lock for blob file ${s}`);let d=(0,Qe.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());d.end(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g]));return}let h=!1;e.size!==void 0&&(d.write(p(e.size)),h=!0);let _;o?(h||d.write($j),_=(0,Gp.createDeflate)(),t.pipe(_).pipe(d)):(h||d.write(qj),t.pipe(d)),t.on("error",S);function p(g){let T=BigInt(g),m=new Uint8Array(pr),A=new DataView(m.buffer);return T|=BigInt(o?hA:TD)<<48n,A.setBigInt64(0,T),m}a(p,"createHeader");function S(g){i.unlock(f,0);let T=d.fd;g?(T&&(0,Qe.close)(T),u(g)):c?(0,Qe.fdatasync)(T,m=>{m&&u(m),l(),(0,Qe.close)(T)}):(l(),(0,Qe.close)(T))}a(S,"finished"),d.on("error",S).on("finish",()=>{if(h)S();else{let g=_?_.bytesWritten:d.bytesWritten-pr;e.size=g,(0,Qe.write)(d.fd,p(g),0,pr,0,S)}})}),e}function $p(e){return un.get(e)?.fileId}function OD(e){let t=un.get(e);return t?.fileId&&uf(t)}function Vp(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=kp.get(e);if(!t){if(!e.databaseName)throw new Error("No database name specified, can not determine blob storage path");let r=(0,qp.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Xi.join)(n,e.databaseName)):t=[(0,Xi.join)((0,qp.getHdbBasePath)(),"blobs",e.databaseName)],kp.set(e,t)}return t}async function pA(e){let t=kp.get(e);t&&await Promise.all(t.map(r=>ND(r)))}async function ND(e){for(let t of await(0,Hs.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await ND((0,Xi.join)(e,t.name));else try{await(0,Hs.unlink)((0,Xi.join)(e,t.name))}catch(r){ji.default.warn?.("Error deleting file",r)}try{await(0,Hs.rmdir)(e)}catch(t){ji.default.warn?.("Error deleting directory",t)}}function uf({storageIndex:e,fileId:t,store:r}){let n=Vp(r);return(0,Xi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function Yj(e,t){let r=t.contentBuffer,n=r.length;if(!(n<SD))return e.size=n,_A(e,lf.Readable.from([r]),t)}function Wj(e){let t=Vp(e.store),r=zj(),n=t?.length>1?Qj(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=uf(e),o=(0,Xi.dirname)(i);(0,Qe.existsSync)(o)||(0,gD.ensureDirSync)(o),e.filePath=i}function zj(){let e=mD.get(Bs);if(!e){let t=0,r=Vp(Bs);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,Qe.existsSync)(n))for(let c of(0,Qe.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Xi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Bs.getUserSharedBuffer("blob-file-id",e.buffer)),mD.set(Bs,e)}return Number(Atomics.add(e,0,1n))}function Qj(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(Fp);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,jj(e)),e.frequencyTable[t%Fp]}async function jj(e){if(!Hs.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o=await(0,Hs.statfs)(s),c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(Fp),n=t.map(s=>1/s);for(let s=0;s<Fp;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function Kp(e,t,r){ql=t,Bs=r,$l=!1;try{return e()}finally{ql=void 0,Bs=void 0}}function Jj(e){Dr=[];let t;try{t=e()}catch(n){throw Dr=void 0,n}let r=Dr.length<2?Dr[0]:Promise.all(Dr);return Dr=void 0,r?r.then(()=>e()):t}function EA(e,t){try{Dr=[],ac=t,e()}catch(n){throw ac=void 0,Dr=void 0,n}ac=void 0;let r=Dr.length<2?Dr[0]:Promise.all(Dr);return Dr=void 0,r}function mA(e,t){try{return ac=t,e()}finally{ac=void 0}}function cc(e,t){return Bs=t,e()}function Zi(e){if(e instanceof Ei)yD(e);else if(e.constructor===Object||Array.isArray(e))for(let t in e)typeof e[t]=="object"&&Zi(e[t])}function Xj(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var Ji,Hs,Qe,Gp,lf,gD,qp,Xi,ji,SD,pr,TD,hA,pD,qj,$j,ED,un,ac,Ei,ql,Dr,Bs,$l,cf,Bp,Vj,Hp,RD,kp,mD,Fp,cs=be(()=>{Ji=require("msgpackr"),Hs=require("node:fs/promises"),Qe=require("node:fs"),Gp=require("node:zlib"),lf=require("node:stream"),gD=require("fs-extra"),qp=U(ce());H();Xi=require("path"),ji=U(Qi());eo();SD=8192,pr=8,TD=0,hA=1,pD=255,qj=new Uint8Array([0,TD,255,255,255,255,255,255]),$j=new Uint8Array([0,hA,255,255,255,255,255,255]),ED=0xffffffffffff,un=new WeakMap,Ei=global.Blob||Xj(),$l=!1,cf=new Uint8Array(8),Bp=new DataView(cf.buffer),Vj=6e4;a(AD,"InstanceOfBlobWithNoConstructor");AD.prototype=Ei.prototype;Hp=class e extends AD{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=un.get(this),{start:r,end:n,contentBuffer:s}=t;return s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?s.toString():(gA(this.bytes().then(i=>t.contentBuffer=i)),"")}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=un.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=uf(t),o,c=a(async()=>{let l,u=pr;try{if(l=await(0,Hs.readFile)(i),l.length>=pr){l.copy(cf,0,0,pr);let d=Bp.getBigUint64(0);if(Number(d>>48n)===pD)throw new Error("Error in blob: "+buffer.subarray(pr));if(u=Number(d&0xffffffffffffn),u<n&&(u=n),u<ED&&(this.size=u,this.#t))for(let h of this.#t)h(u)}}catch(d){if(d.code!=="ENOENT")throw d;l=Buffer.alloc(0)}function f(d){if(u>d.length){let h=t.store,_=t.fileId+":blob";if(o)throw new Error("Incomplete blob");return new Promise((p,S)=>{if(h.attemptLock(_,0,()=>(o=!0,h.unlock(_,0),p(c()))))return o=!0,h.unlock(_,0),p(c())})}return(n!=null||r!=null)&&(d=d.subarray(r??0,n??d.length)),d}return a(f,"checkCompletion"),l[1]===hA?new Promise((d,h)=>{(0,Gp.deflate)(l.subarray(pr),(_,p)=>{_?h(_):d(f(p))})}):f(l.subarray(pr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=un.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(p){p.enqueue(r),p.close()}});let i=uf(t),o,c=0,l=0,u,f,d,h=this;return new ReadableStream({start(){let p=1e3,S=a((g,T)=>{(0,Qe.open)(i,"r",(m,A)=>{if(m){if(m.code==="ENOENT"&&d!==!1&&(ji.default.debug?.("File does not exist yet, waiting for it to be created",i,p),p-- >0))return setTimeout(()=>{_(),S(g,T)},20).unref();T(m),h.#e?.forEach(w=>w(m))}else o=A,g(A)})},"openFile");return new Promise(S)},pull:a(p=>{let S=0,g=100;return new Promise(a(function T(m,A){function w(F){(0,Qe.close)(o),u&&u.close(),A(F),h.#e?.forEach(G=>G(F))}a(w,"onError");let M=Buffer.allocUnsafe(262144);(0,Qe.read)(o,M,0,M.length,c,(F,G,K)=>{if(l+=G,F)return w(F);if(c===0){if(G<pr){g-- >0&&d!==!1?(_(),ji.default.debug?.("File was empty, waiting for data to be written",i,g),setTimeout(()=>T(m,A),20).unref()):(ji.default.debug?.("File was empty, throwing error",i,g),A(new Error(`Blob ${t.fileId} was empty`)));return}K.copy(cf,0,0,pr);let ee=Bp.getBigUint64(0);if(Number(ee>>48n)===pD)return w(new Error("Error in blob: "+K.subarray(pr)));if(S=Number(ee&0xffffffffffffn),S<ED&&h.size!==S&&(h.size=S,h.#t))for(let ie of h.#t)ie(S);K=K.subarray(pr,G),l-=pr}else if(G===0){let ee=Buffer.allocUnsafe(8);return(0,Qe.read)(o,ee,0,pr,0,ie=>{if(ie)return w(ie);if(cf.set(ee),S=Number(Bp.getBigUint64(0)&0xffffffffffffn),S>l){d!==!1?(f=setTimeout(()=>{w(new Error("File read timed out"))},Vj).unref(),u=(0,Qe.watch)(i,{persistent:!1},()=>{clearTimeout(f),u.close(),_(),T(m,A)})):w(new Error("Blob is incomplete"));return}(0,Qe.close)(o),p.close(),m()})}else K=K.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,T(m,A);s&&l>=s&&(l>s&&(K=K.subarray(0,s-c)),l=S=s),n&&n>c&&(K=K.subarray(n-c))}c+=G;try{p.enqueue(K)}catch(ee){return ji.default.debug?.("Error enqueuing chunk",ee),m()}l===S&&((0,Qe.close)(o),p.close()),m()})},"readMore"))},"pull"),cancel(){(0,Qe.close)(o),clearTimeout(f),u&&u.close()}});function _(){if(d===void 0){let p=t.store,S=t.fileId+":blob";d=!p.attemptLock(S,0,()=>{d=!1,p.unlock(S,0)}),d||p.unlock(S,0)}return d}}slice(t,r,n){let s=un.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};un.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};un.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(!t?.primaryStore?.rootStore)throw new Error("No target table specified");return bD(this).saving??Promise.resolve()}},RD=500;a(yD,"deleteBlob");a(Kj,"setDeletionDelay");global.createBlob=function(e,t){let r=new Hp(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(un.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof lf.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=lf.Readable.from(e);else throw new Error("Invalid source type");return r};a(bD,"saveBlob");a(_A,"writeBlobWithStream");a($p,"getFileId");a(OD,"getFilePathForBlob");kp=new Map;a(Vp,"getRootBlobPathsForDB");a(pA,"deleteRootBlobPathsForDB");a(ND,"rimrafSteadily");a(uf,"getFilePath");a(Yj,"writeBlobWithBuffer");a(Wj,"generateFilePath");mD=new Map;a(zj,"getNextFileId");Fp=128;a(Qj,"getNextStorageIndex");a(jj,"createFrequencyTableForStoragePaths");a(Kp,"encodeBlobsWithFilePath");a(Jj,"encodeBlobsAsBuffers");a(EA,"decodeBlobsWithWrites");a(mA,"decodeWithBlobCallback");a(cc,"decodeFromDatabase");a(Zi,"deleteBlobsInObject");(0,Ji.addExtension)({Class:Ei,type:11,unpack:a(function(e){let t=(0,Ji.unpack)(e),r=new Hp;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(!Bs)throw new Error("No store specified, can not load blob from storage");if(un.set(r,{storageIndex:t[1],fileId:t[2],store:Bs}),ac)return ac(r)??r}else un.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=un.get(e);if(ql!==void 0&&($l=!0,t?.recordId!==void 0&&t.recordId!==ql))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<SD)return r.size=t.contentBuffer.length,(0,Ji.pack)([r,t.contentBuffer])}if(ql!==void 0){if(t=bD(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=ql,(0,Ji.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,Qe.readFileSync)(uf(t));if(n.length>=pr&&(n.copy(cf,0,0,pr),Number(Bp.getBigUint64(0)&0xffffffffffffn)===n.length-pr))return Buffer.concat([(0,Ji.pack)([r]),n]);if(Dr)Dr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Dr)return Dr.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ji.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(Xj,"polyfillBlob")});var bA={};Be(bA,{asyncSerialization:()=>gA,contentTypes:()=>RA,findBestSerializer:()=>zp,getDeserializer:()=>ro,registerContentHandlers:()=>yA,serialize:()=>_f,serializeMessage:()=>sa,toCsvStream:()=>Wp});function eJ(e){try{return e?.[0]===123?AA(e):e}catch{return e}}function yA(e){e.register(rJ,{serializers:[{regex:/^application\/json$/,serializer:af},{regex:/^application\/cbor$/,serializer:a(function(t){return new lc.EncoderStream(ff).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uc.Readable.from((0,mi.encodeIter)(t,ff)):(0,mi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),Wp(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,mi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,lc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function zp(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...f]=l.split(/\s*;\s*/),d=1,h={q:1};for(let p of f){let S=p.indexOf("=");h[p.substring(0,S)]=p.substring(S+1)}d=+h.q;let _=Vr.get(u);if(_){let p=(_.q||1)*d;p>s&&(n=_,i=_.type||u,s=p,o=h)}}if(!n){if(r)throw new CD.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Vr.keys()).join(", "),406);n=Vr.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function _f(e,t,r){let n=ID&&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||e instanceof Ei)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=zp(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&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),TA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,to.createBrotliCompress)({params:{[to.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?to.constants.BROTLI_MODE_TEXT:to.constants.BROTLI_MODE_GENERIC,[to.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>ID?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,to.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function sa(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;na=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=zp(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=df(e);return na?.length>0?(na.length===1?na[0]:Promise.all(na)).then(()=>sa(e,t,!0)):n}finally{na=void 0}}function gA(e){if(na)na.push(e);else throw new Error("Unable to serialize asynchronously")}function nJ(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 iJ(e){return sJ.includes(e)}function oJ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function ro(e="",t=!1){let r=oJ(e),n=r.type&&Vr.get(r.type)?.deserialize||aJ(r);return t?s=>nJ(s).then(n):n}function aJ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!iJ(e.parameters.charset)&&TA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return AA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function cJ(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)}}}}}function Wp(e,t){let r=uc.default.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 Zj(n,s);return r.pipe(i)}var mi,lc,to,CD,uc,PD,SA,DD,TA,Zj,LD,df,AA,ff,Vr,RA,wD,MD,tJ,rJ,ID,na,sJ,eo=be(()=>{fA();mi=require("msgpackr"),lc=require("cbor-x"),to=require("zlib"),CD=U(_e()),uc=U(require("stream"));$r();PD=U(ui()),SA=U(ce());H();DD=U(require("yaml")),TA=U(Qi());cs();({Transform:Zj}=require("json2csv")),LD=SA.default.get(B.SERIALIZATION_BIGINT)!==!1,df=LD?oc:JSON.stringify,AA=LD?dA:JSON.parse,ff={useRecords:!1,useToJSON:!0},Vr=new Map,RA=Vr;je.contentTypes=RA;(0,PD._assignPackageExport)("contentTypes",RA);Vr.set("application/json",{serializeStream:af,serialize:df,deserialize(e){return AA(e)},q:.8});wD=new lc.Encoder(ff);Vr.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new lc.EncoderStream(ff).end(e)},serialize:wD.encode,deserialize:wD.decode,q:1});Vr.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uc.Readable.from((0,mi.encodeIter)(e,ff)):(0,mi.pack)(e)},serialize:mi.pack,deserialize:mi.unpack,q:.9});Vr.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),Wp(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),Wp(e,e?.getColumns?.())},q:.1});Vr.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return uc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});Vr.set("text/yaml",{serialize(e){return DD.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Vr.set("text/event-stream",{serializeStream:a(function(e){return uc.Readable.from(cJ(e,this.serialize))},"serializeStream"),serialize:a(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+`
8
+ `),e.data){let r=e.data;typeof r=="object"&&(r=df(r)),t+="data: "+r+`
31
9
  `}return e.id&&(t+="id: "+e.id+`
32
10
  `),e.retry&&(t+="retry: "+e.retry+`
33
11
  `),t+`
34
- `}else return typeof e=="object"?`data: ${Sh(e)}
12
+ `}else return typeof e=="object"?`data: ${df(e)}
35
13
 
36
14
  `:`data: ${e}
37
15
 
38
- `},"serialize"),compressible:!1,q:.8});Zr.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()}});cV={type:"application/json",serializeStream:uf,serialize:Sh,deserialize:Yde,q:.5};Zr.set("*/*",cV);Zr.set("",cV);a(Yde,"tryJSONParse");a(rw,"registerContentHandlers");Wde=require("fastify-plugin"),zde=Wde(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=rS(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(rS,"findBestSerializer");nV=JN.default.get(XN.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Rh,"serialize");a(Xc,"serializeMessage");a(jde,"streamToBuffer");Qde=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(Jde,"isBufferEncoding");a(Xde,"parseContentType");a(Io,"getDeserializer");a(Zde,"deserializerUnknownType");a(efe,"transformIterable")});var sw={};Fe(sw,{start:()=>lfe});function tfe(e){if(e.kind!==we.Kind.OPERATION_DEFINITION&&e.kind!==we.Kind.FRAGMENT_DEFINITION)throw new br(`Unexpected non-executable definition type ${e.kind}.`)}function uV(e){if(typeof e!="object"||e===null)throw new Mi("Request body must be an object.");if(!("query"in e))throw new Mi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Mi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Mi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Mi("Request body `operationName` field must be a string.")}function nw(e){return parseInt(e.value,10)}function fV(e){return parseFloat(e.value)}function _V(e,t,r){let n=r.get(e.name.value);return hV(n)?mV(n,t):{attribute:t,value:n}}function hV(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function mV(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],hV(n)?mV(n,t):{attribute:t,value:n}))}function rfe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case we.Kind.NULL:return{attribute:t,value:null};case we.Kind.INT:return{attribute:t,value:nw(e.value)};case we.Kind.FLOAT:return{attribute:t,value:fV(e.value)};case we.Kind.BOOLEAN:case we.Kind.STRING:return{attribute:t,value:e.value.value};case we.Kind.VARIABLE:return _V(e.value,t,r);case we.Kind.OBJECT:return pV(e.value,t,r);case we.Kind.LIST:case we.Kind.ENUM:default:throw new br(`Value type, ${e.value.kind}, is not supported.`)}}function pV(e,t,r){return e.fields.flatMap(n=>rfe(n,t,r))}function nfe(e,t){switch(e.value.kind){case we.Kind.NULL:return{attribute:e.name.value,value:null};case we.Kind.INT:return{attribute:e.name.value,value:nw(e.value)};case we.Kind.FLOAT:return{attribute:e.name.value,value:fV(e.value)};case we.Kind.BOOLEAN:case we.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case we.Kind.VARIABLE:return _V(e.value,e.name.value,t);case we.Kind.OBJECT:return pV(e.value,[e.name.value],t);case we.Kind.LIST:case we.Kind.ENUM:default:throw new br(`Argument type, ${e.value.kind}, is not supported.`)}}function sfe(e,t){return e.flatMap(r=>nfe(r,t))}function nS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case we.Kind.FIELD:return r;case we.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new br(`Fragment \`${n}\` not found.`);return nS(s.selectionSet,t)}case we.Kind.INLINE_FRAGMENT:return nS(r.selectionSet,t)}})}function EV(e,t){return nS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:EV(r.selectionSet,t)}:r.name.value)}async function ife(e,t,r,n){let s=pi.getMatch(e.name.value,"graphql");if(s===void 0)throw new br(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:EV(e.selectionSet,r),conditions:sfe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function gV(e){switch(e.kind){case we.Kind.NULL:return null;case we.Kind.INT:return nw(e);case we.Kind.FLOAT:return parseFloat(e.value);case we.Kind.STRING:case we.Kind.BOOLEAN:return e.value;case we.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:gV(r.value),...t}),{});case we.Kind.LIST:case we.Kind.ENUM:default:throw new br(`Value type, ${e.kind}, is not supported.`)}}function ofe(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=gV(n.defaultValue)),n.type.kind===we.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new br(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function afe(e,t,r,n){if(e.operation===we.OperationTypeNode.SUBSCRIPTION)throw new br("Subscriptions are not supported.");if(e.operation===we.OperationTypeNode.MUTATION)throw new br("Mutations are not supported yet.");let s=ofe(e.variableDefinitions,t),i=await Promise.all(nS(e.selectionSet,r).map(c=>ife(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function dV({query:e,variables:t={},operationName:r},n){let s=we.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(tfe(u),u.kind===we.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new br("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new br(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new br("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new br(`Operation \`${r}\` not found.`);let l=await afe(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function cfe(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return uV(r),dV(r,e)}case"POST":{let r=await Io(e.headers.get("content-type"),!0)(e._nodeRequest);return uV(r),dV(r,e)}default:throw new Mi("Method Not Allowed",405,{Allow:"GET, POST"})}}function lfe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await cfe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Mi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof we.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof br)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Mi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof we.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof br)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}})}var we,br,Mi,SV=Oe(()=>{we=L(require("graphql"));Zc();Fl();a(tfe,"assertExecutableDefinitionNode");a(uV,"assertRequestParams");a(nw,"processIntValueNode");a(fV,"processFloatValueNode");a(_V,"processVariableNode");a(hV,"isObject");a(mV,"transformObjectIntoQueryCondition");a(rfe,"processObjectFieldNode");a(pV,"processObjectValueNode");a(nfe,"processArgumentNode");a(sfe,"buildConditionsQuery");a(nS,"fillInFragments");a(EV,"buildSelectQuery");a(ife,"processFieldNode");a(gV,"processConstValueNode");a(ofe,"resolveVariables");a(afe,"executeOperation");a(dV,"resolver");br=class extends Error{static{a(this,"GraphQLQueryingError")}},Mi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(cfe,"graphqlQueryingHandler");a(lfe,"start")});var iw={};Fe(iw,{start:()=>RV,startOnMainThread:()=>ffe});function RV({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,TV.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(ufe.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await dfe(i)}}}async function dfe(e){let t=Qe().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,AV.isEqual)(i,e)?void 0:(e.id=r.id,(0,sS.alterRole)(e))}return(0,sS.addRole)(e)}var sS,TV,AV,ufe,ffe,yV=Oe(()=>{Pe();sS=L(N_()),TV=require("yaml"),AV=require("lodash"),ufe=["super_user","cluster_user","structure_user"];a(RV,"start");a(dfe,"ensureRole");ffe=RV});async function iS(e){let t=(0,NV.pathToFileURL)(e).toString();return _fe?(yh||(yh=hfe(pfe)),(await(await yh).import(t)).namespace):import(t)}async function hfe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),yh=new Compartment({console,Math,Date,fetch:mfe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,OV.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qr,tables:Zn,databases:Ge})}};let n=await(0,bV.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),yh}function mfe(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 pfe(){return{Resource:qr,tables:Zn}}var bV,OV,NV,_fe,yh,ow=Oe(()=>{Xo();Pe();bV=require("fs/promises"),OV=require("path"),NV=require("url"),_fe=!1;a(iS,"secureImport");a(hfe,"getCompartment");a(mfe,"secureOnlyFetch");a(pfe,"getGlobalVars")});var cw={};Fe(cw,{handleFile:()=>Efe});async function Efe(e,t,r,n){let s=new Map,i=await iS(r);c(i.default)&&n.set((0,aw.dirname)(t),i.default),o(i,(0,aw.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var aw,wV=Oe(()=>{ow();aw=require("path");a(Efe,"handleFile")});var uw={};Fe(uw,{start:()=>gfe});function gfe({resources:e}){e.set("login",lw),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var lw,IV=Oe(()=>{Xo();a(gfe,"start");lw=class extends qr{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)}}}});function MV(e){let t={openapi:Sfe,info:{title:"HarperDB HTTP REST interface",version:(0,LV.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||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:A,name:w,elements:M,relationship:H,definition:k}of o){if(H)A==="array"?u[w]={type:"array",items:{$ref:Pa+M.type}}:u[w]={$ref:Pa+A};else{let V=k??M?.definition;if(V){if(!t.components.schemas[V.type]){let q={};V.properties.forEach(ae=>{q[ae.name]=new hw(dw[ae.type],ae.type)}),t.components.schemas[V.type]=new DV(q)}A==="array"?u[w]={type:"array",items:{$ref:Pa+V.type}}:u[w]={$ref:Pa+V.type}}else A==="array"?M.type==="Any"||M.type=="ID"?u[w]={type:"array",items:{format:M.type}}:u[w]={type:"array",items:new hw(dw[M.type],M.type)}:A==="Any"||A=="ID"?u[w]={format:A}:u[w]=new hw(dw[A],A)}f.push(new mw(w,"query",u[w]))}let d=Object.keys(u),h=new mw(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new mw("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new DV(u);let m=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",T=typeof l.delete=="function",E="/"+s+"/";m&&(t.paths[E]={},t.paths[E].post=new Tfe(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[E]||(t.paths[E]={}),t.paths[E].get=new fw(f,r,{200:new _w({$ref:Pa+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new PV(f,r,"delete all the records that match the provided query",{204:new CV})),E="/"+s+"/{"+c+"}",g&&(t.paths[E]={},t.paths[E].get=new fw([h],r,{200:new _w({$ref:Pa+i})},"retrieve a record by its primary key")),S&&(t.paths[E]||(t.paths[E]={}),t.paths[E].put=new Afe([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[E]||(t.paths[E]={}),t.paths[E].delete=new PV([h],r,"delete a record with the given primary key",{204:new CV})),g&&_.schema.enum.length>0&&(E="/"+s+"/{"+c+"}.{property}",t.paths[E]={},t.paths[E].get=new fw([h,_],r,{200:new _w({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Tfe(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Pa+e}}}},this.security=t,this.responses={200:{description:pw,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function fw(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function _w(e){this.description=pw,this.content={"application/json":{schema:e}}}function CV(){this.description="successfully processed request, no content returned to client"}function Afe(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Pa+r}}}},this.responses={200:{description:pw}}}function PV(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function DV(e){this.type="object",this.properties=e}function hw(e,t){this.type=e,this.format=t}function mw(e,t,r){this.name=e,this.in=t,this.schema=r}var LV,Sfe,dw,Pa,pw,vV=Oe(()=>{LV=L(kc()),Sfe="3.0.3",dw={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Pa="#/components/schemas/",pw="successful operation";a(MV,"generateJsonApi");a(Tfe,"Post");a(fw,"Get");a(_w,"Response200");a(CV,"Response204");a(Afe,"Put");a(PV,"Delete");a(DV,"ResourceSchema");a(hw,"Type");a(mw,"Parameter")});var aS={};Fe(aS,{parseHeaderValue:()=>gw,start:()=>bfe});async function yfe(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&vm(e);let i=new Ao;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==UV){let g=oS.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new Za(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let T=gw(g);for(let E of T)switch(E.name){case"max-age":e.expiresAt=E.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=gw(u).map(T=>(T.next?.name==="confirm"&&T.next.value>=0&&(e.replicatedConfirmation=+T.next.value),T.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await At(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Io(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new ad.ClientError(g,400)}if(e.authorize=!0,o===UV&&s==="GET"){if(e?.user?.role?.permission?.super_user)return MV(oS);throw new ad.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new ad.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ad.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,Ew.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=JO(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=Rh(d.data,e,d)),d}else if(_=e.lastModified){Rfe[0]=_;let g=String.fromCharCode(34,(vr[0]&63)+62,(vr[0]>>6)+(vr[1]<<2&63)+62,(vr[1]>>4)+(vr[2]<<4&63)+62,(vr[2]>>2)+62,(vr[3]&63)+62,(vr[3]>>6)+(vr[4]<<2&63)+62,(vr[4]>>4)+(vr[5]<<4&63)+62,(vr[5]>>2)+62,(vr[6]&63)+62,(vr[6]>>6)+(vr[7]<<2&63)+62,34),T=r["if-none-match"];T&&g==T?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),Ew.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let m={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(m.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(m.body=Rh(d,e,m),s==="HEAD"&&(m.body=void 0)),m}catch(o){o.statusCode?o.statusCode===500?vi.warn(o):vi.info(o):vi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=Rh(o.contentType?o:o.toString(),e,c),c}}function bfe(e){Ew=e,!BV&&(BV=!0,oS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return yfe(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{bh++;let s=new Mn;xV||(xV=!0,g_(l=>{bh>0&&l.push({metric:"ws-connections",connections:bh,byThread:!0})}));let i;t.on("error",l=>{i=!0,vi.warn(l)});let o;t.on("message",a(function(u){o||(o=Io(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);s.push(f)},"message"));let c;t.on("close",()=>{bh--,Wn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=oS.getMatch(l,"ws");if(Wn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,mr(m=>({count:m.count,total:bh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new Za(u.relativeURL),d=u.Resource;c=(await At(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let m=Xc(_.value,r);t.send(m),mr(m.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?vi.warn(l):vi.info(l):vi.error(l),t.close(Ofe[l.statusCode]||1011,l.toString())}t.close()},e))}function gw(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var vi,ad,vr,Rfe,Ew,UV,BV,oS,xV,bh,Ofe,HV=Oe(()=>{Zc();Ci();vi=L(j()),ad=L(fe());cf();vl();Xa();J_();vV();cf();vr=new Uint8Array(8),Rfe=new Float64Array(vr.buffer,0,1),Ew={},UV="openapi";a(yfe,"http");bh=0;a(bfe,"start");Ofe={401:3e3,403:3003};a(gw,"parseHeaderValue")});var Sw=P((dDe,FV)=>{var{recordAction:cS,recordActionBinary:kV}=(Ci(),se(S_)),Nfe=require("fastify-plugin"),wfe=200;FV.exports=Nfe(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),cS(o,"duration",u,d,f),kV(s.raw.statusCode<400,"success",u,d,f),kV(1,"response_"+s.raw.statusCode,u,d,f);let h=wfe;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{cS(performance.now()-c,"transfer",u,d,f),cS(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,cS(h,"bytes-sent",u,d,f));let _=o.toFixed(3),m=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",m?`${m}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var uS=P((fDe,$V)=>{"use strict";var Tw=v(),Ife=re(),Oh=j(),{handleHDBError:Aw,hdb_errors:lS}=fe(),{isMainThread:Cfe}=require("worker_threads"),{Readable:Pfe}=require("stream"),qV=require("os"),Dfe=require("util"),Lfe=xb(),Mfe=Dfe.promisify(Lfe.authorize),GV=BN(),{createGzip:vfe,constants:Ufe}=require("zlib");function Bfe(e){let t=`Found an uncaught exception with message: ${e.message}. ${qV.EOL}Stack: ${e.stack} ${qV.EOL}Terminating ${Cfe?"HDB":"thread"}.`;console.error(t),Oh.fatal(t),process.exit(1)}a(Bfe,"handleServerUncaughtException");function xfe(e,t,r){if(Oh[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:lS.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(xfe,"serverErrorHandler");function Hfe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Aw(new Error,"Invalid JSON.",lS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Ife.isEmpty(e.body.operation)){let n=Aw(new Error,"Request body must include an 'operation' property.",lS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Hfe,"reqBodyValidationHandler");function kfe(e,t,r){let n;e.body.operation!==Tw.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Tw.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Tw.OPERATIONS_ENUM.LOGOUT?Mfe(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Oh.warn(s),Oh.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Aw(s,i,lS.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(kfe,"authHandler");async function Ffe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=GV.chooseOperation(e.body);let s=await GV.processLocalTransaction(e,n);if(s instanceof Pfe&&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(vfe({level:Ufe.Z_BEST_SPEED})))}return s}catch(s){throw Oh.error(s),s}}a(Ffe,"handlePostRequest");$V.exports={authHandler:kfe,handlePostRequest:Ffe,handleServerUncaughtException:Bfe,serverErrorHandler:xfe,reqBodyValidationHandler:Hfe}});var WV=P((hDe,YV)=>{"use strict";var qfe=require("fastify-plugin"),{handlePostRequest:VV,authHandler:Gfe,reqBodyValidationHandler:$fe}=uS();async function Vfe(e){e.decorate("hdbCore",{preValidation:[$fe,Gfe],request:a(t=>KV(VV(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>KV(VV(t,r,!0)),"requestWithoutAuthentication")})}a(Vfe,"hdbCore");async function KV(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(KV,"convertAsyncIterators");YV.exports=qfe(Vfe)});var jV=P((EDe,zV)=>{"use strict";var pDe=require("fs"),dS=ne();dS.initSync();var{CONFIG_PARAMS:Rw}=v(),Kfe=1024*1024*1024;function Yfe(e){let t=dS.get(Rw.HTTP_TIMEOUT),r=dS.get(Rw.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Kfe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:dS.get(Rw.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(Yfe,"getServerOptions");zV.exports=Yfe});var XV=P((SDe,JV)=>{"use strict";var yw=ne();yw.initSync();var{CONFIG_PARAMS:QV}=v();function Wfe(){let e=yw.get(QV.HTTP_CORSACCESSLIST),t=yw.get(QV.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(Wfe,"getCORSOptions");JV.exports=Wfe});var t1=P((ADe,e1)=>{"use strict";var ZV=ne();ZV.initSync();var zfe=v();function jfe(){return ZV.get(zfe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(jfe,"getHeaderTimeoutConfig");e1.exports=jfe});var Ow={};Fe(Ow,{customFunctionsServer:()=>Xfe,ready:()=>p1,start:()=>Jfe});function Jfe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Co||(Co=m1(t),je.http((await Co).server));let o=await Co,c=(0,bw.dirname)(s),l=(0,bw.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!r1.has(c)){r1.add(c);try{o.register(e_e(c,l))}catch(u){if(u.message==="Root plugin has already booted")ct.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:p1}}async function Xfe(){try{ct.info("In Custom Functions Fastify server"+process.cwd()),ct.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ct.debug(`Custom Functions server process ${process.pid} starting up.`),await Zfe();let e=c1.get(l1.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Co=await m1(e)}catch(r){throw ct.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw ct.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){ct.error(`Custom Functions ${process.pid} Error: ${e}`),ct.error(e),process.exit(1)}}async function Zfe(){try{ct.info("Custom Functions starting configuration."),await u1.setUsersWithRolesCache(),ct.info("Custom Functions completed configuration.")}catch(e){ct.error(e)}}function e_e(e,t){return async function(r){try{ct.info("Custom Functions starting buildRoutes"),ct.trace("Loading fastify routes folder "+e),(0,n1.existsSync)(e)&&r.register(a1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:ct.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?ct.error(s.message):s&&ct.error(s),o()})}catch(n){ct.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function m1(e){ct.info("Custom Functions starting buildServer.");let t=(0,d1.default)(e),r=(0,s1.default)(t);r.server.headersTimeout=(0,_1.default)(),r.setErrorHandler(h1.serverErrorHandler);let n=(0,f1.default)();return n&&r.register(i1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(o1.default),await r.register(Qfe),await r.after(),rw(r),ct.info("Custom Functions completed buildServer."),r}function p1(){if(Co)return Co.then?Co.then(e=>e.ready()):Co.ready()}var bw,n1,s1,i1,o1,a1,c1,l1,ct,Qfe,u1,d1,f1,_1,h1,Co,r1,E1=Oe(()=>{bw=require("path"),n1=require("fs"),s1=L(require("fastify")),i1=L(require("@fastify/cors")),o1=L(Sw()),a1=L(require("@fastify/autoload")),c1=L(ne()),l1=L(v()),ct=L(j()),Qfe=L(WV()),u1=L(Gn()),d1=L(jV()),f1=L(XV()),_1=L(t1()),h1=L(uS());Zc();Gr();r1=new Set;a(Jfe,"start");a(Xfe,"customFunctionsServer");a(Zfe,"setUp");a(e_e,"buildRouteFolder");a(m1,"buildServer");a(p1,"ready")});var Nw={};Fe(Nw,{start:()=>t_e});function t_e(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,R1.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){S1||(S1=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=g1.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,T1.default)(s,(0,A1.realpathSync)(o))}}return i(s)},{runFirst:!0})),g1.set(r,n)}}}var T1,A1,R1,g1,S1,y1=Oe(()=>{T1=L(require("send")),A1=require("fs"),R1=L(require("serve-static")),g1=new Map;a(t_e,"start")});var Pw={};Fe(Pw,{Request:()=>ww,createReuseportFd:()=>fS});var b1,ww,Iw,Cw,fS,_S=Oe(()=>{b1=require("os"),ww=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 Cw(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new Iw(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},Iw=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},Cw=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)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,b1.platform)()!="win32"&&(fS=require("node-unix-socket").createReuseportFd)});var Lw=P((IDe,O1)=>{"use strict";var Nh=ne();Nh.initSync();var cd=require("fs-extra"),Dw=require("path"),ld=v(),r_e=require("crypto"),n_e=require("uuid").v4;O1.exports=s_e;function s_e(){if(Nh.getHdbBasePath()!==void 0){let e=Dw.join(Nh.getHdbBasePath(),ld.LICENSE_KEY_DIR_NAME,ld.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=Dw.join(Nh.getHdbBasePath(),ld.LICENSE_KEY_DIR_NAME,ld.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=Dw.join(Nh.getHdbBasePath(),ld.LICENSE_KEY_DIR_NAME,ld.JWT_ENUM.JWT_PASSPHRASE_NAME);try{cd.accessSync(r),cd.accessSync(e),cd.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=n_e(),i=r_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});cd.writeFileSync(r,s),cd.writeFileSync(e,i.privateKey),cd.writeFileSync(t,i.publicKey)}else throw n}}}a(s_e,"checkJWTTokenExist")});var w1=P((PDe,N1)=>{"use strict";var Mw=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};N1.exports={HdbInfoInsertObject:Mw}});var P1=P((LDe,C1)=>{"use strict";var I1=v(),vw=class{static{a(this,"UpgradeObject")}constructor(t,r){this[I1.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[I1.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};C1.exports={UpgradeObject:vw}});var hS=P((vDe,L1)=>{"use strict";var Ns=require("prompt"),ud=require("chalk"),D1=j(),oi=require("os"),Uw=Qa(),Bw=["yes","y"];async function i_e(e){let t=`${oi.EOL}`+ud.bold.green("Your current HarperDB version requires that we complete an update process.")+`${oi.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}${oi.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${oi.EOL}`;Ns.override=Uw(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:ud.magenta(`${oi.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return D1.error("There was an error when prompting user about an upgrade."),D1.error(s),!1}return Bw.includes(n.CONFIRM_UPGRADE)}a(i_e,"forceUpdatePrompt");async function o_e(e){let t=`${oi.EOL}`+ud.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${oi.EOL}`);Ns.override=Uw(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:ud.magenta(`${oi.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return Bw.includes(n.CONFIRM_DOWNGRADE)}a(o_e,"forceDowngradePrompt");async function a_e(){let e=`${oi.EOL}`+ud.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=Uw(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:ud.magenta(`${oi.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return Bw.includes(r.GENERATE_CERTS)}a(a_e,"upgradeCertsPrompt");L1.exports={forceUpdatePrompt:i_e,forceDowngradePrompt:o_e,upgradeCertsPrompt:a_e}});var Hw=P((BDe,M1)=>{"use strict";var xw=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};M1.exports=xw});var U1=P((GDe,v1)=>{"use strict";var c_e=re(),l_e=Ot(),HDe=j(),kDe=require("path"),FDe=require("fs"),qDe=v();v1.exports={getOldPropsValue:u_e};function u_e(e,t,r=!1){let n=t.getRaw(e);return c_e.isNotEmptyAndHasValue(n)?n:r?l_e.getDefaultConfig(e):""}a(u_e,"getOldPropsValue")});var k1=P((VDe,H1)=>{"use strict";var Da=require("path"),La=require("fs-extra"),d_e=require("properties-reader"),f_e=Hw(),ir=j(),{getOldPropsValue:lt}=U1(),{HDB_SETTINGS_NAMES:me,CONFIG_PARAMS:ul}=v(),dl=Ot(),mS=ne(),B1=re(),Ui=v(),kw=new f_e("3.1.0"),x1=[];function __e(){let e=d_e(mS.get(me.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ir.info(t);let r=` ;Settings for the HarperDB process.
16
+ `},"serialize"),compressible:!1,q:.8});Vr.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()}});MD={type:"application/json",serializeStream:af,serialize:df,deserialize:eJ,q:.5};Vr.set("*/*",MD);Vr.set("",MD);a(eJ,"tryJSONParse");a(yA,"registerContentHandlers");tJ=require("fastify-plugin"),rJ=tJ(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=zp(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let f=l.getColumns;l=l.mapError(d=>(d.toJSON=()=>({error:d.name,message:d.message,...d.partialObject}),d)),l.getColumns=f}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((f,d)=>{s.header(f,d)},"set")}})})}),r()},{name:"content-type-negotiation"});a(zp,"findBestSerializer");ID=SA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);a(_f,"serialize");a(sa,"serializeMessage");a(gA,"asyncSerialization");a(nJ,"streamToBuffer");sJ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(iJ,"isBufferEncoding");a(oJ,"parseContentType");a(ro,"getDeserializer");a(aJ,"deserializerUnknownType");a(cJ,"transformIterable");a(Wp,"toCsvStream")});var NA={};Be(NA,{start:()=>mJ});function lJ(e){if(e.kind!==Ce.Kind.OPERATION_DEFINITION&&e.kind!==Ce.Kind.FRAGMENT_DEFINITION)throw new br(`Unexpected non-executable definition type ${e.kind}.`)}function vD(e){if(typeof e!="object"||e===null)throw new gi("Request body must be an object.");if(!("query"in e))throw new gi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new gi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new gi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new gi("Request body `operationName` field must be a string.")}function OA(e){return parseInt(e.value,10)}function xD(e){return parseFloat(e.value)}function BD(e,t,r){let n=r.get(e.name.value);return HD(n)?kD(n,t):{attribute:t,value:n}}function HD(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function kD(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],HD(n)?kD(n,t):{attribute:t,value:n}))}function uJ(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Ce.Kind.NULL:return{attribute:t,value:null};case Ce.Kind.INT:return{attribute:t,value:OA(e.value)};case Ce.Kind.FLOAT:return{attribute:t,value:xD(e.value)};case Ce.Kind.BOOLEAN:case Ce.Kind.STRING:return{attribute:t,value:e.value.value};case Ce.Kind.VARIABLE:return BD(e.value,t,r);case Ce.Kind.OBJECT:return FD(e.value,t,r);case Ce.Kind.LIST:case Ce.Kind.ENUM:default:throw new br(`Value type, ${e.value.kind}, is not supported.`)}}function FD(e,t,r){return e.fields.flatMap(n=>uJ(n,t,r))}function dJ(e,t){switch(e.value.kind){case Ce.Kind.NULL:return{attribute:e.name.value,value:null};case Ce.Kind.INT:return{attribute:e.name.value,value:OA(e.value)};case Ce.Kind.FLOAT:return{attribute:e.name.value,value:xD(e.value)};case Ce.Kind.BOOLEAN:case Ce.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ce.Kind.VARIABLE:return BD(e.value,e.name.value,t);case Ce.Kind.OBJECT:return FD(e.value,[e.name.value],t);case Ce.Kind.LIST:case Ce.Kind.ENUM:default:throw new br(`Argument type, ${e.value.kind}, is not supported.`)}}function fJ(e,t){return e.flatMap(r=>dJ(r,t))}function Qp(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Ce.Kind.FIELD:return r;case Ce.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new br(`Fragment \`${n}\` not found.`);return Qp(s.selectionSet,t)}case Ce.Kind.INLINE_FRAGMENT:return Qp(r.selectionSet,t)}})}function GD(e,t){return Qp(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:GD(r.selectionSet,t)}:r.name.value)}async function _J(e,t,r,n){let s=pi.getMatch(e.name.value,"graphql");if(s===void 0)throw new br(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:GD(e.selectionSet,r),conditions:fJ(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function qD(e){switch(e.kind){case Ce.Kind.NULL:return null;case Ce.Kind.INT:return OA(e);case Ce.Kind.FLOAT:return parseFloat(e.value);case Ce.Kind.STRING:case Ce.Kind.BOOLEAN:return e.value;case Ce.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:qD(r.value),...t}),{});case Ce.Kind.LIST:case Ce.Kind.ENUM:default:throw new br(`Value type, ${e.kind}, is not supported.`)}}function hJ(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=qD(n.defaultValue)),n.type.kind===Ce.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new br(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function pJ(e,t,r,n){if(e.operation===Ce.OperationTypeNode.SUBSCRIPTION)throw new br("Subscriptions are not supported.");if(e.operation===Ce.OperationTypeNode.MUTATION)throw new br("Mutations are not supported yet.");let s=hJ(e.variableDefinitions,t),i=await Promise.all(Qp(e.selectionSet,r).map(c=>_J(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function UD({query:e,variables:t={},operationName:r},n){let s=Ce.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(lJ(u),u.kind===Ce.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new br("Unnamed operations are only allowed when there is a single operation in the document.");let f=u.name?.value??"Unnamed Query";if(i.has(f))throw new br(`Duplicate operation definition: ${f}`);i.set(f,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new br("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new br(`Operation \`${r}\` not found.`);let l=await pJ(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function EJ(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return vD(r),UD(r,e)}case"POST":{let r=await ro(e.headers.get("content-type"),!0)(e._nodeRequest);return vD(r),UD(r,e)}default:throw new gi("Method Not Allowed",405,{Allow:"GET, POST"})}}function mJ(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await EJ(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Ce.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof br)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Ce.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof br)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}})}var Ce,br,gi,$D=be(()=>{Ce=U(require("graphql"));eo();Gl();a(lJ,"assertExecutableDefinitionNode");a(vD,"assertRequestParams");a(OA,"processIntValueNode");a(xD,"processFloatValueNode");a(BD,"processVariableNode");a(HD,"isObject");a(kD,"transformObjectIntoQueryCondition");a(uJ,"processObjectFieldNode");a(FD,"processObjectValueNode");a(dJ,"processArgumentNode");a(fJ,"buildConditionsQuery");a(Qp,"fillInFragments");a(GD,"buildSelectQuery");a(_J,"processFieldNode");a(qD,"processConstValueNode");a(hJ,"resolveVariables");a(pJ,"executeOperation");a(UD,"resolver");br=class extends Error{static{a(this,"GraphQLQueryingError")}},gi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(EJ,"graphqlQueryingHandler");a(mJ,"start")});var Ti=P((xAe,YD)=>{"use strict";var KD=ae(),VD=(H(),D(q)),Vl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),ia={schema_format:{pattern:Vl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},gJ=Si.alternatives(Si.string().min(1).max(ia.schema_length.maximum).pattern(Vl).messages({"string.pattern.base":"{:#label} "+ia.schema_format.message}),Si.number(),Si.array()).required(),SJ=Si.alternatives(Si.string().min(1).max(ia.schema_length.maximum).pattern(Vl).messages({"string.pattern.base":"{:#label} "+ia.schema_format.message}),Si.number()),TJ=Si.alternatives(Si.string().min(1).max(ia.schema_length.maximum).pattern(Vl).messages({"string.pattern.base":"{:#label} "+ia.schema_format.message}),Si.number()).required();function AJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ia.schema_length.maximum?`'${e}' maximum of 250 characters`:Vl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(AJ,"checkValidTable");function RJ(e,t){return KD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(RJ,"validateSchemaExists");function yJ(e,t){let r=t.state.ancestors[0].schema;return KD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(yJ,"validateTableExists");function bJ(e,t){return e.toLowerCase()===VD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${VD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(bJ,"validateSchemaName");YD.exports={common_validators:ia,schema_regex:Vl,hdb_schema_table:gJ,validateSchemaExists:RJ,validateTableExists:yJ,validateSchemaName:bJ,checkValidTable:AJ,hdb_database:SJ,hdb_table:TJ}});var pt=P((HAe,WD)=>{"use strict";var dn=require("validate.js");dn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dn.validators.type.checks[t](e)?null:` must be a '${t}' value`};dn.validators.type.checks={Object:a(function(e){return dn.isObject(e)&&!dn.isArray(e)},"Object"),Array:dn.isArray,Integer:dn.isInteger,Number:dn.isNumber,String:dn.isString,Date:dn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};dn.validators.hasValidFileExt=function(e,t){return dn.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};WD.exports={validateObject:OJ,validateObjectAsync:NJ,validateBySchema:wJ};function OJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dn(e,t,{format:"flat"});return r?new Error(r):null}a(OJ,"validateObject");async function NJ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(NJ,"validateObjectAsync");function wJ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(wJ,"validateBySchema")});var IA=P((FAe,QD)=>{var{hdb_table:IJ,hdb_database:zD}=Ti(),CJ=pt(),wA=require("joi"),PJ={undefined:"undefined",null:"null"},DJ=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||PJ[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"),LJ=wA.object({database:zD,schema:zD,table:IJ,records:wA.array().items(wA.object().custom(DJ)).required()});QD.exports=function(e){return CJ.validateBySchema(e,LJ)}});var JD=P((qAe,jD)=>{"use strict";var CA=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")}};jD.exports=CA});var ZD=P((VAe,XD)=>{"use strict";var PA=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};XD.exports=PA});var nL={};Be(nL,{HAS_EXPIRATION:()=>Zp,HAS_RESIDENCY_ID:()=>BA,HAS_STRUCTURE_UPDATE:()=>tE,LAST_TIMESTAMP_PLACEHOLDER:()=>mf,LOCAL_TIMESTAMP:()=>MJ,METADATA:()=>hf,NO_TIMESTAMP:()=>DA,PENDING_LOCAL_TIME:()=>HA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>xA,RecordEncoder:()=>UA,TIMESTAMP_ASSIGN_LAST:()=>UJ,TIMESTAMP_ASSIGN_NEW:()=>tL,TIMESTAMP_ASSIGN_PREVIOUS:()=>rL,TIMESTAMP_PLACEHOLDER:()=>jp,TIMESTAMP_RECORD_PREVIOUS:()=>LA,handleLocalTimeForGets:()=>rE,recordUpdater:()=>kA,removeEntry:()=>fc});function BJ(){return Ef[0]=Ef[0]^64,vJ.getFloat64(0)}function rE(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++;let l=r.call(this,o,c),u=l?.value,f=u?.[hf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l&&(l.key=o),l};let n=e.get;e.get=function(o,c){let l=n.call(this,o,c);return l?.[hf]>=0?l.value:l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>{let u=l.value,f=u[hf];return f>=0&&(l.metadataFlags=f,l.localTime=u.localTime,l.value=u.value,l.residencyId=u.residencyId,u.expiresAt>=0&&(l.expiresAt=u.expiresAt)),l})};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,dc.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<dc.length;u++){let f=dc[u].deref();(!f||f.isDone||f.isCommitted)&&dc.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function kA(e,t,r){return function(n,s,i,o,c=-1,l,u,f="put",d,h){d||l==null?Kl=i?.localTime?LA|rL:DA:Kl=l?i?.localTime?LA|16384:tL|16384:DA;let _=u?.expiresAt;if(_>=0&&(c|=Zp),pf=c,MA=_,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:o,instructedWrite:Kl>0},S,g=0;try{let T=i?.residencyId,m=u?.residencyId;m&&(vA=m,pf|=BA,g|=_c),T!==m&&(g|=hc,T||(T=0)),c&Zp&&(g|=Sf),u?.originatingOperation&&(g|=gf),d&&(p.ifVersion=S=i?.version??null),i&&i.value&&i.metadataFlags&ks&&(r.getBinaryFast(i.localTime)||Zi(i.value));let A=Kp(()=>e.put(n,s,p),n,e.rootStore);if($l&&(g|=ks),l){let w=u?.user?.username;if(h&&(Jp=Kp(()=>e.encoder.encode(h),n,e.rootStore)),e.encoder.hasStructureUpdate&&(g|=tE,e.encoder.hasStructureUpdate=!1),d&&i?.localTime){let M=i?.localTime,F=r.get(M);if(F){let G=bt(F).previousLocalTime;return r.put(M,Yl(o,t,n,G,u?.nodeId??server.replication.getThisNodeId(r)??0,w,f,Jp,g,m,T,_),{ifVersion:S}),A}}r.put(mf,Yl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,w,f,Jp,g,m,T,_,u?.originatingOperation),{append:f!=="invalidate",instructedWrite:!0,ifVersion:S})}return A}catch(T){throw T.message+=" id: "+n+" options: "+p,T}}}function fc(e,t,r){if(t)return t.value&&t.metadataFlags&ks&&!e.auditStore.getBinaryFast(t.localTime)&&Zi(t.value),e.remove(t.key,r)}var eL,Xp,jp,mf,xA,MJ,hf,Ef,vJ,DA,tL,UJ,rL,LA,Zp,BA,HA,tE,xJ,Jp,Kl,pf,MA,vA,UA,dc,Wl=be(()=>{eL=require("msgpackr");no();Xp=U(j());cs();cs();jp=new Uint8Array([1,1,1,1,4,64,0,0]),mf=new Uint8Array([1,1,1,1,1,0,0,0]),xA=new Uint8Array([1,1,1,1,3,64,0,0]),MJ=Symbol("local-timestamp"),hf=Symbol("metadata"),Ef=new Uint8Array(8),vJ=new DataView(Ef.buffer,0,8),DA=0,tL=0,UJ=1,rL=3,LA=4,Zp=16,BA=32,HA=1,tE=256,Kl=0,pf=-1,MA=-1,vA=0,UA=class extends eL.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Kl||pf>=0){let o=0,c=Kl;c&&(o+=8,Kl=0);let l=pf,u=MA,f=vA;l>=0&&(o+=4,pf=-1,u>=0&&(o+=8,MA=-1),f&&(o+=4,vA=0));let d=xJ=r.call(this,s,i|2048|o);Jp=d.subarray((d.start||0)+o,d.end);let h=d.start||0;return c&&(jp[4]=c,jp[5]=c>>8,d.set(jp,h),h+=8),$l&&(l|=ks),l>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,l|eE<<24),h+=4,u>=0&&((d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setFloat64(h,u),h+=8),f&&(d.dataView||(d.dataView=new DataView(d.buffer,d.byteOffset,d.byteLength))).setUint32(h,f)),d}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Ef,0,c),c+=8;else for(let h=0;h<8;h++)Ef[h]=t[c++];l=BJ(),i=t[c]}let u,f;i<32&&(i===eE?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&Zp&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&BA&&(f=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let d=cc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return{localTime:l,value:d,[hf]:o,expiresAt:u,residencyId:f}}return r?.valueAsBuffer?t:cc(()=>super.decode(t,r),this.rootStore)}catch(c){return Xp.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(BJ,"getTimestamp");a(rE,"handleLocalTimeForGets");dc=[];setInterval(()=>{for(let e=0;e<dc.length;e++){let t=dc[e].deref();!t||t.isDone||t.isCommitted?dc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Xp.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Xp.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(kA,"recordUpdater");a(fc,"removeEntry")});var Tf=P((jAe,iL)=>{"use strict";var sL=ce(),HJ=(H(),D(q)),{RecordEncoder:kJ}=(Wl(),D(nL));sL.initSync();var FJ=sL.get(HJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,FA=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=FJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:kJ})}};iL.exports=FA});var Af=P((XAe,oL)=>{"use strict";var xn=ce(),ls=(H(),D(q));xn.initSync();var nE=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xn.get(ls.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=xn.get(ls.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=xn.get(ls.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=xn.get(ls.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=xn.get(ls.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};oL.exports=nE;nE.MAX_DBS=1e4});var at=P((eRe,EL)=>{"use strict";var qA=require("lmdb"),Fs=require("fs-extra"),Bn=require("path"),sE=an(),lL=j(),fn=Ln().LMDB_ERRORS_ENUM,iE=ZD(),$A=Tf(),uL=Af(),oa=Mt(),aL=(H(),D(q)),{table:GJ,resetDatabases:qJ}=(De(),D(nt)),cL=ce(),Gs=oa.INTERNAL_DBIS_NAME,dL=oa.DBI_DEFINITION_NAME,$J="data.mdb",VJ="lock.mdb",Rf=".mdb",KJ="-lock",GA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=us(t,r),this.key_type=this.dbi[oa.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[oa.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new qA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function oE(e,t){if(e===void 0)throw new Error(fn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(fn.ENV_NAME_REQUIRED)}a(oE,"pathEnvNameValidation");async function VA(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(fn.INVALID_BASE_PATH):n}try{let n=Bn.join(e,t+Rf);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Bn.join(e,t,$J),Fs.constants.R_OK|Fs.constants.F_OK),Bn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(fn.INVALID_ENVIRONMENT)}else throw new Error(fn.INVALID_ENVIRONMENT);throw n}}a(VA,"validateEnvironmentPath");function aE(e,t){if(sE.validateEnv(e),t===void 0)throw new Error(fn.DBI_NAME_REQUIRED)}a(aE,"validateEnvDBIName");async function YJ(e,t,r=!1,n=!1){oE(e,t);let s=Bn.basename(e);t=t.toString();let i=cL.get(aL.CONFIG_PARAMS.DATABASES);i||cL.setProperty(aL.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await VA(e,t,n),fL(e,t,r)}catch(o){if(o.message===fn.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Fs.mkdirp(n?c:e);let l=new uL(n?c:c+Rf,!1),u=qA.open(l);u.dbis=Object.create(null);let f=new $A(!1);u.openDB(Gs,f),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=KA(e,t,r);return u[oa.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=u,u}throw o}}a(YJ,"createEnvironment");async function WJ(e,t,r,n=!0){oE(e,t),t=t.toString();let s=Bn.join(e,t);return GJ({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(WJ,"copyEnvironment");async function fL(e,t,r=!1){oE(e,t),t=t.toString();let n=KA(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 VA(e,t),i=Bn.join(e,t+Rf),o=s!=i,c=new uL(s,o),l=qA.open(c);l.dbis=Object.create(null);let u=hL(l);for(let f=0;f<u.length;f++)us(l,u[f]);return l[oa.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(fL,"openEnvironment");async function zJ(e,t,r=!1){oE(e,t),t=t.toString();let n=Bn.join(e,t+Rf),s=await VA(e,t);if(global.lmdb_map!==void 0){let i=KA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _L(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+KJ:Bn.join(Bn.dirname(s),VJ))}a(zJ,"deleteEnvironment");async function _L(e){sE.validateEnv(e);let t=e[oa.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_L,"closeEnvironment");function KA(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(KA,"getCachedEnvironmentName");function QJ(e){sE.validateEnv(e);let t=Object.create(null),r=us(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new iE,s)}catch{lL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(QJ,"listDBIDefinitions");function hL(e){sE.validateEnv(e);let t=[],r=us(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(hL,"listDBIs");function jJ(e,t){let n=us(e,Gs).getEntry(t),s=new iE;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{lL.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(jJ,"getDBIDefinition");function pL(e,t,r,n=!r){if(aE(e,t),t=t.toString(),t===Gs)throw new Error(fn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return us(e,t)}catch(s){if(s.message===fn.DBI_DOES_NOT_EXIST){let i=new $A(r,n===!0),o=e.openDB(t,i),c=new iE(r===!0,n);return o[dL]=c,us(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(pL,"createDBI");function us(e,t){if(aE(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=jJ(e,t):r=new iE,r===void 0)throw new Error(fn.DBI_DOES_NOT_EXIST);let n;try{let s=new $A(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(fn.DBI_DOES_NOT_EXIST):s}return n[dL]=r,e.dbis[t]=n,n}a(us,"openDBI");function JJ(e,t){aE(e,t),t=t.toString();let r=us(e,t),n=r.getStats();return r[oa.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(JJ,"statDBI");async function XJ(e,t){try{let r=Bn.join(e,t+Rf);return(await Fs.stat(r)).size}catch{throw new Error(fn.INVALID_ENVIRONMENT)}}a(XJ,"environmentDataSize");function ZJ(e,t){if(aE(e,t),t=t.toString(),t===Gs)throw new Error(fn.CANNOT_DROP_INTERNAL_DBIS_NAME);us(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],us(e,Gs).removeSync(t)}a(ZJ,"dropDBI");function e4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{us(e,i)}catch(o){if(o.message===fn.DBI_DOES_NOT_EXIST)pL(e,i,i!==t,i===t),n=!0;else throw o}}n&&qJ()}a(e4,"initializeDBIs");EL.exports={openDBI:us,openEnvironment:fL,createEnvironment:YJ,listDBIs:hL,listDBIDefinitions:QJ,createDBI:pL,dropDBI:ZJ,statDBI:JJ,deleteEnvironment:zJ,initializeDBIs:e4,TransactionCursor:GA,environmentDataSize:XJ,copyEnvironment:WJ,closeEnvironment:_L}});var gL=P((rRe,mL)=>{"use strict";var YA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};mL.exports=YA});var TL=P((sRe,SL)=>{"use strict";var WA=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}};SL.exports=WA});var RL=P((oRe,AL)=>{"use strict";var zA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};AL.exports=zA});var Ec=P((dRe,OL)=>{"use strict";var t4=at(),r4=gL(),n4=TL(),s4=RL(),Ai=an(),yf=Ln().LMDB_ERRORS_ENUM,i4=Mt(),so=(H(),D(q)),o4=ae(),a4=require("uuid"),cRe=require("lmdb"),{handleHDBError:c4,hdb_errors:l4}=_e(),{OVERFLOW_MARKER:lRe,MAX_SEARCH_KEY_LENGTH:uRe}=i4,yL=ce();yL.initSync();var cE=yL.get(so.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),QA=so.TIME_STAMP_NAMES_ENUM.CREATED_TIME,pc=so.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function u4(e,t,r,n,s=Ai.getNextMonotonicTime()){ZA(e,t,r,n),jA(e,t,r);let i=new r4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];bL(u,!0,s);let f=d4(e,t,r,u),d=u[t];o.push(f),c.push(d)}return JA(o,c,n,i,s)}a(u4,"insertRecords");function d4(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 f=c([[{}]]);Array.isArray(f)&&(c=f[0][so.FUNC_VAL],n[o]=c)}let l=Ai.getIndexedValues(c),u=e.dbis[o];if(l){cE&&u.prefetch(l.map(f=>({key:f,value:s})),lE);for(let f=0,d=l.length;f<d;f++)u.put(l[f],s)}}cE&&e.dbis[t].prefetch([s],lE),e.dbis[t].put(s,n,n[pc])})}a(d4,"insertRecord");function f4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(f4,"removeSkippedRecords");function bL(e,t,r){let n=r>0;(n||!Number.isInteger(e[pc]))&&(e[pc]=r||(r=Ai.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[QA]))&&(e[QA]=r||Ai.getNextMonotonicTime()):delete e[QA]}a(bL,"setTimestamps");function jA(e,t,r){r.indexOf(so.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(so.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(so.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(so.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),t4.initializeDBIs(e,t,r)}a(jA,"initializeTransaction");async function _4(e,t,r,n,s=Ai.getNextMonotonicTime()){ZA(e,t,r,n),jA(e,t,r);let i=new n4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let f=n[u],d=f[t],h;try{h=XA(e,t,f,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(u);continue}c.push(h),l.push(d)}return JA(c,l,n,i,s,o)}a(_4,"updateRecords");async function h4(e,t,r,n,s=Ai.getNextMonotonicTime()){try{ZA(e,t,r,n)}catch(l){throw c4(l,l.message,l4.HTTP_STATUS_CODES.BAD_REQUEST)}jA(e,t,r);let i=new s4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],f;o4.isEmpty(u[t])?(f=a4.v4(),u[t]=f):f=u[t];let d=XA(e,t,u,f,i,!1,s);o.push(d),c.push(f)}return JA(o,c,n,i,s)}a(h4,"upsertRecords");async function JA(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Ai.getNextMonotonicTime(),f4(r,i),n}a(JA,"finalizeWrite");function XA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,f=u;if(!u){if(i)return!1;u={}}if(bL(r,!f,o),Number.isInteger(r[pc])&&u[pc]>r[pc])return!1;f&&s.original_records.push(u);let d,h=a(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let S=r[p],g=e.dbis[p];if(g===void 0)continue;let T=u[p];if(typeof S=="function"){let A=S([[u]]);Array.isArray(A)&&(S=A[0][so.FUNC_VAL],r[p]=S)}if(S===T)continue;let m=Ai.getIndexedValues(T);if(m){cE&&g.prefetch(m.map(A=>({key:A,value:n})),lE);for(let A=0,w=m.length;A<w;A++)g.remove(m[A],n)}if(m=Ai.getIndexedValues(S),m){cE&&g.prefetch(m.map(A=>({key:A,value:n})),lE);for(let A=0,w=m.length;A<w;A++)g.put(m[A],n)}}let _={...u,...r};c.put(n,_,_[pc])},"do_put");return l?d=c.ifVersion(n,l.version,h):d=c.ifNoExists(n,h),d.then(_=>_?!0:XA(e,t,r,n,s,i,o))}a(XA,"updateUpsertRecord");function p4(e,t,r){if(Ai.validateEnv(e),t===void 0)throw new Error(yf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(yf.WRITE_ATTRIBUTES_REQUIRED):new Error(yf.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(p4,"validateBasic");function ZA(e,t,r,n){if(p4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(yf.RECORDS_REQUIRED):new Error(yf.RECORDS_MUST_BE_ARRAY)}a(ZA,"validateWrite");function lE(){}a(lE,"noop");OL.exports={insertRecords:u4,updateRecords:_4,upsertRecords:h4}});var io=P((_Re,E4)=>{E4.exports={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:"hash_function"},{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:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var uE=P((hRe,NL)=>{var{common_validators:Ri}=Ti(),Of=pt(),bf="is required",Zt={database:{presence:!1,format:Ri.schema_format,length:Ri.schema_length},schema:{presence:!1,format:Ri.schema_format,length:Ri.schema_length},table:{presence:!0,format:Ri.schema_format,length:Ri.schema_length},attribute:{presence:!0,format:Ri.schema_format,length:Ri.schema_length},hash_attribute:{presence:!0,format:Ri.schema_format,length:Ri.schema_length}};function Nf(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(Nf,"makeAttributesStrings");function m4(e){return e=Nf(e),Zt.table.presence=!1,Zt.attribute.presence=!1,Zt.hash_attribute.presence=!1,Of.validateObject(e,Zt)}a(m4,"schema_object");function g4(e){return e=Nf(e),Zt.table.presence={message:bf},Zt.attribute.presence=!1,Zt.hash_attribute.presence=!1,Of.validateObject(e,Zt)}a(g4,"table_object");function S4(e){return e=Nf(e),Zt.table.presence={message:bf},Zt.attribute.presence=!1,Of.validateObject(e,Zt)}a(S4,"create_table_object");function T4(e){return e=Nf(e),Zt.table.presence={message:bf},Zt.attribute.presence={message:bf},Zt.hash_attribute.presence=!1,Of.validateObject(e,Zt)}a(T4,"attribute_object");function A4(e){return e=Nf(e),Zt.table.presence={message:bf},Zt.attribute.presence=!1,Zt.hash_attribute.presence=!1,Of.validateObject(e,Zt)}a(A4,"describe_table");function R4(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(R4,"validateTableResidence");NL.exports={schema_object:m4,create_table_object:S4,table_object:g4,attribute_object:T4,describe_table:A4,validateTableResidence:R4}});var IL=P((ERe,wL)=>{"use strict";var y4=require("uuid"),eR=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||y4.v4(),this.schema_table=`${this.schema}.${this.table}`}};wL.exports=eR});var dE=P((gRe,CL)=>{"use strict";var b4=IL(),tR=class extends b4{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}};CL.exports=tR});var DL=P((TRe,PL)=>{"use strict";PL.exports=N4;var O4="inserted";function N4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===O4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(N4,"returnObject")});var fE=P((yRe,UL)=>{"use strict";var w4=(H(),D(q)),rR=at(),I4=Ec(),{getSystemSchemaPath:C4,getSchemaPath:P4}=ht(),RRe=io(),D4=uE(),L4=dE(),M4=DL(),{handleHDBError:LL,hdb_errors:vL}=_e(),ML=ae(),{HTTP_STATUS_CODES:v4}=vL,U4="inserted";UL.exports=x4;async function x4(e){let t=D4.attribute_object(e);if(t)throw LL(new Error,t.message,vL.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ML.checkGlobalSchemaTable(e.schema,e.table);if(r)throw LL(new Error,r,v4.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ML.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 L4(e.schema,e.table,e.attribute,e.id);try{let i=await rR.openEnvironment(P4(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}`);rR.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await rR.openEnvironment(C4(),w4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await I4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return M4(U4,c,{records:[s]},l)}catch(i){throw i}}a(x4,"lmdbCreateAttribute")});var wf=P((NRe,BL)=>{"use strict";var oo=ae(),xL=j(),ORe=IA(),{getDatabases:B4}=(De(),D(nt)),{ClientError:mc}=_e();BL.exports=H4;function H4(e){if(oo.isEmpty(e))throw new mc("invalid update parameters defined.");if(oo.isEmptyOrZeroLength(e.schema))throw new mc("invalid schema specified.");if(oo.isEmptyOrZeroLength(e.table))throw new mc("invalid table specified.");if(!Array.isArray(e.records))throw new mc("records must be an array");let t=B4()[e.schema]?.[e.table];if(oo.isEmpty(t))throw new mc(`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&&oo.isEmptyOrZeroLength(o[r]))throw xL.error("a valid hash attribute must be provided with update record:",o),new mc("a valid hash attribute must be provided with update record, check log for more info");if(!oo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw xL.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!oo.isEmpty(o[r])&&o[r]!==""&&n.has(oo.autoCast(o[r]))&&(o.skip=!0),n.add(oo.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(H4,"insertUpdateValidate")});var kL=P((IRe,HL)=>{"use strict";var nR=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};HL.exports=nR});var qL=P((PRe,GL)=>{"use strict";var sR=at(),k4=j(),FL=Ln().LMDB_ERRORS_ENUM;GL.exports=F4;async function F4(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 sR.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==FL.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await sR.closeEnvironment(global.lmdb_map[n]),await sR.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==FL.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){k4.error(t)}}a(F4,"cleanLMDBMap")});var tM=P((MRe,eM)=>{"use strict";var iR=require("recursive-iterator"),G4=require("alasql"),oR=require("clone"),$L=ae(),{handleHDBError:VL,hdb_errors:q4}=_e(),{HDB_ERROR_MSGS:KL,HTTP_STATUS_CODES:YL}=q4,{getDatabases:$4}=(De(),D(nt)),V4=["DISTINCT_ARRAY"],WL=Symbol("validateTables"),aR=Symbol("validateTable"),LRe=Symbol("getAllColumns"),zL=Symbol("validateAllColumns"),_E=Symbol("findColumn"),QL=Symbol("validateOrderBy"),If=Symbol("validateSegment"),cR=Symbol("validateColumn"),jL=Symbol("setColumnsForTable"),JL=Symbol("checkColumnsForAsterisk"),XL=Symbol("validateGroupBy"),ZL=Symbol("hasColumns"),lR=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[WL](),this[JL](),this[zL]()}[WL](){if(this[ZL]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[aR](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[aR](t.table)})}}[ZL](){let t=!1,r=new iR(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[aR](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=$4();if(!r[t.databaseid])throw VL(new Error,KL.SCHEMA_NOT_FOUND(t.databaseid),YL.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw VL(new Error,KL.TABLE_NOT_FOUND(t.databaseid,t.tableid),YL.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=oR(s);i.table=oR(t),this.attributes.push(i)})}[_E](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)}[JL](){let t=new iR(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[jL](r.tableid)}[jL](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new G4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[zL](){this[If](this.statement.columns,!1),this[If](this.statement.joins,!1),this[If](this.statement.where,!1),this[XL](this.statement.group,!1),this[If](this.statement.order,!0)}[If](t,r){if(!t)return;let n=new iR(t),s=[];for(let{node:i,path:o}of n)!$L.isEmpty(i)&&!$L.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[QL](i):s.push(this[cR](i)));return s}[XL](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&V4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=oR(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[_E](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[_E](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`}[QL](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[cR](t)}[cR](t){let r=this[_E](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]}};eM.exports=lR});var iM=P((URe,sM)=>{"use strict";var rM=require("lodash"),Cf=require("mathjs"),K4=require("jsonata"),nM=ae();sM.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?rM.uniqWith(e,rM.isEqual):e,"distinct_array"),searchJSON:Y4,mad:Pf.bind(null,Cf.mad),mean:Pf.bind(null,Cf.mean),mode:Pf.bind(null,Cf.mode),prod:Pf.bind(null,Cf.prod),median:Pf.bind(null,Cf.median)};function Pf(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(Pf,"aggregateFunction");function Y4(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(nM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),nM.isEmpty(this.__ala__.res[r])){let n=K4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(Y4,"searchJSON")});var aM=P((BRe,oM)=>{"use strict";var er=require("moment"),uR="YYYY-MM-DDTHH:mm:ss.SSSZZ";er.suppressDeprecationWarnings=!0;oM.exports={current_date:a(()=>er().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>er().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return er(e).utc().format("YYYY");case"month":return er(e).utc().format("MM");case"day":return er(e).utc().format("DD");case"hour":return er(e).utc().format("HH");case"minute":return er(e).utc().format("mm");case"second":return er(e).utc().format("ss");case"millisecond":return er(e).utc().format("SSS");default:break}},"extract"),date:a(e=>er(e).utc().format(uR),"date"),date_format:a((e,t)=>er(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>er(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>er(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=er(e).utc(),s=er(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>er().utc().valueOf(),"now"),get_server_time:a(()=>er().format(uR),"get_server_time"),offset_utc:a((e,t)=>er(e).utc().utcOffset(t).format(uR),"offset_utc")}});var dM=P((kRe,uM)=>{"use strict";var W4=require("@turf/area"),z4=require("@turf/length"),Q4=require("@turf/circle"),j4=require("@turf/difference"),J4=require("@turf/distance"),X4=require("@turf/boolean-contains"),Z4=require("@turf/boolean-equal"),e3=require("@turf/boolean-disjoint"),t3=require("@turf/helpers"),cM=(H(),D(q)),qe=ae(),ao=j();uM.exports={geoArea:r3,geoLength:n3,geoCircle:s3,geoDifference:i3,geoDistance:lM,geoNear:o3,geoContains:a3,geoEqual:c3,geoCrosses:l3,geoConvert:u3};function r3(e){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return W4.default(e)}catch(t){return ao.trace(t,e),NaN}}a(r3,"geoArea");function n3(e,t){if(qe.isEmpty(e))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return z4.default(e,{units:t||"kilometers"})}catch(r){return ao.trace(r,e),NaN}}a(n3,"geoLength");function s3(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e));try{return Q4.default(e,t,{units:r||"kilometers"})}catch(n){return ao.trace(n,e,t),NaN}}a(s3,"geoCircle");function i3(e,t){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return j4(e,t)}catch(r){return ao.trace(r,e,t),NaN}}a(i3,"geoDifference");function lM(e,t,r){if(qe.isEmpty(e))return NaN;if(qe.isEmpty(t))return NaN;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return J4.default(e,t,{units:r||"kilometers"})}catch(n){return ao.trace(n,e,t),NaN}}a(lM,"geoDistance");function o3(e,t,r,n){if(qe.isEmpty(e)||qe.isEmpty(t))return!1;if(qe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return lM(e,t,n)<=r}catch(s){return ao.trace(s,e,t),!1}}a(o3,"geoNear");function a3(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return X4.default(e,t)}catch(r){return ao.trace(r,e,t),!1}}a(a3,"geoContains");function c3(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return Z4.default(e,t)}catch(r){return ao.trace(r,e,t),!1}}a(c3,"geoEqual");function l3(e,t){if(qe.isEmpty(e)||qe.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=qe.autoCastJSON(e)),typeof t=="string"&&(t=qe.autoCastJSON(t));try{return!e3.default(e,t)}catch(r){return ao.trace(r,e,t),!1}}a(l3,"geoCrosses");function u3(e,t,r){if(qe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(qe.isEmpty(t))throw new Error("geo_type is required");if(qe.isEmpty(cM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(cM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=qe.autoCastJSON(e)),t3[t](e,r)}a(u3,"geoConvert")});var hE=P((GRe,fM)=>{var gc=iM(),Hn=aM(),yi=dM();fM.exports=e=>{e.aggr.mad=e.aggr.MAD=gc.mad,e.aggr.mean=e.aggr.MEAN=gc.mean,e.aggr.mode=e.aggr.MODE=gc.mode,e.aggr.prod=e.aggr.PROD=gc.prod,e.aggr.median=e.aggr.MEDIAN=gc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=gc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=gc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hn.current_time,e.fn.extract=e.fn.EXTRACT=Hn.extract,e.fn.date=e.fn.DATE=Hn.date,e.fn.date_format=e.fn.DATE_FORMAT=Hn.date_format,e.fn.date_add=e.fn.DATE_ADD=Hn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hn.date_diff,e.fn.now=e.fn.NOW=Hn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hn.get_server_time,e.fn.getdate=e.fn.GETDATE=Hn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=yi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=yi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=yi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=yi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=yi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=yi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=yi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=yi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=yi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=yi.geoNear}});var EM=P((qRe,pM)=>{"use strict";var Df=require("lodash"),_n=require("alasql");_n.options.cache=!1;var d3=hE(),_M=require("clone"),pE=require("recursive-iterator"),Ue=j(),We=ae(),zl=kn(),f3=(H(),D(q)),{hdb_errors:_3}=_e(),{getDatabases:hM}=(De(),D(nt)),h3="IS NULL",qs="There was a problem performing this search. Please check the logs and try again.";d3(_n);var dR=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(qs)}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(qs)}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(qs)}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(qs)}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(qs)}}_getColumns(){let t=new pE(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(_M(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Df.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=hM()[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 pE(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 _n.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 _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&We.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.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 pE(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(f3.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 l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[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&&Df.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 _n.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(_M(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(h3)>-1&&this.tables.forEach(s=>{let i={columnid:hM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Df.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!We.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let f=await zl.getDataByHash(c);for(let d of c.hash_values)f.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async f=>{let d={...c};d.search_value=f;let h=await zl.getDataByValue(d);for(let[_,p]of h)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,_))}))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(f),new Error(qs)}else if(!We.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!We.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let f=this.comparator_search_values[u].comparators;for(let d=0,h=f.length;d<h;d++){let _=f[d];c.search_attribute=_.attribute,c.search_value=_.search_value;let p=await zl.getDataByValue(c,_.operation);if(l)for(let[S]of p)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...n[i]],this._setMergedHashAttribute(i,S));else for(let[S,g]of p)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]):(this.data[i].__merged_data[S]=[...n[i]],this._updateMergedAttribute(i,S,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,S))}}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(f),new Error(qs)}else try{c.search_attribute=s.attribute,c.search_value="*";let f=await zl.getDataByValue(c);if(l)for(let[d]of f)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,h]of f)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,d))}catch(f){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(f),new Error(qs)}}}_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 _n.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 _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.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 _n.yy.FuncValue:new _n.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(_=>{_.joinmode&&_.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(_.table);let p=_.joinmode+" JOIN ? AS "+(_.as?_.as:_.table.tableid);_.on&&(p+=" ON "+_.on.toString()),i.push(p),t.push(Object.values(this.data[`${_.table.databaseid_orig}_${_.table.as?_.table.as_orig:_.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(_=>{let p=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__hash_name,S=_.as?_.as_orig:_.tableid_orig;o.push({key:`'${S}.${p}'`,schema:_.databaseid_orig,table:_.as?_.as_orig:_.tableid_orig,keys:new Set}),r.push(`${_.as?_.as:_.tableid}.\`${p}\` AS "${S}.${p}"`),c[_.as?_.as_orig:_.tableid_orig]=this.data[`${_.databaseid_orig}_${_.as?_.as_orig:_.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(_=>{_.is_func?r.push(_.initial_select_column.toString()):_.initial_select_column.tableid?r.push(`${_.initial_select_column.tableid}.${_.initial_select_column.columnid} AS ${_.expression.columnid}`):r.push(`${_.initial_select_column.columnid} AS ${_.expression.columnid}`)}));let f="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(f=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let _=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${f} ${d}`,p=this._convertColumnsToIndexes(_,s);h=await _n.promise(p,t),t=null}catch(_){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(_),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let _=0,p=h.length;_<p;_++){let S=h[_];o.forEach(g=>{S[g.key]!==null&&S[g.key]!==void 0&&g.keys.add(S[g.key])})}o.forEach(_=>{let p=Object.keys(this.data[`${_.schema}_${_.table}`].__merged_data),S=Df.difference(p,[..._.keys].map(g=>g.toString()));for(let g=0,T=S.length;g<T;g++){let m=S[g];delete this.data[`${_.schema}_${_.table}`].__merged_data[m]}})}return{existing_attributes:c,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new pE(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=Df.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(qs)}}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 f in i)o.push(i[f][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await zl.getDataByHash(c),u=s.columns.length;for(let f=0,d=o.length;f<d;f++){let h=o[f],_=l.get(h);for(let p=0;p<u;p++){let S=s.columns[p],g=_[S]===void 0?null:_[S];this.data[n].__merged_data[h].push(g)}}}}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,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.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(_3.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 l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),f=`${l}.[${c}]`;n=n.replace(u,f)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,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 zl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[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(qs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pM.exports=dR});var Kr=P((VRe,mM)=>{"use strict";var p3=tM();mM.exports={searchByConditions:m3,searchByHash:g3,searchByValue:S3,search:T3};var fR=kn(),{transformReq:_R}=ae(),E3=EM();async function m3(e){return _R(e),fR.searchByConditions(e)}a(m3,"searchByConditions");async function g3(e){_R(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of fR.searchByHash(e))r&&t.push(r);return t}a(g3,"searchByHash");async function S3(e){_R(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of fR.searchByValue(e))t.push(r);return t}a(S3,"searchByValue");function T3(e,t){try{let r=new p3(e);r.validate(),new E3(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(T3,"search")});var co=P((YRe,AM)=>{"use strict";var Lf=require("crypto"),A3=ce(),{CONFIG_PARAMS:R3}=(H(),D(q)),SM="aes-256-cbc",y3=32,b3=16,hR=64,TM=32,O3=hR+TM,gM=new Map;AM.exports={encrypt:N3,decrypt:w3,createNatsTableStreamName:I3};function N3(e){let t=Lf.randomBytes(y3),r=Lf.randomBytes(b3),n=Lf.createCipheriv(SM,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(N3,"encrypt");function w3(e){let t=e.substr(0,hR),r=e.substr(hR,TM),n=e.substr(O3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Lf.createDecipheriv(SM,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(w3,"decrypt");function I3(e,t){let r=A3.get(R3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=gM.get(r);return n||(n=Lf.createHash("md5").update(r).digest("hex"),gM.set(r,n)),n}a(I3,"createNatsTableStreamName")});var lo=P((QRe,bM)=>{"use strict";var zRe=Kr(),Mf=j(),RM=uE(),C3=co(),EE=ae(),{handleHDBError:mE,hdb_errors:P3}=_e(),{HDB_ERROR_MSGS:gE,HTTP_STATUS_CODES:pR}=P3,yM=ce();yM.initSync();var{getDatabases:ER}=(De(),D(nt)),D3=require("fs-extra"),L3=(H(),D(q));bM.exports={describeAll:M3,describeTable:SE,describeSchema:v3};async function M3(e={}){try{let t=EE.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=ER(),o={},c={},l=[],u=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let h=i[d];for(let _ in h)try{let p;if(t||s||r)p=await SE({schema:d,table:_,exact_count:u});else if(n&&n[d].describe&&n[d].tables[_].describe){let S=n[d].tables[_].attribute_permissions;p=await SE({schema:d,table:_,exact_count:u},S)}p&&l.push(p)}catch(p){Mf.error(p)}}let f={};for(let d in l)t||s||r?(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(f[l[d].schema]==null&&(f[l[d].schema]={}),f[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s||r?f[d]={}:c[d]&&(f[d]={});return f}catch(t){return Mf.error("Got an error in describeAll"),Mf.error(t),mE(new Error,gE.DESCRIBE_ALL_ERR)}}a(M3,"describeAll");async function SE(e,t){EE.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=RM.describe_table(e);if(i)throw i;let c=ER()[r];if(!c)throw mE(new Error,gE.SCHEMA_NOT_FOUND(e.schema),pR.NOT_FOUND);let l=c[n];if(!l)throw mE(new Error,gE.TABLE_NOT_FOUND(e.schema,e.table),pR.NOT_FOUND);function u(_){f.push({attribute:_.attribute,type:_.type,elements:_.elements?.type,indexed:_.indexed,is_primary_key:_.isPrimaryKey,assigned_created_time:_.assignCreatedTime,assigned_updated_time:_.assignUpdatedTime,nullable:_.nullable,properties:_.properties?_.properties.map(p=>({type:p.type,name:p.name})):void 0})}a(u,"pushAtt");let f=[];if(s){let _={};s.forEach(p=>{p.describe&&(_[p.attribute_name]=!0)}),l.attributes.forEach(p=>{_[p.name]&&u(p)})}else l.attributes?.forEach(_=>u(_));let d;try{d=(await D3.stat(l.primaryStore.env.path)).size}catch(_){Mf.warn("unable to get database size",_)}let h={schema:r,name:l.tableName,hash_attribute:l.attributes.find(_=>_.isPrimaryKey||_.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:f,db_size:d};l.replicate!==void 0&&(h.replicate=l.replicate),l.expirationMS!==void 0&&(h.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(h.sealed=l.sealed),l.sources?.length>0&&(h.sources=l.sources.map(_=>_.name).filter(_=>_&&_!=="NATSReplicator"&&_!=="Replicator")),yM.get(L3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(h.clustering_stream_name=C3.createNatsTableStreamName(h.schema,h.name));try{let _=l.getRecordCount({exactCount:e.exact_count==="true"});h.record_count=_.recordCount,h.table_size=l.getSize(),h.db_audit_size=l.getAuditSize(),h.estimated_record_range=_.estimatedRange;let p=l.auditStore;if(p)for(let S of p.getKeys({reverse:!0,limit:1}))h.last_updated_record=S[0];if(!h.last_updated_record&&l.indices.__updatedtime__)for(let S of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))h.last_updated_record=S}catch(_){Mf.warn(`unable to stat table dbi due to ${_}`)}return h}a(SE,"descTable");async function v3(e){EE.transformReq(e);let t=RM.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=ER()[n];if(!i)throw mE(new Error,gE.SCHEMA_NOT_FOUND(e.schema),pR.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),EE.isEmpty(l)||l.describe){let u=await SE({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(v3,"describeSchema")});var $s=P((ZRe,CM)=>{var U3=io(),{callbackify:NM,promisify:x3}=require("util"),{getDatabases:wM}=(De(),D(nt));CM.exports={setSchemaDataToGlobal:OM,getTableSchema:B3,getSystemSchema:H3,setSchemaDataToGlobalAsync:x3(OM)};var IM=lo(),JRe=NM(IM.describeAll),XRe=NM(IM.describeTable);function OM(e){global.hdb_schema=wM(),e&&e()}a(OM,"setSchemaDataToGlobal");function B3(e,t,r){let n=wM()[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(B3,"getTableSchema");function H3(){return U3}a(H3,"getSystemSchema")});var gR=P((tye,LM)=>{var k3=pt(),mR=require("joi"),{hdb_table:F3,hdb_database:PM}=Ti(),DM={schema:PM,database:PM,table:F3},G3={date:mR.date().iso().required()},q3={timestamp:mR.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};LM.exports=function(e,t){let r=t==="timestamp"?{...DM,...q3}:{...DM,...G3},n=mR.object(r);return k3.validateBySchema(e,n)}});var UM=P((rye,vM)=>{var $3=pt(),SR=require("joi"),{hdb_table:V3,hdb_database:MM}=Ti(),K3=SR.object({schema:MM,database:MM,table:V3,hash_values:SR.array().required(),ids:SR.array()});vM.exports=function(e){return $3.validateBySchema(e,K3)}});var yR=P((nye,xM)=>{"use strict";var TR=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}},AR=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}},RR=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};xM.exports={InsertObject:TR,NoSQLSeachObject:AR,DeleteResponseObject:RR}});var Ac=P((iye,GM)=>{"use strict";var HM=gR(),Y3=UM(),Sc=ae(),BM=require("moment"),kM=j(),{promisify:W3,callbackify:z3}=require("util"),Tc=(H(),D(q)),Q3=$s(),bR=W3(Q3.getTableSchema),OR=kn(),{DeleteResponseObject:j3}=yR(),{handleHDBError:aa,hdb_errors:J3}=_e(),{HDB_ERROR_MSGS:TE,HTTP_STATUS_CODES:ca}=J3,X3="records successfully deleted",Z3=z3(FM);GM.exports={delete:Z3,deleteRecord:FM,deleteFilesBefore:eX,deleteAuditLogsBefore:tX};async function eX(e){let t=HM(e,"date");if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);if(Sc.transformReq(e),!BM(e.date,BM.ISO_8601).isValid())throw aa(new Error,TE.INVALID_DATE,ca.BAD_REQUEST,Tc.LOG_LEVELS.ERROR,TE.INVALID_DATE,!0);let n=Sc.checkSchemaTableExist(e.schema,e.table);if(n)throw aa(new Error,n,ca.NOT_FOUND,Tc.LOG_LEVELS.ERROR,n,!0);let s=await OR.deleteRecordsBefore(e);if(await bR(e.schema,e.table),kM.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(eX,"deleteFilesBefore");async function tX(e){let t=HM(e,"timestamp");if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);if(Sc.transformReq(e),isNaN(e.timestamp))throw aa(new Error,TE.INVALID_VALUE("Timestamp"),ca.BAD_REQUEST,Tc.LOG_LEVELS.ERROR,TE.INVALID_VALUE("Timestamp"),!0);let r=Sc.checkSchemaTableExist(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,Tc.LOG_LEVELS.ERROR,r,!0);let n=await OR.deleteAuditLogsBefore(e);return await bR(e.schema,e.table),kM.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(tX,"deleteAuditLogsBefore");async function FM(e){e.ids&&(e.hash_values=e.ids);let t=Y3(e);if(t)throw aa(t,t.message,ca.BAD_REQUEST,void 0,void 0,!0);Sc.transformReq(e);let r=Sc.checkSchemaTableExist(e.schema,e.table);if(r)throw aa(new Error,r,ca.NOT_FOUND,Tc.LOG_LEVELS.ERROR,r,!0);try{await bR(e.schema,e.table);let n=await OR.deleteRecords(e);return Sc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${X3}`),n}catch(n){if(n.message===Tc.SEARCH_NOT_FOUND_MESSAGE){let s=new j3;return s.message=Tc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(FM,"deleteRecord")});var RE={};Be(RE,{HASH_FUNCTION:()=>AE,hash:()=>nX,validate:()=>sX});function NR(e=Uf){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(vf.randomBytes(e)).map(r=>t[r%t.length]).join("")}function nX(e,t=AE[$M?.toUpperCase()]??"sha256"){return wR[t](e)}function sX(e,t,r=AE[$M?.toUpperCase()]??"sha256"){return e?rX[r](e,t):!1}var vf,Ql,qM,$M,Uf,VM,AE,wR,rX,yE=be(()=>{vf=U(require("node:crypto")),Ql=U(require("argon2")),qM=U(ce());H();$M=(0,qM.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Uf=16,VM=9,AE=(n=>(n.MD5="md5",n.SHA256="sha256",n.ARGON2ID="argon2id",n))(AE||{});a(NR,"generateSalt");wR={md5:a((e,t=void 0)=>{t=t??NR(VM);let r=vf.createHash("md5").update(e+t).digest("hex");return t+r},"md5"),sha256:a((e,t=void 0)=>{t=t??NR(Uf);let r=vf.createHash("sha256").update(e+t).digest("hex");return t+r},"sha256"),argon2id:a(async e=>{let t=NR(Uf),r=await Ql.hash(e,{type:Ql.argon2id,salt:Buffer.from(t)});return t+r},"argon2id")},rX={md5:a((e,t)=>{let r=e.slice(0,VM);return e===wR.md5(t,r)},"md5"),sha256:a((e,t)=>{let r=e.slice(0,Uf);return e===wR.sha256(t,r)},"sha256"),argon2id:a(async(e,t)=>await Ql.verify(e.slice(Uf),t),"argon2id")};a(nX,"hash");a(sX,"validate")});var YM=P((lye,KM)=>{var IR=pt(),Yr={username:{presence:!0,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 iX(e){return Yr.password.presence=!0,Yr.username.presence=!0,Yr.role.presence=!0,Yr.active.presence=!0,IR.validateObject(e,Yr)}a(iX,"addUserValidation");function oX(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,IR.validateObject(e,Yr)}a(oX,"alterUserValidation");function aX(e){return Yr.password.presence=!1,Yr.username.presence=!0,Yr.role.presence=!1,Yr.active.presence=!1,IR.validateObject(e,Yr)}a(aX,"dropUserValidation");KM.exports={addUserValidation:iX,alterUserValidation:oX,dropUserValidation:aX}});var Ot=P((fye,zM)=>{"use strict";var{platform:dye}=require("os"),cX="nats-server.zip",CR="nats-server",lX=process.platform==="win32"?`${CR}.exe`:CR,uX=/^[^\s.,*>]+$/,WM="__request__",dX=a(e=>`${e}.${WM}`,"REQUEST_SUBJECT"),fX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},_X={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},hX={HUB:"hub.pid",LEAF:"leaf.pid"},pX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},EX={SUCCESS:"success",ERROR:"error"},mX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},gX={TXN:"txn",MSGID:"msgid"},jl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},SX={[jl.ERR]:1,[jl.WRN]:2,[jl.INF]:3,[jl.DBG]:4,[jl.TRC]:5},TX={debug:"-D",trace:"-DVV"};zM.exports={NATS_SERVER_ZIP:cX,NATS_SERVER_NAME:CR,NATS_BINARY_NAME:lX,PID_FILES:hX,NATS_CONFIG_FILES:_X,SERVER_SUFFIX:pX,NATS_TERM_CONSTRAINTS_RX:uX,REQUEST_SUFFIX:WM,UPDATE_REMOTE_RESPONSE_STATUSES:EX,CLUSTER_STATUS_STATUSES:mX,REQUEST_SUBJECT:dX,SUBJECT_PREFIXES:gX,MSG_HEADERS:fX,LOG_LEVELS:jl,LOG_LEVEL_FLAGS:TX,LOG_LEVEL_HIERARCHY:SX}});var PR=P(QM=>{"use strict";var AX={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
17
+ `),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
18
+ `)},RX="certificate.pem",yX="privateKey.pem",bX="caCertificate.pem",OX="natsCertificate.pem",NX="natsCaCertificate.pem",gt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},wX={tls_certificate:gt.SERVER,tls_certificateAuthority:gt.CA,customFunctions_tls_certificate:gt.SERVER,customFunctions_tls_certificateAuthority:gt.CA,operationsApi_tls_certificate:gt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:gt["OPERATIONS-CA"]},IX={[gt.SERVER]:2,[gt.DEFAULT]:1},CX={[gt["OPERATIONS-API"]]:3,[gt.SERVER]:2,[gt.DEFAULT]:1},PX={[gt["OPERATIONS-API"]]:3,[gt.SERVER]:2,[gt.DEFAULT]:1},DX={[gt["OPERATIONS-CA"]]:3,[gt.CA]:2,[gt["DEFAULT-CA"]]:1},LX={[gt["OPERATIONS-CA"]]:3,[gt.CA]:2,[gt["DEFAULT-CA"]]:1},MX={[gt.CA]:2,[gt["DEFAULT-CA"]]:1};Object.assign(QM,{CERTIFICATE_PEM_NAME:RX,PRIVATEKEY_PEM_NAME:yX,CA_PEM_NAME:bX,CERT_NAME:gt,CERT_CONFIG_NAME_MAP:wX,CERT_PREFERENCE_APP:IX,CERT_PREFERENCE_OPS:CX,CERT_PREFERENCE_REP:PX,CA_CERT_PREFERENCE_REP:DX,CA_CERT_PREFERENCE_OPS:LX,CA_CERT_PREFERENCE_APP:MX,CERTIFICATE_VALUES:AX,NATS_CERTIFICATE_PEM_NAME:OX,NATS_CA_PEM_NAME:NX})});var LR=P((Eye,tv)=>{"use strict";var ZM=require("fs-extra"),Se=require("joi"),vX=require("os"),{boolean:He,string:St,number:tr,array:yc}=Se.types(),{totalmem:jM}=require("os"),Rc=require("path"),UX=j(),DR=ae(),pye=PR(),JM=(H(),D(q)),xX=pt(),XM="log",BX="components",HX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",kX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",FX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",GX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",qX="rootPath config parameter is undefined",hn=Se.alternatives([tr.min(0),St]).optional().empty(null),bE=Se.alternatives([yc.items(St,{host:St.required(),port:hn},{hostname:St.required(),port:hn}).empty(null),yc.items(St)]),bi,ev=!1;tv.exports={configValidator:$X,routesValidator:QX,route_constraints:bE};function $X(e,t=!1){if(ev=t,bi=e.rootPath,DR.isEmpty(bi))throw qX;let r=He.optional(),n=tr.min(0).max(1e3).empty(null).default(zX),s=St.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(xf),i=St.optional().empty(null),o=St.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Se.string().empty(null).default(xf),l=Se.custom(KX).empty(null).default(xf),u=e.clustering?.enabled,f=Se.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return u===!0?d=Se.object({enabled:r,hubServer:Se.object({cluster:Se.object({name:Se.required().empty(null),network:Se.object({port:hn,routes:bE}).required()}).required(),leafNodes:Se.object({network:Se.object({port:hn}).required()}).required(),network:Se.object({port:hn}).required()}).required(),leafServer:Se.object({network:Se.object({port:hn,routes:bE}).required(),streams:Se.object({maxAge:tr.min(120).allow(null).optional(),maxBytes:tr.min(1).allow(null).optional(),maxMsgs:tr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Se.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:St.optional().empty(null)}).optional():d=Se.object({enabled:r,tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),Se.object({authentication:Se.alternatives(Se.object({authorizeLocal:He,cacheTTL:tr.required(),enableSessions:He,hashFunction:St.valid("md5","sha256","argon2id").optional().empty(null)}),He).optional(),analytics:Se.object({aggregatePeriod:tr}),replication:Se.object({hostname:Se.alternatives(St,tr).optional().empty(null),url:St.optional().empty(null),port:hn,securePort:hn,routes:yc.optional().empty(null),databases:Se.alternatives(St,yc),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:d,localStudio:Se.object({enabled:r}).required(),logging:Se.object({auditAuthEvents:Se.object({logFailed:He,logSuccessful:He}),file:He.required(),level:Se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Se.object({enabled:He.optional(),compress:He.optional(),interval:St.custom(WX).optional().empty(null),maxSize:St.custom(YX).optional().empty(null),path:St.optional().empty(null).default(xf)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:Se.object({network:Se.object({cors:He.optional(),corsAccessList:yc.optional(),headersTimeout:tr.min(1).optional(),keepAliveTimeout:tr.min(1).optional(),port:hn,domainSocket:Se.optional().empty("hdb/operations-server").default(xf),securePort:hn,timeout:tr.min(1).optional()}).optional(),tls:Se.alternatives([Se.array().items(f),f])}).required(),rootPath:St.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Se.object({network:Se.object({port:hn,securePort:hn,mtls:Se.alternatives([He.optional(),Se.object({user:St.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:Se.object({compressionThreshold:tr.optional(),cors:He.optional(),corsAccessList:yc.optional(),headersTimeout:tr.min(1).optional(),port:hn,securePort:hn,maxHeaderSize:tr.optional(),mtls:Se.alternatives([He.optional(),Se.object({user:St.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:Se.alternatives([yc.optional(),St.optional()])}).required(),threads:Se.alternatives(n.optional(),Se.object({count:n.optional(),debug:Se.alternatives(He.optional(),Se.object({startingPort:tr.min(1).optional(),host:St.optional(),waitForDebugger:He.optional()})),maxHeapMemory:tr.min(0).optional()})),storage:Se.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:Se.alternatives([He.optional(),Se.object({dictionary:St.optional(),threshold:tr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:tr.optional(),maxFreeSpaceToRetain:tr.optional()}).required(),ignoreScripts:He.optional(),tls:Se.alternatives([Se.array().items(f),f])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a($X,"configValidator");function VX(e){return ev||ZM.existsSync(e)?null:`Specified path ${e} does not exist.`}a(VX,"doesPathExist");function KX(e,t){Se.assert(e,St.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=VX(e);if(r)return t.message(r)}a(KX,"validatePath");function YX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(HX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(FX):e}a(YX,"validateRotationMaxSize");function WX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(kX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(GX):e}a(WX,"validateRotationInterval");function zX(e,t){let r=t.state.path.join("."),n=vX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||jM();return i=Math.round(Math.min(i,jM())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),UX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(zX,"setDefaultThreads");function xf(e,t){let r=t.state.path.join(".");if(!DR.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(DR.isEmpty(bi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Rc.join(bi,BX);case"logging.root":return Rc.join(bi,XM);case"clustering.leafServer.streams.path":return Rc.join(bi,"clustering","leaf");case"storage.path":let n=Rc.join(bi,JM.LEGACY_DATABASES_DIR_NAME);return ZM.existsSync(n)?n:Rc.join(bi,JM.DATABASES_DIR_NAME);case"logging.rotation.path":return Rc.join(bi,XM);case"operationsApi.network.domainSocket":return r==null?null:Rc.join(bi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(xf,"setDefaultRoot");function QX(e){let t=Se.object({routes:bE});return xX.validateBySchema({routes:e},t)}a(QX,"routesValidator")});var wt=P(fv=>{"use strict";var ds=(H(),D(q)),Er=ae(),rr=j(),{configValidator:jX,routesValidator:rv}=LR(),Wr=require("fs-extra"),sv=require("yaml"),Gn=require("path"),JX=require("is-number"),iv=require("properties-reader"),XX=require("lodash"),{handleHDBError:ZX}=_e(),{HTTP_STATUS_CODES:eZ,HDB_ERROR_MSGS:Jl}=Ln(),{server:tZ}=($r(),D(ic)),{PACKAGE_ROOT:ov}=_t(),{DATABASES_PARAM_CONFIG:Bf,CONFIG_PARAMS:Fn,CONFIG_PARAM_MAP:Vs}=ds,rZ="Unable to get config value because config is uninitialized",nZ="Config successfully initialized",sZ="Error backing up config file",iZ="Empty parameter sent to getConfigValue",av=Gn.join(ov,"config","yaml",ds.HDB_DEFAULT_CONFIG_FILE),oZ=Gn.join(ov,"config","yaml","defaultNatsConfig.yaml"),aZ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",nv={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"},OE,Nt,NE;Object.assign(fv,{createConfigFile:cZ,getDefaultConfig:lZ,getConfigValue:lv,initConfig:wE,flattenConfig:Xl,updateConfigValue:uv,updateConfigObject:dZ,getConfiguration:hZ,setConfiguration:pZ,readConfigFile:xR,getClusteringRoutes:EZ,initOldConfig:dv,getConfigFromFile:mZ,getConfigFilePath:bc,addConfig:gZ,deleteConfigFromFile:SZ,getConfigObj:TZ,resolvePath:MR,getFlatConfigObj:AZ});function MR(e){if(e?.startsWith("~/"))return Gn.join(Er.getHomeDir(),e.slice(1));let t=ce();return Gn.resolve(t.getHdbBasePath(),e)}a(MR,"resolvePath");function cZ(e,t=!1){let r=la(av);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=sv.parseDocument(Wr.readFileSync(oZ,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}OE=Xl(r.toJSON());let n;for(let c in e){let l=Vs[c.toLowerCase()];if(l===Fn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),f=vR(l,e[c]);l==="rootPath"&&f?.endsWith("/")&&(f=f.slice(0,-1));try{r.setIn([...u],f)}catch(d){rr.error(d)}}}n&&cv(r,n),UR(r,t);let s=r.toJSON();Nt=Xl(s);let i=r.getIn(["rootPath"]),o=Gn.join(i,ds.HDB_CONFIG_FILE);if(Wr.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Wr.writeFileSync(o,String(r)),rr.trace(`Config file written to ${o}`)}a(cZ,"createConfigFile");function cv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Er.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Bf.TABLES))for(let i in n[s][Bf.TABLES])for(let o in n[s][Bf.TABLES][i]){let c=n[s][Bf.TABLES][i][o],l=[Fn.DATABASES,s,Bf.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Fn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){rr.error("Error parsing schemas CLI/env config arguments",n)}}a(cv,"setSchemasConfig");function lZ(e){if(OE===void 0){let r=la(av);OE=Xl(r.toJSON())}let t=Vs[e.toLowerCase()];if(t!==void 0)return OE[t.toLowerCase()]}a(lZ,"getDefaultConfig");function lv(e){if(e==null){rr.info(iZ);return}if(Nt===void 0){rr.trace(rZ);return}let t=Vs[e.toLowerCase()];if(t!==void 0)return Nt[t.toLowerCase()]}a(lv,"getConfigValue");function bc(e=Er.getPropsFilePath()){let t=Er.getEnvCliRootPath();if(t)return MR(Gn.join(t,ds.HDB_CONFIG_FILE));let r=iv(e);return MR(r.get(ds.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(bc,"getConfigFilePath");function wE(e=!1){if(Nt===void 0||e){let t;if(!Er.noBootFile()){t=Er.getPropsFilePath();try{Wr.accessSync(t,Wr.constants.F_OK|Wr.constants.R_OK)}catch(i){throw rr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=bc(t),n;if(r.includes("config/settings.js"))try{dv(r);return}catch(i){if(i.code!==ds.NODE_ERROR_CODES.ENOENT)throw i}try{n=la(r)}catch(i){if(i.code===ds.NODE_ERROR_CODES.ENOENT){rr.trace(`HarperDB config file not found at ${r}.
19
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw rr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}uZ(n,r),UR(n);let s=n.toJSON();if(tZ.config=s,Nt=Xl(s),Nt.logging_rotation_rotate)for(let i in nv)Nt[i]&&rr.error(`Config ${nv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rr.trace(nZ)}}a(wE,"initConfig");function uZ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Gn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Gn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n){if(rr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Wr.writeFileSync(t,String(e))}}a(uZ,"checkForUpdatedConfig");function UR(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Jl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Jl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=jX(r,t);if(n.error)throw Jl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(UR,"validateConfig");function dZ(e,t){Nt===void 0&&(Nt={});let r=Vs[e.toLowerCase()];if(r===void 0){rr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Nt[r.toLowerCase()]=t}a(dZ,"updateConfigObject");function uv(e,t,r=void 0,n=!1,s=!1,i=!1){Nt===void 0&&wE();let o=lv(Vs.hdb_root),c=Gn.join(o,ds.HDB_CONFIG_FILE),l=la(c),u;if(r&&Nt){let h=!1;for(let _ in r)if(r[_]!=Nt[_.toLowerCase()]){h=!0;break}if(!h){rr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Fn.DATABASES)u=t;else if(r===void 0){let h;if(i)h=e;else if(h=Vs[e.toLowerCase()],h===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let _=h.split("_"),p=vR(h,t);l.setIn([..._],p)}else for(let h in r){let _=Vs[h.toLowerCase()];if(_===Fn.HTTP_SECUREPORT&&r[h]===Nt[Fn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),_===Fn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[h]===Nt[Fn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),_===Fn.DATABASES){u=r[h];continue}if(_?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!_&&(h.endsWith("_package")||h.endsWith("_port"))&&(_=h),_!==void 0){let p=_.split("_"),S=ds.LEGACY_CONFIG_PARAMS[h.toUpperCase()];S&&S.startsWith("customFunctions")&&l.hasIn(S.split("_"))&&(_=S,p=S.split("_"));let g=vR(_,r[h]);_==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(T){rr.error(T)}}}u&&cv(l,u),UR(l);let f=l.getIn(["rootPath"]),d=Gn.join(f,ds.HDB_CONFIG_FILE);if(n===!0&&fZ(c,f),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Wr.writeFileSync(d,String(l)),s&&(Nt=Xl(l.toJSON())),rr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(uv,"updateConfigValue");function fZ(e,t){try{let r=Gn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${ds.HDB_CONFIG_FILE}.bak`);Wr.copySync(e,r),rr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rr.error(sZ),rr.error(r)}}a(fZ,"backupConfigFile");var _Z=["databases"];function Xl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),NE=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])&&!_Z.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Fn[l.toUpperCase()]&&Vs[l]&&(s[Vs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Xl,"flattenConfig");function vR(e,t){if(e===Fn.CLUSTERING_NODENAME||e===Fn.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(JX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.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 Er.autoCast(t)}a(vR,"castConfigValue");function hZ(){let e=Er.getPropsFilePath(),t=bc(e);return la(t).toJSON()}a(hZ,"getConfiguration");async function pZ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return uv(void 0,void 0,s,!0),aZ}catch(i){throw typeof i=="string"||i instanceof String?ZX(i,i,eZ.BAD_REQUEST,void 0,void 0,!0):i}}a(pZ,"setConfiguration");function xR(){let e=Er.getPropsFilePath();try{Wr.accessSync(e,Wr.constants.F_OK|Wr.constants.R_OK)}catch(n){if(!Er.noBootFile())throw rr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=bc(e);return la(t).toJSON()}a(xR,"readConfigFile");function la(e){return sv.parseDocument(Wr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(la,"parseYamlDoc");function EZ(){let e=xR(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=rv(t);if(r)throw Jl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=rv(n);if(s)throw Jl.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Jl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(EZ,"getClusteringRoutes");function dv(e){let t=iv(e);Nt={};for(let r in Vs){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Vs[r].toLowerCase();s===Fn.LOGGING_ROOT?Nt[s]=Gn.dirname(n):Nt[s]=n}return Nt}a(dv,"initOldConfig");function mZ(e){let t=xR();return XX.get(t,e.replaceAll("_","."))}a(mZ,"getConfigFromFile");async function gZ(e,t){let r=la(bc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Wr.writeFile(bc(),String(r))}a(gZ,"addConfig");function SZ(e){let t=bc(Er.getPropsFilePath()),r=la(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Gn.join(n,ds.HDB_CONFIG_FILE);Wr.writeFileSync(s,String(r))}a(SZ,"deleteConfigFromFile");function TZ(){return NE||(wE(),NE)}a(TZ,"getConfigObj");function AZ(){return Nt||wE(),Nt}a(AZ,"getFlatConfigObj")});var qn=P((Tye,Or)=>{"use strict";var pv="username is required",Ev="nothing to update, must supply active, role or password to update",mv="password cannot be an empty string",gv="If role is specified, it cannot be empty.",Sv="active must be true or false";Or.exports.addUser=PZ;Or.exports.alterUser=DZ;Or.exports.dropUser=MZ;Or.exports.getSuperUser=HZ;Or.exports.userInfo=vZ;Or.exports.listUsers=IE;Or.exports.listUsersExternal=UZ;Or.exports.setUsersWithRolesCache=Oc;Or.exports.findAndValidateUser=bv;Or.exports.getClusterUser=kZ;Or.exports.getUsersWithRolesCache=BZ;Or.exports.USERNAME_REQUIRED=pv;Or.exports.ALTERUSER_NOTHING_TO_UPDATE=Ev;Or.exports.EMPTY_PASSWORD=mv;Or.exports.EMPTY_ROLE=gv;Or.exports.ACTIVE_BOOLEAN=Sv;var Tv=pn(),RZ=Ac(),Hf=(yE(),D(RE)),Av=YM(),kf=Kr(),GR=fo(),Oi=ae(),Rv=require("validate.js"),qR=j(),{promisify:yZ}=require("util"),$R=co(),HR=(H(),D(q)),_v=Ot(),bZ=wt(),OZ=ce(),NZ=io(),{hdb_errors:wZ,ClientError:Ks}=_e(),{HTTP_STATUS_CODES:uo,AUTHENTICATION_ERROR_MSGS:BR,HDB_ERROR_MSGS:Zl}=wZ,{UserEventMsg:VR}=Ys(),kR=require("lodash"),{server:KR}=($r(),D(ic)),IZ=j();KR.getUser=(e,t)=>bv(e,t,t!=null);var yv={username:!0,active:!0,role:!0,password:!0},hv=new Map,CZ=yZ(RZ.delete),FR=OZ.get(HR.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Hf.HASH_FUNCTION.SHA256,Ni;async function PZ(e){let t=Rv.cleanAttributes(e,yv),r=Av.addUserValidation(t);if(r)throw new Ks(r.message);let n=await kf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new Ks(Zl.ROLE_NAME_NOT_FOUND(t.role),uo.NOT_FOUND);if(n.length>1)throw new Ks(Zl.DUP_ROLES_FOUND(t.role),uo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=$R.encrypt(t.password)),t.password=await Hf.hash(t.password,FR),t.hash_function=FR,t.role=n[0].id;let s=await Tv.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(qR.debug(s),await Oc(),s.skipped_hashes.length===1)throw new Ks(Zl.USER_ALREADY_EXISTS(t.username),uo.CONFLICT);return GR.signalUserChange(new VR(process.pid)),`${t.username} successfully added`}a(PZ,"addUser");async function DZ(e){let t=Rv.cleanAttributes(e,yv);if(Oi.isEmptyOrZeroLength(t.username))throw new Error(pv);if(Oi.isEmptyOrZeroLength(t.password)&&Oi.isEmptyOrZeroLength(t.role)&&Oi.isEmptyOrZeroLength(t.active))throw new Error(Ev);if(!Oi.isEmpty(t.password)&&Oi.isEmptyOrZeroLength(t.password.trim()))throw new Error(mv);if(!Oi.isEmpty(t.active)&&!Oi.isBoolean(t.active))throw new Error(Sv);if(!Oi.isEmpty(t.password)&&!Oi.isEmptyOrZeroLength(t.password.trim())&&(LZ(t.username)&&(t.hash=$R.encrypt(t.password)),t.password=await Hf.hash(t.password,FR)),t.role==="")throw new Error(gv);if(t.role){let n=await kf.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new Ks(Zl.ALTER_USER_ROLE_NOT_FOUND(t.role),uo.NOT_FOUND);if(n.length>1)throw new Ks(Zl.DUP_ROLES_FOUND(t.role),uo.CONFLICT);t.role=n[0].id}let r=await Tv.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Oc(),GR.signalUserChange(new VR(process.pid)),r}a(DZ,"alterUser");function LZ(e){let t=!1,r=Ni.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(LZ,"isClusterUser");async function MZ(e){let t=Av.dropUserValidation(e);if(t)throw new Ks(t.message);if(Ni.get(e.username)===void 0)throw new Ks(Zl.USER_NOT_EXIST(e.username),uo.NOT_FOUND);let r=await CZ({table:"hdb_user",schema:"system",hash_values:[e.username]});return qR.debug(r),await Oc(),GR.signalUserChange(new VR(process.pid)),`${e.username} successfully deleted`}a(MZ,"dropUser");async function vZ(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=kR.cloneDeep(e.hdb_user);let r=await kf.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(vZ,"userInfo");async function UZ(){let e=await IE();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(UZ,"listUsersExternal");async function IE(){let e=await kf.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=kR.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await kf.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=kR.cloneDeep(s),s.role=t[s.role],xZ(s.role),n.set(s.username,s);return n}a(IE,"listUsers");function xZ(e){if(!e){qR.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(NZ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(xZ,"appendSystemTablesToRole");async function Oc(e=void 0){e?Ni=e:Ni=await IE()}a(Oc,"setUsersWithRolesCache");async function BZ(){return Ni||await Oc(),Ni}a(BZ,"getUsersWithRolesCache");async function bv(e,t,r=!0){Ni||await Oc();let n=Ni.get(e);if(!n){if(!r)return{username:e};throw new Ks(BR.GENERIC_AUTH_FAIL,uo.UNAUTHORIZED)}if(n&&!n.active)throw new Ks(BR.USER_INACTIVE,uo.UNAUTHORIZED);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(hv.get(t)===n.password)return s;{let i=Hf.validate(n.password,t,n.hash_function||Hf.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)hv.set(t,n.password);else throw new Ks(BR.GENERIC_AUTH_FAIL,uo.UNAUTHORIZED)}}return s}a(bv,"findAndValidateUser");async function HZ(){Ni||await Oc();for(let[,e]of Ni)if(e.role.role==="super_user")return e}a(HZ,"getSuperUser");async function kZ(){let e=await IE(),t=bZ.getConfigFromFile(HR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==HR.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=$R.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_v.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_v.SERVER_SUFFIX.ADMIN,r}a(kZ,"getClusterUser");var Ov=[];KR.invalidateUser=function(e){for(let t of Ov)try{t(e)}catch(r){IZ.error("Error invalidating user",r)}};KR.onInvalidatedUser=function(e){Ov.push(e)}});var Gf=P((bye,Cv)=>{"use strict";var Nc=j(),$n=(H(),D(q)),FZ=qL(),Rye=$s(),yye=lo(),GZ=qn(),{validateEvent:Nv}=Ys(),Ff=kn(),qZ=require("process"),{resetDatabases:$Z}=(De(),D(nt)),VZ={[$n.ITC_EVENT_TYPES.SCHEMA]:KZ,[$n.ITC_EVENT_TYPES.USER]:Iv};async function KZ(e){let t=Nv(e);if(t){Nc.error(t);return}Nc.trace("ITC schemaHandler received schema event:",e),await FZ(e.message),await YZ(e.message)}a(KZ,"schemaHandler");async function YZ(e){try{Ff.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ff.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ff.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=$Z();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Nc.error(t)}}a(YZ,"syncSchemaMetadata");var wv=[];async function Iv(e){try{try{Ff.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ff.resetReadTxn($n.SYSTEM_SCHEMA_NAME,$n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Nc.warn(r)}let t=Nv(e);if(t){Nc.error(t);return}Nc.trace(`ITC userHandler ${$n.HDB_ITC_CLIENT_PREFIX}${qZ.pid} received user event:`,e),await GZ.setUsersWithRolesCache();for(let r of wv)r()}catch(t){Nc.error(t)}}a(Iv,"userHandler");Iv.addListener=function(e){wv.push(e)};Cv.exports=VZ});var Ys=P((Pye,Dv)=>{"use strict";var Nye=j(),YR=ae(),WZ=(H(),D(q)),{ITC_ERRORS:qf}=Ln(),{parentPort:wye,threadId:zZ,isMainThread:QZ,workerData:Iye}=require("worker_threads"),{onMessageFromWorkers:jZ,broadcast:Cye,broadcastWithAcknowledgement:JZ}=rt();Dv.exports={sendItcEvent:XZ,validateEvent:Pv,SchemaEventMsg:ZZ,UserEventMsg:e6};var CE;jZ(async(e,t)=>{CE=CE||Gf(),Pv(e),CE[e.type]&&await CE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function XZ(e){return!QZ&&e.message&&(e.message.originator=zZ),JZ(e)}a(XZ,"sendItcEvent");function Pv(e){if(typeof e!="object")return qf.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||YR.isEmpty(e.type))return qf.MISSING_TYPE;if(!e.hasOwnProperty("message")||YR.isEmpty(e.message))return qf.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||YR.isEmpty(e.message.originator))return qf.MISSING_ORIGIN;if(WZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return qf.INVALID_EVENT(e.type)}a(Pv,"validateEvent");function ZZ(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(ZZ,"SchemaEventMsg");function e6(e){this.originator=e}a(e6,"UserEventMsg")});var fo=P((Mye,Uv)=>{"use strict";var Lv=(H(),D(q)),Lye=ae(),PE=j(),Mv=kL(),eu,{sendItcEvent:vv}=Ys();function t6(e){try{PE.info("signalSchemaChange called with message:",e),eu=eu||Gf();let t=new Mv(Lv.ITC_EVENT_TYPES.SCHEMA,e);return eu.schema(t),vv(t)}catch(t){PE.error(t)}}a(t6,"signalSchemaChange");function r6(e){try{PE.trace("signalUserChange called with message:",e),eu=eu||Gf();let t=new Mv(Lv.ITC_EVENT_TYPES.USER,e);return eu.user(t),vv(t)}catch(t){PE.error(t)}}a(r6,"signalUserChange");Uv.exports={signalSchemaChange:t6,signalUserChange:r6}});var DE=P((Uye,Bv)=>{"use strict";var xv=ae(),n6=(H(),D(q)),s6=j(),i6=fE(),o6=dE(),a6=fo(),{SchemaEventMsg:c6}=Ys(),l6="already exists in";Bv.exports=u6;async function u6(e,t,r){if(xv.isEmptyOrZeroLength(r))return r;let n=[];xv.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 d6(e,t.schema,t.name,i)})),s}a(u6,"lmdbCheckForNewAttributes");async function d6(e,t,r,n){let s=new o6(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await f6(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(l6))s6.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(d6,"createNewAttribute");async function f6(e){let t;return t=await i6(e),a6.signalSchemaChange(new c6(process.pid,n6.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(f6,"createAttribute")});var tu=P((Bye,Hv)=>{"use strict";var WR=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}};Hv.exports=WR});var Fv=P((kye,kv)=>{"use strict";var _6=tu(),h6=(H(),D(q)).OPERATIONS_ENUM,zR=class extends _6{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(h6.INSERT,r,n,s,i),this.records=t}};kv.exports=zR});var qv=P((Gye,Gv)=>{"use strict";var p6=tu(),E6=(H(),D(q)).OPERATIONS_ENUM,QR=class extends p6{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(E6.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Gv.exports=QR});var Vv=P(($ye,$v)=>{"use strict";var m6=tu(),g6=(H(),D(q)).OPERATIONS_ENUM,jR=class extends m6{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(g6.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};$v.exports=jR});var Yv=P((Kye,Kv)=>{"use strict";var S6=tu(),T6=(H(),D(q)).OPERATIONS_ENUM,JR=class extends S6{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(T6.DELETE,n,s,t,i),this.original_records=r}};Kv.exports=JR});var $f=P((zye,jv)=>{"use strict";var Wye=require("path"),Wv=at(),A6=Fv(),R6=qv(),y6=Vv(),b6=Yv(),ru=Mt(),zv=ae(),{CONFIG_PARAMS:O6}=(H(),D(q)),Qv=ce();Qv.initSync();var LE=(H(),D(q)).OPERATIONS_ENUM,{getTransactionAuditStorePath:N6}=ht();jv.exports=w6;async function w6(e,t){if(Qv.get(O6.LOGGING_AUDITLOG)===!1)return;let r=N6(e.schema,e.table),n=await Wv.openEnvironment(r,e.table,!0),s=I6(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Wv.initializeDBIs(n,ru.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ru.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ru.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ru.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),zv.isEmpty(s.user_name)||n.dbis[ru.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ru.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(w6,"writeTransaction");function I6(e,t){let r=zv.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===LE.INSERT)return new A6(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===LE.UPDATE)return new R6(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===LE.UPSERT)return new y6(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===LE.DELETE)return new b6(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(I6,"createTransactionObject")});var XR=P((Jye,Jv)=>{"use strict";var C6=wf(),jye=Xd(),Vf=(H(),D(q)),P6=Zd(),D6=Ec().insertRecords,L6=at(),M6=j(),v6=DE(),{getSchemaPath:U6}=ht(),x6=$f();Jv.exports=B6;async function B6(e){try{let{schema_table:t,attributes:r}=C6(e);P6(e,r,t.hash_attribute),e.schema!==Vf.SYSTEM_SCHEMA_NAME&&(r.includes(Vf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Vf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Vf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Vf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await v6(e.hdb_auth_header,t,r),s=U6(e.schema,e.table),i=await L6.openEnvironment(s,e.table),o=await D6(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await x6(e,o)}catch(c){M6.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(B6,"lmdbCreateRecords")});var eU=P((Zye,Zv)=>{"use strict";var Xv=(H(),D(q)),H6=XR(),k6=Xd(),F6=require("fs-extra"),{getSchemaPath:G6}=ht();Zv.exports=q6;async function q6(e){let t=[{name:e.schema,createddate:Date.now()}],r=new k6(Xv.SYSTEM_SCHEMA_NAME,Xv.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await H6(r),await F6.mkdirp(G6(e.schema))}a(q6,"lmdbCreateSchema")});var rU=P((tbe,tU)=>{"use strict";var ZR=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}};tU.exports=ZR});var oU=P((obe,iU)=>{"use strict";var nU=at(),ey=an(),ty=Ln().LMDB_ERRORS_ENUM,$6=Mt(),sU=j(),nbe=ae(),V6=require("lmdb"),K6=rU(),Y6=(H(),D(q)),{OVERFLOW_MARKER:sbe,MAX_SEARCH_KEY_LENGTH:ibe}=$6,W6=Y6.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function z6(e,t,r,n){if(ey.validateEnv(e),t===void 0)throw new Error(ty.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ty.IDS_REQUIRED):new Error(ty.IDS_MUST_BE_ITERABLE);try{let s=nU.listDBIs(e);nU.initializeDBIs(e,t,s);let i=new K6,o,c=[],l=[];for(let h=0,_=r.length;h<_;h++)try{o=r[h];let p=e.dbis[t].get(o);if(!p||n&&p[W6]>n){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,V6.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let T=s[g];if(!p.hasOwnProperty(T)||T===t)continue;let m=e.dbis[T],A=p[T];if(A!=null)try{let w=ey.getIndexedValues(A);if(w)for(let M=0,F=w.length;M<F;M++)m.remove(w[M],o)}catch{sU.warn(`cannot delete from attribute: ${T}, ${A}:${o}`)}}});c.push(S),l.push(o),i.original_records.push(p)}catch(p){sU.warn(p),i.skipped.push(o)}let u=[],f=await Promise.all(c);for(let h=0,_=f.length;h<_;h++)f[h]===!0?i.deleted.push(l[h]):(i.skipped.push(l[h]),u.push(h));let d=0;for(let h=0;h<u.length;h++){let _=u[h];i.original_records.splice(_-d,1),d++}return i.txn_time=ey.getNextMonotonicTime(),i}catch(s){throw s}}a(z6,"deleteRecords");iU.exports={deleteRecords:z6}});var Kf=P((cbe,cU)=>{"use strict";var nu=ae(),Q6=oU(),j6=at(),{getSchemaPath:J6}=ht(),X6=$f(),Z6=j();cU.exports=e8;async function e8(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(nu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(nu.isEmptyOrZeroLength(e.hash_values)&&!nu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];nu.isEmpty(l)||e.hash_values.push(l)}}if(nu.isEmptyOrZeroLength(e.hash_values))return aU([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(nu.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=J6(e.schema,e.table),i=await j6.openEnvironment(s,e.table),o=await Q6.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await X6(e,o)}catch(c){Z6.error(`unable to write transaction due to ${c.message}`)}return aU(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(e8,"lmdbDeleteRecords");function aU(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(aU,"createDeleteResponse")});var ny=P((dbe,lU)=>{"use strict";var t8=(H(),D(q)),ube=an();function ry(e,t){let r=Object.create(null);if(t.length===1&&t8.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(ry,"parseRow");function r8(e,t,r,n){let s=ry(r,e);n.push(s)}a(r8,"searchAll");function n8(e,t,r,n){let s=ry(r,e);n[t]=s}a(n8,"searchAllToMap");function s8(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(s8,"iterateDBI");function wc(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(wc,"pushResults");function i8(e,t,r,n,s,i){t.toString().endsWith(e)&&wc(t,r,n,s,i)}a(i8,"endsWith");function o8(e,t,r,n,s,i){t.toString().includes(e)&&wc(t,r,n,s,i)}a(o8,"contains");function a8(e,t,r,n,s,i){t>e&&wc(t,r,n,s,i)}a(a8,"greaterThanCompare");function c8(e,t,r,n,s,i){t>=e&&wc(t,r,n,s,i)}a(c8,"greaterThanEqualCompare");function l8(e,t,r,n,s,i){t<e&&wc(t,r,n,s,i)}a(l8,"lessThanCompare");function u8(e,t,r,n,s,i){t<=e&&wc(t,r,n,s,i)}a(u8,"lessThanEqualCompare");lU.exports={parseRow:ry,searchAll:r8,searchAllToMap:n8,iterateDBI:s8,endsWith:i8,contains:o8,greaterThanCompare:a8,greaterThanEqualCompare:c8,lessThanCompare:l8,lessThanEqualCompare:u8,pushResults:wc}});var su=P((Ebe,EU)=>{"use strict";var ua=at(),_be=j(),Vn=an(),ME=Mt(),Kt=Ln().LMDB_ERRORS_ENUM,hbe=ae(),d8=(H(),D(q)),vE=ny(),{parseRow:f8}=vE,pbe=require("lmdb"),{OVERFLOW_MARKER:uU,MAX_SEARCH_KEY_LENGTH:_8}=ME;function dU(e,t,r,n=!1,s=void 0,i=void 0){return Ic(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(dU,"iterateFullIndex");function Yf(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return Ic(e,t,r,(f,d,h,_)=>{let m={transaction:f,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return _===r?(m.values=!1,d.getRange(m).map(A=>({value:A}))):d.getRange(m)})}a(Yf,"iterateRangeBetween");function Ic(e,t,r,n){let s=e.database||e,i=ua.openDBI(s,r);i[ME.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ua.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(Ic,"setupTransaction");function fU(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(uU)){if(!s)if(r)s=ua.openDBI(e,r);else{let l=ua.listDBIs(e);for(let u=0,f=l.length;u<f&&(s=ua.openDBI(e,l[u]),!s[ME.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(fU,"getOverflowCheck");function h8(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return Ic(e,t,t,(o,c,l)=>(UE(r),r=Wf(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>f8(u.value,r))))}a(h8,"searchAll");function p8(e,t,r,n=!1,s=void 0,i=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);UE(r),r=Wf(e.database||e,r);let o=new Map;for(let{key:c,value:l}of dU(e,t,t,n,s,i))o.set(c,vE.parseRow(l,r));return o}a(p8,"searchAllToMap");function E8(e,t,r=!1,n=void 0,s=void 0){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=dU(e,void 0,t,r,n,s),c=o.transaction,l=fU(c.database,c,void 0,t);for(let{key:u,value:f}of o){let d=l(u,f);i[d]===void 0&&(i[d]=[]),i[d].push(f)}return i}a(E8,"iterateDBI");function m8(e,t){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);return ua.statDBI(e,t).entryCount}a(m8,"countAll");function g8(e,t,r,n,s=!1,i=void 0,o=void 0){return da(e,r,n),Ic(e,t,r,(c,l,u,f)=>(n=Vn.convertKeyValueToWrite(n),f===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(g8,"equals");function S8(e,t,r){return da(e,t,r),ua.openDBI(e,t).getValuesCount(r)}a(S8,"count");function T8(e,t,r,n,s=!1,i=void 0,o=void 0){return da(e,r,n),Ic(e,null,r,(c,l)=>{n=Vn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let f;if(s===!0){let d;for(let h of l.getKeys({transaction:c,start:n}))if(!h.startsWith(n)){d=h;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),f=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(h=>{let{key:_}=h;if(_!==d){if(_.toString().startsWith(n))return h;if(u===!0)return f.DONE}}),f.filter(h=>h)}else return f=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(u===!0)return f.DONE}),u?f:f.filter(d=>d)})}a(T8,"startsWith");function A8(e,t,r,n,s=!1,i=void 0,o=void 0){return _U(e,t,r,n,s,i,o,!0)}a(A8,"endsWith");function _U(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return da(e,r,n),Ic(e,null,r,(l,u,f,d)=>{let h=fU(f,l,d,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(_=>{let p=_.toString();return p.endsWith(uU)?u.getValues(_,{transaction:l}).map(S=>{let g=h(_,S);if(c?g.endsWith(n):g.includes(n))return{key:g,value:S}}).filter(S=>S):(c?p.endsWith(n):p.includes(n))?u[ME.DBI_DEFINITION_NAME].is_hash_attribute?{key:_,value:_}:u.getValues(_,{transaction:l}).map(S=>({key:_,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(_U,"contains");function R8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Yf(e,t,r,n,l,s,i,o,!0,!1)}a(R8,"greaterThan");function y8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Yf(e,t,r,n,l,s,i,o,!1,!1)}a(y8,"greaterThanEqual");function b8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Yf(e,t,r,l,n,s,i,o,!1,!0)}a(b8,"lessThan");function O8(e,t,r,n,s=!1,i=void 0,o=void 0){da(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Yf(e,t,r,l,n,s,i,o,!1,!1)}a(O8,"lessThanEqual");function N8(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Vn.validateEnv(e),r===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Kt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Kt.END_VALUE_REQUIRED);if(n=Vn.convertKeyValueToWrite(n),s=Vn.convertKeyValueToWrite(s),n>s)throw new Error(Kt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Yf(e,t,r,n,s,i,o,c)}a(N8,"between");function w8(e,t,r,n){Vn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(UE(r),r=Wf(s,r),n===void 0)throw new Error(Kt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=vE.parseRow(c,r)),o}a(w8,"searchByHash");function I8(e,t,r){Vn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(I8,"checkHashExists");function C8(e,t,r,n,s=[]){return pU(e,t,r,n,s),hU(e,t,r,n,s).map(i=>i[1])}a(C8,"batchSearchByHash");function P8(e,t,r,n,s=[]){pU(e,t,r,n,s);let i=new Map;for(let[o,c]of hU(e,t,r,n,s))i.set(o,c);return i}a(P8,"batchSearchByHashToMap");function hU(e,t,r,n,s=[]){return Ic(e,t,t,(i,o,c)=>{r=Wf(c,r);let l=r.length<3;return n.map(u=>{let f=c.dbis[t].get(u,{transaction:i,lazy:l});if(f)return[u,vE.parseRow(f,r)];s.push(u)}).filter(u=>u)})}a(hU,"batchHashSearch");function pU(e,t,r,n,s){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.HASH_ATTRIBUTE_REQUIRED);if(UE(r),n==null)throw new Error(Kt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Kt.IDS_MUST_BE_ITERABLE)}a(pU,"initializeBatchSearchByHash");function UE(e){if(!Array.isArray(e))throw e===void 0?new Error(Kt.FETCH_ATTRIBUTES_REQUIRED):new Error(Kt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(UE,"validateFetchAttributes");function da(e,t,r){if(Vn.validateEnv(e),t===void 0)throw new Error(Kt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Kt.SEARCH_VALUE_REQUIRED);if(r?.length>_8)throw new Error(Kt.SEARCH_VALUE_TOO_LARGE)}a(da,"validateComparisonFunctions");function Wf(e,t){return t.length===1&&d8.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ua.listDBIs(e)),t}a(Wf,"setGetWholeRowAttributes");EU.exports={searchAll:h8,searchAllToMap:p8,count:S8,countAll:m8,equals:g8,startsWith:T8,endsWith:A8,contains:_U,searchByHash:w8,setGetWholeRowAttributes:Wf,batchSearchByHash:C8,batchSearchByHashToMap:P8,checkHashExists:I8,iterateDBI:E8,greaterThan:R8,greaterThanEqual:y8,lessThan:b8,lessThanEqual:O8,between:N8}});var iu=P((gbe,AU)=>{var mU=require("lodash"),gU=pt(),ke=require("joi"),D8=ae(),{hdb_schema_table:zf,checkValidTable:SU,hdb_table:TU,hdb_database:xE}=Ti(),{handleHDBError:L8,hdb_errors:M8}=_e(),{getDatabases:v8}=(De(),D(nt)),{HTTP_STATUS_CODES:U8}=M8,x8=ke.object({database:xE,schema:xE,table:TU,search_attribute:zf,search_value:ke.any().required(),get_attributes:ke.array().min(1).items(ke.alternatives(zf,ke.object())).optional(),desc:ke.bool(),limit:ke.number().integer().min(1),offset:ke.number().integer().min(0)}),B8=ke.object({database:xE,schema:xE,table:TU,operator:ke.string().valid("and","or").default("and").lowercase(),offset:ke.number().integer().min(0),limit:ke.number().integer().min(1),get_attributes:ke.array().min(1).items(ke.alternatives(zf,ke.object())).optional(),sort:ke.object({attribute:ke.alternatives(zf,ke.array().min(1)),descending:ke.bool().optional()}).optional(),conditions:ke.array().min(1).items(ke.alternatives(ke.object({operator:ke.string().valid("and","or").default("and").lowercase(),conditions:ke.array()}),ke.object({search_attribute:ke.alternatives(zf,ke.array().min(1)),search_type:ke.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:ke.when("search_type",{switch:[{is:"equals",then:ke.any()},{is:"between",then:ke.array().items(ke.alternatives([ke.string(),ke.number()])).length(2)}],otherwise:ke.alternatives(ke.string(),ke.number())}).required()}))).required()});AU.exports=function(e,t){let r=null;switch(t){case"value":r=gU.validateBySchema(e,x8);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(SU("database",e.schema)),i(SU("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=gU.validateBySchema(e,B8);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=D8.checkGlobalSchemaTable(e.schema,e.table);if(s)return L8(new Error,s,U8.NOT_FOUND);let o=v8()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(f=>{for(let d=0,h=f.conditions.length;d<h;d++){let _=f.conditions[d];_.conditions?l(_):c.push(_.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=mU.filter(c,f=>f!=="*"&&!f.startsWith?.("$")&&f.attribute!=="*"&&!Array.isArray(f)&&!f.name&&!mU.some(o,d=>d===f||d.attribute===f||d.attribute===f.attribute));if(u&&u.length>0){let f=u.join(", ");return f=f.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${f}'`)}}return r}});var sy=P((Tbe,RU)=>{"use strict";var H8=at(),k8=iu(),{getSchemaPath:F8}=ht();RU.exports=G8;function G8(e){let t=k8(e,"hashes");if(t)throw t;let r=F8(e.schema,e.table);return H8.openEnvironment(r,e.table)}a(G8,"initialize")});var iy=P((Rbe,yU)=>{"use strict";var q8=su(),$8=sy();yU.exports=V8;async function V8(e){let t=await $8(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return q8.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(V8,"lmdbGetDataByHash")});var ou=P((bbe,bU)=>{"use strict";var oy=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};bU.exports=oy});var NU=P((wbe,OU)=>{"use strict";var Nbe=ou(),K8=su(),Y8=sy();OU.exports=W8;async function W8(e){let t=await Y8(e),r=global.hdb_schema[e.schema][e.table];return K8.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(W8,"lmdbSearchByHash")});var Ws=P((Cbe,wU)=>{"use strict";var ay=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,f=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=f}};wU.exports=ay});var BE=P((Dbe,MU)=>{"use strict";var zr=su(),z8=at(),Q8=ae(),Fe=Mt(),Cc=(H(),D(q)),j8=io(),IU=Ln().LMDB_ERRORS_ENUM,{getSchemaPath:J8}=ht(),_o=Cc.SEARCH_WILDCARDS;async function X8(e,t,r){let n;e.schema===Cc.SYSTEM_SCHEMA_NAME?n=j8[e.table]:n=global.hdb_schema[e.schema][e.table];let s=LU(e,n.hash_attribute,r,t);return PU(e,s,n.hash_attribute,r)}a(X8,"prepSearch");async function PU(e,t,r,n){let s=J8(e.schema,e.table),i=await z8.openEnvironment(s,e.table),o=DU(i,e,t,r),c=o.transaction||i;if([Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Fe.SEARCH_TYPES.SEARCH_ALL,Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Z8(e,r)===!1){let f=e.search_attribute;if(f===r)return n?CU(o,()=>!0):o.map(h=>({[r]:h.key}));let d=a(h=>({[r]:h.value,[f]:h.key}),"toObject");return n?CU(o,d):o.map(d)}let u=e.search_attribute===r?o.map(f=>f.key):o.map(f=>f.value);return n===!0?zr.batchSearchByHashToMap(c,r,e.get_attributes,u):zr.batchSearchByHash(c,r,e.get_attributes,u)}a(PU,"executeSearch");function DU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Fe.SEARCH_TYPES.EQUALS:s=zr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.CONTAINS:s=zr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.ENDS_WITH:case Fe.SEARCH_TYPES._ENDS_WITH:s=zr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.STARTS_WITH:case Fe.SEARCH_TYPES._STARTS_WITH:s=zr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return zr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return zr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Fe.SEARCH_TYPES.SEARCH_ALL:return zr.searchAll(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return zr.searchAllToMap(e,n,t.get_attributes,o,c,l);case Fe.SEARCH_TYPES.BETWEEN:s=zr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN:case Fe.SEARCH_TYPES._GREATER_THAN:s=zr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Fe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=zr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN:case Fe.SEARCH_TYPES._LESS_THAN:s=zr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Fe.SEARCH_TYPES.LESS_THAN_EQUAL:case Fe.SEARCH_TYPES._LESS_THAN_EQUAL:s=zr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(DU,"searchByType");function CU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(CU,"createMapFromIterable");function Z8(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(Z8,"checkToFetchMore");function LU(e,t,r,n){if(Q8.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),_o.indexOf(s)>-1)return r===!0?Fe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Fe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(_o[0])<0&&s.indexOf(_o[1])<0)return c===!0?r===!0?Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Fe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Fe.SEARCH_TYPES.EQUALS;if(_o.indexOf(i)>=0&&_o.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Fe.SEARCH_TYPES.CONTAINS;if(_o.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Fe.SEARCH_TYPES.ENDS_WITH;if(_o.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Fe.SEARCH_TYPES.STARTS_WITH;if(s.includes(_o[0])||s.includes(_o[1]))return Fe.SEARCH_TYPES.EQUALS;throw new Error(IU.UNKNOWN_SEARCH_TYPE)}else switch(n){case Cc.VALUE_SEARCH_COMPARATORS.BETWEEN:return Fe.SEARCH_TYPES.BETWEEN;case Cc.VALUE_SEARCH_COMPARATORS.GREATER:return Fe.SEARCH_TYPES.GREATER_THAN;case Cc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Fe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Cc.VALUE_SEARCH_COMPARATORS.LESS:return Fe.SEARCH_TYPES.LESS_THAN;case Cc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Fe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(IU.UNKNOWN_SEARCH_TYPE)}}a(LU,"createSearchTypeFromSearchObject");MU.exports={executeSearch:PU,createSearchTypeFromSearchObject:LU,prepSearch:X8,searchByType:DU}});var UU=P((vbe,vU)=>{"use strict";var Mbe=Ws(),e5=iu(),t5=ae(),r5=(H(),D(q)),n5=BE();vU.exports=s5;function s5(e,t){if(!t5.isEmpty(t)&&r5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=e5(e,"value");if(n)throw n;return n5.prepSearch(e,t,!0)}a(s5,"lmdbGetDataByValue")});var Qf=P((Bbe,xU)=>{"use strict";var xbe=Ws(),i5=iu(),o5=ae(),a5=(H(),D(q)),c5=BE();xU.exports=l5;async function l5(e,t){if(!o5.isEmpty(t)&&a5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=i5(e,"value");if(n)throw n;return c5.prepSearch(e,t,!1)}a(l5,"lmdbSearchByValue")});var HU=P((Fbe,BU)=>{"use strict";var kbe=Mt(),cy=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}},ly=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},uy=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};BU.exports={SearchByConditionsObject:cy,SearchCondition:ly,SortAttribute:uy}});var $U=P((Vbe,qU)=>{"use strict";var qbe=HU().SearchByConditionsObject,u5=Ws(),d5=iu(),dy=su(),HE=Mt(),{Resource:$be}=(ta(),D(sA)),GU=BE(),f5=ny(),_5=require("lodash"),{getSchemaPath:h5}=ht(),kU=at(),{handleHDBError:p5,hdb_errors:E5}=_e(),{HTTP_STATUS_CODES:m5}=E5,g5=1e8;qU.exports=S5;async function S5(e){let t=d5(e,"conditions");if(t)throw p5(t,t.message,m5.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=h5(e.schema,e.table),n=await kU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)kU.openDBI(n,u.search_attribute);let i=_5.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let f=u.search_type;f===HE.SEARCH_TYPES.EQUALS?u.estimated_count=dy.count(n,u.search_attribute,u.search_value):f===HE.SEARCH_TYPES.CONTAINS||f===HE.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=g5}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await FU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],f=i.slice(1).map(GU.filterByType),d=f.length,h=dy.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(_=>u.get(_,{transaction:o,lazy:!0})),d>0&&(l=l.filter(_=>{for(let p=0;p<d;p++)if(!f[p](_))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(_=>f5.parseRow(_,h))}else{for(let d=1;d<i.length;d++){let h=i[d],_=await FU(o,e,h,s.hash_attribute);c=c.concat(_)}let u=new Set,f=e.offset||0;c=c.filter(d=>u.has(d)?!1:(u.add(d),!0)).slice(f,e.limit&&e.limit+f),l=dy.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(S5,"lmdbSearchByConditions");async function FU(e,t,r,n){let s=new u5(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===HE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,GU.searchByType(e,s,i,n).map(o=>o.value)}a(FU,"executeConditionSearch")});var jf=P((Ybe,VU)=>{"use strict";var T5=(H(),D(q)).OPERATIONS_ENUM,fy=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=T5.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};VU.exports=fy});var _y=P((zbe,XU)=>{"use strict";var zU=Ws(),QU=jf(),jU=Qf(),JU=Kf(),En=(H(),D(q)),KU=ae(),YU=at(),{getTransactionAuditStorePath:A5,getSchemaPath:R5}=ht(),WU=j();XU.exports=y5;async function y5(e){try{if(KU.isEmpty(global.hdb_schema[e.schema])||KU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await b5(e),await O5(e);let t=R5(e.schema,e.table);try{await YU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")WU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=A5(e.schema,e.table);await YU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")WU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(y5,"lmdbDropTable");async function b5(e){let t=new zU(En.SYSTEM_SCHEMA_NAME,En.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,En.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[En.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await jU(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 QU(En.SYSTEM_SCHEMA_NAME,En.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await JU(s)}a(b5,"deleteAttributesFromSystem");async function O5(e){let t=new zU(En.SYSTEM_SCHEMA_NAME,En.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,En.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[En.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,En.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,En.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await jU(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 QU(En.SYSTEM_SCHEMA_NAME,En.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await JU(s)}catch(i){throw i}}a(O5,"dropTableFromSystem")});var e0=P((jbe,ZU)=>{"use strict";var N5=require("fs-extra"),w5=Ws(),I5=ou(),C5=jf(),P5=_y(),D5=Kf(),L5=iy(),M5=Qf(),ho=(H(),D(q)),{getSchemaPath:v5}=ht(),{handleHDBError:U5,hdb_errors:x5}=_e(),{HDB_ERROR_MSGS:B5,HTTP_STATUS_CODES:H5}=x5;ZU.exports=k5;async function k5(e){let t;try{t=await F5(e.schema);let r=new w5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ho.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ho.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await M5(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await P5(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new C5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await D5(s);let i=v5(t);await N5.remove(i)}catch(r){throw r}}a(k5,"lmdbDropSchema");async function F5(e){let t=new I5(ho.SYSTEM_SCHEMA_NAME,ho.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ho.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await L5(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw U5(new Error,B5.SCHEMA_NOT_FOUND(e),H5.NOT_FOUND,void 0,void 0,!0);return n}a(F5,"validateDropSchema")});var Jf=P((Xbe,t0)=>{"use strict";var hy=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};t0.exports=hy});var Ey=P((tOe,r0)=>{"use strict";var G5=require("fs-extra"),kE=at(),{getTransactionAuditStorePath:q5}=ht(),py=Mt(),eOe=Jf();r0.exports=$5;async function $5(e){let t;try{let r=q5(e.schema,e.table);await G5.mkdirp(r),t=await kE.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{kE.createDBI(t,py.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),kE.createDBI(t,py.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),kE.createDBI(t,py.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($5,"createTransactionsAuditEnvironment")});var i0=P((sOe,s0)=>{"use strict";var my=(H(),D(q)),n0=at(),V5=Ec(),{getSystemSchemaPath:K5,getSchemaPath:Y5}=ht(),nOe=io(),W5=fE(),gy=dE(),z5=j(),Q5=Ey();s0.exports=j5;async function j5(e,t){let r=Y5(t.schema,t.table),n=new gy(t.schema,t.table,my.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new gy(t.schema,t.table,my.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new gy(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await n0.createEnvironment(r,t.table),e!==void 0){let o=await n0.openEnvironment(K5(),my.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await V5.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Sy(n),await Sy(s),await Sy(i)}await Q5(t)}catch(o){throw o}}a(j5,"lmdbCreateTable");async function Sy(e){try{await W5(e)}catch(t){z5.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sy,"createAttribute")});var a0=P((oOe,o0)=>{"use strict";var J5=wf(),X5=Zd(),Z5=DE(),Xf=(H(),D(q)),e9=Ec().updateRecords,t9=at(),{getSchemaPath:r9}=ht(),n9=$f(),s9=j();o0.exports=i9;async function i9(e){try{let{schema_table:t,attributes:r}=J5(e);X5(e,r,t.hash_attribute),e.schema!==Xf.SYSTEM_SCHEMA_NAME&&(r.includes(Xf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Xf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Xf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Xf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Z5(e.hdb_auth_header,t,r),s=r9(e.schema,e.table),i=await t9.openEnvironment(s,e.table),o=await e9(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n9(e,o)}catch(c){s9.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(i9,"lmdbUpdateRecords")});var l0=P((cOe,c0)=>{"use strict";var o9=(H(),D(q)).OPERATIONS_ENUM,Ty=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=o9.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};c0.exports=Ty});var d0=P((dOe,u0)=>{"use strict";var uOe=l0(),a9=wf(),c9=Zd(),l9=DE(),Zf=(H(),D(q)),u9=Ec().upsertRecords,d9=at(),{getSchemaPath:f9}=ht(),_9=$f(),h9=j(),{handleHDBError:p9,hdb_errors:E9}=_e();u0.exports=m9;async function m9(e){let t;try{t=a9(e)}catch(l){throw p9(l,l.message,E9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;c9(e,n,r.hash_attribute),e.schema!==Zf.SYSTEM_SCHEMA_NAME&&(n.includes(Zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Zf.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Zf.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await l9(e.hdb_auth_header,r,n),i=f9(e.schema,e.table),o=await d9.openEnvironment(i,e.table),c=await u9(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await _9(e,c)}catch(l){h9.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(m9,"lmdbUpsertRecords")});var _0=P((_Oe,f0)=>{"use strict";var Ay=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};f0.exports=Ay});var p0=P((pOe,h0)=>{"use strict";var Ry=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}};h0.exports=Ry});var g0=P((gOe,m0)=>{"use strict";var yy=at(),{getTransactionAuditStorePath:g9}=ht(),mOe=_0(),e_=Mt(),S9=ae(),E0=p0(),T9=require("util").promisify,A9=T9(setTimeout),R9=1e4,y9=100;m0.exports=b9;async function b9(e){let t=g9(e.schema,e.table),r=await yy.openEnvironment(t,e.table,!0),n=yy.listDBIs(r);yy.initializeDBIs(r,e_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new E0;do s=await O9(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 A9(y9);while(s.transactions_deleted>0);return i}a(b9,"deleteAuditLogsBefore");async function O9(e,t){let r=new E0;try{let n=e.dbis[e_.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[e_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];S9.isEmpty(c)||(s=e.dbis[e_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[e_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>R9)break}return await s,r}catch(n){throw n}}a(O9,"deleteTransactions")});var T0=P((TOe,S0)=>{"use strict";var by=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};S0.exports=by});var R0=P((yOe,A0)=>{"use strict";var N9=Ws(),w9=jf(),ROe=T0(),wi=(H(),D(q)),I9=ae(),Oy=at(),C9=io(),P9=Qf(),D9=Kf(),{getSchemaPath:L9}=ht();A0.exports=M9;async function M9(e,t=!0){let r;e.schema===wi.SYSTEM_SCHEMA_NAME?r=C9[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await U9(e),s=L9(e.schema,e.table),i=await Oy.openEnvironment(s,e.table);return t===!0&&await v9(e,i,r.hash_attribute),Oy.dropDBI(i,e.attribute),n}a(M9,"lmdbDropAttribute");async function v9(e,t,r){let n=Oy.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let f in c)f!==i&&(u[f]=c[f]);s=t.dbis[r].put(o,u,l)}await s}a(v9,"removeAttributeFromAllObjects");async function U9(e){let t=new N9(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await P9(t)).filter(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(I9.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[wi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new w9(wi.SYSTEM_SCHEMA_NAME,wi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return D9(i)}a(U9,"dropAttributeFromSystem")});var I0=P((NOe,w0)=>{"use strict";var Ny=at(),au=Mt(),OOe=an(),wy=(H(),D(q)),y0=ae(),{getTransactionAuditStorePath:x9}=ht(),B9=su(),FE=tu(),H9=j();w0.exports=k9;async function k9(e){let t=x9(e.schema,e.table),r=await Ny.openEnvironment(t,e.table,!0),n=Ny.listDBIs(r);Ny.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return b0(r,e.search_values);case wy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,G9(r,e.search_values,s);case wy.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return F9(r,e.search_values);default:return b0(r)}}a(k9,"readAuditLog");function b0(e,t=[0,Date.now()]){y0.isEmpty(t[0])&&(t[0]=0),y0.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[au.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 FE,s))}a(b0,"searchTransactionsByTimestamp");function F9(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[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,N0(e,i))}return Object.fromEntries(r)}a(F9,"searchTransactionsByUsername");function G9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],f=B9.equals(e,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:d}of f){let h=Number(d);n.has(h)?n.get(h).push(u.toString()):n.set(h,[u.toString()])}}let s=Array.from(n.keys()),i=N0(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,f=n.get(u);O0(l,"records",r,f,o),O0(l,"original_records",r,f,o)}return Object.fromEntries(o)}a(G9,"searchTransactionsByHashValues");function O0(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),f=u[u.length-1];if(f.timestamp===i)f[t]=[c];else{let d=new FE(e.operation,e.user_name,i,void 0);d[t]=[c],u.push(d)}}else{let u=new FE(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(O0,"loopRecords");function N0(e,t){let r=[];try{let n=e.dbis[au.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 FE,i);r.push(o)}}catch(i){H9.warn(i)}return r}catch(n){throw n}}a(N0,"batchSearchTransactions")});var P0=P((POe,C0)=>{"use strict";var{getSchemaPath:IOe}=ht(),COe=at(),{database:q9}=(De(),D(nt));C0.exports={writeTransaction:$9};async function $9(e,t,r){return q9({database:e,table:t}).transaction(r)}a($9,"writeTransaction")});var v0=P((LOe,M0)=>{"use strict";var{getSchemaPath:D0}=ht(),L0=at();M0.exports={flush:V9,resetReadTxn:K9};async function V9(e,t){return(await L0.openEnvironment(D0(e,t),t.toString())).flushed}a(V9,"flush");async function K9(e,t){try{(await L0.openEnvironment(D0(e,t),t.toString())).resetReadTxn()}catch{}}a(K9,"resetReadTxn")});var H0=P((vOe,B0)=>{"use strict";var{Readable:Y9}=require("stream"),{getDatabases:W9}=(De(),D(nt)),{readSync:z9,openSync:Q9,createReadStream:U0}=require("fs"),{open:j9}=require("lmdb"),x0=Tf(),J9=Af(),{AUDIT_STORE_OPTIONS:X9}=(no(),D(k0)),{INTERNAL_DBIS_NAME:Z9,AUDIT_STORE_NAME:e7}=Mt();B0.exports=r7;var Iy=32768,t7=100;async function r7(e){let t=e.database||e.schema||"data",r=W9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let f=u.dbisDB,d=j9({noSync:!0,maxDbs:J9.MAX_DBS}),h,_=d.openDB(Z9,new x0(!1)),p=f.useReadTransaction(),S=0,g=a(async function(m,A){A.encoding="binary",A.encoder=void 0;let w=d.openDB(m,A),M=f.openDB(m,A);for(let{key:F,version:G,value:K}of M.getRange({start:null,transaction:p,versions:M.useVersions}))h=w.put(F,K,G),S++%t7===0&&(await new Promise(ee=>setTimeout(ee,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:m,value:A}of f.getRange({transaction:p,start:!1}))if(s.some(w=>m.startsWith?.(w+"/"))){_.put(m,A);let[,w]=m.split("/"),M=!w,F=new x0(!M,M);await g(m,F)}e.include_audit&&await g(e7,{...X9}),await h;let T=U0(d.path);return T.headers=l(),T.on("close",()=>{p.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=Q9(o.path);return o.transaction(()=>{let u=Buffer.alloc(Iy);z9(c,u,0,Iy),o.resetReadTxn();let f=o.useReadTransaction();f.renew();let d=U0(null,{fd:c,start:Iy}),h=new Y9.from(async function*(){yield u;for await(let _ of d)f.openTimer&&(f.openTimer=0),yield _;f.done()}());return h.headers=l(),h});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(r7,"getBackup")});var q0=P((xOe,G0)=>{"use strict";var n7=j(),{handleHDBError:s7}=_e(),i7=JD(),o7=fE(),a7=XR(),c7=eU(),l7=Kf(),u7=iy(),d7=NU(),f7=UU(),_7=Qf(),h7=$U(),p7=e0(),E7=i0(),m7=a0(),g7=d0(),S7=g0(),T7=_y(),A7=R0(),R7=I0(),y7=P0(),F0=v0(),b7=H0(),Cy=class extends i7{static{a(this,"LMDBBridge")}async searchByConditions(t){return h7(t)}async getDataByHash(t){return await u7(t)}async searchByHash(t){return await d7(t)}async getDataByValue(t,r){return await f7(t,r)}async searchByValue(t){return await _7(t)}async createSchema(t){return await c7(t)}async dropSchema(t){return await p7(t)}async createTable(t,r){return await E7(t,r)}async dropTable(t){return await T7(t)}async createAttribute(t){return await o7(t)}async createRecords(t){return await a7(t)}async updateRecords(t){return await m7(t)}async upsertRecords(t){try{return await g7(t)}catch(r){throw s7(r,null,null,n7.ERR,r)}}async deleteRecords(t){return await l7(t)}async dropAttribute(t){return await A7(t)}async deleteAuditLogsBefore(t){return await S7(t)}async readAuditLog(t){return await R7(t)}writeTransaction(t,r,n){return y7.writeTransaction(t,r,n)}flush(t,r){return F0.flush(t,r)}resetReadTxn(t,r){return F0.resetReadTxn(t,r)}getBackup(t){return b7(t)}};G0.exports=Cy});var Dy={};Be(Dy,{add:()=>GE,applyReverse:()=>$0,getRecordAtTime:()=>Py,rebuildUpdateBefore:()=>qE});function GE(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function qE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,GE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function $0(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=O7[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=V0}}function Py(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=bt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":$0(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===V0&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=bt(l),f;switch(u.type){case"put":f=u.getValue(r);break;case"patch":f=u.getValue(r);break}for(let d in f)o[d]&&(s[d]=f[d],o[d]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var O7,V0,$E=be(()=>{no();a(GE,"add");GE.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};O7={add:GE};a(qE,"rebuildUpdateBefore");a($0,"applyReverse");V0={};a(Py,"getRecordAtTime")});function mn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function WE(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let c of s){let l=c.name,u,f;if(c.resolve)f={get(){return c.resolve(this,this.getContext?.())},set(d){return c.set(this,d)},configurable:!0};else{switch(c.type){case"String":u=a(function(d){if(!(typeof d=="string"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"ID":u=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(h=>typeof h=="string")||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a string, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Float":case"Number":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="number"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a number, attempt to assign ${h}`);mn(this)[l]=d},"set");break;case"Int":u=a(function(d){let h=d?.__op__?d.value:d;if(!(h>>0===h||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Long":u=a(function(d){let h=d?.__op__?d.value:d;if(!(Math.round(h)===d&&Math.abs(h)<=9007199254740992||d==null&&c.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"BigInt":u=a(function(d){let h=d?.__op__?d.value:d;if(!(typeof h=="bigint"||d==null&&c.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),d?.__op__?d.value=h:d=h;else throw new Kn.ClientError(`${l} must be a number, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Boolean":u=a(function(d){if(!(typeof d=="boolean"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a boolean, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Date":u=a(function(d){if(!(d instanceof Date||d==null&&c.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Kn.ClientError(`${l} must be a Date, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Bytes":u=a(function(d){if(!(d instanceof Uint8Array||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Buffer or Uint8Array, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Blob":u=a(function(d){if(!(d instanceof Ei||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be a Blob, attempt to assign ${d}`);mn(this)[l]=d},"set");break;case"Any":case void 0:u=a(function(d){mn(this)[l]=d},"set");break;default:u=a(function(d){if(!(typeof d=="object"||d==null&&c.nullable!==!1))throw new Kn.ClientError(`${l} must be an object, attempt to assign ${d}`);mn(this)[l]=d},"set")}f={get(){let d=this.getChanges?.();if(d&&l in d){let _=d[l];if(_?.__op__){let p=this.getRecord()?.[l];return _.update(p)}return _}let h=this.getRecord()?.[l];if(h&&typeof h=="object"){let _=Ly(h,c);if(_)return d||this._setChanges(d=Object.create(null)),d[l]=_}return h},set:u,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,n[l]=f,(!(l in r)||Object.getOwnPropertyDescriptor(r,l)?.get?.isAttribute)&&Object.defineProperty(r,l,f)}i("getProperty",function(c){let l=n[c];if(l)return l.get.call(this);let u=this.getChanges();return u?.[c]!==void 0?u[c]:this.getRecord()?.[c]}),i("set",function(c,l){let u=n[c];if(u)return u.set.call(this,l);if(t.sealed)throw new Kn.ClientError("Can not add a property to a sealed table schema");mn(this)[c]=l}),i("deleteProperty",function(c){mn(this)[c]=void 0}),i("toJSON",function(){let c=this.getChanges?.(),l;for(let f in c){l||(l={...this.getRecord()});let d=c[f];if(d?.__op__){let h=l[f];d=d.update(h)}l[f]=d}return Object.keys(this).length>0&&(l||(l={...this.getRecord()}),Object.assign(l,this)),l||this.getRecord()}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty),r.then||i("then",null);function i(c,l){Object.defineProperty(r,c,{value:l,configurable:!0})}a(i,"setMethod");let o=r;do{let c=Object.getPrototypeOf(o);if(c===Object.prototype){Object.setPrototypeOf(o,Y0);break}o=c}while(o&&o!==Y0)}function Ly(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends t_{static{a(this,"TrackedObject")}},WE(r,t)),new r(e)):new t_(e);case Array:let n=new KE(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Ly(o,t?.elements)),n[s]=o}return n;default:return e}}function zE(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=zE(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Dc(e,t=e.getChanges?.()){let r;if(e.getRecord&&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=Dc(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={...e.getRecord?.()});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=Dy[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Dc(s);r[n]=s}if(!Array.isArray(e))for(let n in e)N7.call(e,n)&&(r||(r={...e.getRecord?.()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?.()??e}function VE(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Pc]||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?.getRecord?.()===s){if(VE(i))return!0}else return!0}}else{let r=e.getChanges?.();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.getRecord?.()===i){if(VE(s))return!0}else return!0}else return!0}}return!1}var Kn,K0,Y0,t_,N7,Pc,KE,YE,My=be(()=>{Kn=U(_e());$E();cs();a(mn,"getChanges");a(WE,"assignTrackedAccessors");K0=Object.prototype,Y0=new Proxy({},{get(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(K0[t])return K0[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()[t];if(s&&typeof s=="object"){let i=Ly(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}});a(Ly,"trackObject");t_=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};WE(t_,{});a(zE,"collapseData");N7=Object.prototype.hasOwnProperty;a(Dc,"updateAndFreeze");a(VE,"hasChanges");Pc=Symbol.for("has-array-changes"),KE=class extends Array{static{a(this,"TrackedArray")}#e;[Pc];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Pc]=!0,super.splice(...t)}push(...t){return this[Pc]=!0,super.push(...t)}pop(){return this[Pc]=!0,super.pop()}unshift(...t){return this[Pc]=!0,super.unshift(...t)}shift(){return this[Pc]=!0,super.shift()}};KE.prototype.constructor=Array;YE=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var ex={};Be(ex,{ResourceBridge:()=>xy});function By({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 z0(e,t){let r=Ii(e),n=By(e,r);if(!r)throw new zs.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,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;yt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],f;try{f=await r.get({id:u,lazy:s,select:n},i),f=f&&zE(f)}catch(d){f={message:d.toString()}}return t?{value:{key:u,value:f}}:{value:f}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Ii(e){let t=e.database||e.schema||I7,r=Je()[t];if(!r)throw(0,zs.handleHDBError)(new Error,w7.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Q0(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*j0(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:f}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(f);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[f]}}}s&&(yield s)}var J0,QE,zs,X0,vy,Uy,Z0,w7,I7,C7,P7,W0,xy,tx=be(()=>{"use strict";J0=U(q0()),QE=U(iu()),zs=U(_e());De();X0=U(wf());H();vy=U(fo()),Uy=U(Ys()),Z0=U(ae());rc();My();({HDB_ERROR_MSGS:w7}=zs.hdb_errors),I7="data",C7=1e4,P7=10,xy=class extends J0.default{static{a(this,"ResourceBridge")}constructor(t){super(t),W0=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,QE.default)(t,"conditions");if(r)throw(0,zs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ii(t);if(!n)throw new zs.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:By(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}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 zs.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}]}ot({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Ii(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ii(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:f,version:d}=r.primaryStore.getEntry(o);return i(o,f,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ii(t).dropTable()}createSchema(t){return cu({database:t.schema,table:null}),vy.signalSchemaChange(new Uy.SchemaEventMsg(process.pid,$t.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Hy(t.schema),vy.signalSchemaChange(new Uy.SchemaEventMsg(process.pid,$t.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,W0.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,X0.default)(t),s,i=Je()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),yt(o,async c=>{if(!i.schemaDefined){s=[];for(let f of n)i.attributes.find(h=>h.name==f)||s.push(f);s.length>0&&await i.addAttributes(s.map(f=>({name:f,indexed:!0})))}let l=[],u=[];for(let f of t.records){let d=f[i.primaryKey],h=d!=null&&await i.get(d,o);if(t.requires_existing&&!h||t.requires_no_existing&&h){u.push(f[i.primaryKey]);continue}h&&(h=zE(h));for(let _ in f)if(Object.prototype.hasOwnProperty.call(f,_)){let p=f[_];if(typeof p=="function")try{let S=p([[h]]);Array.isArray(S)&&(p=S[0].func_val,f[_]=p)}catch(S){throw S.message+="Trying to set key "+_+" on object"+JSON.stringify(f),S}}if(h)for(let _ in h)Object.prototype.hasOwnProperty.call(f,_)||(f[_]=h[_]);await(d==null?i.create(f,o):i.put(f,o)),l.push(f[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=Je()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),yt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Q0(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Je()[t.schema][t.table];if(!r.createdTimeProperty)throw new zs.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:fp.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let f=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...f.deleted_hashes),o.push(...f.skipped_hashes),await(0,Z0.async_set_timeout)(P7),l=[],s=!0},"chunkDelete");for await(let f of n)l.push(f[r.primaryKey]),c++,c%C7===0&&await u();return l.length>0&&await u(),s?Q0(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,QE.default)(t,"hashes");if(r)throw r;return z0(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of z0(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&BT[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,QE.default)(t,"value");if(n)throw n;let s=Ii(t);if(!s)throw new zs.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===fp.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,sort:t.sort,select:By(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Ii(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){Ii({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ii(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Ii(t),n={};switch(t.search_type){case _p.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??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 _p.USERNAME:let s=t.search_values;for await(let i of j0(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return j0(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(By,"getSelect");a(z0,"getRecords");a(Ii,"getTable");a(Q0,"createDeleteResponse");a(j0,"groupRecordsInHistory")});var kn=P((QOe,rx)=>{"use strict";var{ResourceBridge:D7}=(tx(),D(ex)),L7=ce();L7.initSync();var jE;function M7(){return jE||(jE=new D7,jE)}a(M7,"getBridge");rx.exports=M7()});var pn=P((JOe,ox)=>{"use strict";var XE=IA(),Lr=ae(),v7=require("util"),ZE=kn(),U7=$s(),nx=j(),{handleHDBError:Lc,hdb_errors:x7}=_e(),{HTTP_STATUS_CODES:Mc}=x7,B7=v7.promisify(U7.getTableSchema),H7="updated",sx="inserted",ix="upserted";ox.exports={insert:F7,update:G7,upsert:q7,validation:k7,flush:$7};async function k7(e){if(Lr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Lr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await B7(e.schema,e.table),r=XE(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&&Lr.isEmptyOrZeroLength(c[n]))throw nx.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(!Lr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw nx.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Lr.isEmpty(c[n])&&c[n]!==""&&s.has(Lr.autoCast(c[n]))&&(c.skip=!0),s.add(Lr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(k7,"validation");async function F7(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=XE(e);if(t)throw Lc(new Error,t.message,Mc.BAD_REQUEST);Lr.transformReq(e);let r=Lr.checkSchemaTableExist(e.schema,e.table);if(r)throw Lc(new Error,r,Mc.BAD_REQUEST);let n=await ZE.createRecords(e);return JE(sx,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(F7,"insertData");async function G7(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=XE(e);if(t)throw Lc(new Error,t.message,Mc.BAD_REQUEST);Lr.transformReq(e);let r=Lr.checkSchemaTableExist(e.schema,e.table);if(r)throw Lc(new Error,r,Mc.BAD_REQUEST);let n=await ZE.updateRecords(e);return Lr.isEmpty(n.existing_rows)?JE(H7,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):JE(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(G7,"updateData");async function q7(e){if(e.operation!=="upsert")throw Lc(new Error,"invalid operation, must be upsert",Mc.INTERNAL_SERVER_ERROR);let t=XE(e);if(t)throw Lc(new Error,t.message,Mc.BAD_REQUEST);Lr.transformReq(e);let r=Lr.checkSchemaTableExist(e.schema,e.table);if(r)throw Lc(new Error,r,Mc.BAD_REQUEST);let n=await ZE.upsertRecords(e);return JE(ix,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(q7,"upsertData");function JE(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===sx?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===ix?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(JE,"returnObject");function $7(e){return Lr.transformReq(e),ZE.flush(e.schema,e.table)}a($7,"flush")});var fx=P((ZOe,dx)=>{var lu=require("validate.js"),cx=pt(),uu=(H(),D(q)),{handleHDBError:V7,hdb_errors:K7}=_e(),{HDB_ERROR_MSGS:Yt,HTTP_STATUS_CODES:Y7}=K7,ky=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),W7={STRUCTURE_USER:"structure_user"},ax=Object.values(uu.ROLE_TYPES_ENUM),z7="attribute_permissions",Q7="attribute_name",{PERMS_CRUD_ENUM:du}=uu,j7=[z7,...Object.values(du)],lx=[du.READ,du.INSERT,du.UPDATE],J7=[Q7,...lx];function X7(e){let t=ky();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ux(e,t)}a(X7,"addRoleValidation");function Z7(e){let t=ky();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ux(e,t)}a(Z7,"alterRoleValidation");function eee(e){let t=ky();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,cx.validateObject(e,t)}a(eee,"dropRoleValidation");var tee=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function ux(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)tee.includes(n[o])||s.push(n[o]);s.length>0&&nr(Yt.INVALID_ROLE_JSON_KEYS(s),r);let i=cx.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nr(o,r)}),e.permission){let o=ree(e);o&&nr(o,r),ax.forEach(c=>{e.permission[c]&&!lu.isBoolean(e.permission[c])&&nr(Yt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(ax.indexOf(o)<0){if(o===W7.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,f=l.length;u<f;u++){let d=l[u];global.hdb_schema[d]||nr(Yt.SCHEMA_NOT_FOUND(d),r)}continue}nr(Yt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nr(Yt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){nr(Yt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(f=>{j7.includes(f)||nr(Yt.INVALID_PERM_KEY(f),r,o,l)}),Object.values(du).forEach(f=>{lu.isDefined(u[f])?lu.isBoolean(u[f])||nr(Yt.TABLE_PERM_NOT_BOOLEAN(f),r,o,l):nr(Yt.TABLE_PERM_MISSING(f),r,o,l)}),u.attribute_permissions===void 0){nr(Yt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){nr(Yt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let f=global.hdb_schema[o][l].attributes.map(({attribute:h})=>h),d={read:!1,insert:!1,update:!1};for(let h in u.attribute_permissions){let _=u.attribute_permissions[h];if(Object.keys(_).forEach(S=>{!J7.includes(S)&&S!==du.DELETE&&nr(Yt.INVALID_ATTR_PERM_KEY(S),r,o,l)}),!lu.isDefined(_.attribute_name)){nr(Yt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let p=_.attribute_name;if(!f.includes(p)){nr(Yt.INVALID_ATTRIBUTE_IN_PERMS(p),r,o,l);continue}lx.forEach(S=>{lu.isDefined(_[S])?lu.isBoolean(_[S])||nr(Yt.ATTR_PERM_NOT_BOOLEAN(S,p),r,o,l):nr(Yt.ATTR_PERM_MISSING(S,p),r,o,l)}),!d.read&&_.read===!0&&(d.read=!0),!d.insert&&_.insert===!0&&(d.insert=!0),!d.update&&_.update===!0&&(d.update=!0)}if(u.read===!1&&d.read===!0||u.insert===!1&&d.insert===!0||u.update===!1&&d.update===!0){let h=`${o}.${l}`;nr(Yt.MISMATCHED_TABLE_ATTR_PERMS(h),r,o,l)}}}}return nee(r)}a(ux,"customValidate");dx.exports={addRoleValidation:X7,alterRoleValidation:Z7,dropRoleValidation:eee};function ree(e){let{operation:t,permission:r}=e;if(t===uu.OPERATIONS_ENUM.ADD_ROLE||t===uu.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 Yt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?uu.ROLE_TYPES_ENUM.SUPER_USER:uu.ROLE_TYPES_ENUM.CLUSTER_USER;return Yt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(ree,"validateNoSUPerms");function nee(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Yt.ROLE_PERMS_ERROR,...e};return V7(new Error,n,Y7.BAD_REQUEST)}else return null}a(nee,"generateRolePermResponse");function nr(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(nr,"addPermError")});var n_=P((rNe,Ex)=>{"use strict";var _x=pn(),hx=Kr(),see=Ac(),Gy=fx(),qy=fo(),tNe=require("uuid").v4,iee=require("util"),em=(H(),D(q)),oee=ae(),$y=hx.searchByValue,aee=hx.searchByHash,cee=iee.promisify(see.delete),lee=Ws(),uee=ou(),{hdb_errors:dee,handleHDBError:vc}=_e(),{HDB_ERROR_MSGS:px,HTTP_STATUS_CODES:r_}=dee,{UserEventMsg:Vy}=Ys();Ex.exports={addRole:fee,alterRole:_ee,dropRole:hee,listRoles:pee};function Fy(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(Fy,"scrubRoleDetails");async function fee(e){let t=Gy.addRoleValidation(e);if(t)throw t;e=Fy(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 $y(r)||[])}catch(i){throw vc(i)}if(n&&n.length>0)throw vc(new Error,px.ROLE_ALREADY_EXISTS(e.role),r_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await _x.insert(s),qy.signalUserChange(new Vy(process.pid)),e=Fy(e),e}a(fee,"addRole");async function _ee(e){let t=Gy.alterRoleValidation(e);if(t)throw t;e=Fy(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await _x.update(r)}catch(s){throw vc(s)}if(n&&n?.message==="updated 0 of 1 records")throw vc(new Error,"Invalid role id",r_.BAD_REQUEST,void 0,void 0,!0);return await qy.signalUserChange(new Vy(process.pid)),e}a(_ee,"alterRole");async function hee(e){let t=Gy.dropRoleValidation(e);if(t)throw vc(new Error,t,r_.BAD_REQUEST,void 0,void 0,!0);let r=new uee(em.SYSTEM_SCHEMA_NAME,em.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await aee(r));if(n.length===0)throw vc(new Error,px.ROLE_NOT_FOUND,r_.NOT_FOUND,void 0,void 0,!0);let s=new lee(em.SYSTEM_SCHEMA_NAME,em.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await $y(s)),o=!1;if(oee.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw vc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,r_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await cee(c),qy.signalUserChange(new Vy(process.pid)),`${n[0].role} successfully deleted`}a(hee,"dropRole");async function pee(){return $y({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(pee,"listRoles")});var Ky={};Be(Ky,{start:()=>Sx,startOnMainThread:()=>gee});function Sx({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,mx.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let o in i.permission){if(Eee.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let f=[];for(let d in u.attributes){let h=u.attributes[d];h.attribute_name=d,f.push(h)}u.attribute_permissions=f,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let f of u.attribute_permissions)f.read=!!f.read,f.insert=!!f.insert,f.update=!!f.update}else u.attribute_permissions=null}}i.role=i.id=s,await mee(i)}}}async function mee(e){let t=Je().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,gx.isEqual)(i,e)?void 0:(e.id=r.id,(0,tm.alterRole)(e))}return(0,tm.addRole)(e)}var tm,mx,gx,Eee,gee,Tx=be(()=>{De();tm=U(n_()),mx=require("yaml"),gx=require("lodash"),Eee=["super_user","cluster_user","structure_user"];a(Sx,"start");a(mee,"ensureRole");gee=Sx});async function rm(e){let t=(0,yx.pathToFileURL)(e).toString();return See?(s_||(s_=Tee(Ree)),(await(await s_).import(t)).namespace):import(t)}async function Tee(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),s_=new Compartment({console,Math,Date,fetch:Aee,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Rx.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:qr,tables:Yn,databases:$e})}};let n=await(0,Ax.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),s_}function Aee(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 Ree(){return{Resource:qr,tables:Yn}}var Ax,Rx,yx,See,s_,Yy=be(()=>{ta();De();Ax=require("fs/promises"),Rx=require("path"),yx=require("url"),See=!1;a(rm,"secureImport");a(Tee,"getCompartment");a(Aee,"secureOnlyFetch");a(Ree,"getGlobalVars")});var zy={};Be(zy,{handleFile:()=>yee});async function yee(e,t,r,n){let s=new Map,i=await rm(r);c(i.default)&&n.set((0,Wy.dirname)(t),i.default),o(i,(0,Wy.dirname)(t));function o(l,u){for(let f in l){let d=l[f];c(d)?n.set(u+"/"+f,d):typeof d=="object"&&o(d,u+"/"+f)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var Wy,bx=be(()=>{Yy();Wy=require("path");a(yee,"handleFile")});var jy={};Be(jy,{start:()=>bee});function bee({resources:e}){e.set("login",Qy),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Qy,Ox=be(()=>{ta();a(bee,"start");Qy=class extends qr{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 u_={};Be(u_,{addAnalyticsListener:()=>l_,calculateCPUUtilization:()=>Vx,diffResourceUsage:()=>Kx,recordAction:()=>sr,recordActionBinary:()=>Wn,setAnalyticsEnabled:()=>Oee});function Oee(e){kx=e}function Nee(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function wee(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},sm.set(e,o)}function sr(e,t,r,n,s){if(!kx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=sm.get(i);o?Nee(e,o):wee(i,e,t,r,n,s),nm||Iee()}function Wn(e,t,r,n,s){sr(!!e,t,r,n,s)}function l_(e){qx.push(e)}function Iee(){nm=performance.now(),setTimeout(async()=>{let e=performance.now()-nm;nm=0;let t=[],r={time:Date.now(),period:e,threadId:Uc.threadId,metrics:t};for(let[s,i]of sm){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],f;for(let d of $x){let h=Math.floor(c*d),_=o[h-1];if(h>l){let p=h-l;if(_===f){let S=u[u.length-1];typeof S=="number"?u[u.length-1]={value:S,count:1+p}:S.count+=p}else u.push(p>1?{value:_,count:p}:_),f=_;l=h}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,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 Yx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Uc.threadId,byThread:!0,...n});for(let s of qx)s(t);sm=new Map,Uc.parentPort?Uc.parentPort.postMessage({type:Gx,report:r}):Qx({report:r})},Fx).unref()}function im(e,t,r){let n={id:(0,a_.getNextMonotonicTime)(),metric:t,...r};e.primaryStore.put(n.id,n,{append:!0}).then(s=>{s||e.primaryStore.put(n.id,n)})}function Vx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Math.round(r/t*100)/100}function Kx(e,t){return{userCPUTime:t.userCPUTime/1e3-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime/1e3-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function Cee(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={database:t,table:s,size:c};im(e,"table-size",l),xc.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),n+=c}return n}function Nx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getAuditSize(),o=Hx.default.statSync(s.primaryStore.env.path).size,c=Cee(e,r,n),l=o-c,u={database:r,size:o,used:c,free:l,audit:i};im(e,"database-size",u),xc.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){xc.warn?.("Error getting DB size metrics",s)}}function wx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s.getStorageStats(),o={database:r,...i};im(e,"storage-volume",o),xc.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){xc.warn?.("Error getting DB volumne metrics",s)}}async function Pee(e,t=6e4){let r=Xy(),n=Wx(),s=new Promise(m=>{let A=performance.now();setImmediate(()=>{let w=performance.now();w-A>5e3&&xc.warn?.("Unusually high event queue latency on the main thread of "+Math.round(w-A)+"ms"),A=performance.now()}),n.primaryStore.prefetch([1],()=>{let w=performance.now();w-A>5e3&&xc.warn?.("Unusually high task queue latency on the main thread of "+Math.round(w-A)+"ms"),m(w-A)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],f;for(let{key:m,value:A}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!A)continue;if(o){if(m>o+t)break}else o=m;f=m;let{metrics:w,threadId:M}=A;for(let F of w||[]){let{path:G,method:K,type:ee,metric:ie,count:X,total:re,distribution:z,threads:he,...Te}=F;X||(X=1);let Ie=ie+(G?"-"+G:"");K!==void 0&&(Ie+="-"+K),ee!==void 0&&(Ie+="-"+ee);let pe=c.get(Ie);if(pe){if(pe.threads){let Gt=pe.threads[M];if(Gt)pe=Gt;else{pe.threads[M]={...Te};continue}}pe.count||(pe.count=1);let Ft=pe.count;for(let Gt in Te){let Jt=Te[Gt];typeof Jt=="number"&&(pe[Gt]=(pe[Gt]*Ft+Jt*X)/(Ft+X))}pe.count+=X,re>=0&&(pe.total+=re,pe.ratio=pe.total/pe.count)}else pe={period:t,...F},delete pe.distribution,c.set(Ie,pe),pe.byThread&&(pe.threads=[],pe.threads[M]={...Te},u.push(pe));if(z){z=z.map(Gt=>typeof Gt=="number"?{value:Gt,count:1}:Gt);let Ft=l.get(Ie);Ft?Ft.push(...z):l.set(Ie,z)}}await Yx()}for(let m of u){let{path:A,method:w,type:M,metric:F,count:G,total:K,distribution:ee,threads:ie,...X}=m;ie=ie.filter(re=>re);for(let re in X){if(typeof m[re]!="number")continue;let z=0;for(let he of ie){let Te=he[re];typeof Te=="number"&&(z+=Te)}m[re]=z}m.count=ie.length,delete m.threads,delete m.byThread}for(let[m,A]of l){let w=c.get(m);A.sort((Gt,Jt)=>Gt.value>Jt.value?1:-1);let M=w.count-1,F=[],G=0,K=0,ee;for(let Gt of $x){let Jt=M*Gt;for(;G<Jt;)ee=A[K++],G+=ee.count,K===1&&G--;let fr=A[K>1?K-2:0];ee||(ee=A[0]),F.push(ee.value-(ee.value-fr.value)*(G-Jt)/ee.count)}let[ie,X,re,z,he,Te,Ie,pe,Ft]=F;Object.assign(w,{p1:ie,p10:X,p25:re,median:z,p75:he,p90:Te,p95:Ie,p99:pe,p999:Ft})}let d;for(let[m,A]of c)A.id=(0,a_.getNextMonotonicTime)(),A.time=f,n.primaryStore.put(A.id,A,{append:!0}).then(w=>{w||n.primaryStore.put(A.id,A)}),d=!0;let h=Date.now(),{idle:_,active:p}=performance.eventLoopUtilization();if(d||p*10>_){let m=(0,a_.getNextMonotonicTime)(),A={id:m,metric:"main-thread-utilization",idle:_-Ix,active:p-Cx,taskQueueLatency:await s,time:h,...process.memoryUsage()};n.primaryStore.put(m,A,{append:!0}).then(w=>{w||n.primaryStore.put(m,A)})}Ix=_,Cx=p;let S=process.resourceUsage(),g=Kx(i_,S);g.time=h,g.period=i_.time?h-i_.time:t,g.cpuUtilization=Vx(i_,g.period),im(n,"resource-usage",g),i_=g;let T=Je();Nx(n,T),Nx(n,{system:T.system}),wx(n,T),wx(n,{system:T.system})}async function Px(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Xy(){return Dx||(Dx=ot({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Wx(){return Lx||(Lx=ot({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Mee(){zx=!0;let e=(0,c_.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Pee(Fx,e),await Px(Xy(),Dee),await Px(Wx(),Lee)},Math.min(e/2,2147483647)).unref()}function Qx(e,t){let r=e.report;r.threadId=t?.threadId||Uc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Mx+=n.mean*n.count);r.totalBytesProcessed=Mx,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vx.get(t))}),vx.set(t,t.performance.eventLoopUtilization())),r.id=(0,a_.getNextMonotonicTime)(),Xy().primaryStore.put(r.id,r),zx||Mee(),vee&&(jx=xee(r))}async function xee(e){if(await jx,!fa){let r=(0,o_.dirname)((0,xx.getLogFilePath)());try{fa=await(0,Jy.open)((0,o_.join)(r,"analytics.log"),"r+")}catch{fa=await(0,Jy.open)((0,o_.join)(r,"analytics.log"),"w+")}}let t=(await fa.stat()).size;if(t>Uee){let r=Buffer.alloc(t);await fa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fa.write(r,{position:0}),await fa.truncate(r.length),t=r.length}await fa.write(JSON.stringify(e)+`
20
+ `,t)}var Uc,Ux,xx,Bx,o_,Jy,a_,c_,Hx,xc,sm,kx,nm,Fx,Gx,qx,$x,Ix,Cx,i_,Yx,Dee,Lee,Dx,Lx,zx,Mx,vx,vee,jx,fa,Uee,Ci=be(()=>{Uc=require("worker_threads"),Ux=U(rt());De();xx=U(j()),Bx=U(Qi()),o_=require("path"),Jy=require("fs/promises"),a_=U(an()),c_=U(ce());H();$r();Hx=U(require("node:fs")),xc=(0,Bx.loggerWithTag)("analytics");(0,c_.initSync)();sm=new Map,kx=(0,c_.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;a(Oee,"setAnalyticsEnabled");a(Nee,"recordExistingAction");a(wee,"recordNewAction");a(sr,"recordAction");je.recordAnalytics=sr;a(Wn,"recordActionBinary");nm=0,Fx=1e3,Gx="analytics-report",qx=[];a(l_,"addAnalyticsListener");$x=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Iee,"sendAnalytics");a(im,"storeMetric");a(Vx,"calculateCPUUtilization");a(Kx,"diffResourceUsage");a(Cee,"storeTableSizeMetrics");a(Nx,"storeDBSizeMetrics");a(wx,"storeVolumeMetrics");a(Pee,"aggregation");Ix=0,Cx=0,i_={},Yx=a(()=>new Promise(setImmediate),"rest");a(Px,"cleanup");Dee=36e5,Lee=31536e6;a(Xy,"getRawAnalyticsTable");a(Wx,"getAnalyticsTable");(0,Ux.setChildListenerByType)(Gx,Qx);a(Mee,"startScheduledTasks");Mx=0,vx=new Map,vee=!1;a(Qx,"recordAnalytics");Uee=1e6;a(xee,"logAnalytics")});var Jx={};Be(Jx,{Headers:()=>po,appendHeader:()=>om,mergeHeaders:()=>Zy});function om(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function Zy(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new po(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var po,d_=be(()=>{po=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(om,"appendHeader");a(Zy,"mergeHeaders")});function rB(e){let t={openapi:Bee,info:{title:"HarperDB HTTP REST interface",version:tB.packageJson.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||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},f=[];if(o)for(let{type:A,name:w,elements:M,relationship:F,definition:G}of o){if(F)A==="array"?u[w]={type:"array",items:{$ref:_a+M.type}}:u[w]={$ref:_a+A};else{let K=G??M?.definition;if(K){if(!t.components.schemas[K.type]){let ee={};K.properties.forEach(ie=>{ee[ie.name]=new nb(eb[ie.type],ie.type)}),t.components.schemas[K.type]=new eB(ee)}A==="array"?u[w]={type:"array",items:{$ref:_a+K.type}}:u[w]={$ref:_a+K.type}}else A==="array"?M.type==="Any"||M.type=="ID"?u[w]={type:"array",items:{format:M.type}}:u[w]={type:"array",items:new nb(eb[M.type],M.type)}:A==="Any"||A=="ID"?u[w]={format:A}:u[w]=new nb(eb[A],A)}f.push(new sb(w,"query",u[w]))}let d=Object.keys(u),h=new sb(c,"path",{format:"ID"});h.required=!0,h.description="primary key of record";let _=new sb("property","path",{enum:d});_.required=!0,t.components.schemas[i]=new eB(u);let p=l.post!==Resource.prototype.post||l.update,S=typeof l.put=="function",g=typeof l.get=="function",T=typeof l.delete=="function",m="/"+s+"/";p&&(t.paths[m]={},t.paths[m].post=new Hee(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[m]||(t.paths[m]={}),t.paths[m].get=new tb(f,r,{200:new rb({$ref:_a+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[m]||(t.paths[m]={}),t.paths[m].delete=new Zx(f,r,"delete all the records that match the provided query",{204:new Xx})),m="/"+s+"/{"+c+"}",g&&(t.paths[m]={},t.paths[m].get=new tb([h],r,{200:new rb({$ref:_a+i})},"retrieve a record by its primary key")),S&&(t.paths[m]||(t.paths[m]={}),t.paths[m].put=new kee([h],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[m]||(t.paths[m]={}),t.paths[m].delete=new Zx([h],r,"delete a record with the given primary key",{204:new Xx})),g&&_.schema.enum.length>0&&(m="/"+s+"/{"+c+"}.{property}",t.paths[m]={},t.paths[m].get=new tb([h,_],r,{200:new rb({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function Hee(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:_a+e}}}},this.security=t,this.responses={200:{description:ib,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function tb(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function rb(e){this.description=ib,this.content={"application/json":{schema:e}}}function Xx(){this.description="successfully processed request, no content returned to client"}function kee(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:_a+r}}}},this.responses={200:{description:ib}}}function Zx(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function eB(e){this.type="object",this.properties=e}function nb(e,t){this.type=e,this.format=t}function sb(e,t,r){this.name=e,this.in=t,this.schema=r}var tB,Bee,eb,_a,ib,nB=be(()=>{tB=U(_t()),Bee="3.0.3",eb={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},_a="#/components/schemas/",ib="successful operation";a(rB,"generateJsonApi");a(Hee,"Post");a(tb,"Get");a(rb,"Response200");a(Xx,"Response204");a(kee,"Put");a(Zx,"Delete");a(eB,"ResourceSchema");a(nb,"Type");a(sb,"Parameter")});var cm={};Be(cm,{parseHeaderValue:()=>ab,start:()=>qee});async function Gee(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&Pp(e);let i=new po;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==sB){let g=am.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new nc(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let T=ab(g);for(let m of T)switch(m.name){case"max-age":e.expiresAt=m.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=ab(u).map(T=>(T.next?.name==="confirm"&&T.next.value>=0&&(e.replicatedConfirmation=+T.next.value),T.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let d=await yt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=ro(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new fu.ClientError(g,400)}if(e.authorize=!0,o===sB&&s==="GET"){if(e?.user?.role?.permission?.super_user)return rB(am);throw new fu.ServerError("Forbidden",403)}switch(s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new fu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new fu.ServerError(`Method ${s} is not recognized`,501)}}),h=200,_;if(d==null)h=s==="GET"||s==="HEAD"?404:204,ob.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d.status>0&&d.headers){let g=Zy(d.headers,i);return d.headers!==g&&(d.headers=g),d.data!==void 0&&(d.body=_f(d.data,e,d)),d}else if(_=e.lastModified){Fee[0]=_;let g=String.fromCharCode(34,(Mr[0]&63)+62,(Mr[0]>>6)+(Mr[1]<<2&63)+62,(Mr[1]>>4)+(Mr[2]<<4&63)+62,(Mr[2]>>2)+62,(Mr[3]&63)+62,(Mr[3]>>6)+(Mr[4]<<2&63)+62,(Mr[4]>>4)+(Mr[5]<<4&63)+62,(Mr[5]>>2)+62,(Mr[6]&63)+62,(Mr[6]>>6)+(Mr[7]<<2&63)+62,34),T=r["if-none-match"];T&&g==T?(d?.onDone&&d.onDone(),h=304,d=void 0):i.setIfNone("ETag",g),ob.lastModified&&i.setIfNone("Last-Modified",new Date(_).toUTCString())}e.createdResource&&(h=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:h,headers:i,body:void 0},S=d?.wasLoadedFromSource?.();return S!==void 0&&(p.wasCacheMiss=S,!S&&_&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||_))/1e3))),d!==void 0&&(p.body=_f(d,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(o){o.statusCode?o.statusCode===500?Pi.warn(o):Pi.info(o):Pi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=_f(o.contentType?o:o.toString(),e,c),c}}function qee(e){ob=e,!iB&&(iB=!0,am=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Gee(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{f_++;let s=new Mn;oB||(oB=!0,l_(l=>{f_>0&&l.push({metric:"ws-connections",connections:f_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Pi.warn(l)});let o;t.on("message",a(function(u){o||(o=ro(r.requestedContentType??r.headers.asObject["content-type"],!1));let f=o(u);sr(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(f)},"message"));let c;t.on("close",()=>{f_--,Wn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=am.getMatch(l,"ws");if(Wn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,sr(p=>({count:p.count,total:f_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let f=new nc(u.relativeURL),d=u.Resource;c=(await yt(r,()=>d.connect(f,s,r)))[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;){let p=await sa(_.value,r);t.send(p),sr(p.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Pi.warn(l):Pi.info(l):Pi.error(l),t.close($ee[l.statusCode]||1011,l.toString())}t.close()},e))}function ab(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var Pi,fu,Mr,Fee,ob,sB,iB,am,oB,f_,$ee,aB=be(()=>{eo();Ci();Pi=U(j()),fu=U(_e());sf();Ul();rc();d_();nB();sf();Mr=new Uint8Array(8),Fee=new Float64Array(Mr.buffer,0,1),ob={},sB="openapi";a(Gee,"http");f_=0;a(qee,"start");$ee={401:3e3,403:3003};a(ab,"parseHeaderValue")});var cb=P((DNe,lB)=>{var{recordAction:lm,recordActionBinary:cB}=(Ci(),D(u_)),Vee=require("fastify-plugin"),Kee=200;lB.exports=Vee(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,f,d;l.config?.isOperation?(u=n.body?.operation,f="operation"):(u=l.url,f="fastify-route",d=l.method),lm(o,"duration",u,d,f),cB(s.raw.statusCode<400,"success",u,d,f),cB(1,"response_"+s.raw.statusCode,u,d,f);let h=Kee;i?.pipe?(i.on("data",g=>{h+=g.length}),i.on("end",()=>{lm(performance.now()-c,"transfer",u,d,f),lm(h,"bytes-sent",u,d,f)})):(h+=i?.length||0,lm(h,"bytes-sent",u,d,f));let _=o.toFixed(3),p=s.getHeader("Server-Timing"),S=`db;dur=${_}`;s.header("Server-Timing",p?`${p}, ${S}`:S)}),r()},{name:"hdb-request-time"})});var dB=P((LNe,uB)=>{var Yee=pt(),Wee={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};uB.exports=function(e){return Yee.validateObject(e,Wee)}});var um=P((MNe,fB)=>{"use strict";var zee=(H(),D(q)).OPERATIONS_ENUM,lb=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=zee.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};fB.exports=lb});var hB=P((UNe,_B)=>{"use strict";var Qee={OPERATION:"operation",REFRESH:"refresh"},ub=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},db=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};_B.exports={JWTTokens:ub,TOKEN_TYPE_ENUM:Qee,JWTRSAKeys:db}});var _u=P((BNe,mB)=>{"use strict";var h_=require("jsonwebtoken"),fb=require("fs-extra"),_b=ae(),fs=(H(),D(q)),{handleHDBError:gn,hdb_errors:jee}=_e(),{HTTP_STATUS_CODES:Sn,AUTHENTICATION_ERROR_MSGS:Tn}=jee,__=j(),dm=(yE(),D(RE)),Eb=qn(),Jee=pn().update,Xee=um(),Zee=fo(),{UserEventMsg:ete}=Ys(),ha=ce();ha.initSync();var hb=require("path"),{JWTTokens:tte,JWTRSAKeys:rte,TOKEN_TYPE_ENUM:fm}=hB(),nte=ha.get(fs.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ha.get(fs.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",ste=ha.get(fs.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ha.get(fs.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",_m="RS256",pb;mB.exports={createTokens:ite,validateOperationToken:ate,refreshOperationToken:ote,validateRefreshToken:EB,getJWTRSAKeys:p_};async function ite(e){if(_b.isEmpty(e)||typeof e!="object")throw gn(new Error,Tn.INVALID_AUTH_OBJECT,Sn.BAD_REQUEST,void 0,void 0,!0);if(_b.isEmpty(e.username))throw gn(new Error,Tn.USERNAME_REQUIRED,Sn.BAD_REQUEST,void 0,void 0,!0);if(_b.isEmpty(e.password))throw gn(new Error,Tn.PASSWORD_REQUIRED,Sn.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Eb.findAndValidateUser(e.username,e.password),!t)throw gn(new Error,Tn.INVALID_CREDENTIALS,Sn.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw __.error(h),gn(new Error,Tn.INVALID_CREDENTIALS,Sn.UNAUTHORIZED,void 0,void 0,!0)}let r=await p_(),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 pB(i,r.private_key,r.passphrase),c=await h_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:ste,algorithm:_m,subject:fm.REFRESH}),l=dm.hash(c,dm.HASH_FUNCTION.SHA256),u=new Xee(fs.SYSTEM_SCHEMA_NAME,fs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),f,d;try{f=await Jee(u)}catch(h){__.error(h),d=h}if(d!==void 0||f.skipped_hashes.length>0)throw gn(new Error,Tn.REFRESH_TOKEN_SAVE_FAILED,Sn.INTERNAL_SERVER_ERROR);return Zee.signalUserChange(new ete(process.pid)),new tte(o,c)}a(ite,"createTokens");async function pB(e,t,r){return await h_.sign(e,{key:t,passphrase:r},{expiresIn:nte,algorithm:_m,subject:fm.OPERATION})}a(pB,"signOperationToken");async function p_(){if(pb===void 0)try{let e=hb.join(ha.getHdbBasePath(),fs.LICENSE_KEY_DIR_NAME,fs.JWT_ENUM.JWT_PASSPHRASE_NAME),t=hb.join(ha.getHdbBasePath(),fs.LICENSE_KEY_DIR_NAME,fs.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=hb.join(ha.getHdbBasePath(),fs.LICENSE_KEY_DIR_NAME,fs.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await fb.readFile(e)).toString(),s=(await fb.readFile(t)).toString(),i=(await fb.readFile(r)).toString();pb=new rte(i,s,n)}catch(e){throw __.error(e),gn(new Error,Tn.NO_ENCRYPTION_KEYS,Sn.INTERNAL_SERVER_ERROR)}return pb}a(p_,"getJWTRSAKeys");async function ote(e){if(!e)throw gn(new Error,Tn.INVALID_BODY,Sn.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw gn(new Error,Tn.REFRESH_TOKEN_REQUIRED,Sn.BAD_REQUEST,void 0,void 0,!0);await EB(e.refresh_token);let t=await p_(),r=await h_.decode(e.refresh_token);return{operation_token:await pB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(ote,"refreshOperationToken");async function ate(e){try{let t=await p_(),r=await h_.verify(e,t.public_key,{algorithms:_m,subject:fm.OPERATION});return await Eb.findAndValidateUser(r.username,void 0,!1)}catch(t){throw __.warn(t),t.name&&t.name==="TokenExpiredError"?gn(new Error,Tn.TOKEN_EXPIRED,Sn.FORBIDDEN):gn(new Error,Tn.INVALID_TOKEN,Sn.UNAUTHORIZED)}}a(ate,"validateOperationToken");async function EB(e){let t;try{let r=await p_(),n=await h_.verify(e,r.public_key,{algorithms:_m,subject:fm.REFRESH});t=await Eb.findAndValidateUser(n.username,void 0,!1)}catch(r){throw __.warn(r),r.name&&r.name==="TokenExpiredError"?gn(new Error,Tn.TOKEN_EXPIRED,Sn.FORBIDDEN):gn(new Error,Tn.INVALID_TOKEN,Sn.UNAUTHORIZED)}if(!dm.validate(t.refresh_token,e,dm.HASH_FUNCTION.SHA256))throw gn(new Error,Tn.INVALID_TOKEN,Sn.UNAUTHORIZED);return t}a(EB,"validateRefreshToken")});var mb=P((FNe,TB)=>{"use strict";var cte=dB(),hu=require("passport"),lte=require("passport-local").Strategy,ute=require("passport-http").BasicStrategy,dte=require("util"),fte=qn(),SB=dte.callbackify(fte.findAndValidateUser),kNe=Ln(),_te=(H(),D(q)),gB=_u();hu.use(new lte(function(e,t,r){SB(e,t,r)}));hu.use(new ute(function(e,t,r){SB(e,t,r)}));hu.serializeUser(function(e,t){t(null,e)});hu.deserializeUser(function(e,t){t(null,e)});function hte(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":hu.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===_te.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?gB.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):gB.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:hu.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(hte,"authorize");function pte(e,t){let r=cte(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(pte,"checkPermissions");TB.exports={authorize:hte,checkPermissions:pte}});var hm=P((qNe,AB)=>{"use strict";var Ete=kn();AB.exports={writeTransaction:mte};function mte(e,t,r){return Ete.writeTransaction(e,t,r)}a(mte,"writeTransaction")});var OB=P((KNe,bB)=>{"use strict";var gte=Kr(),Ste=$s(),RB=j(),Tte=pn(),VNe=hm(),Ate=require("clone"),Sb=require("alasql"),Rte=hE(),yB=require("util"),yte=yB.promisify(Ste.getTableSchema),bte=yB.promisify(gte.search),Ote=(H(),D(q)),gb=ae();Rte(Sb);bB.exports={update:wte};var Nte="There was a problem performing this update. Please check the logs and try again.";async function wte({statement:e,hdb_user:t}){let r=await yte(e.table.databaseid,e.table.tableid),n=Ite(e.columns);gb.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Ate(s),c=gb.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=Sb.parse(l).statements[0],f=await bte(u),d=Cte(n,f);return Pte(o,d,t)}a(wte,"update");function Ite(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Sb.compile(`SELECT ${r.expression.toString()} AS [${Ote.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RB.error(t),new Error(Nte)}}a(Ite,"createUpdateRecord");function Cte(e,t){return gb.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Cte,"buildUpdateRecords");async function Pte(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Tte.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RB.error(`Error delete new_attributes from update response: ${i}`)}return s}a(Pte,"updateRecords")});var wB=P((QNe,NB)=>{var Dte=require("alasql"),Lte=Kr(),Mte=j(),vte=kn(),Ab=require("util"),Tb=ae(),Ute=(H(),D(q)),xte=$s(),WNe=hm(),zNe=pn(),Bte="record",Hte="successfully deleted",kte=Ab.callbackify($te),Fte=Ab.promisify(Lte.search),Gte=Ab.promisify(xte.getTableSchema);NB.exports={convertDelete:kte};function qte(e){return`${e.deleted_hashes.length} ${Bte}${e.deleted_hashes.length===1?"":"s"} ${Hte}`}a(qte,"generateReturnMessage");async function $te({statement:e,hdb_user:t}){let r=await Gte(e.table.databaseid,e.table.tableid);Tb.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Tb.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Dte.parse(o).statements[0],l={operation:Ute.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Fte(c);let u=await vte.deleteRecords(l);return Tb.isEmptyOrZeroLength(u.message)&&(u.message=qte(u)),delete u.txn_time,u}catch(u){throw Mte.error(u),u.hdb_code?u.message:u}}a($te,"convertDelete")});var LB=P((JNe,DB)=>{"use strict";var Vte=lo(),{hdb_errors:IB}=_e(),{getDatabases:CB}=(De(),D(nt));DB.exports={checkSchemaExists:PB,checkSchemaTableExists:Kte,schema_describe:Vte};async function PB(e){if(!CB()[e])return IB.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(PB,"checkSchemaExists");async function Kte(e,t){let r=await PB(e);if(r)return r;if(!CB()[e][t])return IB.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kte,"checkSchemaTableExists")});function Rb(e){let t=e.get(pm),r=t?(0,pu.unpack)(t):null;r||(r={remoteNameToId:{}});let n=Xe(),s=!1;r.nodeName=Xe();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:m_(e)??1,nodes:[]})})}i[n]=0,e.putSync(pm,(0,pu.pack)(r))}return r}function E_(e){return Rb(e).remoteNameToId}function vB(e,t){let r=Rb(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let f in n){let d=n[f];d>u&&(u=d)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(pm,(0,pu.pack)(r)),s}function Em(e,t){let r=Rb(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(pm,(0,pu.pack)(r))}return MB.trace?.("The remote node name map",e,n,s),s}var MB,pu,pm,yb=be(()=>{MB=U(Qi());_s();pu=require("msgpackr"),pm=Symbol.for("remote-ids");a(Rb,"getIdMappingRecord");a(E_,"exportIdMapping");a(vB,"remoteToLocalNodeId");a(Em,"getIdOfRemoteNode")});var bb={};Be(bb,{commits_awaiting_replication:()=>mu,getHDBNodeTable:()=>mr,getReplicationSharedStatus:()=>mm,iterateRoutes:()=>S_,shouldReplicateToNode:()=>g_,subscribeToNodeUpdates:()=>gu});function mr(){return UB||(UB=ot({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function mm(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(32),n&&{callback:n}))}function gu(e){mr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;kB.debug?.("adding node",n,"on node",Xe()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==Xe()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function g_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&mr().primaryStore.get(Xe())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Yte(){gu(e=>{pa({},(t,r)=>{let n=e.name,s=xB.get(n);if(s||xB.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=mm(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:f}of mu.get(r)||[])u>l&&u<=c&&f();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*S_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Eu.default.get(B.REPLICATION_SECUREPORT)??(!Eu.default.get(B.REPLICATION_PORT)&&Eu.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Eu.default.get(B.REPLICATION_PORT)||Eu.default.get(B.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){BB.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var BB,HB,Eu,kB,UB,xB,mu,Bc=be(()=>{De();_s();wp();BB=require("worker_threads"),HB=U(_e()),Eu=U(ce());H();kB=U(Qi());server.nodes=[];a(mr,"getHDBNodeTable");a(mm,"getReplicationSharedStatus");a(gu,"subscribeToNodeUpdates");a(g_,"shouldReplicateToNode");xB=new Map;VP((e,t,r)=>{if(r>server.nodes.length)throw new HB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);mu||(mu=new Map,Yte());let n=mu.get(e);return n||(n=[],mu.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Yte,"startSubscriptionToReplications");a(S_,"iterateRoutes")});var $B={};Be($B,{connectedToNode:()=>Hc,disconnectedFromNode:()=>Au,ensureNode:()=>mo,requestClusterStatus:()=>qB,startOnMainThread:()=>Nb});async function Nb(e){let t=0,r=Je();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){gm.set(i,m_(l.auditStore));break}}}Di.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of S_(e))try{let c=!o.subscriptions;if(c){let u=Xe();mr().primaryStore.get(u)===void 0&&await mo(u,{name:u,url:e.url??Ea(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}gu(s)});let n;function s(i,o=i?.name){let c=Xe()&&o===Xe()||Ea()&&i?.url===Ea();if(c){let d=!!i?.replicates;if(n!==void 0&&n!==d)for(let h of mr().search([]))h.replicates&&h.name!==o&&s(h,h.name);n=d}if(st.trace("Setting up node replication for",i),!i){for(let[d,h]of Eo){let _;for(let[p,{worker:S,nodes:g}]of h){let T=g[0];if(T&&T.name==o){_=!0;for(let[m,{worker:A}]of h)h.delete(m),st.warn("Node was deleted, unsubscribing from node",o,m,d),A?.postMessage({type:"unsubscribe-from-node",node:o,database:m,url:d});break}}if(_){Eo.get(d).iterator.remove(),Eo.delete(d);return}}return}if(c)return;if(!i.url){st.info(`Node ${i.name} is missing url`);return}let l=Eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(st.info(`Added node ${i.name} at ${i.url} for process ${Xe()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[d,h]of Su)if(i.url===h.url){Su.delete(d);break}Su.set(i.name,i)}let u=Je();if(l||(l=new Map,Eo.set(i.url,l)),l.iterator=pa(e,(d,h,_)=>{_?f(h,!0):f(h,!1)}),i.subscriptions)for(let d of i.subscriptions){let h=d.database||d.schema;u[h]||(st.warn(`Database ${h} not found for node ${i.name}, making a subscription anyway`),f(h,!1))}function f(d,h){st.trace("Setting up replication for database",d,"on node",i.name);let _=l.get(d),p,S=[{replicateByDefault:h,...i}];gm.has(d)&&(S.push({replicateByDefault:h,name:Xe(),start_time:gm.get(d),end_time:Date.now(),replicates:!0}),gm.delete(d));let g=g_(i,d),T=Di.workers.filter(m=>m.name==="http");if(_?(p=_.worker,_.nodes=S):g&&(t=t%T.length,p=T[t++],l.set(d,{worker:p,nodes:S,url:i.url}),p?.on("exit",()=>{l.get(d)?.worker===p&&(l.delete(d),f(d,h))})),g)setTimeout(()=>{let m={type:"subscribe-to-node",database:d,nodes:S};p?p.postMessage(m):Tu(m)},Wte);else{st.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[d],mr().primaryStore.get(Xe())?.replicates),mr().primaryStore.get(Xe())?.replicates||(n=!1);let m={type:"unsubscribe-from-node",database:d,url:i.url,name:i.name};p?p.postMessage(m):Tm(m)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),Au=a(function(i){try{st.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(Su.keys()),c=o.sort(),l=c.indexOf(i.name||Qs(i.url));if(l===-1){st.warn("Disconnected node not found in node map",i.name,o);return}let u=Eo.get(i.url),f=u?.get(i.database);if(!f){st.warn("Disconnected node not found in replication map",i.database,u);return}if(f.connected=!1,i.finished)return;let d=f.nodes[0];if(!(d.replicates===!0||d.replicates?.sends||d.subscriptions?.length))return;let h=(l+1)%c.length;for(;l!==h;){let _=c[h],p=Su.get(_);u=Eo.get(p.url);let S=u?.get(i.database);if(!S){h=(h+1)%c.length;continue}let{worker:g,nodes:T}=S,m=!1;for(let A of f.nodes){if(T.some(w=>w.name===A.name)){st.info(`Disconnected node is already failing over to ${_} for ${i.database}`);continue}T.push(A),m=!0}if(!m){st.info(`Disconnected node ${i.name} has no nodes to fail over to ${_}`);return}f.redirectingTo=S,st.info(`Failing over ${i.database} from ${i.name} to ${_}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:T}):Tu({database:i.database,nodes:T});return}st.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){st.error("Error failing over node",o)}},"disconnectedFromNode"),Hc=a(function(i){let o=Eo.get(i.url),c=o?.get(i.database);if(!c){st.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,f=u.find(d=>d.name===i.name);c.redirectingTo=null,f&&(u.splice(u.indexOf(f),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):Tu({database:i.database,nodes:u}))}},"connectedToNode"),(0,Di.onMessageByType)("disconnected-from-node",Au),(0,Di.onMessageByType)("connected-to-node",Hc),(0,Di.onMessageByType)("request-cluster-status",qB)}function qB(e,t){let r=[];for(let[n,s]of Su)try{let i=Eo.get(s.url);st.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:f,nodes:d,latency:h}]of i)o.push({database:l,connected:f,latency:h,thread_id:u?.threadId,nodes:d.map(_=>_.name)});let c=(0,Ob.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){st.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function mo(e,t){let r=mr();e=e??Qs(t.url),t.name=e;try{if(t.ca){let s=new GB.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){st.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(st.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!FB.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Ob.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}st.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Di,Sm,st,Ob,FB,GB,Wte,Eo,Au,Hc,Su,gm,T_=be(()=>{De();Di=U(rt());_s();Sm=require("worker_threads");Bc();st=U(j()),Ob=require("lodash"),FB=U(ce());H();GB=require("crypto"),Wte=200,Eo=new Map,Su=new Map,gm=new Map;a(Nb,"startOnMainThread");a(qB,"requestClusterStatus");Sm.parentPort&&(Au=a(e=>{Sm.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Hc=a(e=>{Sm.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Di.onMessageByType)("subscribe-to-node",e=>{Tu(e)}),(0,Di.onMessageByType)("unsubscribe-from-node",e=>{Tm(e)}));a(mo,"ensureNode")});var Xs=P(fH=>{"use strict";var ir=require("path"),An=require("fs-extra"),Ru=require("node-forge"),QB=require("net"),{generateKeyPair:Ib,X509Certificate:go,createPrivateKey:jB}=require("crypto"),zte=require("util");Ib=zte.promisify(Ib);var Tt=Ru.pki,js=require("joi"),{v4:JB}=require("uuid"),{validateBySchema:Lb}=pt(),ct=j(),hs=ce(),ps=(H(),D(q)),{CONFIG_PARAMS:yu}=ps,Js=PR(),{ClientError:ga}=_e(),Am=require("node:tls"),{relative:XB,join:Qte}=require("node:path"),{CERT_PREFERENCE_APP:hwe,CERTIFICATE_VALUES:VB}=Js,jte=ec(),Cb=wt(),{table:Jte,getDatabases:Xte,databases:wb}=(De(),D(nt)),{getJWTRSAKeys:KB}=_u();Object.assign(fH,{generateKeys:Ub,updateConfigCert:oH,createCsr:ore,signCertificate:are,setCertTable:bu,loadCertificates:nH,reviewSelfSignedCert:Bb,createTLSSelector:cH,listCertificates:uH,addCertificate:_re,removeCertificate:pre,createNatsCerts:ure,generateCertsKeys:lre,getReplicationCert:R_,getReplicationCertAuth:ire,renewSelfSigned:dre,hostnamesFromCert:dH,getKey:Ere});var{urlToNodeName:ZB,getThisNodeUrl:Zte,getThisNodeName:ym,clearThisNodeName:ere}=(_s(),D(Aa)),{readFileSync:tre,watchFile:rre,statSync:eH}=require("node:fs"),pwe=ce(),{getTicketKeys:nre,onMessageFromWorkers:sre}=rt(),ma=j(),{isMainThread:tH}=require("worker_threads"),{TLSSocket:rH,createSecureContext:Ewe}=require("node:tls"),Mb=3650,A_=["127.0.0.1","localhost","::1"],vb=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];sre(async e=>{e.type===ps.ITC_EVENT_TYPES.RESTART&&(hs.initSync(!0),await Bb())});var vr;function Ta(){return vr||(vr=Xte().system.hdb_certificate,vr||(vr=Jte({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),vr}a(Ta,"getCertTable");async function R_(){let e=cH("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(ym());if(!r)return;let n=new go(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(R_,"getReplicationCert");async function ire(){Ta();let e=(await R_()).options.cert,r=new go(e).issuer.match(/CN=(.*)/)?.[1];return vr.get(r)}a(ire,"getReplicationCertAuth");var YB,Sa=new Map;function nH(){if(YB)return;YB=!0;let e=[{configKey:yu.TLS},{configKey:yu.OPERATIONSAPI_TLS}];Ta();let t=ir.dirname(Cb.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Cb.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&XB(Qte(t,"keys"),o);c&&WB(o,l=>{Sa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&tH){let f;WB(u,d=>{if(VB.cert===d)return;let h=i.hostname??i.hostnames??i.host??i.hosts;h&&!Array.isArray(h)&&(h=[h]);let _=aH(u),p=new go(_),S;try{S=Hb(p)}catch(A){ct.error("error extracting common name from certificate",A);return}if(S==null){ct.error("error extracting common name from certificate");return}if(p.checkIssued(new go(VB.cert)))return;let g=vr.primaryStore.get(S),T=eH(u).mtimeMs,m=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&T<=m){T<m&&ct.info(`Certificate ${S} at ${u} is older (${new Date(T)}) than the certificate in the database (${m>1?new Date(m):"only self signed certificate available"})`);return}r=vr.put({name:S,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:_,private_key_name:c,is_authority:l,hostnames:h,file_timestamp:T,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(nH,"loadCertificates");function WB(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&tH&&ct.warn(`Reloading ${r}:`,e),n=c,t(aH(e)))}catch(c){ct.error(`Error loading ${r}:`,e,c)}},"loadFile");An.existsSync(e)?s(eH(e)):ct.error(`${r} file not found:`,e),rre(e,{persistent:!1},s)}a(WB,"loadAndWatch");function Pb(){let e=Zte();if(e==null){let t=A_[0];return ct.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return ZB(e)}a(Pb,"getHost");function Rm(){let e=ym();if(e==null){let t=A_[0];return ct.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(Rm,"getCommonName");async function ore(){let e=await R_(),t=Tt.certificateFromPem(e.options.cert),r=Tt.privateKeyFromPem(e.options.key);ct.info("Creating CSR with cert named:",e.name);let n=Tt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:Rm()},...vb];ct.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:sH()}];return ct.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Ru.pki.certificationRequestToPem(n)}a(ore,"createCsr");function sH(){let e=A_.includes(Rm())?A_:[...A_,Rm()];return e.includes(Pb())||e.push(Pb()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>QB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(sH,"certExtensions");async function are(e){let t={},r=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;Ta();for await(let f of vr.search([]))if(f.is_authority&&!f.details.issuer.includes("HarperDB-Certificate-Authority")){if(Sa.has(f.private_key_name)){n=Sa.get(f.private_key_name),s=f;break}else if(f.private_key_name&&await An.exists(ir.join(r,f.private_key_name))){n=An.readFile(ir.join(r,f.private_key_name)),s=f;break}}if(!n){let f=await Db();s=f.ca,n=f.private_key}n=Tt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Tt.certificateFromPem(s.certificate);ct.info("Signing CSR with cert named",s.name);let o=Tt.certificationRequestFromPem(e.csr);try{o.verify()}catch(f){return ct.error(f),new Error("Error verifying CSR: "+f.message)}let c=Ru.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Mb),ct.info("sign cert setting validity:",c.validity),ct.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),ct.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;ct.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Ru.md.sha256.create()),t.certificate=Tt.certificateToPem(c)}else ct.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(are,"signCertificate");async function cre(e,t){await bu({name:ym(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await bu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Tt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(cre,"createCertificateTable");async function bu(e){let t=new go(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},Ta(),await vr.patch(e)}a(bu,"setCertTable");async function Ub(){let e=await Ib("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:Tt.publicKeyFromPem(e.publicKey),private_key:Tt.privateKeyFromPem(e.privateKey)}}a(Ub,"generateKeys");async function xb(e,t,r){let n=Tt.createCertificate();if(!t){let o=await R_();t=Tt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Mb);let i=[{name:"commonName",value:Rm()},...vb];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(sH()),n.sign(e,Ru.md.sha256.create()),Tt.certificateToPem(n)}a(xb,"generateCertificates");async function Db(){let e=await uH(),t;for(let r of e){if(!r.is_authority)continue;let n=await lH(r.private_key_name);if(r.private_key_name&&n&&new go(r.certificate).checkPrivateKey(jB(n))){ct.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;ct.trace("No CA found with matching private key")}a(Db,"getCertAuthority");async function iH(e,t,r=!0){let n=Tt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Mb);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${hs.get(yu.REPLICATION_HOSTNAME)??ZB(hs.get(yu.REPLICATION_URL))??JB().split("-")[0]}`},...vb];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Ru.md.sha256.create());let o=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),c=ir.join(o,Js.PRIVATEKEY_PEM_NAME);return r&&await An.writeFile(c,Tt.privateKeyToPem(e)),n}a(iH,"generateCertAuthority");async function lre(){let{private_key:e,public_key:t}=await Ub(),r=await iH(e,t),n=await xb(e,t,r);await cre(n,r),oH()}a(lre,"generateCertsKeys");async function ure(){let e=await xb(Tt.privateKeyFromPem(Js.CERTIFICATE_VALUES.key),void 0,Tt.certificateFromPem(Js.CERTIFICATE_VALUES.cert)),t=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=ir.join(t,Js.NATS_CERTIFICATE_PEM_NAME);await An.exists(r)||await An.writeFile(r,e);let n=ir.join(t,Js.NATS_CA_PEM_NAME);await An.exists(n)||await An.writeFile(n,Js.CERTIFICATE_VALUES.cert)}a(ure,"createNatsCerts");async function dre(){Ta();for await(let e of vr.search([{attribute:"is_self_signed",value:!0}]))await vr.delete(e.name);await Bb()}a(dre,"renewSelfSigned");async function Bb(){ere(),await nH(),Ta();let e=await Db();if(!e){ct.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=hs.get(yu.TLS_PRIVATEKEY),n=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),s,i=XB(n,r);try{s=Tt.privateKeyFromPem(await An.readFile(r))}catch(c){ct.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await Ub(),await An.exists(ir.join(n,Js.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${JB().split("-")[0]}.pem`),await An.writeFile(ir.join(n,i),Tt.privateKeyToPem(s))}let o=await iH(s,Tt.setRsaPublicKey(s.n,s.e),!1);await bu({name:o.subject.getField("CN").value,uses:["https"],certificate:Tt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await R_()){let r=ym();ct.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Db();let n=Tt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await xb(Tt.privateKeyFromPem(e.private_key),s,n);await bu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Bb,"reviewSelfSignedCert");function oH(){let e=jte(Object.keys(ps.CONFIG_PARAM_MAP),!0),t=ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME),r=ir.join(t,Js.PRIVATEKEY_PEM_NAME),n=ir.join(t,Js.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Js.NATS_CA_PEM_NAME),i=ps.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),Cb.updateConfigValue(void 0,void 0,o,!1,!0)}a(oH,"updateConfigCert");function aH(e){return e.startsWith("-----BEGIN")?e:tre(e,"utf8")}a(aH,"readPEM");var zB=Am.createSecureContext;Am.createSecureContext=function(e){if(!e.cert||!e.key)return zB(e);let t={...e};delete t.key,delete t.cert;let r=zB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var fre=rH.prototype._init;rH.prototype._init=function(e,t){fre.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var kc=new Map;function cH(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),kc.clear();let f=0;for await(let d of wb.system.hdb_certificate.search([])){let h=d.certificate,_=new go(h);d.is_authority&&(_.asString=h,kc.set(_.subject,h))}for await(let d of wb.system.hdb_certificate.search([]))try{if(d.is_authority)continue;let h=e==="operations-api",_=d.is_self_signed?1:2;h&&d.uses?.includes?.("operations")&&(_+=1);let p=await lH(d.private_key_name),S=d.certificate,g=new go(S);if(kc.has(g.issuer)&&(S+=`
21
+ `+kc.get(g.issuer)),!p||!S)throw new Error("Missing private key or certificate for secure server");let T={ciphers:d.ciphers,ticketKeys:nre(),availableCAs:kc,ca:t&&Array.from(kc.values()),cert:S,key:p,key_file:d.private_key_name,is_self_signed:d.is_self_signed};o&&(T.sessionIdContext=o.sessionIdContext);let m=Am.createSecureContext(T);m.name=d.name,m.options=T,m.quality=_,m.certificateAuthorities=Array.from(kc),m.certStart=S.toString().slice(0,100);let A=d.hostnames??dH(g);Array.isArray(A)||(A=[A]);let w;for(let M of A)if(M){M[0]==="*"&&(s=!0,M=M.slice(1)),M===Pb()&&(_+=2),QB.isIP(M)&&(w=!0);let F=r.get(M)?.quality??0;_>F&&r.set(M,m)}else ma.error("No hostname found for certificate at",Am.certificate);ma.trace("Adding TLS",m.name,"for",o.ports||"client","cert named",d.name,"hostnames",A,"quality",_,"best quality",f),_>f&&(i.defaultContext=n=m,f=_,o&&(o.defaultContext=m))}catch(h){ma.error("Error applying TLS for",d.name,h)}o?.secureContextsListeners.forEach(d=>d()),c(n)}catch(f){l(f)}}a(u,"updateTLS"),wb.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ma.info("TLS requested for",o||"(no SNI)");let l=o;for(;;){let f=r.get(l);if(f)return ma.debug("Found certificate for",o,f.certStart),f.updatedContext&&(f=f.updatedContext),c(null,f);if(s&&l){let d=l.indexOf(".",1);d<0?l="":l=l.slice(d)}else break}o?ma.debug("No certificate found to match",o,"using the default certificate"):ma.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):ma.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(cH,"createTLSSelector");async function lH(e){let t=Sa.get(e);return!t&&e?await An.readFile(ir.join(hs.get(yu.ROOTPATH),ps.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(lH,"getPrivateKeyByName");async function uH(){Ta();let e=[];for await(let t of vr.search([]))e.push(t);return e}a(uH,"listCertificates");async function _re(e){let t=Lb(e,js.object({name:js.string().required(),certificate:js.string().required(),is_authority:js.boolean().required(),private_key:js.string(),hosts:js.array(),uses:js.array()}));if(t)throw new ga(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new go(n),c=!1,l=!1,u;for(let[_,p]of Sa)!s&&!c&&o.checkPrivateKey(jB(p))&&(c=!0,u=_),s&&s===p&&(l=!0,u=_);if(!i&&!s&&!c)throw new ga("A suitable private key was not found for this certificate");let f;if(!r){try{f=Hb(o)}catch(_){ct.error(_)}if(f==null)throw new ga("Error extracting certificate common name, please provide a name parameter")}let d=hre(r??f);s&&!c&&!l&&(await An.writeFile(ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,d+".pem"),s),Sa.set(d,s));let h={name:r??f,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(h.private_key_name=u??d+".pem"),await bu(h),"Successfully added certificate: "+d}a(_re,"addCertificate");function hre(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(hre,"sanitizeName");async function pre(e){let t=Lb(e,js.object({name:js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;Ta();let n=await vr.get(r);if(!n)throw new ga(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await vr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(ct.info("Removing private key named",s),await An.remove(ir.join(hs.getHdbBasePath(),ps.LICENSE_KEY_DIR_NAME,s)))}return await vr.delete(r),"Successfully removed "+r}a(pre,"removeCertificate");function Hb(e){return e.subject.match(/CN=(.*)/)?.[1]}a(Hb,"extractCommonName");function dH(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[Hb(e)]}a(dH,"hostnamesFromCert");async function Ere(e){if(e.bypass_auth!==!0)throw new ga("Unauthorized","401");let t=Lb(e,js.object({name:js.string().required()}));if(t)throw new ga(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await KB()).private_key;if(r===".jwtPublic")return(await KB()).public_key;if(Sa.get(r))return Sa.get(e.name);throw new ga("Key not found")}a(Ere,"getKey")});var DH={};Be(DH,{CONFIRMATION_STATUS_POSITION:()=>PH,NodeReplicationConnection:()=>y_,OPERATION_REQUEST:()=>$b,RECEIVED_TIME_POSITION:()=>Kb,RECEIVED_VERSION_POSITION:()=>Vb,SENDING_TIME_POSITION:()=>Im,createWebSocket:()=>Pm,database_subscriptions:()=>ya,replicateOverWS:()=>b_,table_update_listeners:()=>Wb});async function Pm(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=Xe(),i;if(e.includes("wss://")){if(!Fb){let l=(0,wH.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),Fb=u.secureContexts}if(i=Fb.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,CH.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=IH.createSecureContext({...i.options,ca:Array.from(Gc)})),new OH.WebSocket(e,"harperdb-replication-v1",c)}function b_(e,t,r){let n=t.port||t.securePort,s=Fc.pid%1e3+"-"+NH.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,f=t.databaseSubscriptions||ya,d,h,_=!1,p=t.subscription;p?.then&&p.then(R=>p=R);let S=t.tables||u&&Je()[u];if(!r){ue.error?.("No authorization provided"),mt(1008,"Unauthorized");return}let g=new Map,T=[],m=r.name;m&&t.connection&&(t.connection.nodeName=m);let A,w,M,F,G,K,ee,ie=1e3,X,re=0,z=0,he=0,Te=new Map,Ie=[],pe=0,Ft;if(t.url){let R=a(()=>{G&&z===e._socket?.bytesRead&&he===e._socket?.bytesWritten?e.terminate():(G=performance.now(),e.ping(),z=e._socket?.bytesRead,he=e._socket?.bytesWritten)},"send_ping");M=setInterval(R,RH).unref(),R()}else Gt();e._socket?.setMaxListeners(200);function Gt(){clearTimeout(F),z=e._socket?.bytesRead,he=e._socket?.bytesWritten,F=setTimeout(()=>{z===e._socket?.bytesRead&&he===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${m}, terminating connection and reconnecting`),e.terminate())},RH*2).unref()}a(Gt,"resetPingTimer");function Jt(){return h||(h=mm(d,u,m)),h}a(Jt,"getSharedStatus"),u&&kd(u);let fr,Md,za=[],bT=[],OT,Dt=[],vd=[],Ud=[],NT=150,rp=25,xd=0,Le=0,Bd=!1,Ki,Ir,Dn,Qa;e.on("message",R=>{re=performance.now();try{let y=R.dataView=new qc(R.buffer,R.byteOffset,R.byteLength);if(R[0]>127){let L=(0,ze.decode)(R),[x,N,v]=L;switch(x){case hH:{if(N){if(m){if(m!==N){ue.error?.(s,`Node name mismatch, expecting to connect to ${m}, but peer reported name as ${N}, disconnecting`),e.send((0,ze.encode)([Ou])),mt(1008,"Node name mismatch");return}}else if(m=N,t.connection?.tentativeNode){let oe=t.connection.tentativeNode;oe.name=m,t.connection.tentativeNode=null,mo(m,oe)}if(t.connection&&(t.connection.nodeName=m),ue.debug?.(s,"received node name:",m,"db:",u),!u)try{kd(u=L[2]),u==="system"&&(fr=pa(t,(oe,le)=>{Yi(le)&&Ko(le)}),e.on("close",()=>{fr?.remove()}))}catch(oe){ue.warn?.(s,"Error setting database",oe),e.send((0,ze.encode)([Ou])),mt(1008,oe.message);return}Ll()}break}case TH:{ue.debug?.(s,"Received table definitions for",N.map(oe=>oe.table));for(let oe of N){let le=L[2];oe.database=le;let se;Yi(le)&&(le==="system"?$e[le]?.[oe.table]||(se=Gb(oe,$e[le]?.[oe.table])):se=Gb(oe,$e[le]?.[oe.table]),d||(d=se?.auditStore),S||(S=Je()?.[le]))}break}case Ou:mt();break;case $b:try{let oe=r?.replicates||r?.subscribers||r?.name;server.operation(N,{user:r},!oe).then(le=>{Array.isArray(le)&&(le={results:le}),le.requestId=N.requestId,e.send((0,ze.encode)([Om,le]))},le=>{e.send((0,ze.encode)([Om,{requestId:N.requestId,error:le instanceof Error?le.toString():le}]))})}catch(oe){e.send((0,ze.encode)([Om,{requestId:N.requestId,error:oe instanceof Error?oe.toString():oe}]))}break;case Om:let{resolve:$,reject:Y}=g.get(N.requestId);N.error?Y(new Error(N.error)):$(N),g.delete(N.requestId);break;case kb:let ne=L[3];S||(u?ue.error?.(s,"No tables found for",u):ue.error?.(s,"Database name never received"));let k=S[ne];k=Gb({table:ne,database:u,attributes:N.attributes,schemaDefined:N.schemaDefined},k),za[v]={name:ne,decoder:new ze.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:N.typedStructs,structures:N.structures}),getEntry(oe){return k.primaryStore.getEntry(oe)},rootStore:k.primaryStore.rootStore};break;case pH:Qa=d?vB(N,d):new Map,OT=L[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${OT}`);break;case EH:let ve=v;Ud[ve]=N;break;case SH:Jt()[PH]=N,ue.trace?.(s,"received and broadcasting committed update",N),Jt().buffer.notify();break;case gH:A=N,p.send({type:"end_txn",localTime:A,remoteNodeIds:T});break;case Nm:{let oe=L[1],{fileId:le,size:se,finished:Q,error:fe}=oe,Ee=Te.get(le);ue.debug?.("Received blob",le,"has stream",!!Ee,"connectedToBlob",!!Ee?.connectedToBlob,"length",L[2].length,"finished",Q),Ee||(Ee=new qb.PassThrough,Ee.expectedSize=se,Te.set(le,Ee)),Ee.lastChunk=Date.now(),Q?(fe?(Ee.on("error",()=>{}),Ee.destroy(new Error("Blob error: "+fe))):Ee.end(L[2]),Ee.connectedToBlob&&Te.delete(le)):Ee.write(L[2]);break}case mH:{let oe=N,le;try{let se=L[3],Q=bT[v]||(bT[v]=S[L[4]]);if(!Q)return ue.warn?.("Unknown table id trying to handle record request",v);let fe=Q.primaryStore.getBinaryFast(Symbol.for("structures")),Ee=fe.length;if(Ee!==Le){Le=Ee;let Me=(0,ze.decode)(fe);e.send((0,ze.encode)([kb,{typedStructs:Me.typed,structures:Me.named},v,Q.tableName]))}let ye=Q.primaryStore.getBinaryFast(se);if(ye){let Me=Q.primaryStore.decoder.decode(ye,{valueAsBuffer:!0});le=(0,ze.encode)([bm,oe,{value:Me.value,expiresAt:Me.expiresAt,version:Me.version,residencyId:Me.residencyId,nodeId:Me.nodeId,user:Me.user}])}else le=(0,ze.encode)([bm,oe])}catch(se){le=(0,ze.encode)([bm,oe,{error:se.message}])}e.send(le);break}case bm:{let{resolve:oe,reject:le,tableId:se,key:Q}=g.get(L[1]),fe=L[2];if(fe?.error)le(new Error(fe.error));else if(fe){let Ee=za[se].decoder.decode(fe.value);fe.value=Ee,fe.key=Q,oe(fe)}else oe();g.delete(L[1]);break}case _H:{Dn=N;let oe,le,se=!1;if(p){if(u!==p.databaseName&&!p.then){ue.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=f.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",Dn),!p){let Ae;p=new Promise(Rt=>{ue.debug?.("Waiting for subscription to database "+u),Ae=Rt}),p.ready=Ae,ya.set(u,p)}if(r.name)le=mr().subscribe(r.name),le.then(async Ae=>{oe=Ae;for await(let Rt of oe){let Xt=Rt.value;if(!(Xt?.replicates===!0||Xt?.replicates?.receives||Xt?.subscriptions?.some(_r=>(_r.database||_r.schema)===u&&_r.publish!==!1))){se=!0,e.send((0,ze.encode)([Ou])),mt(1008,`Unauthorized database subscription to ${u}`);return}}},Ae=>{ue.error?.(s,"Error subscribing to HDB nodes",Ae)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ze.encode)([Ou])),mt(1008,`Unauthorized database subscription to ${u}`);return}if(Ir&&(ue.debug?.(s,"stopping previous subscription",u),Ir.emit("close")),Dn.length===0)return;let Q=Dn[0],fe=a(Ae=>{if(Ae&&(Q.replicateByDefault?!Q.tables.includes(Ae.tableName):Q.tables.includes(Ae.tableName)))return{table:Ae}},"tableToTableEntry"),Ee={txnTime:0},ye,Me,et=1/0,Fr,Cr=a((Ae,Rt)=>{if(Ae.type==="end_txn"){Ee.txnTime&&(o[i]!==66&&ue.error?.("Invalid encoding of message"),Yo(9),Yo(Cm),E(Fr=Rt),Ms()),i=c,Ee.txnTime=0;return}let Xt=Ae.nodeId,_r=Ae.tableId,qt=Me[_r];if(!qt&&(qt=Me[_r]=fe(p.tableById[_r]),!qt))return ue.debug?.("Not subscribed to table",_r);let Gr=qt.table,ja=Gr.primaryStore,Lt=ja.encoder;(Ae.extendedType&tE||!Lt.typedStructs)&&(Lt._mergeStructures(Lt.getStructures()),Lt.typedStructs&&(Lt.lastTypedStructuresLength=Lt.typedStructs.length));let ip=ye[Xt];if(!(ip&&ip.startTime<Rt&&(!ip.endTime||ip.endTime>Rt)))return wm&&ue.trace?.(s,"skipping replication update",Ae.recordId,"to:",m,"from:",Xt,"subscribed:",ye),CC();wm&&ue.trace?.(s,"sending replication update",Ae.recordId,"to:",m,"from:",Xt,"subscribed:",ye);let wT=Ae.version;Ee.txnTime!==wT&&(Ee.txnTime&&(wm&&ue.trace?.(s,"new txn time, sending queued txn",Ee.txnTime),o[i]!==66&&ue.error?.("Invalid encoding of message"),Ms()),Ee.txnTime=wT,i=c,E(wT));let Ja=Ae.residencyId,IT=Hd(Ja,Gr),op;if(IT&&!IT.includes(m)){let Xa=Hd(Ae.previousResidencyId,Gr);if(Xa&&!Xa.includes(m)&&(Ae.type==="put"||Ae.type==="patch")||Gr.getResidencyById)return CC();let Gd=Ae.recordId;ue.trace?.(s,"sending invalidation",Gd,m,"from",Xt);let Wo=0;Ja&&(Wo|=_c),Ae.previousResidencyId&&(Wo|=hc);let vs,sn=null;for(let ap in Gr.indices){if(!sn){if(vs=Ae.getValue(ja,!0),!vs)break;sn={}}sn[ap]=vs[ap]}op=Yl(Ae.version,_r,Gd,null,Xt,Ae.user,Ae.type==="put"||Ae.type==="patch"?"invalidate":Ae.type,Lt.encode(sn),Wo,Ja,Ae.previousResidencyId,Ae.expiresAt)}function CC(){ue.trace?.(s,"skipping audit record",Ae.recordId),K||(K=setTimeout(()=>{K=null,(Fr||0)+AH/2<et&&(wm&&ue.trace?.(s,"sending skipped sequence update",et),e.send((0,ze.encode)([gH,et])))},AH).unref())}a(CC,"skipAuditRecord");let CT=Lt.typedStructs,PT=Lt.structures;if((CT?.length!=qt.typed_length||PT?.length!=qt.structure_length)&&(qt.typed_length=CT?.length,qt.structure_length=PT.length,ue.debug?.(s,"send table struct",qt.typed_length,qt.structure_length),qt.sentName||(qt.sentName=!0),e.send((0,ze.encode)([kb,{typedStructs:CT,structures:PT,attributes:Gr.attributes,schemaDefined:Gr.schemaDefined},_r,qt.table.tableName]))),Ja&&!vd[Ja]&&(e.send((0,ze.encode)([EH,IT,Ja])),vd[Ja]=!0),op)Yo(op.length),W(op);else{let Xa=Ae.encoded;Ae.extendedType&ks&&mA(()=>Ae.getValue(ja),async Wo=>{let vs=$p(Wo);try{let sn;pe++;for await(let ap of Wo.stream()){if(sn&&(ue.debug?.("Sending blob chunk",vs,"length",sn.length),e.send((0,ze.encode)([Nm,{fileId:vs,size:Wo.size},sn]))),sn=ap,se)return;e._socket.writableNeedDrain&&(ue.debug?.("draining",vs),await new Promise(qz=>e._socket.once("drain",qz)),ue.debug?.("drained",vs))}ue.debug?.("Sending final blob chunk",vs,"length",sn.length),e.send((0,ze.encode)([Nm,{fileId:vs,size:Wo.size,finished:!0},sn]))}catch(sn){ue.debug?.("Error sending blob",sn),e.send((0,ze.encode)([Nm,{fileId:vs,finished:!0,error:sn.toString()},Buffer.alloc(0)]))}finally{pe--,pe<rp&&Ft?.()}});let Gd=Xa[0]===66?8:0;Yo(Xa.length-Gd),W(Xa,Gd),ue.trace?.("wrote record",Ae.recordId,"length:",Xa.length)}},"sendAuditRecord"),Ms=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i)):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");Ir=new Yb.EventEmitter,Ir.once("close",()=>{se=!0,oe?.end()});for(let{startTime:Ae}of Dn)Ae<et&&(et=Ae);(le||Promise.resolve()).then(async()=>{p=await p,d=p.auditStore,Me=p.tableById.map(fe),ye=[];for(let{name:Rt,startTime:Xt,endTime:_r}of Dn){let qt=Em(Rt,d);ue.debug?.("subscription to",Rt,"using local id",qt,"starting",Xt),ye[qt]={startTime:Xt,endTime:_r}}Ko(u),fr||(fr=$c(Rt=>{Rt.databaseName===u&&Ko(u)}),Md=O_(Rt=>{Rt===u&&(e.send((0,ze.encode)([Ou])),mt())}),e.on("close",()=>{fr?.remove(),Md?.remove()})),e.send((0,ze.encode)([pH,E_(p.auditStore),Dn.map(({name:Rt})=>Rt)]));let Ae=!0;do{isFinite(et)||(ue.warn?.("Invalid sequence id "+et),mt(1008,"Invalid sequence id"+et));let Rt;if(Ae&&!se&&(Ae=!1,!(Qb(d)<=et)&&(bH.default.get(B.REPLICATION_COPYTABLESTOCATCHUP)??mre)&&server.nodes[0]?.name===m)){ue.info?.("Replicating all tables to",m);let _r=et,qt=Dm(d);for(let Gr in S){if(!fe(Gr))continue;let ja=S[Gr];for(let Lt of ja.primaryStore.getRange({snapshot:!1})){if(se)return;Lt.localTime>=et&&(ue.trace?.(s,"Copying record from",u,Gr,Lt.key,Lt.localTime),_r=Math.max(Lt.localTime,_r),Rt=!0,Jt()[Im]=1,Cr({recordId:Lt.key,tableId:ja.tableId,type:"put",getValue(){return Lt.value},encoded:ja.primaryStore.getBinary(Lt.key),version:Lt.version,residencyId:Lt.residencyId,nodeId:qt,extendedType:Lt.metadataFlags},Lt.localTime))}}et=_r}for(let{key:Xt,value:_r}of d.getRange({start:et||1,exclusiveStart:!0,snapshot:!1})){if(se)return;let qt=bt(_r);ue.debug?.("sending audit record",new Date(Xt)),Jt()[Im]=Xt,et=Xt,Cr(qt,Xt),e._socket.writableNeedDrain?await new Promise(Gr=>{ue.debug?.(`Waiting for remote node ${m} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",Gr)}):pe>rp?await new Promise(Gr=>{Ft=Gr}):await new Promise(setImmediate),Ir.startTime=Xt,Rt=!0}Rt&&Cr({type:"end_txn"},et),Jt()[Im]=0,await LH(d)}while(!se)}).catch(Ae=>{ue.error?.(s,"Error handling subscription to node",Ae),mt(1008,"Error handling subscription to node")});break}}return}y.position=8;let b=!0,C,I;do{Jt();let L=y.readInt();if(L===9&&y.getUint8(y.position)==Cm){y.position++,A=I=y.readFloat64(),h[Vb]=A,h[Kb]=Date.now(),ue.trace?.("received remote sequence update",A,u);break}let x=y.position,N=bt(R,x,x+L),v=za[N.tableId];v||ue.error?.(`No table found with an id of ${N.tableId}`);let $;N.residencyId&&($=Ud[N.residencyId],ue.trace?.(s,"received residency list",$,N.type,N.recordId));try{EA(()=>{C={table:v.name,id:N.recordId,type:N.type,nodeId:Qa.get(N.nodeId),residencyList:$,timestamp:N.version,value:N.getValue(v),user:N.user,beginTxn:b,expiresAt:N.expiresAt}},Y=>{let ne=$p(Y),k=Te.get(ne);ue.debug?.("Received transaction with blob",ne,"has stream",!!k,"ended",!!k?.writableEnded),k?k.writableEnded&&Te.delete(ne):(k=new qb.PassThrough,Te.set(ne,k)),k.connectedToBlob=!0,k.lastChunk=Date.now(),Y.size===void 0&&k.expectedSize&&(Y.size=k.expectedSize);let ve=createBlob(k,Y),oe=ve.save({primaryStore:p.auditStore});return oe&&(oe.blobId=ne,Ie.push(oe),oe.finally(()=>{ue.debug?.(`Finished receiving blob stream ${ne}`),Ie.splice(Ie.indexOf(oe),1)})),ve})}catch(Y){throw Y.message+="typed structures for current decoder"+JSON.stringify(v.decoder.typedStructs),Y}b=!1,ue.trace?.(s,"received replication message",N.type,"id",C.id,"version",new Date(N.version),"nodeId",C.nodeId),h[Vb]=N.version,h[Kb]=Date.now(),p.send(C),y.position=x+L}while(y.position<R.byteLength);xd++,sr(R.byteLength,"bytes-received",m+"."+u+"."+C.table,"replication","ingest"),xd>NT&&!Bd&&(Bd=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${m} pause replication`)),p.send({type:"end_txn",localTime:A,remoteNodeIds:T,async onCommit(){if(C){let L=Date.now()-C.timestamp;sr(L,"replication-latency",m+"."+u+"."+C.table,C.type,"ingest")}xd--,Bd&&(Bd=!1,e.resume(),ue.debug?.(`Replication resuming ${m}`)),Ie.length>0&&await Promise.all(Ie),ue.trace?.("All blobs finished"),!w&&I&&(ue.trace?.(s,"queuing confirmation of a commit at",I),setTimeout(()=>{e.send((0,ze.encode)([SH,w])),ue.trace?.(s,"sent confirmation of a commit at",w),w=null},gre)),w=I,ue.debug?.("last sequence committed",new Date(I),u)}})}catch(y){ue.error?.(s,"Error handling incoming replication message",y)}}),e.on("ping",Gt),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-G,Hc({name:m,database:u,url:t.url,latency:t.connection.latency})),G=null}),e.on("close",(R,y)=>{clearInterval(M),clearTimeout(F),clearInterval(ee),Ir&&Ir.emit("close"),Ki&&Ki.end();for(let[b,{reject:C}]of g)C(new Error(`Connection closed ${y?.toString()} ${R}`));ue.debug?.(s,"closed",R,y?.toString())});function np(){}a(np,"recordRemoteNodeSequence");function mt(R,y){e.isFinished=!0,e.close(R,y)}a(mt,"close");function Ll(){if(_||(_=!0,t.connection?.on("subscriptions-updated",Ll)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let R=new Map;try{for(let C of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let I of C.value.nodes||[])I.lastTxnTime>(R.get(I.id)??0)&&R.set(I.id,I.lastTxnTime)}catch(C){if(!C.message.includes("Can not re"))throw C}let y=t.connection?.nodeSubscriptions?.[0];T=[];let b=t.connection?.nodeSubscriptions.map((C,I)=>{let L=[],{replicateByDefault:x}=C;if(C.subscriptions){for(let Y of C.subscriptions)if(Y.subscribe&&(Y.schema||Y.database)===u){let ne=Y.table;S?.[ne]?.replicate!==!1&&L.push(ne)}x=!1}else for(let Y in S)(x?S[Y].replicate===!1:S[Y].replicate)&&L.push(Y);let N=d&&Em(C.name,d),v=p?.dbisDB?.get([Symbol.for("seq"),N])??1,$=Math.max(v?.seqId??1,(typeof C.start_time=="string"?new Date(C.start_time).getTime():C.start_time)??1);if(ue.debug?.("Starting time recorded in db",C.name,N,u,v?.seqId,"start time:",$,new Date($)),y!==C){let Y=d&&Em(y.name,d),ne=p?.dbisDB?.get([Symbol.for("seq"),Y])??1;for(let k of ne?.nodes||[])k.name===C.name&&($=k.seqId,ue.debug?.("Using sequence id from proxy node",y.name,$))}return T.push(N),R.get(N)>$&&($=R.get(N),ue.debug?.("Updating start time from more recent txn recorded",y.name,$)),{name:C.name,replicateByDefault:x,tables:L,startTime:$,endTime:C.end_time}});if(b)if(ue.debug?.(s,"sending subscription request",b,p?.dbisDB?.path),clearTimeout(X),b.length>0)e.send((0,ze.encode)([_H,b]));else{let C=a(()=>{let I=performance.now();X=setTimeout(()=>{re<=I?mt(1008,"No nodes to subscribe to"):C()},ie)},"schedule_close");C()}}a(Ll,"sendSubscriptionRequestUpdate");function Hd(R,y){if(!R)return;let b=Dt[R];return b||(b=y.getResidencyRecord(R),Dt[R]=b),b}a(Hd,"getResidence");function Yi(R){return!(Ra&&Ra!="*"&&!Ra[R]&&!Ra.includes?.(R)&&!Ra.some?.(y=>y.name===R))}a(Yi,"checkDatabaseAccess");function kd(R){if(p=p||f.get(R),!Yi(R))throw new Error(`Access to database "${R}" is not permitted`);p||ue.warn?.(`No database named "${R}" was declared and registered`),d=p?.auditStore,S||(S=Je()?.[R]);let y=Xe();if(y===m)throw y?new Error("Should not connect to self",y):new Error("Node name not defined");return Ml(y,R),!0}a(kd,"setDatabase");function Ml(R,y){let b=Je()?.[y],C=[];for(let I in b){let L=b[I];C.push({table:I,schemaDefined:L.schemaDefined,attributes:L.attributes.map(x=>({name:x.name,type:x.type,isPrimaryKey:x.isPrimaryKey}))})}ue.trace?.("Sending database info for node",R,"database name",y),e.send((0,ze.encode)([hH,R,y,C]))}a(Ml,"sendNodeDBName");function Ko(R){let y=Je()?.[R],b=[];for(let C in y){if(Dn&&!Dn.some(L=>L.replicateByDefault?!L.tables.includes(C):L.tables.includes(C)))continue;let I=y[C];b.push({table:C,schemaDefined:I.schemaDefined,attributes:I.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}e.send((0,ze.encode)([TH,b,R]))}a(Ko,"sendDBSchema"),ee=setInterval(()=>{for(let[R,y]of Te)y.lastChunk+3e4<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${R} from ${m}`),Te.delete(R),y.end())},3e4).unref();let Fd=1,sp=[];return{end(){Ki&&Ki.end(),Ir&&Ir.emit("close")},getRecord(R){let y=Fd++;return new Promise((b,C)=>{let I=[mH,y,R.table.tableId,R.id];sp[R.table.tableId]||(I.push(R.table.tableName),sp[R.table.tableId]=!0),e.send((0,ze.encode)(I)),g.set(y,{tableId:R.table.tableId,key:R.id,resolve(L){let{table:x,entry:N}=R;b(L),L&&x._recordRelocate(N,L)},reject:C})})},sendOperation(R){let y=Fd++;return R.requestId=y,e.send((0,ze.encode)([$b,R])),new Promise((b,C)=>{g.set(y,{resolve:b,reject:C})})}};function Yo(R){O(5),R<128?o[c++]=R:R<16384?(l.setUint16(c,R|32768),c+=2):R<1056964608?(l.setUint32(c,R|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,R),c+=5)}function W(R,y=0,b=R.length){let C=b-y;O(C),R.copy(o,c,y,b),c+=C}function E(R){O(8),l.setFloat64(c,R),c+=8}function O(R){if(R+16>o.length-c){let y=Buffer.allocUnsafeSlow(c+R-i+65536>>10<<11);o.copy(y,0,i,c),c=c-i,i=0,o=y,l=new DataView(o.buffer,0,o.length)}}}function Gb(e,t){let r=e.database??"data";if(r!=="data"&&!$e[r]){ue.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(ue.debug?.("(Re)creating",e),ot({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var bH,ze,OH,NH,ue,Yb,wH,IH,Fc,CH,qb,_H,hH,pH,Ou,EH,kb,mH,bm,$b,Om,gH,SH,TH,Nm,PH,Vb,Kb,Im,mre,Wb,ya,wm,AH,gre,RH,Fb,yH,y_,zb=be(()=>{De();no();yb();jb();_s();bH=U(ce());H();Wl();ze=require("msgpackr"),OH=require("ws"),NH=require("worker_threads"),ue=U(Qi());T_();Yb=require("events"),wH=U(Xs()),IH=U(require("node:tls"));Bc();Fc=U(require("node:process")),CH=require("node:net");Ci();cs();qb=require("node:stream"),_H=129,hH=140,pH=141,Ou=142,EH=130,kb=132,mH=133,bm=134,$b=136,Om=137,gH=143,SH=144,TH=145,Nm=146,PH=0,Vb=1,Kb=2,Im=3,mre=Fc.env.HDB_LEADER_URL||Fc.argv.includes("--HDB_LEADER_URL"),Wb=new Map,ya=new Map,wm=!0,AH=300,gre=2,RH=3e4;a(Pm,"createWebSocket");yH=1e3,y_=class extends Yb.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??Qs(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=yH;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await Pm(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Fc.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=yH,Hc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=b_(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(Au({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();ue.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(b_,"replicateOverWS");a(Gb,"ensureTableIfChanged")});var Aa={};Be(Aa,{clearThisNodeName:()=>Nre,disableReplication:()=>Rre,enabled_databases:()=>Ra,forEachReplicatedDatabase:()=>pa,getThisNodeId:()=>Dm,getThisNodeName:()=>Xe,getThisNodeUrl:()=>Ea,hostnameToUrl:()=>Um,lastTimeInAuditStore:()=>m_,monitorNodeCAs:()=>FH,replicateOperation:()=>Ire,replication_certificate_authorities:()=>Gc,sendOperationToNode:()=>w_,servers:()=>Tre,setReplicator:()=>qH,start:()=>Are,startOnMainThread:()=>Nb,subscribeToNode:()=>Tu,unsubscribeFromNode:()=>Tm,urlToNodeName:()=>Qs});function Are(e){if(e.port||(e.port=Es.default.get(B.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Es.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!Xe())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of S_(e))t.set(Qs(n.url),n);yre(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=je.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),b_(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&gr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,je.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&gr.error(`Incoming client connection from ${n.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,n._nodeRequest.socket.authorizationError);let i=mr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));c?n.user=c:gr.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:gr.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(Gc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.updatedContext=vm.createSecureContext(l)}catch(c){gr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),FH(s),Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function FH(e){let t=0;gu(r=>{r?.ca&&(Gc.add(r.ca),Gc.size!==t&&(t=Gc.size,e?.()))})}function Rre(e=!0){kH=e}function yre(e){kH||(Je(),Ra=e.databases,pa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||ya;for(let[s,i]of N_){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];qH(r,s,e),Wb.get(s)?.forEach(i=>i(s))}}))}function qH(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class GH extends qr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||ya,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(gr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Mn,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let f;for(let h of c){let _=bre(h,GH.subscription,e);_?.isConnected&&!u.has(_)&&(!f||_.latency<f.latency)&&(f=_)}if(!f)throw l||new BH.ServerError("No connection to any other nodes are available",502);let d={requestId:Sre++,table:t,entry:i,id:i.key};u.add(f);try{return await f.getRecord(d)}catch(h){if(f.isConnected)throw h;gr.warn("Error in load from node",Mm,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function $H(e,t,r,n,s){let i=N_.get(e);i||N_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new y_(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function bre(e,t,r){let n=MH.get(e)?.get(r);if(n)return n;let s=mr().primaryStore.get(e);return s?.url&&(n=$H(s.url,t,r,e,s.authorization),MH.set(e,N_.get(s.url))),n}async function w_(e,t,r){r||(r={}),r.serverName=e.name;let n=await Pm(e.url,r),s=b_(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{gr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Tu(e){try{HH.isMainThread&&gr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=ya.get(e.database);if(!t){let n;t=new Promise(s=>{gr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,ya.set(e.database,t)}let r=$H(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>g_(n,e.database)),e.replicateByDefault)}catch(t){gr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function Tm({name:e,url:t,database:r}){gr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(mr().primaryStore.getRange({})));let n=N_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Ore(){if(Jb!==void 0)return Jb;let e=Es.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Es.default.get(B.TLS_CERTIFICATE);if(e)return Jb=new UH.X509Certificate((0,xH.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function Xe(){return Mm||(Mm=Es.default.get("replication_hostname")??Qs(Es.default.get("replication_url"))??Ore()??vH("operationsapi_network_secureport")??vH("operationsapi_network_port")??"127.0.0.1")}function Nre(){Mm=void 0}function vH(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function Lm(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function Dm(e){return E_(e)?.[Xe()]}function Ea(){let e=Es.default.get("replication_url");return e||Um(Xe())}function Um(e){let t=Lm("replication_port");if(t)return`ws://${e}:${t}`;if(t=Lm("replication_secureport"),t)return`wss://${e}:${t}`;if(t=Lm("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=Lm("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Qs(e){if(e)return new URL(e).hostname}function pa(e,t){for(let n of Object.getOwnPropertyNames($e))r(n);return O_(n=>{r(n)}),$c((n,s)=>{r(n.databaseName)});function r(n){let s=$e[n];gr.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):wre(n)&&t(s,n,!1)}a(r,"forDatabase")}function wre(e){let t=$e[e];for(let r in t)if(t[r].replicate)return!0}function m_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Ire(e){let t={message:""};if(e.replicated){e.replicated=!1,gr.trace?.("Replicating operation",e.operation,"to nodes",je.nodes.map(n=>n.name));let r=await Promise.allSettled(je.nodes.map(n=>w_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=je.nodes[s]?.name,i})}return t}var Es,gr,UH,xH,vm,BH,HH,kH,Sre,Tre,Gc,Ra,N_,MH,Jb,Mm,_s=be(()=>{De();ta();Ul();zb();$r();Es=U(ce()),gr=U(j()),UH=require("crypto"),xH=require("fs");T_();Bc();H();yb();vm=U(require("node:tls")),BH=U(_e()),HH=require("worker_threads"),Sre=1,Tre=[],Gc=Es.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(vm.rootCertificates):new Set;a(Are,"start");a(FH,"monitorNodeCAs");a(Rre,"disableReplication");a(yre,"assignReplicationSource");a(qH,"setReplicator");N_=new Map;a($H,"getConnection");MH=new Map;a(bre,"getConnectionByName");a(w_,"sendOperationToNode");a(Tu,"subscribeToNode");a(Tm,"unsubscribeFromNode");a(Ore,"getCommonNameFromCert");a(Xe,"getThisNodeName");a(Nre,"clearThisNodeName");Object.defineProperty(je,"hostname",{get(){return Xe()}});a(vH,"getHostFromListeningPort");a(Lm,"getPortFromListeningPort");a(Dm,"getThisNodeId");je.replication={getThisNodeId:Dm,exportIdMapping:E_};a(Ea,"getThisNodeUrl");a(Um,"hostnameToUrl");a(Qs,"urlToNodeName");a(pa,"forEachReplicatedDatabase");a(wre,"hasExplicitlyReplicatedTable");a(m_,"lastTimeInAuditStore");a(Ire,"replicateOperation")});var km=P(($we,zH)=>{"use strict";var Nu=uE(),wu=LB(),Cre=j(),Pre=require("uuid").v4,qwe=require("clone"),Bm=fo(),Iu=(H(),D(q)),Dre=require("util"),ba=kn(),{handleHDBError:Rn,hdb_errors:Lre}=_e(),{HDB_ERROR_MSGS:xm,HTTP_STATUS_CODES:yn}=Lre,{SchemaEventMsg:Hm}=Ys(),VH=Sr(),{getDatabases:Mre}=(De(),D(nt)),{transformReq:Cu}=ae(),{replicateOperation:KH}=(_s(),D(Aa));zH.exports={createSchema:vre,createSchemaStructure:YH,createTable:Ure,createTableStructure:WH,createAttribute:Fre,dropSchema:xre,dropTable:Bre,dropAttribute:Hre,getBackup:Gre};async function vre(e){let t=await YH(e);return Bm.signalSchemaChange(new Hm(process.pid,e.operation,e.schema)),t}a(vre,"createSchema");async function YH(e){let t=Nu.schema_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);if(Cu(e),!await wu.checkSchemaExists(e.schema))throw Rn(new Error,xm.SCHEMA_EXISTS_ERR(e.schema),yn.BAD_REQUEST,Iu.LOG_LEVELS.ERROR,xm.SCHEMA_EXISTS_ERR(e.schema),!0);return await ba.createSchema(e),`database '${e.schema}' successfully created`}a(YH,"createSchemaStructure");async function Ure(e){return Cu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await WH(e)}a(Ure,"createTable");async function WH(e){let t=Nu.create_table_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);if(Nu.validateTableResidence(e.residence),!await wu.checkSchemaTableExists(e.schema,e.table))throw Rn(new Error,xm.TABLE_EXISTS_ERR(e.schema,e.table),yn.BAD_REQUEST,Iu.LOG_LEVELS.ERROR,xm.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Pre(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ba.createTable(n,e);else throw Rn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",yn.BAD_REQUEST);else await ba.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(WH,"createTableStructure");async function xre(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Nu.schema_object(e),n=t??r;if(n)throw Rn(n,n.message,yn.BAD_REQUEST,void 0,void 0,!0);Cu(e);let s=await wu.checkSchemaExists(e.schema);if(s)throw Rn(new Error,s,yn.NOT_FOUND,Iu.LOG_LEVELS.ERROR,s,!0);let i=await wu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await ba.dropSchema(e),Bm.signalSchemaChange(new Hm(process.pid,e.operation,e.schema)),await VH.purgeSchemaTableStreams(e.schema,o);let c=await KH(e);return c.message=`successfully deleted '${e.schema}'`,c}a(xre,"dropSchema");async function Bre(e){let t=Nu.table_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);Cu(e);let r=await wu.checkSchemaTableExists(e.schema,e.table);if(r)throw Rn(new Error,r,yn.NOT_FOUND,Iu.LOG_LEVELS.ERROR,r,!0);await ba.dropTable(e),await VH.purgeTableStream(e.schema,e.table);let n=await KH(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(Bre,"dropTable");async function Hre(e){let t=Nu.attribute_object(e);if(t)throw Rn(t,t.message,yn.BAD_REQUEST,void 0,void 0,!0);Cu(e);let r=await wu.checkSchemaTableExists(e.schema,e.table);if(r)throw Rn(new Error,r,yn.NOT_FOUND,Iu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Rn(new Error,"You cannot drop a hash attribute",yn.BAD_REQUEST,void 0,void 0,!0);if(Iu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Rn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,yn.BAD_REQUEST,void 0,void 0,!0);try{return await ba.dropAttribute(e),kre(e),Bm.signalSchemaChange(new Hm(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Cre.error(`Got an error deleting attribute ${Dre.inspect(e)}.`),n}}a(Hre,"dropAttribute");function kre(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(kre,"dropAttributeFromGlobal");async function Fre(e){Cu(e);let t=Mre()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Rn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,yn.BAD_REQUEST,void 0,void 0,!0);return await ba.createAttribute(e),Bm.signalSchemaChange(new Hm(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Fre,"createAttribute");function Gre(e){return ba.getBackup(e)}a(Gre,"getBackup")});var jH=P((Kwe,QH)=>{"use strict";var{OPERATIONS_ENUM:qre}=(H(),D(q)),Xb=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=qre.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};QH.exports=Xb});var Zb=P((zwe,tk)=>{"use strict";var $re=kn(),Wwe=jH(),Fm=ae(),Gm=(H(),D(q)),Vre=ce(),{handleHDBError:JH,hdb_errors:Kre}=_e(),{HDB_ERROR_MSGS:XH,HTTP_STATUS_CODES:ZH}=Kre,Yre=Object.values(Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ek="To use this operation audit log must be enabled in harperdb-config.yaml";tk.exports=Wre;async function Wre(e){if(Fm.isEmpty(e.schema))throw new Error(XH.SCHEMA_REQUIRED_ERR);if(Fm.isEmpty(e.table))throw new Error(XH.TABLE_REQUIRED_ERR);if(!Vre.get(Gm.CONFIG_PARAMS.LOGGING_AUDITLOG))throw JH(new Error,ek,ZH.BAD_REQUEST,Gm.LOG_LEVELS.ERROR,ek,!0);let t=Fm.checkSchemaTableExist(e.schema,e.table);if(t)throw JH(new Error,t,ZH.NOT_FOUND,Gm.LOG_LEVELS.ERROR,t,!0);if(!Fm.isEmpty(e.search_type)&&Yre.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await $re.readAuditLog(e)}a(Wre,"readAuditLog")});var nk=P((jwe,rk)=>{"use strict";var{OPERATIONS_ENUM:zre}=(H(),D(q)),eO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=zre.GET_BACKUP,this.schema=t,this.table=r}};rk.exports=eO});var ok=P((eIe,ik)=>{"use strict";var Qre=kn(),Xwe=nk(),tO=ae(),jre=(H(),D(q)),Zwe=ce(),{handleHDBError:Jre,hdb_errors:Xre}=_e(),{HDB_ERROR_MSGS:sk,HTTP_STATUS_CODES:Zre}=Xre;ik.exports=ene;async function ene(e){if(tO.isEmpty(e.schema))throw new Error(sk.SCHEMA_REQUIRED_ERR);if(tO.isEmpty(e.table))throw new Error(sk.TABLE_REQUIRED_ERR);let t=tO.checkSchemaTableExist(e.schema,e.table);if(t)throw Jre(new Error,t,Zre.NOT_FOUND,jre.LOG_LEVELS.ERROR,t,!0);return await Qre.getBackup(read_audit_log_object)}a(ene,"getBackup")});var uk=P((rIe,lk)=>{"use strict";var tne=ce(),Oa=require("joi"),rne=pt(),ak=require("moment"),nne=require("fs-extra"),rO=require("path"),sne=require("lodash"),I_=(H(),D(q)),{LOG_LEVELS:Vc}=(H(),D(q)),ine="YYYY-MM-DD hh:mm:ss",one=rO.resolve(__dirname,"../logs");lk.exports=function(e){return rne.validateBySchema(e,ane)};var ane=Oa.object({from:Oa.custom(ck),until:Oa.custom(ck),level:Oa.valid(Vc.NOTIFY,Vc.FATAL,Vc.ERROR,Vc.WARN,Vc.INFO,Vc.DEBUG,Vc.TRACE),order:Oa.valid("asc","desc"),limit:Oa.number().min(1),start:Oa.number().min(0),log_name:Oa.custom(cne)});function ck(e,t){if(ak(e,ak.ISO_8601).format(ine)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(ck,"validateDatetime");function cne(e,t){if(sne.invert(I_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=tne.get(I_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?I_.LOG_NAMES.HDB:e,i=s===I_.LOG_NAMES.INSTALL?rO.join(one,I_.LOG_NAMES.INSTALL):rO.join(n,s);return nne.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(cne,"validateReadLogPath")});var sO=P((sIe,fk)=>{"use strict";var qm=(H(),D(q)),lne=j(),une=ce(),dne=uk(),nO=require("path"),dk=require("fs-extra"),{once:fne}=require("events"),{handleHDBError:_ne,hdb_errors:hne}=_e(),{PACKAGE_ROOT:pne}=_t(),Ene=nO.join(pne,"logs"),mne=1e3,gne=200;fk.exports=Sne;async function Sne(e){let t=dne(e);if(t)throw _ne(t,t.message,hne.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=une.get(qm.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?qm.LOG_NAMES.HDB:e.log_name,s=n===qm.LOG_NAMES.INSTALL?nO.join(Ene,qm.LOG_NAMES.INSTALL):nO.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,f=u?new Date(e.until):void 0,d=e.limit===void 0?mne:e.limit,h=e.order===void 0?void 0:e.order,_=e.start===void 0?0:e.start,p=_+d,S=0;h==="desc"&&!l&&!f&&(S=Math.max(dk.statSync(s).size-(p+5)*gne,0));let g=dk.createReadStream(s,{start:S});g.on("error",F=>{lne.error(F)});let T=0,m=[],A="",w;g.on("data",F=>{let G=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=A+F;let K=0,ee;for(;(ee=G.exec(F))&&!g.destroyed;){w&&(w.message=F.slice(K,ee.index),M(w));let[ie,X,re]=ee,z=re.split("] ["),he=z[0],Te=z[1];z.splice(0,2),w={timestamp:X,thread:he,level:Te,tags:z,message:""},K=ee.index+ie.length}A=F.slice(K)}),g.on("end",F=>{g.destroyed||w&&(w.message=A.trim(),M(w))}),g.resume();function M(F){let G,K,ee;switch(!0){case(i&&c&&u):G=new Date(F.timestamp),K=new Date(l),ee=new Date(f),F.level===o&&G>=K&&G<=ee&&T<_?T++:F.level===o&&G>=K&&G<=ee&&(Na(F,h,m),T++,T===p&&g.destroy());break;case(i&&c):G=new Date(F.timestamp),K=new Date(l),F.level===o&&G>=K&&T<_?T++:F.level===o&&G>=K&&(Na(F,h,m),T++,T===p&&g.destroy());break;case(i&&u):G=new Date(F.timestamp),ee=new Date(f),F.level===o&&G<=ee&&T<_?T++:F.level===o&&G<=ee&&(Na(F,h,m),T++,T===p&&g.destroy());break;case(c&&u):G=new Date(F.timestamp),K=new Date(l),ee=new Date(f),G>=K&&G<=ee&&T<_?T++:G>=K&&G<=ee&&(Na(F,h,m),T++,T===p&&g.destroy());break;case i:F.level===o&&T<_?T++:F.level===o&&(Na(F,h,m),T++,T===p&&g.destroy());break;case c:G=new Date(F.timestamp),K=new Date(l),G>=K&&T<_?T++:G>=K&&T>=_&&(Na(F,h,m),T++,T===p&&g.destroy());break;case u:G=new Date(F.timestamp),ee=new Date(f),G<=ee&&T<_?T++:G<=ee&&T>=_&&(Na(F,h,m),T++,T===p&&g.destroy());break;default:T<_?T++:(Na(F,h,m),T++,T===p&&g.destroy())}}return a(M,"onLogMessage"),await fne(g,"close"),m}a(Sne,"readLog");function Na(e,t,r){t==="desc"?Tne(e,r):t==="asc"?Ane(e,r):r.push(e)}a(Na,"pushLineToResult");function Tne(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(Tne,"insertDescending");function Ane(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(Ane,"insertAscending")});var $m=P((uIe,Ek)=>{"use strict";var iO=require("joi"),{string:Pu,boolean:_k,date:Rne}=iO.types(),yne=pt(),{validateSchemaExists:oIe,validateTableExists:aIe,validateSchemaName:cIe}=Ti(),bne=(H(),D(q)),One=Ot(),hk=ce();hk.initSync();var lIe=Pu.invalid(hk.get(bne.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(One.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),pk={operation:Pu.valid("add_node","update_node","set_node_replication"),node_name:Pu.optional(),subscriptions:iO.array().items({table:Pu.optional(),schema:Pu.optional(),database:Pu.optional(),subscribe:_k.required(),publish:_k.required().custom(wne),start_time:Rne.iso()})};function Nne(e){return yne.validateBySchema(e,iO.object(pk))}a(Nne,"addUpdateNodeValidator");function wne(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(wne,"checkForFalsy");Ek.exports={addUpdateNodeValidator:Nne,validation_schema:pk}});var Du=P((fIe,mk)=>{"use strict";var oO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},aO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};mk.exports={Node:oO,NodeSubscription:aO}});var Sk=P((hIe,gk)=>{"use strict";var Ine=(H(),D(q)).OPERATIONS_ENUM,cO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ine.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gk.exports=cO});var C_=P((EIe,Tk)=>{"use strict";var lO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},uO=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)}};Tk.exports={RemotePayloadObject:lO,RemotePayloadSubscription:uO}});var Rk=P((gIe,Ak)=>{"use strict";var dO=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}};Ak.exports=dO});var bk=P((bIe,yk)=>{"use strict";var Cne=Rk(),TIe=Mt(),AIe=at(),Pne=j(),{getSchemaPath:RIe,getTransactionAuditStorePath:yIe}=ht(),{getDatabases:Dne}=(De(),D(nt));yk.exports=Lne;async function Lne(e){let t=new Cne;try{let r=Dne()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){Pne.warn(`unable to stat table dbi due to ${r}`)}return t}a(Lne,"lmdbGetTableSize")});var Nk=P((NIe,Ok)=>{"use strict";var fO=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}};Ok.exports=fO});var Mu=P((LIe,Pk)=>{"use strict";var Mne=require("fs-extra"),vne=require("path"),Qr=require("systeminformation"),wa=j(),wk=Sr(),IIe=Ot(),Lu=(H(),D(q)),Une=bk(),xne=lo(),{getThreadInfo:Ik}=rt(),P_=ce();P_.initSync();var Bne=Nk(),{openEnvironment:CIe}=at(),{getSchemaPath:PIe}=ht(),{database:DIe,databases:_O}=(De(),D(nt)),Vm;Pk.exports={getHDBProcessInfo:mO,getNetworkInfo:SO,getDiskInfo:gO,getMemoryInfo:EO,getCPUInfo:pO,getTimeInfo:hO,getSystemInformation:TO,systemInformation:Hne,getTableSize:AO,getMetrics:RO};function hO(){return Qr.time()}a(hO,"getTimeInfo");async function pO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...f}=await Qr.cpu();f.cpu_speed=await Qr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:h,raw_currentload_irq:_,raw_currentload_nice:p,raw_currentload_system:S,raw_currentload_user:g,cpus:T,...m}=await Qr.currentLoad();return m.cpus=[],T.forEach(A=>{let{raw_load:w,raw_load_idle:M,raw_load_irq:F,raw_load_nice:G,raw_load_system:K,raw_load_user:ee,...ie}=A;m.cpus.push(ie)}),f.current_load=m,f}catch(e){return wa.error(`error in getCPUInfo: ${e}`),{}}}a(pO,"getCPUInfo");async function EO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await Qr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return wa.error(`error in getMemoryInfo: ${e}`),{}}}a(EO,"getMemoryInfo");async function mO(){let e={core:[],clustering:[]};try{let t=await Qr.processes(),r;try{r=Number.parseInt(await Mne.readFile(vne.join(P_.get(Lu.CONFIG_PARAMS.ROOTPATH),Lu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Lu.NODE_ERROR_CODES.ENOENT)wa.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return wa.error(`error in getHDBProcessInfo: ${t}`),e}}a(mO,"getHDBProcessInfo");async function gO(){let e={};try{if(!P_.get(Lu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await Qr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await Qr.fsStats();return e.read_write=u,e.size=await Qr.fsSize(),e}catch(t){return wa.error(`error in getDiskInfo: ${t}`),e}}a(gO,"getDiskInfo");async function SO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return P_.get(Lu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await Qr.networkInterfaceDefault(),e.latency=await Qr.inetChecksite("google.com"),(await Qr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:f,carrier_changes:d,...h}=n;e.interfaces.push(h)}),(await Qr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return wa.error(`error in getNetworkInfo: ${t}`),e}}a(SO,"getNetworkInfo");async function TO(){if(Vm!==void 0)return Vm;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await Qr.osInfo();e=c;let l=await Qr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Vm=e,Vm}catch(t){return wa.error(`error in getSystemInformation: ${t}`),e}}a(TO,"getSystemInformation");async function AO(){let e=[],t=await xne.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Une(n));return e}a(AO,"getTableSize");async function RO(){let e={};for(let t in _O){let r=e[t]={},n=r.tables={};for(let s in _O[t])try{let i=_O[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,f,d]=l.trim().split(" ");return{pid:u,thread:f,txnid:d}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:f,entryCount:d,overflowPages:h}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){wa.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(RO,"getMetrics");async function Ck(){if(P_.get(Lu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await wk.getNATSReferences(),t=await wk.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(Ck,"getNatsStreamInfo");async function Hne(e){let t=new Bne;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await TO(),t.time=hO(),t.cpu=await pO(),t.memory=await EO(),t.disk=await gO(),t.network=await SO(),t.harperdb_processes=await mO(),t.table_size=await AO(),t.metrics=await RO(),t.threads=await Ik(),t.replication=await Ck(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await TO();break;case"time":t.time=hO();break;case"cpu":t.cpu=await pO();break;case"memory":t.memory=await EO();break;case"disk":t.disk=await gO();break;case"network":t.network=await SO();break;case"harperdb_processes":t.harperdb_processes=await mO();break;case"table_size":t.table_size=await AO();break;case"database_metrics":case"metrics":t.metrics=await RO();break;case"threads":t.threads=await Ik();break;case"replication":t.replication=await Ck();break;default:break}return t}a(Hne,"systemInformation")});var So=P((xIe,vk)=>{"use strict";var kne=pn(),yO=ae(),Fne=require("util"),Kc=(H(),D(q)),Dk=ce();Dk.initSync();var Gne=mb(),Lk=Kr(),{Node:vIe,NodeSubscription:UIe}=Du(),qne=ou(),$ne=Sk(),{RemotePayloadObject:Vne,RemotePayloadSubscription:Kne}=C_(),{handleHDBError:Yne,hdb_errors:Wne}=_e(),{HTTP_STATUS_CODES:zne,HDB_ERROR_MSGS:Qne}=Wne,jne=Ws(),Jne=Mu(),{packageJson:Xne}=_t(),{getDatabases:Zne}=(De(),D(nt)),ese=Fne.promisify(Gne.authorize),tse=Lk.searchByHash,rse=Lk.searchByValue;vk.exports={authHeaderToUser:nse,isEmpty:sse,getNodeRecord:ise,upsertNodeRecord:ose,buildNodePayloads:ase,checkClusteringEnabled:cse,getAllNodeRecords:lse,getSystemInfo:use,reverseSubscription:Mk};async function nse(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await ese(t,null),e}a(nse,"authHeaderToUser");function sse(e){return e==null}a(sse,"isEmpty");async function ise(e){let t=new qne(Kc.SYSTEM_SCHEMA_NAME,Kc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return tse(t)}a(ise,"getNodeRecord");async function ose(e){let t=new $ne(Kc.SYSTEM_SCHEMA_NAME,Kc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return kne.upsert(t)}a(ose,"upsertNodeRecord");function Mk(e){if(yO.isEmpty(e.subscribe)||yO.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(Mk,"reverseSubscription");function ase(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,f=yO.getTableHashAttribute(l,u),{subscribe:d,publish:h}=Mk(c),_=Zne()[l]?.[u],p=new Kne(l,u,f,h,d,c.start_time,_.schemaDefined?_.attributes:void 0);s.push(p)}return new Vne(r,t,s,n)}a(ase,"buildNodePayloads");function cse(){if(!Dk.get(Kc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Yne(new Error,Qne.CLUSTERING_NOT_ENABLED,zne.BAD_REQUEST,void 0,void 0,!0)}a(cse,"checkClusteringEnabled");async function lse(){let e=new jne(Kc.SYSTEM_SCHEMA_NAME,Kc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await rse(e))}a(lse,"getAllNodeRecords");async function use(){let e=await Jne.getSystemInformation();return{hdb_version:Xne.version,node_version:e.node_version,platform:e.platform}}a(use,"getSystemInfo")});var bO=P((HIe,qk)=>{"use strict";var Km=Sr(),Uk=ae(),xk=Ot(),Bk=(H(),D(q)),Ym=j(),Hk=km(),dse=Jf(),{RemotePayloadObject:fse}=C_(),{handleHDBError:kk,hdb_errors:_se}=_e(),{HTTP_STATUS_CODES:Fk}=_se,{NodeSubscription:Gk}=Du();qk.exports=hse;async function hse(e,t){let r;try{r=await Km.request(`${t}.${xk.REQUEST_SUFFIX}`,new fse(Bk.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Ym.trace("Response from remote describe all request:",r)}catch(o){Ym.error(`addNode received error from describe all request to remote node: ${o}`);let c=Km.requestErrorHandler(o,"add_node",t);throw kk(new Error,c,Fk.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===xk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw kk(new Error,o,Fk.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===Bk.SYSTEM_SCHEMA_NAME){await Km.createLocalTableStream(l,c);let p=new Gk(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p);continue}let u=Uk.doesSchemaExist(l),f=n[l]!==void 0,d=c?Uk.doesTableExist(l,c):!0,h=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!f||!d&&!h){s.push(o);continue}if(!u&&f&&(Ym.trace(`addNode creating schema: ${l}`),await Hk.createSchema({operation:"create_schema",schema:l})),!d&&h){Ym.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new dse(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await Hk.createTable(p)}await Km.createLocalTableStream(l,c);let _=new Gk(l,c,o.publish,o.subscribe);_.start_time=o.start_time,i.push(_)}return{added:i,skipped:s}}a(hse,"reviewSubscriptions")});var Yc={};Be(Yc,{addNodeBack:()=>Sse,removeNodeBack:()=>Tse,setNode:()=>gse});async function gse(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=Qs(t)):t=Um(r);let n=(0,Vk.validateBySchema)(e,mse);if(n)throw(0,To.handleHDBError)(n,n.message,Ese.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new To.ClientError("url or hostname is required for remove_node operation");let _=r,p=mr(),S=await p.get(_);if(!S)throw new To.ClientError(_+" does not exist");try{await w_({url:S.url},{operation:$t.REMOVE_NODE_BACK,name:S?.subscriptions?.length>0?Xe():_},void 0)}catch(g){zn.warn(`Error removing node from target node ${_}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await p.delete(_),`Successfully removed '${_}' from cluster`}if(!t)throw new To.ClientError("url required for this operation");let s=Ea();if(s==null)throw new To.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ms.getReplicationCert)();let _=await(0,ms.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,ms.createCsr)(),zn.info("Sending CSR to target node:",t)):_&&(c=_.certificate,zn.info("Sending CA named",_.name,"to target node",t))}let l={operation:$t.ADD_NODE_BACK,hostname:(0,Kk.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map($k):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let _=$k(e);l.subscribe=_.subscribe,l.publish=_.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,f;try{u=await w_({url:t},l,e)}catch(_){_.message=`Error returned from ${t}: `+_.message,zn.warn("Error adding node:",t,"to cluster:",_),f=_}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw f?(f.message+=" and connection was required to sign certificate",f):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(zn.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ms.setCertTable)({name:pse.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ms.setCertTable)({name:Xe(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let d={url:t,ca:u?.usingCA};if(e.hostname&&(d.name=e.hostname),e.subscriptions?d.subscriptions=e.subscriptions:d.replicates=!0,e.start_time&&(d.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(d.authorization=e.authorization),d.replicates){let _={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(_.authorization=e.authorization),e.start_time&&(_.start_time=e.start_time),await mo(Xe(),_)}await mo(u?u.nodeName:d.name??Qs(t),d);let h;return e.operation==="update_node"?h=`Successfully updated '${t}'`:h=`Successfully added '${t}' to cluster`,f&&(h+=" but there was an error updating target node: "+f.message),h}async function Sse(e){zn.trace("addNodeBack received request:",e);let t=await(0,ms.signCertificate)(e),r;e.csr?(r=t.signingCA,zn.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,zn.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization);let s=await(0,ms.getReplicationCertAuth)();if(n.replicates){let i={url:Ea(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await mo(Xe(),i)}return await mo(e.hostname,n),t.nodeName=Xe(),t.usingCA=s?.certificate,zn.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function Tse(e){zn.trace("removeNodeBack received request:",e),await mr().delete(e.name)}function $k(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ms,Vk,vu,Kk,zn,To,pse,Ese,mse,Wc=be(()=>{ms=U(Xs()),Vk=U(pt()),vu=U(require("joi")),Kk=U(ce());H();T_();Bc();_s();zn=U(j()),To=U(_e()),{pki:pse}=require("node-forge"),{HTTP_STATUS_CODES:Ese}=To.hdb_errors,mse=vu.default.object({hostname:vu.default.string(),verify_tls:vu.default.boolean(),replicates:vu.default.boolean(),subscriptions:vu.default.array()});a(gse,"setNode");a(Sse,"addNodeBack");a(Tse,"removeNodeBack");a($k,"reverseSubscription")});var Jm=P((WIe,Wk)=>{"use strict";var{handleHDBError:Wm,hdb_errors:Ase}=_e(),{HTTP_STATUS_CODES:zm}=Ase,{addUpdateNodeValidator:Rse}=$m(),Qm=j(),jm=(H(),D(q)),Yk=Ot(),yse=ae(),D_=Sr(),L_=So(),OO=ce(),bse=bO(),{Node:Ose,NodeSubscription:Nse}=Du(),{broadcast:wse}=rt(),{setNode:Ise}=(Wc(),D(Yc)),KIe=ce(),YIe=(H(),D(q)),Cse="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Pse="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Dse=OO.get(jm.CONFIG_PARAMS.CLUSTERING_NODENAME);Wk.exports=Lse;async function Lse(e,t=!1){if(Qm.trace("addNode called with:",e),OO.get(jm.CONFIG_PARAMS.REPLICATION_URL)||OO.get(jm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Ise(e);L_.checkClusteringEnabled();let r=Rse(e);if(r)throw Wm(r,r.message,zm.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await L_.getNodeRecord(n);if(!yse.isEmptyOrZeroLength(d))throw Wm(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,zm.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await bse(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Cse,o;let c=L_.buildNodePayloads(s,Dse,jm.OPERATIONS_ENUM.ADD_NODE,await L_.getSystemInfo()),l=[];for(let d=0,h=s.length;d<h;d++){let _=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new Nse(_.schema,_.table,_.publish,_.subscribe))}Qm.trace("addNode sending remote payload:",c);let u;try{u=await D_.request(`${n}.${Yk.REQUEST_SUFFIX}`,c)}catch(d){Qm.error(`addNode received error from request: ${d}`);for(let _=0,p=s.length;_<p;_++){let S=s[_];S.publish=!1,S.subscribe=!1,await D_.updateRemoteConsumer(S,n)}let h=D_.requestErrorHandler(d,"add_node",n);throw Wm(new Error,h,zm.INTERNAL_SERVER_ERROR,"error",h)}if(u.status===Yk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${u.message}`;throw Wm(new Error,d,zm.INTERNAL_SERVER_ERROR,"error",d)}Qm.trace(u);for(let d=0,h=s.length;d<h;d++){let _=s[d];await D_.updateRemoteConsumer(_,n),_.subscribe===!0&&await D_.updateConsumerIterator(_.schema,_.table,n,"start")}let f=new Ose(n,l,u.system_info);return await L_.upsertNodeRecord(f),wse({type:"nats_update"}),i.length>0?o.message=Pse:o.message=`Successfully added '${n}' to manifest`,o}a(Lse,"addNode")});var CO=P((jIe,Qk)=>{"use strict";var{handleHDBError:NO,hdb_errors:Mse}=_e(),{HTTP_STATUS_CODES:wO}=Mse,{addUpdateNodeValidator:vse}=$m(),M_=j(),Xm=(H(),D(q)),zk=Ot(),QIe=ae(),v_=Sr(),U_=So(),IO=ce(),{cloneDeep:Use}=require("lodash"),xse=bO(),{Node:Bse,NodeSubscription:Hse}=Du(),{broadcast:kse}=rt(),{setNode:Fse}=(Wc(),D(Yc)),Gse="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",qse="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",$se=IO.get(Xm.CONFIG_PARAMS.CLUSTERING_NODENAME);Qk.exports=Vse;async function Vse(e){if(M_.trace("updateNode called with:",e),IO.get(Xm.CONFIG_PARAMS.REPLICATION_URL)??IO.get(Xm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Fse(e);U_.checkClusteringEnabled();let t=vse(e);if(t)throw NO(t,t.message,wO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await U_.getNodeRecord(r);s.length>0&&(n=Use(s));let{added:i,skipped:o}=await xse(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Gse,c;let l=U_.buildNodePayloads(i,$se,Xm.OPERATIONS_ENUM.UPDATE_NODE,await U_.getSystemInfo());for(let f=0,d=i.length;f<d;f++){let h=i[f];M_.trace(`updateNode updating work stream for node: ${r} subscription:`,h),i[f].start_time===void 0&&delete i[f].start_time}M_.trace("updateNode sending remote payload:",l);let u;try{u=await v_.request(`${r}.${zk.REQUEST_SUFFIX}`,l)}catch(f){M_.error(`updateNode received error from request: ${f}`);let d=v_.requestErrorHandler(f,"update_node",r);throw NO(new Error,d,wO.INTERNAL_SERVER_ERROR,"error",d)}if(u.status===zk.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${r}: ${u.message}`;throw NO(new Error,f,wO.INTERNAL_SERVER_ERROR,"error",f)}M_.trace(u);for(let f=0,d=i.length;f<d;f++){let h=i[f];await v_.updateRemoteConsumer(h,r),h.subscribe===!0?await v_.updateConsumerIterator(h.schema,h.table,r,"start"):await v_.updateConsumerIterator(h.schema,h.table,r,"stop")}return n||(n=[new Bse(r,[],u.system_info)]),await Kse(n[0],i,u.system_info),o.length>0?c.message=qse:c.message=`Successfully updated '${r}'`,c}a(Vse,"updateNode");async function Kse(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let f=n.subscriptions[l];if(f.schema===o.schema&&f.table===o.table){f.publish=o.publish,f.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Hse(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await U_.upsertNodeRecord(n),kse({type:"nats_update"})}a(Kse,"updateNodeTable")});var eF=P((XIe,Zk)=>{"use strict";var Xk=require("joi"),{string:jk}=Xk.types(),Yse=pt(),Jk=(H(),D(q)),Wse=ce(),zse=Ot();Zk.exports=Qse;function Qse(e){let t=jk.invalid(Wse.get(Jk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(zse.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=Xk.object({operation:jk.valid(Jk.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Yse.validateBySchema(e,r)}a(Qse,"removeNodeValidator")});var Zm=P((eCe,iF)=>{"use strict";var{handleHDBError:tF,hdb_errors:jse}=_e(),{HTTP_STATUS_CODES:rF}=jse,Jse=eF(),x_=j(),nF=So(),Xse=ae(),Uu=(H(),D(q)),sF=Ot(),PO=Sr(),DO=ce(),{RemotePayloadObject:Zse}=C_(),{NodeSubscription:eie}=Du(),tie=jf(),rie=Ac(),{broadcast:nie}=rt(),{setNode:sie}=(Wc(),D(Yc)),iie=DO.get(Uu.CONFIG_PARAMS.CLUSTERING_NODENAME);iF.exports=oie;async function oie(e){if(x_.trace("removeNode called with:",e),DO.get(Uu.CONFIG_PARAMS.REPLICATION_URL)??DO.get(Uu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return sie(e);nF.checkClusteringEnabled();let t=Jse(e);if(t)throw tF(t,t.message,rF.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await nF.getNodeRecord(r);if(Xse.isEmptyOrZeroLength(n))throw tF(new Error,`Node '${r}' was not found.`,rF.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Zse(Uu.OPERATIONS_ENUM.REMOVE_NODE,iie,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let f=n.subscriptions[l];f.subscribe===!0&&await PO.updateConsumerIterator(f.schema,f.table,r,"stop");try{await PO.updateRemoteConsumer(new eie(f.schema,f.table,!1,!1),r)}catch(d){x_.error(d)}}try{i=await PO.request(`${r}.${sF.REQUEST_SUFFIX}`,s),x_.trace("Remove node reply from remote node:",r,i)}catch(l){x_.error("removeNode received error from request:",l),o=!0}let c=new tie(Uu.SYSTEM_SCHEMA_NAME,Uu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await rie.deleteRecord(c),nie({type:"nats_update"}),i?.status===sF.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(x_.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(oie,"removeNode")});var cF=P((rCe,aF)=>{"use strict";var oF=require("joi"),{string:aie,array:cie}=oF.types(),lie=pt(),uie=$m();aF.exports=die;function die(e){let t=oF.object({operation:aie.valid("configure_cluster").required(),connections:cie.items(uie.validation_schema).required()});return lie.validateBySchema(e,t)}a(die,"configureClusterValidator")});var LO=P((sCe,_F)=>{"use strict";var lF=(H(),D(q)),eg=j(),fie=ae(),_ie=ce(),hie=Zm(),pie=Jm(),Eie=So(),mie=cF(),{handleHDBError:uF,hdb_errors:gie}=_e(),{HTTP_STATUS_CODES:dF}=gie,Sie="Configure cluster complete.",Tie="Failed to configure the cluster. Check the logs for more details.",Aie="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";_F.exports=Rie;async function Rie(e){eg.trace("configure cluster called with:",e);let t=mie(e);if(t)throw uF(t,t.message,dF.BAD_REQUEST,void 0,void 0,!0);let r=await Eie.getAllNodeRecords(),n=[];if(_ie.get(lF.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let f=0,d=r.length;f<d;f++){let h=await fF(hie,{operation:lF.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name);n.push(h)}eg.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let f=0;f<i;f++){let d=e.connections[f],h=await fF(pie,d,d.node_name);s.push(h)}eg.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let f=0,d=u.length;f<d;f++){let h=u[f];h.status==="rejected"&&(eg.error(h.node_name,h?.error?.message,h?.error?.stack),o.includes(h.node_name)||o.push(h.node_name)),(h?.result?.message?.includes?.("Successfully")||h?.result?.includes?.("Successfully"))&&(l=!0),!(typeof h.result=="string"&&h.result.includes("Successfully removed")||h.status==="rejected")&&c.push({node_name:h?.node_name,response:h?.result})}if(fie.isEmptyOrZeroLength(o))return{message:Sie,connections:c};if(l)return{message:Aie,failed_nodes:o,connections:c};throw uF(new Error,Tie,dF.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Rie,"configureCluster");async function fF(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(fF,"functionWrapper")});var mF=P((oCe,EF)=>{"use strict";var B_=require("joi"),yie=pt(),{validateSchemaExists:hF,validateTableExists:bie,validateSchemaName:pF}=Ti(),Oie=B_.object({operation:B_.string().valid("purge_stream"),schema:B_.string().custom(hF).custom(pF).optional(),database:B_.string().custom(hF).custom(pF).optional(),table:B_.string().custom(bie).required()});function Nie(e){return yie.validateBySchema(e,Oie)}a(Nie,"purgeStreamValidator");EF.exports=Nie});var MO=P((cCe,gF)=>{"use strict";var{handleHDBError:wie,hdb_errors:Iie}=_e(),{HTTP_STATUS_CODES:Cie}=Iie,Pie=mF(),Die=Sr(),Lie=So();gF.exports=Mie;async function Mie(e){e.schema=e.schema??e.database;let t=Pie(e);if(t)throw wie(t,t.message,Cie.BAD_REQUEST,void 0,void 0,!0);Lie.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await Die.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Mie,"purgeStream")});var xO=P((uCe,OF)=>{"use strict";var UO=So(),vie=Sr(),rg=ce(),xu=(H(),D(q)),zc=Ot(),Uie=ae(),vO=j(),{RemotePayloadObject:xie}=C_(),{ErrorCode:SF}=require("nats"),{parentPort:TF}=require("worker_threads"),{onMessageByType:Bie}=rt(),{getThisNodeName:Hie}=(_s(),D(Aa)),{requestClusterStatus:kie}=(T_(),D($B)),{getReplicationSharedStatus:Fie}=(Bc(),D(bb)),{CONFIRMATION_STATUS_POSITION:Gie,RECEIVED_VERSION_POSITION:qie,RECEIVED_TIME_POSITION:$ie,SENDING_TIME_POSITION:Vie}=(zb(),D(DH)),AF=rg.get(xu.CONFIG_PARAMS.CLUSTERING_ENABLED),RF=rg.get(xu.CONFIG_PARAMS.CLUSTERING_NODENAME);OF.exports={clusterStatus:Kie,buildNodeStatus:bF};var yF;Bie("cluster-status",async e=>{yF(e)});async function Kie(){if(rg.get(xu.CONFIG_PARAMS.REPLICATION_URL)||rg.get(xu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(TF){TF.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{yF=s});for(let s of n.connections){let i=s.name;for(let o of s.database_sockets){let c=o.database,l;for(let f of Object.values(databases[c]||{}))if(l=f.auditStore,l)break;if(!l)continue;let u=Fie(l,c,i);o.lastCommitConfirmed=tg(u[Gie]),o.lastReceivedRemoteTime=tg(u[qie]),o.lastReceivedLocalTime=tg(u[$ie]),o.sendingMessage=tg(u[Vie])}}}else n=kie();return n.node_name=Hie(),n.is_enabled=!0,n}let e={node_name:RF,is_enabled:AF,connections:[]};if(!AF)return e;let t=await UO.getAllNodeRecords();if(Uie.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(bF(t[n],e.connections));return await Promise.allSettled(r),e}a(Kie,"clusterStatus");function tg(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(tg,"asDate");async function bF(e,t){let r=e.name,n=new xie(xu.OPERATIONS_ENUM.CLUSTER_STATUS,RF,void 0,await UO.getSystemInfo()),s,i,o=zc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await vie.request(zc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===zc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=zc.CLUSTER_STATUS_STATUSES.CLOSED,vO.error(`Error getting node status from ${r} `,s))}catch(l){vO.warn(`Error getting node status from ${r}`,l),l.code===SF.NoResponders?o=zc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===SF.Timeout?o=zc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=zc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Yie(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==xu.PRE_4_0_0_VERSION&&await UO.upsertNodeRecord(l)}catch(l){vO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(bF,"buildNodeStatus");function Yie(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(Yie,"NodeStatusObject")});var HO=P((fCe,NF)=>{"use strict";var{handleHDBError:Wie,hdb_errors:zie}=_e(),{HTTP_STATUS_CODES:Qie}=zie,jie=Sr(),Jie=So(),BO=ae(),ng=require("joi"),Xie=pt(),Zie=2e3,eoe=ng.object({timeout:ng.number().min(1),connected_nodes:ng.boolean(),routes:ng.boolean()});NF.exports=toe;async function toe(e){Jie.checkClusteringEnabled();let t=Xie.validateBySchema(e,eoe);if(t)throw Wie(t,t.message,Qie.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||BO.autoCastBoolean(n),o=s===void 0||BO.autoCastBoolean(s),c={nodes:[]},l=await jie.getServerList(r??Zie),u={};if(i)for(let f=0,d=l.length;f<d;f++){let h=l[f].statsz;h&&(u[l[f].server.name]=h.routes)}for(let f=0,d=l.length;f<d;f++){if(l[f].statsz)continue;let h=l[f].server,_=l[f].data;if(h.name.endsWith("-hub")){let p={name:h.name.slice(0,-4),response_time:l[f].response_time};i&&(p.connected_nodes=[],u[h.name]&&u[h.name].forEach(S=>{p.connected_nodes.includes(S.name.slice(0,-4))||p.connected_nodes.push(S.name.slice(0,-4))})),o&&(p.routes=_.cluster?.urls?_.cluster?.urls.map(S=>({host:S.split(":")[0],port:BO.autoCast(S.split(":")[1])})):[]),c.nodes.push(p)}}return c}a(toe,"clusterNetwork")});var PF=P((hCe,CF)=>{"use strict";var kO=require("joi"),wF=pt(),{route_constraints:IF}=LR();CF.exports={setRoutesValidator:roe,deleteRoutesValidator:noe};function roe(e){let t=kO.object({server:kO.valid("hub","leaf"),routes:IF.required()});return wF.validateBySchema(e,t)}a(roe,"setRoutesValidator");function noe(e){let t=kO.object({routes:IF.required()});return wF.validateBySchema(e,t)}a(noe,"deleteRoutesValidator")});var sg=P((ECe,BF)=>{"use strict";var Ao=wt(),FO=ae(),gs=(H(),D(q)),Bu=ce(),DF=PF(),{handleHDBError:LF,hdb_errors:soe}=_e(),{HTTP_STATUS_CODES:MF}=soe,vF="cluster routes successfully set",UF="cluster routes successfully deleted";BF.exports={setRoutes:ooe,getRoutes:aoe,deleteRoutes:coe};function ioe(e){let t=Ao.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=FO.autoCast(l.port);let u=r.some(d=>d.host===l.host&&d.port===l.port),f=n.some(d=>d.host===l.host&&d.port===l.port);u||f?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?Ao.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Ao.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:vF,set:i,skipped:s}}a(ioe,"setRoutesNats");function ooe(e){let t=DF.setRoutesValidator(e);if(t)throw LF(t,t.message,MF.BAD_REQUEST,void 0,void 0,!0);if(Bu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return ioe(e);let r=[],n=[],s=Bu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{xF(s,i)?n.push(i):(s.push(i),r.push(i))}),Ao.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:vF,set:r,skipped:n}}a(ooe,"setRoutes");function xF(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}a(xF,"existsInArray");function aoe(){if(Bu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Ao.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Bu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(aoe,"getRoutes");function coe(e){let t=DF.deleteRoutesValidator(e);if(t)throw LF(t,t.message,MF.BAD_REQUEST,void 0,void 0,!0);if(Bu.get(gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return loe(e);let r=[],n=[],s=Bu.get(gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{xF(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),Ao.updateConfigValue(gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:UF,deleted:r,skipped:n}}a(coe,"deleteRoutes");function loe(e){let t=Ao.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let f=e.routes[l],d=!1;for(let h=0,_=r.length;h<_;h++){let p=r[h];if(f.host===p.host&&f.port===p.port){r.splice(h,1),d=!0,o=!0,s.push(f);break}}if(!d){let h=!0;for(let _=0,p=n.length;_<p;_++){let S=n[_];if(f.host===S.host&&f.port===S.port){n.splice(_,1),c=!0,h=!1,s.push(f);break}}h&&i.push(f)}}return o&&(r=FO.isEmptyOrZeroLength(r)?null:r,Ao.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=FO.isEmptyOrZeroLength(n)?null:n,Ao.updateConfigValue(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:UF,deleted:s,skipped:i}}a(loe,"deleteRoutesNats")});var kF=P((gCe,HF)=>{"use strict";var H_=require("alasql"),Qc=require("recursive-iterator"),Zs=j(),uoe=ae(),k_=(H(),D(q)),GO=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,foe(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=>k_.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=>!k_.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][k_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=doe(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!k_.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let f=new H_.yy.Column({columnid:u});s.tableid&&(f.tableid=s.tableid),this.ast.columns.push(f),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function doe(e){return e.filter(t=>t[k_.PERMS_CRUD_ENUM.READ])}a(doe,"filterReadRestrictedAttrs");function foe(e,t,r,n,s){_oe(e,t,r,n,s)}a(foe,"interpretAST");function F_(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(F_,"addSchemaTableToMap");function _oe(e,t,r,n,s){if(!e){Zs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof H_.yy.Insert?moe(e,t,r):e instanceof H_.yy.Select?hoe(e,t,r,n,s):e instanceof H_.yy.Update?poe(e,t,r):e instanceof H_.yy.Delete?Eoe(e,t,r):Zs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(_oe,"getRecordAttributesAST");function hoe(e,t,r,n,s){if(!e){Zs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(uoe.isEmptyOrZeroLength(i)){Zs.error("No schema specified");return}e.from.forEach(c=>{F_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),F_(c.table,t,r,n,s)});let o=new Qc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Zs.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new Qc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let f=u.tableid?u.tableid:l;if(!t.get(i).has(f))if(r.has(f))f=r.get(f);else{Zs.info(`table specified as ${f} not found.`);continue}t.get(i).get(f).indexOf(u.columnid)<0&&t.get(i).get(f).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new Qc(c.on);for(let{node:u}of l)if(u&&u.columnid){let f=u.tableid,d=s.get(f);if(!t.get(d).has(f))if(r.has(f))f=r.get(f);else{Zs.info(`table specified as ${f} not found.`);continue}t.get(d).get(f).indexOf(u.columnid)<0&&t.get(d).get(f).push(u.columnid)}}),e.order){let c=new Qc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,f=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(f).has(u))if(r.has(u))u=r.get(u);else{Zs.info(`table specified as ${u} not found.`);return}t.get(f).get(u).indexOf(l.columnid)<0&&t.get(f).get(u).push(l.columnid)}}}a(hoe,"getSelectAttributes");function poe(e,t,r){if(!e){Zs.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Qc(e.columns),s=e.table.databaseid;F_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&qO(e.table.tableid,s,i.columnid,t,r)}a(poe,"getUpdateAttributes");function Eoe(e,t,r){if(!e){Zs.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Qc(e.where),s=e.table.databaseid;F_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&qO(e.table.tableid,s,i.columnid,t,r)}a(Eoe,"getDeleteAttributes");function moe(e,t,r){if(!e){Zs.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Qc(e.columns),s=e.into.databaseid;F_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&qO(e.into.tableid,s,i.columnid,t,r)}a(moe,"getInsertAttributes");function qO(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(qO,"pushAttribute");HF.exports=GO});var GF=P((TCe,FF)=>{"use strict";var ig=(H(),D(q)),og=class{static{a(this,"BaseLicense")}constructor(t=0,r=ig.RAM_ALLOCATION_ENUM.DEFAULT,n=ig.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},$O=class extends og{static{a(this,"ExtendedLicense")}constructor(t=0,r=ig.RAM_ALLOCATION_ENUM.DEFAULT,n=ig.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};FF.exports={BaseLicense:og,ExtendedLicense:$O}});var Fu=P((RCe,WF)=>{"use strict";var ku=require("fs-extra"),ag=(yE(),D(RE)),$F=require("crypto"),goe=require("moment"),Soe=require("uuid").v4,jr=j(),KO=require("path"),Toe=ae(),jc=(H(),D(q)),{totalmem:qF}=require("os"),Aoe=GF().ExtendedLicense,Hu="invalid license key format",Roe="061183",yoe="mofi25",boe="aes-256-cbc",Ooe=16,Noe=32,VF=ce(),{resolvePath:KF}=wt();VF.initSync();var VO;WF.exports={validateLicense:YF,generateFingerPrint:Ioe,licenseSearch:zO,getLicense:Doe,checkMemoryLimit:Loe};function YO(){return KO.join(VF.getHdbBasePath(),jc.LICENSE_KEY_DIR_NAME,jc.LICENSE_FILE_NAME)}a(YO,"getLicenseDirPath");function woe(){let e=YO();return KF(KO.join(e,jc.LICENSE_FILE_NAME))}a(woe,"getLicenseFilePath");function WO(){let e=YO();return KF(KO.join(e,jc.REG_KEY_FILE_NAME))}a(WO,"getFingerPrintFilePath");async function Ioe(){let e=WO();try{return await ku.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Coe();throw jr.error(`Error writing fingerprint file to ${e}`),jr.error(t),new Error("There was an error generating the fingerprint")}}a(Ioe,"generateFingerPrint");async function Coe(){let e=Soe(),t=ag.hash(e,ag.HASH_FUNCTION.MD5),r=WO();try{await ku.mkdirp(YO()),await ku.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw jr.error(`Error writing fingerprint file to ${r}`),jr.error(n),new Error("There was an error generating the fingerprint")}return t}a(Coe,"writeFingerprint");function YF(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:jc.RAM_ALLOCATION_ENUM.DEFAULT,version:jc.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jr.error("empty license key passed to validate."),r;let n=WO(),s=!1;try{s=ku.statSync(n)}catch(i){jr.error(i)}if(s){let i;try{i=ku.readFileSync(n,"utf8")}catch{jr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(yoe),c=o[1];c=Buffer.concat([Buffer.from(c)],Ooe);let l=Buffer.concat([Buffer.from(i)],Noe),u=$F.createDecipheriv(boe,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let f=null;try{f=u.update(o[0],"hex","utf8"),f.trim(),f+=u.final("utf8")}catch{let _=Poe(o[0],i);if(_)f=_;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hu),jr.error(Hu),new Error(Hu)}let d;if(isNaN(f))try{d=JSON.parse(f),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(Hu),jr.error(Hu),new Error(Hu)}else r.exp_date=f;r.exp_date<goe().valueOf()&&(r.valid_date=!1),ag.validate(o[1],`${Roe}${i}${t}`,ag.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||jr.error("Invalid licence"),r}a(YF,"validateLicense");function Poe(e,t){try{let r=$F.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{jr.warn("Check old license failed")}}a(Poe,"checkOldLicense");function zO(){let e=new Aoe,t=[];try{t=ku.readFileSync(woe(),"utf-8").split(`\r
22
+ `)}catch(r){r.code==="ENOENT"?jr.debug("no license file found"):jr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(Toe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=YF(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){jr.error("There was an error parsing the license string."),jr.error(s),e.ram_allocation=jc.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return VO=e,e}a(zO,"licenseSearch");async function Doe(){return VO||await zO(),VO}a(Doe,"getLicense");function Loe(){let e=zO().ram_allocation,t=process.constrainedMemory?.()||qF();if(t=Math.round(Math.min(t,qF())/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(Loe,"checkMemoryLimit")});var JO=P((bCe,JF)=>{var cg=Fu(),zF=require("chalk"),Qn=j(),QF=require("prompt"),{promisify:Moe}=require("util"),QO=(H(),D(q)),voe=require("fs-extra"),Uoe=require("path"),xoe=ae(),{packageJson:Boe}=_t(),jF=ce();jF.initSync();var Hoe=require("moment"),koe=Moe(QF.get),Foe=Uoe.join(jF.getHdbBasePath(),QO.LICENSE_KEY_DIR_NAME,QO.LICENSE_FILE_NAME,QO.LICENSE_FILE_NAME);JF.exports={getFingerprint:qoe,setLicense:Goe,parseLicense:jO,register:$oe,getRegistrationInfo:Koe};async function Goe(e){if(e&&e.key&&e.company){try{Qn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await jO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qn.error(r),Qn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Goe,"setLicense");async function qoe(){let e={};try{e=await cg.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qn.error(r),Qn.error(t),new Error(r)}return e}a(qoe,"getFingerprint");async function jO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qn.info("Validating license input...");let r=cg.validateLicense(e,t);if(Qn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qn.info("writing license to disk"),await voe.writeFile(Foe,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qn.error("Failed to write License"),n}return"Registration successful."}a(jO,"parseLicense");async function $oe(){let e=await Voe();return jO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a($oe,"register");async function Voe(){let e=await cg.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:zF.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:zF.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{QF.start()}catch(n){Qn.error(n)}let r;try{r=await koe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Voe,"promptForRegistration");async function Koe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await cg.getLicense()}catch(r){throw Qn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(xoe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Boe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Hoe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Koe,"getRegistrationInfo")});var ZF=P((NCe,XF)=>{"use strict";var Yoe=Ot(),XO=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d,h,_,p){this.port=t,o===null&&(o=void 0),this.server_name=r+Yoe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:f,port:d,routes:h,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:_},HDB:{users:p}},this.system_account="SYS"}};XF.exports=XO});var rG=P((ICe,tG)=>{"use strict";var eG=Ot(),ZO=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,f,d){this.port=t,d===null&&(d=void 0),this.server_name=r+eG.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+eG.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:f,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};tG.exports=ZO});var sG=P((PCe,nG)=>{"use strict";var eN=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};nG.exports=eN});var oG=P((LCe,iG)=>{"use strict";var Woe=Ot(),tN=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Woe.SERVER_SUFFIX.ADMIN,this.password=r}};iG.exports=tN});var fg=P((vCe,lG)=>{"use strict";var Jc=require("path"),Xc=require("fs-extra"),zoe=ZF(),Qoe=rG(),joe=sG(),Joe=oG(),rN=qn(),qu=ae(),bn=wt(),ug=(H(),D(q)),G_=Ot(),{CONFIG_PARAMS:Wt}=ug,$u=j(),q_=ce(),aG=co(),nN=Sr(),Xoe=Xs(),Gu="clustering",Zoe=1e4,cG=50;lG.exports={generateNatsConfig:tae,removeNatsConfig:rae,getHubConfigPath:eae};function eae(){let e=q_.get(Wt.ROOTPATH);return Jc.join(e,Gu,G_.NATS_CONFIG_FILES.HUB_SERVER)}a(eae,"getHubConfigPath");async function tae(e=!1,t=void 0){let r=q_.get(Wt.ROOTPATH);Xc.ensureDirSync(Jc.join(r,"clustering","leaf")),q_.initSync();let n=bn.getConfigFromFile(Wt.CLUSTERING_TLS_CERT_AUTH),s=bn.getConfigFromFile(Wt.CLUSTERING_TLS_PRIVATEKEY),i=bn.getConfigFromFile(Wt.CLUSTERING_TLS_CERTIFICATE);!await Xc.exists(i)&&!await Xc.exists(!n)&&await Xoe.createNatsCerts();let o=Jc.join(r,Gu,G_.PID_FILES.HUB),c=Jc.join(r,Gu,G_.PID_FILES.LEAF),l=bn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Jc.join(r,Gu,G_.NATS_CONFIG_FILES.HUB_SERVER),f=Jc.join(r,Gu,G_.NATS_CONFIG_FILES.LEAF_SERVER),d=bn.getConfigFromFile(Wt.CLUSTERING_TLS_INSECURE),h=bn.getConfigFromFile(Wt.CLUSTERING_TLS_VERIFY),_=bn.getConfigFromFile(Wt.CLUSTERING_NODENAME),p=bn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await nN.checkNATSServerInstalled()||dg("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await rN.listUsers(),g=bn.getConfigFromFile(Wt.CLUSTERING_USER),T=await rN.getClusterUser();(qu.isEmpty(T)||T.active!==!0)&&dg(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lg(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lg(Wt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lg(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),await lg(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let m=[],A=[];for(let[ie,X]of S.entries())X.role?.role===ug.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(m.push(new Joe(X.username,aG.decrypt(X.hash))),A.push(new joe(X.username,aG.decrypt(X.hash))));let w=[],{hub_routes:M}=bn.getClusteringRoutes();if(!qu.isEmptyOrZeroLength(M))for(let ie of M)w.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${ie.host}:${ie.port}`);let F=new zoe(bn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_NETWORK_PORT),_,o,i,s,n,d,h,p,bn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NAME),bn.getConfigFromFile(Wt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),w,m,A);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=qu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ug.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Xc.writeJson(u,F),$u.trace(`Hub server config written to ${u}`));let G=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${p}`,K=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${p}`,ee=new Qoe(bn.getConfigFromFile(Wt.CLUSTERING_LEAFSERVER_NETWORK_PORT),_,c,l,[G],[K],m,A,i,s,n,d);n==null&&delete ee.tls.ca_file,(t===void 0||t===ug.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Xc.writeJson(f,ee),$u.trace(`Leaf server config written to ${f}`))}a(tae,"generateNatsConfig");async function lg(e){let t=q_.get(e);return qu.isEmpty(t)&&dg(`port undefined for '${e}'`),await qu.isPortTaken(t)&&dg(`'${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(lg,"isPortAvailable");function dg(e){let t=`Error generating clustering config: ${e}`;$u.error(t),console.error(t),process.exit(1)}a(dg,"generateNatsConfigError");async function rae(e){let{port:t,config_file:r}=nN.getServerConfig(e),{username:n,decrypt_hash:s}=await rN.getClusterUser(),i=0,o=2e3;for(;i<cG;){try{let f=await nN.createConnection(t,n,s,!1);if(f.protocol.connected===!0){f.close();break}}catch(f){$u.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${f}`)}if(i++,i>=cG)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.`);let u=o*(i*2);u>3e4&&$u.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await qu.async_set_timeout(u)}let c="0".repeat(Zoe),l=Jc.join(q_.get(Wt.ROOTPATH),Gu,r);await Xc.writeFile(l,c),await Xc.remove(l),$u.notify(e,"started.")}a(rae,"removeNatsConfig")});var pG=P((xCe,hG)=>{"use strict";var jn=ce(),nae=Fu(),Ge=(H(),D(q)),$_=Ot(),Ro=require("path"),{PACKAGE_ROOT:hg}=_t(),uG=ce(),_g=ae(),Vu="/dev/null",sae=Ro.join(hg,"launchServiceScripts"),dG=Ro.join(hg,"utility/scripts"),iae=Ro.join(dG,Ge.HDB_RESTART_SCRIPT),fG=Ro.resolve(hg,"dependencies",`${process.platform}-${process.arch}`,$_.NATS_BINARY_NAME);function _G(){let t=nae.licenseSearch().ram_allocation||Ge.RAM_ALLOCATION_ENUM.DEFAULT,r=Ge.MEM_SETTING_KEY+t,n={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return _g.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_g.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:hg}}a(_G,"generateMainServerConfig");var oae=9930;function aae(){jn.initSync(!0);let e=jn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=Ro.join(e,"clustering",$_.NATS_CONFIG_FILES.HUB_SERVER),r=Ro.join(jn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=uG.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$_.LOG_LEVEL_FLAGS[jn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==oae?"-"+n:""),script:fG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vu,i.error_file=Vu),i}a(aae,"generateNatsHubServerConfig");var cae=9940;function lae(){jn.initSync(!0);let e=jn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=Ro.join(e,"clustering",$_.NATS_CONFIG_FILES.LEAF_SERVER),r=Ro.join(jn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=uG.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$_.LOG_LEVEL_FLAGS[jn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==cae?"-"+n:""),script:fG,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vu,i.error_file=Vu),i}a(lae,"generateNatsLeafServerConfig");function uae(){jn.initSync();let e=Ro.join(jn.get(Ge.CONFIG_PARAMS.LOGGING_ROOT),Ge.LOG_NAMES.HDB),t={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:sae,autorestart:!1};return jn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vu,t.error_file=Vu),t}a(uae,"generateClusteringUpgradeV4ServiceConfig");function dae(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return _g.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_g.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:dG},script:iae}}a(dae,"generateRestart");function fae(){return{apps:[_G()]}}a(fae,"generateAllServiceConfigs");hG.exports={generateAllServiceConfigs:fae,generateMainServerConfig:_G,generateRestart:dae,generateNatsHubServerConfig:aae,generateNatsLeafServerConfig:lae,generateClusteringUpgradeV4ServiceConfig:uae}});var K_=P((kCe,CG)=>{"use strict";var Ze=(H(),D(q)),_ae=ae(),bo=fg(),pg=Sr(),yo=Ot(),Ia=pG(),Eg=ce(),Zc=j(),hae=So(),{startWorker:EG,onMessageFromWorkers:pae}=rt(),Eae=Mu(),HCe=require("util"),mae=require("child_process"),gae=require("fs"),{execFile:Sae}=mae,Ve;CG.exports={enterPM2Mode:Tae,start:Ca,stop:sN,reload:gG,restart:SG,list:iN,describe:RG,connect:Oo,kill:Oae,startAllServices:Nae,startService:oN,getUniqueServicesList:yG,restartAllServices:wae,isServiceRegistered:bG,reloadStopStart:OG,restartHdb:AG,deleteProcess:yae,startClusteringProcesses:wG,startClusteringThreads:IG,isHdbRestartRunning:bae,isClusteringRunning:Cae,stopClustering:Iae,reloadClustering:Pae,expectedRestartOfChildren:TG};var V_=!1;pae(e=>{e.type==="restart"&&Eg.initSync(!0)});function Tae(){V_=!0}a(Tae,"enterPM2Mode");function Oo(){return Ve||(Ve=require("pm2")),new Promise((e,t)=>{Ve.connect((r,n)=>{r&&t(r),e(n)})})}a(Oo,"connect");var Jr,Aae=10,mG;function Ca(e,t=!1){if(V_)return Rae(e);let r=Sae(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=Jr.indexOf(r);o>-1&&Jr.splice(o,1),!mG&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Aae&&(gae.existsSync(bo.getHubConfigPath())?Ca(e):(await bo.generateNatsConfig(!0),Ca(e),await new Promise(c=>setTimeout(c,3e3)),await bo.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bo.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Eg.get(Ze.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,f;for(;l=c.exec(i);){if(l.index&&yo.LOG_LEVEL_HIERARCHY[o]>=yo.LOG_LEVEL_HIERARCHY[f||"info"]){let _=f===yo.LOG_LEVELS.ERR||f===yo.LOG_LEVELS.WRN?Zc.OUTPUTS.STDERR:Zc.OUTPUTS.STDOUT;Zc.logCustomLevel(f||"info",_,n,i.slice(u,l.index).trim())}let[d,h]=l;u=l.index+d.length,f=yo.LOG_LEVELS[h]}if(yo.LOG_LEVEL_HIERARCHY[o]>=yo.LOG_LEVEL_HIERARCHY[f||"info"]){let d=f===yo.LOG_LEVELS.ERR||f===yo.LOG_LEVELS.WRN?Zc.OUTPUTS.STDERR:Zc.OUTPUTS.STDOUT;Zc.logCustomLevel(f||"info",d,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Jr&&(Jr=[],!t)){let i=a(()=>{mG=!0,Jr&&(Jr.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)}Jr.push(r)}a(Ca,"start");function Rae(e){return new Promise(async(t,r)=>{try{await Oo()}catch(n){r(n)}Ve.start(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(Rae,"startWithPM2");function sN(e){if(!V_){for(let t of Jr||[])t.name===e&&(Jr.splice(Jr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Oo()}catch(n){r(n)}Ve.stop(e,async(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.delete(e,(i,o)=>{i&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(o)})})})}a(sN,"stop");function gG(e){return new Promise(async(t,r)=>{try{await Oo()}catch(n){r(n)}Ve.reload(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(gG,"reload");function SG(e){if(!V_){TG();for(let t of Jr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Oo()}catch(n){r(n)}Ve.restart(e,(n,s)=>{Ve.disconnect(),t(s)})})}a(SG,"restart");function TG(){for(let e of Jr||[])e.config&&(e.config.restarts=0)}a(TG,"expectedRestartOfChildren");function yae(e){return new Promise(async(t,r)=>{try{await Oo()}catch(n){r(n)}Ve.delete(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(yae,"deleteProcess");async function AG(){await Ca(Ia.generateRestart())}a(AG,"restartHdb");async function bae(){let e=await iN();for(let t in e)if(e[t].name===Ze.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(bae,"isHdbRestartRunning");function iN(){return new Promise(async(e,t)=>{try{await Oo()}catch(r){t(r)}Ve.list((r,n)=>{r&&(Ve.disconnect(),t(r)),Ve.disconnect(),e(n)})})}a(iN,"list");function RG(e){return new Promise(async(t,r)=>{try{await Oo()}catch(n){r(n)}Ve.describe(e,(n,s)=>{n&&(Ve.disconnect(),r(n)),Ve.disconnect(),t(s)})})}a(RG,"describe");function Oae(){if(!V_){for(let e of Jr||[])e.kill();Jr=[];return}return new Promise(async(e,t)=>{try{await Oo()}catch(r){t(r)}Ve.killDaemon((r,n)=>{r&&(Ve.disconnect(),t(r)),Ve.disconnect(),e(n)})})}a(Oae,"kill");async function Nae(){try{await wG(),await IG(),await Ca(Ia.generateAllServiceConfigs())}catch(e){throw Ve?.disconnect(),e}}a(Nae,"startAllServices");async function oN(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ze.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ia.generateMainServerConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ia.generateNatsIngestServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ia.generateNatsReplyServiceConfig();break;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ia.generateNatsHubServerConfig(),await Ca(r,t),await bo.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ia.generateNatsLeafServerConfig(),await Ca(r,t),await bo.removeNatsConfig(e);return;case Ze.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ia.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ca(r)}catch(r){throw Ve?.disconnect(),r}}a(oN,"startService");async function yG(){try{let e=await iN(),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 Ve?.disconnect(),e}}a(yG,"getUniqueServicesList");async function wae(e=[]){try{let t=!1,r=await yG();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===Ze.PROCESS_DESCRIPTORS.HDB?t=!0:await SG(o))}t&&await OG(Ze.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ve?.disconnect(),t}}a(wae,"restartAllServices");async function bG(e){if(Jr?.find(r=>r.name===e))return!0;let t=await Eae.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(bG,"isServiceRegistered");async function OG(e){let t=Eg.get(Ze.CONFIG_PARAMS.THREADS_COUNT)??Eg.get(Ze.CONFIG_PARAMS.THREADS),r=await RG(e),n=_ae.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await sN(e),await oN(e)):e===Ze.PROCESS_DESCRIPTORS.HDB?await AG():await gG(e)}a(OG,"reloadStopStart");var NG;async function wG(e=!1){for(let t in Ze.CLUSTERING_PROCESSES){let r=Ze.CLUSTERING_PROCESSES[t];await oN(r,e)}}a(wG,"startClusteringProcesses");async function IG(){NG=EG(Ze.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ze.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await pg.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await pg.updateLocalStreams();let e=await hae.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ze.PRE_4_0_0_VERSION){Zc.info("Starting clustering upgrade 4.0.0 process"),EG(Ze.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(IG,"startClusteringThreads");async function Iae(){for(let e in Ze.CLUSTERING_PROCESSES)if(e!==Ze.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ze.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await NG.terminate();else{let t=Ze.CLUSTERING_PROCESSES[e];await sN(t)}}a(Iae,"stopClustering");async function Cae(){for(let e in Ze.CLUSTERING_PROCESSES){let t=Ze.CLUSTERING_PROCESSES[e];if(await bG(t)===!1)return!1}return!0}a(Cae,"isClusteringRunning");async function Pae(){await bo.generateNatsConfig(!0),await pg.reloadNATSHub(),await pg.reloadNATSLeaf(),await bo.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await bo.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Pae,"reloadClustering")});var lN={};Be(lN,{compactOnStart:()=>Dae,copyDb:()=>UG});async function Dae(){Pa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,aN.get)(B.ROOTPATH),t=new Map,r=Je();(0,cN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,mg.join)(e,"backup",n+".mdb"),o=(0,mg.join)(e,Za,n+"-copy.mdb"),c=0;try{c=await PG(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Pa.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await UG(n,o),console.log("Backing up",n,"to",i),await(0,el.move)(s,i,{overwrite:!0})}try{Ku()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,el.move)(i,s,{overwrite:!0}),await(0,el.remove)((0,mg.join)(e,Za,`${n}-copy.mdb-lock`));try{Ku()}catch(n){Pa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Pa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,cN.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,el.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await PG(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
23
+ Total record count before compaction: ${i}, total after: ${c}.
24
+ Database backup has not been removed and can be found here: ${s}`;Pa.error(l),console.error(l)}(0,aN.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,el.remove)(s))}}async function PG(e){let t=await(0,vG.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function UG(e,t){console.log("copyDb start");let r=Je()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,DG.open)(new LG.default(t)),c=o.openDB(gg.INTERNAL_DBIS_NAME),l,u=0,f=s.useReadTransaction();try{for(let{key:h,value:_}of s.getRange({transaction:f})){let p=_.is_hash_attribute||_.isPrimaryKey,S,g;if(p&&(S=_.compression,g=Sg(),g?_.compression=g:delete _.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(h,_),!(p||_.indexed))continue;let T=new MG.default(!p,p);T.encoding="binary",T.compression=S;let m=n.openDB(h,T);m.decoder=null,m.decoderCopies=!1,m.encoding="binary",T.compression=g;let A=o.openDB(h,T);A.encoder=null,console.log("copying",h,"from",e,"to",t),await d(m,A,p,f)}if(i){let h=n.openDB(gg.AUDIT_STORE_NAME,Y_);console.log("copying audit log for",e,"to",t),d(i,h,!1,f)}async function d(h,_,p,S){let g=0,T=0,m=1e7,A=null;for(;m-- >0;)try{for(let w of h.getKeys({start:A,transaction:S}))try{A=w;let{value:M,version:F}=h.getEntry(w,{transaction:S});l=_.put(w,M,p?F:void 0),g++,S.openTimer&&(S.openTimer=0),T+=(w?.length||10)+M.length,u++>5e3&&(await l,console.log("copied",g,"entries",T,"bytes"),u=0)}catch(M){console.error("Error copying record",typeof w=="symbol"?"symbol":w,"from",e,"to",t,M)}console.log("finish copying, copied",g,"entries",T,"bytes");return}catch{if(typeof A=="string"){if(A==="z")return console.error("Reached end of dbi",A,"for",e,"to",t);A=A.slice(0,-2)+"z"}else if(typeof A=="number")A++;else return console.error("Unknown key type",A,"for",e,"to",t)}}a(d,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{f.done(),o.close()}}var DG,mg,el,aN,LG,MG,gg,vG,cN,Pa,uN=be(()=>{De();DG=require("lmdb"),mg=require("path"),el=require("fs-extra"),aN=U(ce()),LG=U(Af()),MG=U(Tf()),gg=U(Mt());H();no();vG=U(lo()),cN=U(wt()),Pa=U(j());a(Dae,"compactOnStart");a(PG,"getTotalDBRecordCount");a(UG,"copyDb")});var Wu=P((zCe,qG)=>{"use strict";var Lae=require("minimist"),{isMainThread:fN,parentPort:z_,threadId:KCe}=require("worker_threads"),tt=(H(),D(q)),Li=j(),_N=ae(),Ag=fg(),Tg=Sr(),YCe=Ot(),kG=wt(),ei=K_(),xG=Mu(),{compactOnStart:Mae}=(uN(),D(lN)),vae=ec(),{restartWorkers:Rg,onMessageByType:Uae}=rt(),{handleHDBError:xae,hdb_errors:Bae}=_e(),{HTTP_STATUS_CODES:Hae}=Bae,Q_=ce(),{sendOperationToNode:BG,getThisNodeName:kae,monitorNodeCAs:Fae}=(_s(),D(Aa)),{getHDBNodeTable:WCe}=(Bc(),D(bb));Q_.initSync();var W_=`Restarting HarperDB. This may take up to ${tt.RESTART_TIMEOUT_MS/1e3} seconds.`,Gae="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",HG="Clustering is not enabled so cannot be restarted",qae="Invalid service",Yu,Ss;qG.exports={restart:FG,restartService:hN};fN&&Uae(tt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await hN({service:e.workerType}):FG({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function FG(e){Ss=Object.keys(e).length===0,Yu=await ei.isServiceRegistered(tt.PROCESS_DESCRIPTORS.HDB);let t=Lae(process.argv);if(t.service){await hN(t);return}if(Ss&&!Yu){console.error(Gae);return}if(Ss&&console.log(W_),Yu){ei.enterPM2Mode(),Li.notify(W_);let r=vae(Object.keys(tt.CONFIG_PARAM_MAP),!0);return _N.isEmptyOrZeroLength(Object.keys(r))||kG.updateConfigValue(void 0,void 0,r,!0,!0),$ae(),W_}return fN?(Li.notify(W_),Q_.get(tt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Mae(),setTimeout(()=>{Rg()},50)):z_.postMessage({type:tt.ITC_EVENT_TYPES.RESTART}),W_}a(FG,"restart");async function hN(e){let{service:t}=e;if(tt.HDB_PROCESS_SERVICES[t]===void 0)throw xae(new Error,qae,Hae.BAD_REQUEST,void 0,void 0,!0);if(ei.expectedRestartOfChildren(),Yu=await ei.isServiceRegistered(tt.PROCESS_DESCRIPTORS.HDB),!fN){e.replicated&&Fae(),z_.postMessage({type:tt.ITC_EVENT_TYPES.RESTART,workerType:t}),z_.ref(),await new Promise(s=>{z_.on("message",i=>{i.type==="restart-complete"&&(s(),z_.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===kae())continue;let{job_id:i}=await BG(s,e);n.push(await new Promise((o,c)=>{let u=2400,f=setInterval(async()=>{if(u--<=0){clearInterval(f);let _=new Error("Timed out waiting for restart job to complete");_.replicated=n,c(_)}let h=(await BG(s,{operation:"get_job",id:i})).results[0];if(h.status==="COMPLETE"&&(clearInterval(f),o({node:s.name,message:h.message})),h.status==="ERROR"){clearInterval(f);let _=new Error(h.message);_.replicated=n,c(_)}},250)}))}return{replicated:n}}return}let r;switch(t){case tt.HDB_PROCESS_SERVICES.clustering:if(!Q_.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HG;break}Ss&&console.log("Restarting clustering"),Li.notify("Restarting clustering"),await GG();break;case tt.HDB_PROCESS_SERVICES.clustering_config:case tt.HDB_PROCESS_SERVICES["clustering config"]:if(!Q_.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HG;break}Ss&&console.log("Restarting clustering_config"),Li.notify("Restarting clustering_config"),await ei.reloadClustering();break;case"custom_functions":case"custom functions":case tt.HDB_PROCESS_SERVICES.harperdb:case tt.HDB_PROCESS_SERVICES.http_workers:case tt.HDB_PROCESS_SERVICES.http:if(Ss&&!Yu){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}Ss&&console.log("Restarting http_workers"),Li.notify("Restarting http_workers"),Ss?await ei.restart(tt.PROCESS_DESCRIPTORS.HDB):await Rg("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Li.error(r),Ss&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(hN,"restartService");async function $ae(){await GG(),await ei.restart(tt.PROCESS_DESCRIPTORS.HDB),await _N.async_set_timeout(2e3),Q_.get(tt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await dN(),Ss&&(await Tg.closeConnection(),process.exit(0))}a($ae,"restartPM2Mode");async function GG(){if(!kG.getConfigFromFile(tt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await xG.getHDBProcessInfo()).clustering.length===0)Li.trace("Clustering not running, restart will start clustering services"),await Ag.generateNatsConfig(!0),await ei.startClusteringProcesses(),await ei.startClusteringThreads(),await dN(),Ss&&await Tg.closeConnection();else{await Ag.generateNatsConfig(!0),Yu?(Li.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ei.restart(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ei.restart(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await xG.getHDBProcessInfo()).clustering.forEach(s=>{Li.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await _N.async_set_timeout(3e3),await dN(),await Tg.updateLocalStreams(),Ss&&await Tg.closeConnection(),Li.trace("Restart clustering restarting ingest and reply service threads");let t=Rg(tt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Rg(tt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(GG,"restartClustering");async function dN(){await Ag.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ag.removeNatsConfig(tt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(dN,"removeNatsConfig")});var ZG=P((JCe,XG)=>{"use strict";var jCe=require("lodash"),On=(H(),D(q)),{handleHDBError:$G,hdb_errors:Vae}=_e(),{HDB_ERROR_MSGS:Kae,HTTP_STATUS_CODES:Yae}=Vae,pN=j();XG.exports={getRolePermissions:zae};var tl=Object.create(null),Wae=a(e=>({key:e,perms:{}}),"perms_template_obj"),WG=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),zG=a((e=!1,t=!1,r=!1,n=!1)=>({[On.PERMS_CRUD_ENUM.READ]:e,[On.PERMS_CRUD_ENUM.INSERT]:t,[On.PERMS_CRUD_ENUM.UPDATE]:r,[On.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),EN=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...zG(t,r,n,s)}),"table_perms_template"),VG=a((e,t=zG())=>({attribute_name:e,describe:JG(t),[j_]:t[j_],[mN]:t[mN],[gN]:t[gN]}),"attr_perms_template"),KG=a((e,t=!1)=>({attribute_name:e,describe:t,[j_]:t}),"timestamp_attr_perms_template"),{READ:j_,INSERT:mN,UPDATE:gN}=On.PERMS_CRUD_ENUM,QG=Object.values(On.PERMS_CRUD_ENUM),jG=[j_,mN,gN];function zae(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[On.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(tl[t]&&tl[t].key===n)return tl[t].perms;let s=Qae(e,r);return tl[t]?tl[t].key=n:tl[t]=Wae(n),tl[t].perms=s,s}catch(r){if(!e[On.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[On.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<On.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 pN.error(n),pN.debug(r),$G(new Error,Kae.OUTDATED_PERMS_TRANSLATION_ERROR,Yae.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
25
+ ${r.stack}`;throw pN.error(n),$G(new Error)}}}a(zae,"getRolePermissions");function Qae(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[On.SYSTEM_SCHEMA_NAME]=n[On.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]=jae(t[i]);return}r[i]=WG(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=Jae(c,l);r[i].describe||QG.forEach(f=>{u[f]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=EN()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=EN()})}),r}a(Qae,"translateRolePermissions");function jae(e){let t=WG(!0);return Object.keys(e).forEach(r=>{t.tables[r]=EN(!0,!0,!0,!0,!0)}),t}a(jae,"createStructureUserPermissions");function Jae(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,f)=>{let{attribute_name:d}=f,h=f;return On.TIME_STAMP_NAMES.includes(d)&&(h=KG(d,f[j_])),u[d]=h,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=VG(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let f=i[u];f.describe=JG(f),s.attribute_permissions.push(f),c||Xae(f,l)}else if(u!==o){let f;On.TIME_STAMP_NAMES.includes(u)?f=KG(u):f=VG(u),s.attribute_permissions.push(f)}}),c||s.attribute_permissions.push(l),s.describe=YG(s),s}else return e.describe=YG(e),e}a(Jae,"getTableAttrPerms");function YG(e){return QG.filter(t=>e[t]).length>0}a(YG,"getSchemaTableDescribePerm");function JG(e){return jG.filter(t=>e[t]).length>0}a(JG,"getAttributeDescribePerm");function Xae(e,t){jG.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Xae,"checkForHashPerms")});var J_={};Be(J_,{authentication:()=>oq,bypassAuth:()=>ice,login:()=>ace,logout:()=>cce,start:()=>oce});function ice(){iq=!0}async function oq(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let _=e.isOperationsServer?rce?tce:[]:ece?Zae:[];if(_.includes(i)||_.includes("*")){if(e.method==="OPTIONS"){let p=new po([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return yg&&p.set("Access-Control-Allow-Credentials","true"),{status:200,headers:p}}o.push("Access-Control-Allow-Origin",i),yg&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(yg){i||(i=r.host);let _=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let S of p)if(S.startsWith(_)){let g=S.indexOf(";");l=S.slice(_.length,g===-1?S.length:g),u=await eq.get(l);break}e.session=u||(u={})}let f=a((_,p,S)=>{let g=new zu.AuthAuditLog(_,p,zo.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=S,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Us.SUCCESS?SN.notify(g):SN.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&SN.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let _=e.mtlsConfig.user;_!==null?((_===void 0||_==="Common Name"||_==="CN")&&(_=e.peerCertificate.subject.CN),e.user=await je.getUser(_,null,e),f(_,Us.SUCCESS,"mTLS")):(0,zu.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=rl.get(n),!d){let _=n.indexOf(" "),p=n.slice(0,_),S=n.slice(_+1),g,T;try{switch(p){case"Basic":let m=atob(S),A=m.indexOf(":");g=m.slice(0,A),T=m.slice(A+1),d=g||T?await je.getUser(g,T,e):null;break;case"Bearer":try{d=await(0,bg.validateOperationToken)(S)}catch(w){if(w.message==="invalid token")try{return await(0,bg.validateRefreshToken)(S),c({status:-1})}catch{throw w}}break}}catch(m){return sce&&(rl.get(S)||(rl.set(S,S),f(g,Us.FAILURE,p))),c({status:401,body:sa({error:m.message},e)})}rl.set(n,d),nce&&f(d.username,Us.SUCCESS,p)}e.user=d}else u?.user?e.user=await je.getUser(u.user,null,e):(iq&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,rq.getSuperUser)());yg&&(e.session.update=function(_){if(!l){l=(0,nq.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):h?.headers?.set&&h.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")):h?.headers?.set&&(i&&h.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),h.headers.set("X-Hdb-Session","Secure"))),_.id=l,eq.put(_)},e.login=async function(_,p){let S=e.user=await je.getUser(_,p,e);e.session.update({user:S&&(S.getId?.()??S.username)})});let h=await t(e);return h&&(h.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&pi.loginPath?(h.status=302,h.headers.set("Location",pi.loginPath(e))):h.headers.set("WWW-Authenticate","Basic")),c(h))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let f=l.headers;f||(l.headers=f=new po);for(let d=0;d<u;){let h=o[d++];f.set(h,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function oce({server:e,port:t,securePort:r}){e.http(oq,t||r?{port:t,securePort:r}:{port:"all"}),tq||(tq=!0,setInterval(()=>{rl=new Map},Ts.get(B.AUTHENTICATION_CACHETTL)).unref(),sq.user.addListener(()=>{rl=new Map}))}async function ace(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 cce(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var rq,bg,nq,Ts,zu,sq,SN,Zae,ece,tce,rce,eq,yg,iq,nce,sce,rl,tq,Og=be(()=>{rq=U(qn());$r();Gl();bg=U(_u());De();nq=require("uuid"),Ts=U(ce());H();zu=U(j()),sq=U(Gf());d_();eo();SN=(0,zu.loggerWithTag)("auth-event");Ts.initSync();Zae=Ts.get(B.HTTP_CORSACCESSLIST),ece=Ts.get(B.HTTP_CORS),tce=Ts.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),rce=Ts.get(B.OPERATIONSAPI_NETWORK_CORS),eq=ot({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yg=Ts.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,iq=process.env.AUTHENTICATION_AUTHORIZELOCAL??Ts.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,nce=Ts.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,sce=Ts.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,rl=new Map;je.onInvalidatedUser(()=>{rl=new Map});a(ice,"bypassAuth");a(oq,"authentication");a(oce,"start");a(ace,"login");a(cce,"logout")});var _q=P((oPe,fq)=>{"use strict";var Oe=require("joi"),aq=require("fs-extra"),cq=require("path"),Jn=pt(),lq=ce(),uq=(H(),D(q)),dq=j(),{hdb_errors:lce}=_e(),{HDB_ERROR_MSGS:Xr}=lce,No=/^[a-zA-Z0-9-_]+$/,uce=/^[a-zA-Z0-9-_]+$/;fq.exports={getDropCustomFunctionValidator:fce,setCustomFunctionValidator:_ce,addComponentValidator:mce,dropCustomFunctionProjectValidator:gce,packageComponentValidator:Sce,deployComponentValidator:Tce,setComponentFileValidator:hce,getComponentFileValidator:Ece,dropComponentFileValidator:pce,addSSHKeyValidator:Ace,updateSSHKeyValidator:Rce,deleteSSHKeyValidator:yce,setSSHKnownHostsValidator:bce};function Ng(e,t,r){try{let n=lq.get(uq.CONFIG_PARAMS.COMPONENTSROOT),s=cq.join(n,t);return aq.existsSync(s)?e?t:r.message(Xr.PROJECT_EXISTS):e?r.message(Xr.NO_PROJECT):t}catch(n){return dq.error(n),r.message(Xr.VALIDATION_ERR)}}a(Ng,"checkProjectExists");function X_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(X_,"checkFilePath");function dce(e,t,r,n){try{let s=lq.get(uq.CONFIG_PARAMS.COMPONENTSROOT),i=cq.join(s,e,t,r+".js");return aq.existsSync(i)?r:n.message(Xr.NO_FILE)}catch(s){return dq.error(s),n.message(Xr.VALIDATION_ERR)}}a(dce,"checkFileExists");function fce(e){let t=Oe.object({project:Oe.string().pattern(No).custom(Ng.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().pattern(No).custom(dce.bind(null,e.project,e.type)).custom(X_).required().messages({"string.pattern.base":Xr.BAD_FILE_NAME})});return Jn.validateBySchema(e,t)}a(fce,"getDropCustomFunctionValidator");function _ce(e){let t=Oe.object({project:Oe.string().pattern(No).custom(Ng.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),type:Oe.string().valid("helpers","routes").required(),file:Oe.string().custom(X_).required(),function_content:Oe.string().required()});return Jn.validateBySchema(e,t)}a(_ce,"setCustomFunctionValidator");function hce(e){let t=Oe.object({project:Oe.string().pattern(No).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Oe.string().custom(X_).required(),payload:Oe.string().allow("").optional(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(hce,"setComponentFileValidator");function pce(e){let t=Oe.object({project:Oe.string().pattern(No).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),file:Oe.string().custom(X_).optional()});return Jn.validateBySchema(e,t)}a(pce,"dropComponentFileValidator");function Ece(e){let t=Oe.object({project:Oe.string().required(),file:Oe.string().custom(X_).required(),encoding:Oe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Jn.validateBySchema(e,t)}a(Ece,"getComponentFileValidator");function mce(e){let t=Oe.object({project:Oe.string().pattern(No).custom(Ng.bind(null,!1)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(mce,"addComponentValidator");function gce(e){let t=Oe.object({project:Oe.string().pattern(No).custom(Ng.bind(null,!0)).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME})});return Jn.validateBySchema(e,t)}a(gce,"dropCustomFunctionProjectValidator");function Sce(e){let t=Oe.object({project:Oe.string().pattern(No).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),skip_node_modules:Oe.boolean(),skip_symlinks:Oe.boolean()});return Jn.validateBySchema(e,t)}a(Sce,"packageComponentValidator");function Tce(e){let t=Oe.object({project:Oe.string().pattern(No).required().messages({"string.pattern.base":Xr.BAD_PROJECT_NAME}),package:Oe.string().optional(),restart:Oe.alternatives().try(Oe.boolean(),Oe.string().valid("rolling")).optional()});return Jn.validateBySchema(e,t)}a(Tce,"deployComponentValidator");function Ace(e){let t=Oe.object({name:Oe.string().pattern(uce).required().messages({"string.pattern.base":Xr.BAD_SSH_KEY_NAME}),key:Oe.string().required(),host:Oe.string().required(),hostname:Oe.string().required(),known_hosts:Oe.string().optional()});return Jn.validateBySchema(e,t)}a(Ace,"addSSHKeyValidator");function Rce(e){let t=Oe.object({name:Oe.string().required(),key:Oe.string().required()});return Jn.validateBySchema(e,t)}a(Rce,"updateSSHKeyValidator");function yce(e){let t=Oe.object({name:Oe.string().required()});return Jn.validateBySchema(e,t)}a(yce,"deleteSSHKeyValidator");function bce(e){let t=Oe.object({known_hosts:Oe.string().required()});return Jn.validateBySchema(e,t)}a(bce,"setSSHKnownHostsValidator")});var Z_=P((cPe,Sq)=>{"use strict";var wg=require("joi"),Da=require("path"),Qu=require("fs-extra"),{exec:Oce}=require("child_process"),Nce=require("util"),hq=Nce.promisify(Oce),Xu=(H(),D(q)),{PACKAGE_ROOT:wce}=_t(),{handleHDBError:ju,hdb_errors:Ice}=_e(),{HTTP_STATUS_CODES:Ju}=Ice,nl=ce(),Cce=pt(),sl=j();nl.initSync();var TN=nl.get(Xu.CONFIG_PARAMS.COMPONENTSROOT),pq="npm install --force --omit=dev --json",Pce=`${pq} --dry-run`,Dce=nl.get(Xu.CONFIG_PARAMS.ROOTPATH),Ig=Da.join(Dce,"ssh");Sq.exports={installModules:Uce,auditModules:xce,installAllRootModules:Lce,uninstallRootModule:Mce,linkHarperdb:vce,runCommand:Zu};async function Lce(e=!1,t=nl.get(Xu.CONFIG_PARAMS.ROOTPATH)){await Cg();let r=!1,n=process.env;Qu.pathExistsSync(Ig)&&Qu.readdirSync(Ig).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Da.join(Ig,"config")+" -o UserKnownHostsFile="+Da.join(Ig,"known_hosts"),...process.env},r=!0)});try{let s=nl.get(Xu.CONFIG_PARAMS.ROOTPATH),i=Da.join(s,"node_modules","harperdb");Qu.lstatSync(i).isSymbolicLink()&&Qu.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&sl.error("Error removing symlink:",s)}await Zu(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Lce,"installAllRootModules");async function Mce(e){await Zu(`npm uninstall ${e}`,nl.get(Xu.CONFIG_PARAMS.ROOTPATH))}a(Mce,"uninstallRootModule");async function vce(){await Cg(),await Zu(`npm link ${wce}`,nl.get(Xu.CONFIG_PARAMS.ROOTPATH))}a(vce,"linkHarperdb");async function Zu(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await hq(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
26
+ `,""))}return s&&!s.includes("Debugger listening")&&!s.includes("warn using --force")&&sl.error("Error running NPM command:",e,s),sl.trace(n,s),n?.replace(`
27
+ `,"")}a(Zu,"runCommand");async function Uce(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";sl.warn(t,e);let r=gq(e);if(r)throw ju(r,r.message,Ju.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?Pce:pq;await Cg(),await mq(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let f=Da.join(TN,u),d,h=null;try{let{stdout:_,stderr:p}=await hq(i,{cwd:f});d=_?_.replace(`
28
+ `,""):null,h=p?p.replace(`
29
+ `,""):null}catch(_){_.stderr?o[u].npm_error=Eq(_.stderr):o[u].npm_error=_.message;continue}try{o[u].npm_output=JSON.parse(d)}catch{o[u].npm_output=d}try{o[u].npm_error=JSON.parse(h)}catch{o[u].npm_error=h}}return sl.info(`finished installModules with response ${o}`),o.warning=t,o}a(Uce,"installModules");function Eq(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
30
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(Eq,"parseNPMStdErr");async function xce(e){sl.info(`starting auditModules for request: ${e}`);let t=gq(e);if(t)throw ju(t,t.message,Ju.BAD_REQUEST);let{projects:r}=e;await Cg(),await mq(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Da.join(TN,o);n[o]={npm_output:null,npm_error:null};try{let l=await Zu("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=Eq(l.stderr)}}return sl.info(`finished auditModules with response ${n}`),n}a(xce,"auditModules");async function Cg(){try{return await Zu("npm -v"),!0}catch{throw ju(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ju.BAD_REQUEST,void 0,void 0,!0)}}a(Cg,"checkNPMInstalled");async function mq(e){if(!Array.isArray(e)||e.length===0)throw ju(new Error,"projects argument must be an array with at least 1 element",Ju.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=Da.join(TN,i.toString());if(!await Qu.pathExists(o)){t.push(i);continue}let l=Da.join(o,"package.json");await Qu.pathExists(l)||r.push(i)}if(t.length>0)throw ju(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ju.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ju(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ju.BAD_REQUEST,void 0,void 0,!0)}a(mq,"checkProjectPaths");function gq(e){let t=wg.object({projects:wg.array().min(1).items(wg.string()).required(),dry_run:wg.boolean().default(!1)});return Cce.validateBySchema(e,t)}a(gq,"modulesValidator")});var RN=P((uPe,Oq)=>{"use strict";var As=require("fs-extra"),th=require("path"),eh=j(),Tq=ae(),{PACKAGE_ROOT:Bce}=_t(),AN=(H(),D(q)),bq=ce(),Hce=wt();Oq.exports=kce;async function kce(){let e=Fce(),t=bq.get(AN.CONFIG_PARAMS.ROOTPATH),r=th.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Bce}},s=th.join(t,"node_modules");As.ensureDirSync(s);let i,o=!0,c=!1;try{i=As.readJsonSync(r)}catch(l){if(Tq.isEmptyOrZeroLength(e))return;if(l.code!==AN.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!Tq.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let f=Rq(u);n.dependencies[l]=f+u}if(!o){eh.notify("Installing components"),await yq(r,n,null),await Aq(t,e);return}for(let{name:l,package:u}of e){let f=i.dependencies[l],d=Rq(u);if(f===void 0||f!==d+u){c=!0;break}if(u.startsWith("file:"))try{if(As.statSync(new URL(u+"/package.json")).mtimeMs>As.statSync(r).mtimeMs){c=!0;break}}catch(h){eh.info(`Error checking ${u}/package.json modification time`,h);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(eh.notify("Removing component",l),c=!0);c&&(eh.notify("Updating components."),await yq(r,n,i),await Aq(t,e))}a(kce,"installComponents");function Aq(e,t){return Promise.all(t.map(({name:r})=>{let n=th.join(e,"node_modules",r),s=th.join(e,"components",r);if(As.existsSync(n)&&As.lstatSync(n).isDirectory())return As.move(n,s,{overwrite:!0}).then(()=>{As.symlink(s,n)})}))}a(Aq,"moveModuleToComponents");function Fce(){let e=Hce.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Fce,"getComponentsConfig");function Rq(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":th.extname(e)||As.existsSync(e)?"file:":"github:"}a(Rq,"getPkgPrefix");async function yq(e,t,r){eh.trace("npm installing components package.json",t),As.writeFileSync(e,JSON.stringify(t,null," "));try{await Z_().installAllRootModules(bq.get(AN.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?As.writeFileSync(e,JSON.stringify(r,null," ")):As.unlinkSync(e),n}}a(yq,"installPackages")});var Cq={};Be(Cq,{packageDirectory:()=>Gce});function Gce(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];wq.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,Nq.join)("cache","webpack")):void 0}).pipe((0,Iq.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var Nq,wq,Iq,Pq=be(()=>{Nq=require("path"),wq=U(require("tar-fs")),Iq=require("node:zlib");a(Gce,"packageDirectory")});var ON=P(vq=>{"use strict";var Re=require("fs-extra"),yN=require("fast-glob"),Ne=require("path"),qce=require("tar-fs"),$ce=require("gunzip-maybe"),bN=require("normalize-path"),Nn=_q(),vt=j(),it=(H(),D(q)),zt=ce(),Pg=wt(),Vce=ae(),{PACKAGE_ROOT:Kce}=_t(),{handleHDBError:Ut,hdb_errors:Yce}=_e(),{basename:Wce}=require("path"),zce=RN(),Lq=ce(),{Readable:Qce}=require("stream"),{isMainThread:jce}=require("worker_threads"),{HDB_ERROR_MSGS:il,HTTP_STATUS_CODES:xt}=Yce,Mq=rt(),{replicateOperation:ti}=(_s(),D(Aa)),{packageDirectory:Jce}=(Pq(),D(Cq)),Dq=Z_(),Xce=Ne.join(Kce,"application-template"),Zce=zt.get(it.CONFIG_PARAMS.ROOTPATH),La=Ne.join(Zce,"ssh"),wo=Ne.join(La,"known_hosts");function ele(){vt.trace("getting custom api status");let e={};try{e={port:zt.get(it.CONFIG_PARAMS.HTTP_PORT),directory:zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ut(new Error,il.FUNCTION_STATUS,xt.INTERNAL_SERVER_ERROR,vt.ERR,t)}return e}a(ele,"customFunctionsStatus");function tle(){vt.trace("getting custom api endpoints");let e={},t=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT);try{yN.sync(bN(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:yN.sync(bN(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:yN.sync(bN(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ut(new Error,il.GET_FUNCTIONS,xt.INTERNAL_SERVER_ERROR,vt.ERR,r)}return e}a(tle,"getCustomFunctions");function rle(e){e.project&&(e.project=Ne.parse(e.project).name),e.file&&(e.file=Ne.parse(e.file).name);let t=Nn.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("getting custom api endpoint file content");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Ne.join(r,n,s,i+".js");try{return Re.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ut(new Error,il.GET_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(rle,"getCustomFunction");async function nle(e){e.project&&(e.project=Ne.parse(e.project).name),e.file&&(e.file=Ne.parse(e.file).name);let t=Nn.setCustomFunctionValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("setting custom function file content");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Re.outputFileSync(Ne.join(r,n,s,i+".js"),o);let c=await ti(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Ut(new Error,il.SET_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,c)}}a(nle,"setCustomFunction");async function sle(e){e.project&&(e.project=Ne.parse(e.project).name),e.file&&(e.file=Ne.parse(e.file).name);let t=Nn.getDropCustomFunctionValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("dropping custom function file");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Re.unlinkSync(Ne.join(r,n,s,i+".js"));let o=await ti(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Ut(new Error,il.DROP_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,o)}}a(sle,"dropCustomFunction");async function ile(e){e.project&&(e.project=Ne.parse(e.project).name);let t=Nn.addComponentValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("adding component");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Ne.join(r,n);Re.mkdirSync(s,{recursive:!0}),Re.copySync(Xce,s);let i=await ti(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Ut(new Error,il.ADD_FUNCTION,xt.INTERNAL_SERVER_ERROR,vt.ERR,s)}}a(ile,"addComponent");async function ole(e){e.project&&(e.project=Ne.parse(e.project).name);let t=Nn.dropCustomFunctionProjectValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);vt.trace("dropping custom function project");let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=zt.get(it.CONFIG_PARAMS.APPS);if(!Vce.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 Pg.updateConfigValue(it.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Ne.join(r,n);Re.rmSync(i,{recursive:!0});let o=await ti(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Ut(new Error,il.DROP_FUNCTION_PROJECT,xt.INTERNAL_SERVER_ERROR,vt.ERR,i)}}a(ole,"dropCustomFunctionProject");async function ale(e){e.project&&(e.project=Ne.parse(e.project).name);let t=Nn.packageComponentValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;vt.trace("packaging component",n);let s;try{s=await Re.realpath(Ne.join(r,n))}catch(o){if(o.code!==it.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Re.realpath(Ne.join(zt.get(it.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===it.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Jce(s,e)).toString("base64");return{project:n,payload:i}}a(ale,"packageComponent");async function cle(e){e.project?e.project=Ne.parse(e.project).name:e.package&&(e.project=lle(e.package));let t=Nn.deployComponentValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let r=zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(vt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Ne.join(r,n),i="file:"+c,await Re.emptyDir(c);let S=Qce.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((m,A)=>{S.pipe($ce()).pipe(qce.extract(c,{finish:m})).on("error",A)});let g=await Re.readdir(c);g.length===1&&g[0]==="package"&&(await Re.copy(Ne.join(c,"package"),c),await Re.remove(Ne.join(c,"package")));let T=Ne.join(c,"node_modules");o?await Dq.runCommand(o,c):Re.existsSync(T)||await Dq.installAllRootModules(!1,c)}else{await Pg.addConfig(n,{package:i}),await zce();let S=Lq.get(it.CONFIG_PARAMS.ROOTPATH);c=Ne.join(S,"node_modules",n)}if(jce)return;let l=new Map;l.isWorker=!0;let u=(nh(),D(rh)),f;u.setErrorReporter(S=>f=S);let d=Wce(c),h=u.component_errors.get(d);try{await u.loadComponent(c,l)}finally{u.component_errors.set(d,h)}if(f)throw f;vt.info("Installed component");let _=e.restart==="rolling";e.restart=_?!1:e.restart;let p=await ti(e);if(e.restart===!0)Mq.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(_){let g=await NN().executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}a(cle,"deployComponent");function lle(e){if(e.startsWith("git+ssh://"))return Ne.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Ne.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Re.readFileSync(Ne.join(e,"package.json"),"utf8"));return Ne.basename(t)}catch{}return Ne.basename(e)}a(lle,"getProjectNameFromPackage");async function ule(){let e=a(async(s,i)=>{try{let o=await Re.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Ne.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let f={name:l,entries:[]};i.entries.push(f),await e(u,f)}else{let f=await Re.stat(u),d={name:Ne.basename(l),mtime:f.mtime,size:f.size};i.entries.push(d)}}return i}catch(o){return vt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),{name:zt.get(it.CONFIG_PARAMS.COMPONENTSROOT).split(Ne.sep).slice(-1).pop(),entries:[]}),n=(nh(),D(rh)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(ule,"getComponents");async function dle(e){let t=Nn.getComponentFileValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let n=Pg.getConfigObj()[e.project]||e.project==="harperdb"?Ne.join(Lq.get(it.CONFIG_PARAMS.ROOTPATH),"node_modules"):zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Re.stat(Ne.join(n,e.project,e.file));return{message:await Re.readFile(Ne.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===it.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Ne.join(e.project,e.file)}'`):i}}a(dle,"getComponentFile");async function fle(e){let t=Nn.setComponentFileValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Ne.join(zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Re.ensureFile(n),await Re.outputFile(n,e.payload,r)):await Re.ensureDir(n);let s=await ti(e);return s.message="Successfully set component: "+e.file,s}a(fle,"setComponentFile");async function _le(e){let t=Nn.dropComponentFileValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Ne.join(r,n):r,i=Ne.join(zt.get(it.CONFIG_PARAMS.COMPONENTSROOT),s),o=Ne.join(zt.get(it.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Re.pathExists(o)&&await Re.unlink(o),await Re.pathExists(i)&&await Re.remove(i);let c=Ne.join(zt.get(it.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Re.pathExists(c)){let u=JSON.parse(await Re.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Re.writeFile(c,JSON.stringify(u,null,2),"utf8")}Pg.deleteConfigFromFile([r]);let l=await ti(e);return e.restart===!0?(Mq.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(_le,"dropComponent");async function hle(e){let t=Nn.addSSHKeyValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;vt.trace("adding ssh key",r);let c=Ne.join(La,r+".key"),l=Ne.join(La,"config");if(await Re.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Re.outputFile(c,n),await Re.chmod(c,"0600");let u=`#${r}
31
+ Host ${s}
32
+ HostName ${i}
33
+ User git
34
+ IdentityFile ${c}
35
+ IdentitiesOnly yes`;await Re.pathExists(l)?await Re.appendFile(l,`
36
+ `+u):await Re.outputFile(l,u);let f="";if(await Re.pathExists(wo)||(await Re.writeFile(wo,""),await Re.chmod(wo,"0600")),i=="github.com"&&!(await Re.readFile(wo,"utf8")).includes("github.com"))try{let S=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of S)Re.appendFile(wo,"github.com "+g+`
37
+ `)}catch{f=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Re.appendFile(wo,o);let d=await ti(e);return d.message=`Added ssh key: ${r}${f}`,d}a(hle,"addSSHKey");async function ple(e){let t=Nn.updateSSHKeyValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{name:r,key:n}=e;vt.trace("updating ssh key",r);let s=Ne.join(La,r+".key");if(!await Re.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Re.outputFile(s,n);let i=await ti(e);return i.message=`Updated ssh key: ${r}`,i}a(ple,"updateSSHKey");async function Ele(e){let t=Nn.deleteSSHKeyValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{name:r}=e;vt.trace("deleting ssh key",r);let n=Ne.join(La,r+".key"),s=Ne.join(La,"config");if(!await Re.pathExists(n))throw new Error("Key does not exist");let i=await Re.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Re.outputFile(s,i),Re.removeSync(n);let c=await ti(e);return c.message=`Deleted ssh key: ${r}`,c}a(Ele,"deleteSSHKey");async function mle(e){let t=[];return await Re.pathExists(La)&&(await Re.readdir(La)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(mle,"listSSHKeys");async function gle(e){let t=Nn.setSSHKnownHostsValidator(e);if(t)throw Ut(t,t.message,xt.BAD_REQUEST);let{known_hosts:r}=e;await Re.outputFile(wo,r);let n=await ti(e);return n.message="Known hosts successfully set",n}a(gle,"setSSHKnownHosts");async function Sle(e){return await Re.pathExists(wo)?{known_hosts:await Re.readFile(wo,"utf8")}:{known_hosts:null}}a(Sle,"getSSHKnownHosts");Object.assign(vq,{customFunctionsStatus:ele,getCustomFunctions:tle,getCustomFunction:rle,setCustomFunction:nle,dropCustomFunction:sle,addComponent:ile,dropCustomFunctionProject:ole,packageComponent:ale,deployComponent:cle,getComponents:ule,getComponentFile:dle,setComponentFile:fle,dropComponent:_le,addSSHKey:hle,updateSSHKey:ple,deleteSSHKey:Ele,listSSHKeys:mle,setSSHKnownHosts:gle,getSSHKnownHosts:Sle})});var wN=P((pPe,xq)=>{"use strict";var Rs=require("joi"),Uq=pt();xq.exports={readTransactionLogValidator:Tle,deleteTransactionLogsBeforeValidator:Ale};function Tle(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return Uq.validateBySchema(e,t)}a(Tle,"readTransactionLogValidator");function Ale(e){let t=Rs.object({schema:Rs.string(),database:Rs.string(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return Uq.validateBySchema(e,t)}a(Ale,"deleteTransactionLogsBeforeValidator")});var Mg=P((mPe,qq)=>{"use strict";var IN=(H(),D(q)),sh=Sr(),Bq=ae(),Hq=ce(),kq=co(),Fq=j(),{handleHDBError:Dg,hdb_errors:Rle}=_e(),{HTTP_STATUS_CODES:Lg}=Rle,{readTransactionLogValidator:yle,deleteTransactionLogsBeforeValidator:ble}=wN(),Gq=kn(),Ole="Logs successfully deleted from transaction log.",Nle="All logs successfully deleted from transaction log.";qq.exports={readTransactionLog:wle,deleteTransactionLogsBefore:Cle};async function wle(e){let t=yle(e);if(t)throw Dg(t,t.message,Lg.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=Bq.checkSchemaTableExist(e.database,e.table);if(r)throw Dg(new Error,r,Lg.NOT_FOUND,void 0,void 0,!0);return Hq.get(IN.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Ile(e):(Fq.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),Gq.readAuditLog(e))}a(wle,"readTransactionLog");async function*Ile(e){let t=kq.createNatsTableStreamName(e.database,e.table),r=await sh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===IN.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Ile,"readTransactionLogNats");async function Cle(e){let t=ble(e);if(t)throw Dg(t,t.message,Lg.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!Hq.get(IN.CONFIG_PARAMS.CLUSTERING_ENABLED))return Fq.info("Delete transaction logs called for Plexus"),Gq.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=Bq.checkSchemaTableExist(r,n);if(i)throw Dg(new Error,i,Lg.NOT_FOUND,void 0,void 0,!0);let o=kq.createNatsTableStreamName(r,n),{jsm:c}=await sh.getNATSReferences(),l=await sh.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let f=Ole,d,h=new Date(l.state.last_ts).getTime();return s>h?(d=l.state.last_seq+1,f=Nle):d=(await sh.viewStream(o,parseInt(s),1))[0].nats_sequence,await sh.purgeTableStream(r,n,{seq:d}),f}a(Cle,"deleteTransactionLogsBefore")});var Vq=P((SPe,$q)=>{"use strict";var CN=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}};$q.exports=CN});var Yq=P((APe,Kq)=>{"use strict";var PN=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};Kq.exports=PN});var LN=P((yPe,zq)=>{"use strict";var Wq=Vq(),Ple=Yq(),{HDB_ERROR_MSGS:Dle}=Ln(),DN=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Dle.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 Wq(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Ple(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new Wq(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}};zq.exports=DN});var Bg=P((wPe,d$)=>{"use strict";var MN=pn(),vg=Kr(),ys=km(),ah=lo(),vN=Ac(),Lle=Zb(),Mle=ok(),ch=qn(),Ug=n_(),Tr=j(),vle=sO(),Ule=Jm(),xle=CO(),Ble=Zm(),Hle=LO(),kle=MO(),Fle=xO(),Gle=HO(),UN=sg(),Io=ae(),qle=kF(),xN=JO(),Jq=Wu(),Zr=(H(),D(q)),Xq=ZG(),$le=Mu(),Zq=_u(),e$=(Og(),D(J_)),t$=wt(),or=ON(),Vle=require("alasql"),r$=Mg(),n$=Z_(),ed=Xs(),s$=(Wc(),D(Yc)),i$=LN(),{handleHDBError:wn,hdb_errors:o$}=_e(),{addNodeBack:OPe,removeNodeBack:NPe}=(Wc(),D(Yc)),{HDB_ERROR_MSGS:Ur,HTTP_STATUS_CODES:ih}=o$,J=new Map,a$="delete",Ma="insert",Co="read",ol="update",oh="describe",Qq=ah.describeSchema.name,jq=ah.describeTable.name,c$={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Kle={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},Yle="catchup",Wle="handleGetJob",zle="handleGetJobsByStartDate",xg={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Qle=[ys.createTable.name,ys.createAttribute.name,ys.dropTable.name,ys.dropAttribute.name],l$={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},te=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};J.set(MN.insert.name,new te(!1,[Ma]));J.set(MN.update.name,new te(!1,[ol]));J.set(MN.upsert.name,new te(!1,[Ma,ol]));J.set(vg.searchByConditions.name,new te(!1,[Co]));J.set(vg.searchByHash.name,new te(!1,[Co]));J.set(vg.searchByValue.name,new te(!1,[Co]));J.set(vg.search.name,new te(!1,[Co]));J.set(ys.createSchema.name,new te(!0,[]));J.set(ys.createTable.name,new te(!0,[]));J.set(ys.createAttribute.name,new te(!1,[Ma]));J.set(ys.dropSchema.name,new te(!0,[]));J.set(ys.dropTable.name,new te(!0,[]));J.set(ys.dropAttribute.name,new te(!0,[]));J.set(ah.describeSchema.name,new te(!1,[Co]));J.set(ah.describeTable.name,new te(!1,[Co]));J.set(vN.deleteRecord.name,new te(!1,[a$]));J.set(ch.addUser.name,new te(!0,[]));J.set(ch.alterUser.name,new te(!0,[]));J.set(ch.dropUser.name,new te(!0,[]));J.set(ch.listUsersExternal.name,new te(!0,[]));J.set(Ug.listRoles.name,new te(!0,[]));J.set(Ug.addRole.name,new te(!0,[]));J.set(Ug.alterRole.name,new te(!0,[]));J.set(Ug.dropRole.name,new te(!0,[]));J.set(vle.name,new te(!0,[]));J.set(Ule.name,new te(!0,[]));J.set(xle.name,new te(!0,[]));J.set(Ble.name,new te(!0,[]));J.set(Hle.name,new te(!0,[]));J.set(kle.name,new te(!0,[]));J.set(UN.setRoutes.name,new te(!0,[]));J.set(UN.getRoutes.name,new te(!0,[]));J.set(UN.deleteRoutes.name,new te(!0,[]));J.set(t$.setConfiguration.name,new te(!0,[]));J.set(Fle.clusterStatus.name,new te(!0,[]));J.set(Gle.name,new te(!0,[]));J.set(xN.getFingerprint.name,new te(!0,[]));J.set(xN.setLicense.name,new te(!0,[]));J.set(vN.deleteFilesBefore.name,new te(!0,[]));J.set(vN.deleteAuditLogsBefore.name,new te(!0,[]));J.set(Jq.restart.name,new te(!0,[]));J.set(Jq.restartService.name,new te(!0,[]));J.set(Lle.name,new te(!0,[]));J.set(Mle.name,new te(!0,[Co]));J.set($le.systemInformation.name,new te(!0,[]));J.set(t$.getConfiguration.name,new te(!0,[]));J.set(r$.readTransactionLog.name,new te(!0,[]));J.set(r$.deleteTransactionLogsBefore.name,new te(!0,[]));J.set(n$.installModules.name,new te(!0,[]));J.set(n$.auditModules.name,new te(!0,[]));J.set(ed.createCsr.name,new te(!0,[]));J.set(ed.signCertificate.name,new te(!0,[]));J.set(ed.listCertificates.name,new te(!0,[]));J.set(ed.addCertificate.name,new te(!0,[]));J.set(ed.removeCertificate.name,new te(!0,[]));J.set(ed.getKey.name,new te(!0,[]));J.set(s$.addNodeBack.name,new te(!0,[]));J.set(s$.removeNodeBack.name,new te(!0,[]));J.set(Zq.createTokens.name,new te(!1,[]));J.set(Zq.refreshOperationToken.name,new te(!1,[]));J.set(e$.login.name,new te(!1,[]));J.set(e$.logout.name,new te(!1,[]));J.set(or.customFunctionsStatus.name,new te(!0,[]));J.set(or.getCustomFunctions.name,new te(!0,[]));J.set(or.getComponents.name,new te(!0,[]));J.set(or.getComponentFile.name,new te(!0,[]));J.set(or.setComponentFile.name,new te(!0,[]));J.set(or.dropComponent.name,new te(!0,[]));J.set(or.getCustomFunction.name,new te(!0,[]));J.set(or.setCustomFunction.name,new te(!0,[]));J.set(or.dropCustomFunction.name,new te(!0,[]));J.set(or.addComponent.name,new te(!0,[]));J.set(or.dropCustomFunctionProject.name,new te(!0,[]));J.set(or.packageComponent.name,new te(!0,[]));J.set(or.deployComponent.name,new te(!0,[]));J.set(or.addSSHKey.name,new te(!0,[]));J.set(or.updateSSHKey.name,new te(!0,[]));J.set(or.deleteSSHKey.name,new te(!0,[]));J.set(or.listSSHKeys.name,new te(!0,[]));J.set(or.setSSHKnownHosts.name,new te(!0,[]));J.set(or.getSSHKnownHosts.name,new te(!0,[]));J.set(xN.getRegistrationInfo.name,new te(!1,[]));J.set(ch.userInfo.name,new te(!1,[]));J.set(ah.describeAll.name,new te(!1,[]));J.set(Wle,new te(!1,[]));J.set(zle,new te(!0,[]));J.set(Yle,new te(!0,[]));J.set(xg.CSV_DATA_LOAD,new te(!1,[Ma,ol]));J.set(xg.CSV_URL_LOAD,new te(!1,[Ma,ol]));J.set(xg.CSV_FILE_LOAD,new te(!1,[Ma,ol]));J.set(xg.IMPORT_FROM_S3,new te(!1,[Ma,ol]));J.set(l$.EXPORT_TO_S3,new te(!0,[]));J.set(l$.EXPORT_LOCAL,new te(!0,[]));J.set(Zr.VALID_SQL_OPS_ENUM.DELETE,new te(!1,[a$]));J.set(Zr.VALID_SQL_OPS_ENUM.SELECT,new te(!1,[Co]));J.set(Zr.VALID_SQL_OPS_ENUM.INSERT,new te(!1,[Ma]));J.set(Zr.VALID_SQL_OPS_ENUM.UPDATE,new te(!1,[ol]));d$.exports={verifyPerms:Jle,verifyPermsAst:jle,verifyBulkLoadAttributePerms:Zle};function jle(e,t,r){if(Io.isEmptyOrZeroLength(e))throw Tr.info("verify_perms_ast has an empty user parameter"),wn(new Error);if(Io.isEmptyOrZeroLength(t))throw Tr.info("verify_perms_ast has an empty user parameter"),wn(new Error);if(Io.isEmptyOrZeroLength(r))throw Tr.info("verify_perms_ast has a null operation parameter"),wn(new Error);try{let n=new i$,s=new qle(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Tr.info("No schemas defined in verifyPermsAst(), will not continue."),wn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&c$[r])throw wn(new Error,Ur.DROP_SYSTEM,ih.FORBIDDEN);if(c&&!l)return null;let u=Xq.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof Vle.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let d=0;d<i.length;d++){let h=s.getTablesBySchemaName(i[d]);h&&o.set(i[d],h)}let f=u$(t,r,o,n);return f||(o.forEach((d,h)=>{for(let _=0;_<d.length;_++){let p=s.getAttributesBySchemaTableName(h,d[_]),S=HN(t.role.permission,h,d[_]);BN(p,S,r,d[_],h,n)}}),n.getPermsResponse())}catch(n){throw wn(n)}}a(jle,"verifyPermsAst");function Jle(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Tr.info("null required parameter in verifyPerms"),wn(new Error,Ur.DEFAULT_INVALID_REQUEST,ih.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 i$;if(Io.isEmptyOrZeroLength(e.hdb_user?.role)||Io.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Tr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ur.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,f=o.has(Zr.SYSTEM_SCHEMA_NAME)||s===Zr.SYSTEM_SCHEMA_NAME;if(l&&f&&Kle[e.operation]&&(i===Zr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(f&&c$[r])throw wn(new Error,Ur.DROP_SYSTEM,ih.FORBIDDEN);if(l&&!f||u===!0&&(r===ys.createSchema.name||r===ys.dropSchema.name))return null;if(Qle.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=Xq.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),(r===Qq||r===jq)&&!d.super_user){if(s===Zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ur.SCHEMA_PERM_ERROR(s));if(r===Qq&&(!d[s]||!d[s][oh]))return c.handleInvalidItem(Ur.SCHEMA_NOT_FOUND(s));if(r===jq&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][oh]))return c.handleInvalidItem(Ur.TABLE_NOT_FOUND(s,i))}let h=u$(e.hdb_user,r,o,c,n);if(h)return h;if(J.get(r)&&J.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],g=d[s].tables[i];g[Zr.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(m=>m[Zr.PERMS_CRUD_ENUM.READ]).forEach(m=>{S.push(m.attribute_name)}):S=global.hdb_schema[s][i].attributes.map(T=>T.attribute),e.get_attributes=S)}let _=Xle(e),p=HN(e.hdb_user?.role?.permission,s,i);return BN(_,p,r,i,s,c,n),c.getPermsResponse()}a(Jle,"verifyPerms");function u$(e,t,r,n,s){if(Io.arrayHasEmptyValues([e,t,r]))throw Tr.info("hasPermissions has an invalid parameter"),wn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||J.get(t).requires_su))return null;if(!J.get(t))throw Tr.info(`operation ${t} not found.`),wn(new Error,Ur.OP_NOT_FOUND(t),ih.BAD_REQUEST);if(J.get(t)&&J.get(t).requires_su)return Tr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Ur.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][oh]===!1){n.addInvalidItem(Ur.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Ur.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let f of u){let d=o[l].tables[f];if(!d||d[oh]===!1)n.addInvalidItem(Ur.TABLE_NOT_FOUND(l,f));else try{let h=[],_=J.get(t).perms;!Io.isEmpty(s)&&_.includes(s)&&(_=[s]);for(let p=0;p<_.length;p++){let S=_[p],g=d[S];(g==null||g===!1)&&(Tr.info(`Required ${S} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),h.push(S))}h.length>0&&n.addUnauthorizedTable(l,f,h)}catch(h){let _=Ur.UNKNOWN_OP_AUTH_ERROR(t,l,f);throw Tr.error(_),Tr.error(h),wn(o$.CHECK_LOGS_WRAPPER(_))}}}return r.size<2?n.getPermsResponse():null}a(u$,"hasPermissions");function BN(e,t,r,n,s,i,o){if(!e||!t)throw Tr.info("no attributes specified in checkAttributePerms."),wn(new Error);let c=J.get(r).perms;if(!c||c==="")throw Tr.info(`no permissions found for ${r} in checkAttributePerms().`),wn(new Error);if(Io.isEmptyOrZeroLength(t))return Tr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let f of e){let d=t.get(f);if(d){if(d[oh]===!1){i.addInvalidItem(Ur.ATTR_NOT_FOUND(s,n,f),s,n);continue}if(c)for(let h of c){if(Zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&h!==Co)throw wn(new Error,Ur.SYSTEM_TIMESTAMP_PERMS_ERR,ih.FORBIDDEN);d[h]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(h):l[d.attribute_name]=[h])}}else i.addInvalidItem(Ur.ATTR_NOT_FOUND(s,n,f),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(BN,"checkAttributePerms");function Xle(e){let t=new Set;try{if(e.action)return t;if(e.operation===Zr.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){Tr.info(r)}return t}a(Xle,"getRecordAttributes");function HN(e,t,r){let n=new Map;if(Io.isEmpty(e))return Tr.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{Tr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(HN,"getAttributePermissions");function Zle(e,t,r,n,s,i,o){let c=new Set(i),l=HN(e,n,s);BN(c,l,t,s,n,o,r)}a(Zle,"verifyBulkLoadAttributePerms")});var kg=P((CPe,E$)=>{"use strict";E$.exports={evaluateSQL:fue,processAST:p$,convertSQLToAST:h$,checkASTPermissions:_$};var eue=pn(),f$=require("util"),tue=f$.callbackify(eue.insert),rue=Kr().search,nue=OB().update,sue=f$.callbackify(nue),iue=wB().convertDelete,va=require("alasql"),oue=Bg(),Hg=j(),aue=hE(),cue=ae(),lh=(H(),D(q)),{hdb_errors:lue,handleHDBError:kN}=_e(),{HTTP_STATUS_CODES:FN}=lue;aue(va);var uue=403,due="There was a problem performing this insert. Please check the logs and try again.",GN=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function fue(e,t){let r=e.parsed_sql_object;if(!r){r=h$(e.sql);let n,s=r.ast.statements[0];if(s instanceof va.yy.Insert?n=s.into.databaseid:s instanceof va.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof va.yy.Update||s instanceof va.yy.Delete?n=s.table.databaseid:Hg.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof va.yy.Select)&&cue.isEmptyOrZeroLength(n))return t("No schema specified",null)}p$(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(fue,"evaluateSQL");function _$(e,t){let r;try{r=oue.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(_$,"checkASTPermissions");function h$(e){let t=new GN;if(!e)throw kN(new Error,"The 'sql' parameter is missing from the request body",FN.BAD_REQUEST);try{let r=e.trim(),n=va.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
38
+ `);throw n[1]?kN(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,FN.BAD_REQUEST):kN(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",FN.BAD_REQUEST)}return t}a(h$,"convertSQLToAST");function p$(e,t,r){try{let n=_ue;if(!e.bypass_auth&&!t.permissions_checked){let i=_$(e,t);if(i&&i.length>0)return r(uue,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case lh.VALID_SQL_OPS_ENUM.SELECT:n=rue,s=t.ast.statements[0];break;case lh.VALID_SQL_OPS_ENUM.INSERT:n=hue;break;case lh.VALID_SQL_OPS_ENUM.UPDATE:n=sue;break;case lh.VALID_SQL_OPS_ENUM.DELETE:n=iue;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(p$,"processAST");function _ue(e,t){Hg.info(e),t("unknown sql statement")}a(_ue,"nullFunction");function hue({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=pue(i,e.values)}catch(o){return r(o)}tue(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Hg.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(hue,"convertInsert");function pue(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]]=va.compile(`SELECT ${s.toString()} AS [${lh.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Hg.error(r),new Error(due)}}a(pue,"createDataObjects")});var WN=P((MPe,T$)=>{var $g=require("clone"),Vg=pt(),Eue=ae(),Gg=(H(),D(q)),DPe=j(),qN=require("fs"),VN=require("joi"),{string:qg}=VN.types(),{hdb_errors:mue,handleHDBError:Fg}=_e(),{HDB_ERROR_MSGS:LPe,HTTP_STATUS_CODES:$N}=mue,{common_validators:td}=Ti(),m$=" is required",gue=["insert","update","upsert"],KN={database:{presence:!1,format:td.schema_format,length:td.schema_length},schema:{presence:!1,format:td.schema_format,length:td.schema_length},table:{presence:!0,format:td.schema_format,length:td.schema_length},action:{inclusion:{within:gue,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Sue={schema:qg.required(),table:qg.required(),action:qg.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Tue,AWS_SECRET:Aue,AWS_BUCKET:Rue,AWS_FILE_KEY:yue,REGION:bue}=Gg.S3_BUCKET_AUTH_KEYS,Oue={s3:{presence:!0},[`s3.${Tue}`]:{presence:!0,type:"String"},[`s3.${Aue}`]:{presence:!0,type:"String"},[`s3.${Rue}`]:{presence:!0,type:"String"},[`s3.${yue}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${bue}`]:{presence:!0,type:"String"}},g$=$g(KN);g$.data.presence={message:m$};var S$=$g(KN);S$.file_path.presence={message:m$};var Nue=Object.assign($g(KN),Oue),YN=$g(Sue);YN.csv_url=qg.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();YN.passthrough_headers=VN.object();function wue(e){let t=Vg.validateObject(e,g$);return Kg(e,t)}a(wue,"dataObject");function Iue(e){let t=Vg.validateBySchema(e,VN.object(YN));return Kg(e,t)}a(Iue,"urlObject");function Cue(e){let t=Vg.validateObject(e,S$);return Kg(e,t)}a(Cue,"fileObject");function Pue(e){let t=Vg.validateObject(e,Nue);return Kg(e,t)}a(Pue,"s3FileObject");function Kg(e,t){if(!t){let r=Eue.checkGlobalSchemaTable(e.schema,e.table);if(r)return Fg(new Error,r,$N.BAD_REQUEST);if(e.operation===Gg.OPERATIONS_ENUM.CSV_FILE_LOAD)try{qN.accessSync(e.file_path,qN.constants.R_OK|qN.constants.F_OK)}catch(n){return n.code===Gg.NODE_ERROR_CODES.ENOENT?Fg(n,`No such file or directory ${n.path}`,$N.BAD_REQUEST):n.code===Gg.NODE_ERROR_CODES.EACCES?Fg(n,`Permission denied ${n.path}`,$N.BAD_REQUEST):Fg(n)}}return t}a(Kg,"postValidateChecks");T$.exports={dataObject:wue,urlObject:Iue,fileObject:Cue,s3FileObject:Pue}});var zN=P((UPe,A$)=>{"use strict";var uh=j(),Yg=(H(),D(q));async function Due(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===Yg.OPERATIONS_ENUM.INSERT||t.operation===Yg.OPERATIONS_ENUM.UPDATE||t.operation===Yg.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===Yg.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(uh.info(i.message),i):i.http_resp_msg?(uh.error(`Error calling operation: ${e.name}`),uh.error(i.http_resp_msg),i):(uh.error(`Error calling operation: ${e.name}`),uh.error(i),i)}}a(Due,"callOperationFunctionAsAwait");A$.exports={callOperationFunctionAsAwait:Due}});var QN=P((BPe,y$)=>{"use strict";var{S3:Lue,GetObjectCommand:Mue}=require("@aws-sdk/client-s3");y$.exports={getFileStreamFromS3:vue,getS3AuthObj:R$};async function vue(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await R$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Mue(r))).Body}a(vue,"getFileStreamFromS3");function R$(e,t,r){return new Lue({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(R$,"getS3AuthObj")});var O$=P((kPe,b$)=>{"use strict";var jN=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}},JN=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};b$.exports={BulkLoadFileObject:jN,BulkLoadDataObject:JN}});var w$=P((GPe,N$)=>{"use strict";var XN=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};N$.exports=XN});var sw=P((WPe,V$)=>{"use strict";var Wg=pn(),Qg=WN(),Uue=require("needle"),ri=(H(),D(q)),$Pe=Ot(),rd=ae(),{handleHDBError:Bt,hdb_errors:x$}=_e(),{HTTP_STATUS_CODES:xr,HDB_ERROR_MSGS:Ar,CHECK_LOGS_WRAPPER:cl}=x$,nd=j(),ZN=require("papaparse");rd.promisifyPapaParse();var ni=require("fs-extra"),xue=require("path"),{chain:I$}=require("stream-chain"),C$=require("stream-json/streamers/StreamArray"),P$=require("stream-json/utils/Batch"),D$=require("stream-chain/utils/comp"),{finished:L$}=require("stream"),Bue=ce(),B$=zN(),Hue=QN(),{BulkLoadFileObject:tw,BulkLoadDataObject:kue}=O$(),rw=LN(),{verifyBulkLoadAttributePerms:H$}=Bg(),VPe=w$(),KPe=Sr(),YPe=co(),{databases:Fue}=(De(),D(nt)),{coerceType:Gue}=(of(),D(iw)),M$="No records parsed from csv file.",al=`${Bue.get("HDB_ROOT")}/tmp`,{schema_regex:que}=Ti(),v$=1024*1024*2,U$=5e3,$ue={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};V$.exports={csvDataLoad:Vue,csvURLLoad:Kue,csvFileLoad:Yue,importFromS3:Wue};async function Vue(e,t){let r=Qg.dataObject(e);if(r)throw Bt(r,r.message,xr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=G$(e.schema,e.table),i=ZN.parse(e.data,{header:!0,skipEmptyLines:!0,transform:ew.bind(null,s),dynamicTyping:!1}),o=new rw;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&H$(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 Bt(new Error,c,xr.BAD_REQUEST,void 0,void 0,!0);let l=new kue(e.action,e.schema,e.table,i.data);return n=await B$.callOperationFunctionAsAwait(q$,l,null),n.message===M$?M$:$$(n.records,n.number_written)}catch(s){throw ll(s)}}a(Vue,"csvDataLoad");async function Kue(e){let t=Qg.urlObject(e);if(t)throw Bt(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${al}/${r}`;try{await zue(e,r)}catch(s){throw nd.error(Ar.DOWNLOAD_FILE_ERR(r)+" - "+s),Bt(s,cl(Ar.DOWNLOAD_FILE_ERR(r)))}try{let s=new tw(this.job_operation_function.name,e.action,e.schema,e.table,n,ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await nw(s);return await zg(n),i}catch(s){throw await zg(n),ll(s)}}a(Kue,"csvURLLoad");async function Yue(e){let t=Qg.fileObject(e);if(t)throw Bt(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=new tw(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ri.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await nw(r)}catch(n){throw ll(n)}}a(Yue,"csvFileLoad");async function Wue(e){let t=Qg.s3FileObject(e);if(t)throw Bt(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=xue.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${al}/${s}`;let i=new tw(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Que(s,e);let o=await nw(i);return await zg(r),o}catch(n){throw await zg(r),ll(n)}}a(Wue,"importFromS3");async function zue(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Uue("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 Bt(n,s,n.statusCode,ri.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Jue(r,e.csv_url),await jue(t,r.raw)}a(zue,"downloadCSVFile");async function Que(e,t){try{let r=`${al}/${e}`;await ni.mkdirp(al),await ni.writeFile(`${al}/${e}`,"",{flag:"a+"});let n=await ni.createWriteStream(r),s=await Hue.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(){nd.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw nd.error(Ar.S3_DOWNLOAD_ERR+" - "+r),Bt(r,cl(Ar.S3_DOWNLOAD_ERR))}}a(Que,"downloadFileFromS3");async function jue(e,t){try{await ni.mkdirp(al),await ni.writeFile(`${al}/${e}`,t)}catch(r){throw nd.error(Ar.WRITE_TEMP_FILE_ERR),Bt(r,cl(Ar.DEFAULT_BULK_LOAD_ERR))}}a(jue,"writeFileToTempFolder");async function zg(e){if(e)try{await ni.access(e),await ni.unlink(e)}catch{nd.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(zg,"deleteTempFile");function Jue(e,t){if(e.statusCode!==x$.HTTP_STATUS_CODES.OK)throw Bt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,xr.BAD_REQUEST);if(!$ue[e.headers["content-type"]])throw Bt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,xr.BAD_REQUEST);if(!e.raw)throw Bt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,xr.BAD_REQUEST)}a(Jue,"validateURLResponse");async function nw(e){try{let t;switch(e.file_type){case ri.VALID_S3_FILE_TYPES.CSV:t=await Xue(e);break;case ri.VALID_S3_FILE_TYPES.JSON:t=await Zue(e);break;default:throw Bt(new Error,Ar.DEFAULT_BULK_LOAD_ERR,xr.BAD_REQUEST,ri.LOG_LEVELS.ERROR,Ar.INVALID_FILE_EXT_ERR(e))}return $$(t.records,t.number_written)}catch(t){throw ll(t)}}a(nw,"fileLoad");async function k$(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 Wg.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&H$(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Bt(c);r(l)}}a(k$,"validateChunk");async function F$(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;rd.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!rd.isEmpty(c)&&!rd.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await B$.callOperationFunctionAsAwait(q$,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Bt(c,cl(Ar.INSERT_CSV_ERR),xr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,Ar.INSERT_CSV_ERR+" - "+c);r(l)}}a(F$,"insertChunk");async function Xue(e){let t={records:0,number_written:0},r=G$(e.schema,e.table);try{let n=new rw,s=ni.createReadStream(e.file_path,{highWaterMark:v$});s.setEncoding("utf8"),await ZN.parsePromise(s,k$.bind(null,e,n),ew.bind(null,r));let i=n.getPermsResponse();if(i)throw Bt(new Error,i,xr.BAD_REQUEST);return s=ni.createReadStream(e.file_path,{highWaterMark:v$}),s.setEncoding("utf8"),await ZN.parsePromise(s,F$.bind(null,e,t),ew.bind(null,r)),s.destroy(),t}catch(n){throw Bt(n,cl(Ar.PAPA_PARSE_ERR),xr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,Ar.PAPA_PARSE_ERR+n)}}a(Xue,"callPapaParse");function G$(e,t){let r=Fue[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Gue(i,s));return n}a(G$,"createTransformMap");function ew(e,t,r){let n=e.get(r);return n?n(t):rd.autoCast(t)}a(ew,"typeFunction");async function Zue(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new rw,s=I$([ni.createReadStream(e.file_path,{encoding:"utf-8"}),C$.withParser(),c=>c.value,new P$({batchSize:U$}),D$(async c=>{await k$(e,n,r,c)})]);await new Promise((c,l)=>{L$(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Bt(new Error,i,xr.BAD_REQUEST);let o=I$([ni.createReadStream(e.file_path,{encoding:"utf-8"}),C$.withParser(),c=>c.value,new P$({batchSize:U$}),D$(async c=>{await F$(e,t,r,c)})]);return await new Promise((c,l)=>{L$(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Bt(n,cl(Ar.INSERT_JSON_ERR),xr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,Ar.INSERT_JSON_ERR+n)}}a(Zue,"insertJson");async function q$(e){let t={};try{e.data&&e.data.length>0&&ede(e.data[0])?t=await tde(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",nd.info(t.message))}catch(r){throw ll(r)}return t}a(q$,"callBulkFileLoad");function ede(e){let t=Object.keys(e);for(let r of t)if(!que.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(ede,"validateColumnNames");async function tde(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=Wg.insert;break;case"update":i=Wg.update;break;case"upsert":i=Wg.upsert;break;default:throw Bt(new Error,Ar.INVALID_ACTION_PARAM_ERR(n),xr.BAD_REQUEST,ri.LOG_LEVELS.ERROR,Ar.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 f=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][f])>=0&&e.splice(d,1)}let l=rd.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw ll(o)}}a(tde,"bulkFileLoad");function $$(e,t){return`successfully loaded ${t} of ${e} records`}a($$,"buildResponseMsg");function ll(e){return Bt(e,cl(Ar.DEFAULT_BULK_LOAD_ERR),xr.INTERNAL_SERVER_ERROR,ri.LOG_LEVELS.ERROR,Ar.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(ll,"buildTopLevelErrMsg")});var cw=P((QPe,X$)=>{"use strict";var aw=Kr(),rde=QN(),{AsyncParser:nde}=require("json2csv"),jg=require("stream"),Xn=ae(),ow=require("fs-extra"),sde=require("path"),bs=j(),{promisify:W$}=require("util"),dh=ae(),{handleHDBError:ar,hdb_errors:ide}=_e(),{HDB_ERROR_MSGS:In,HTTP_STATUS_CODES:cr}=ide,{streamAsJSON:ode}=(fA(),D(hD)),{Upload:ade}=require("@aws-sdk/lib-storage"),{toCsvStream:cde}=(eo(),D(bA)),K$=["search_by_value","search_by_hash","sql","search_by_conditions"],Y$=["json","csv"],z$="json",Q$="csv",lde="Successfully exported JSON locally.",ude="Successfully exported CSV locally.",dde=1e3,fde=aw.searchByHash,_de=aw.searchByValue,hde=W$(jg.finished);X$.exports={export_to_s3:gde,export_local:pde};async function pde(e){bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=j$(e);if(!Xn.isEmpty(t))throw bs.error(t),ar(new Error,t,cr.BAD_REQUEST,void 0,void 0,!0);if(Xn.isEmpty(e.path))throw bs.error(In.MISSING_VALUE("path")),ar(new Error,In.MISSING_VALUE("path"),cr.BAD_REQUEST,void 0,void 0,!0);let r=(Xn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(sde.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Xn.buildFolderPath(e.path,r);await Ede(e.path);let s=await J$(e);return await mde(n,e.format,s)}a(pde,"export_local");async function Ede(e){if(bs.trace("in confirmPath"),Xn.isEmptyOrZeroLength(e))throw ar(new Error,`Invalid path: ${e}`,cr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ow.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,bs.error(n),ar(new Error,n,cr.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 bs.error(r),ar(new Error,r,cr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Ede,"confirmPath");async function mde(e,t,r){if(bs.trace("in saveToLocal"),dh.isEmptyOrZeroLength(e))throw ar(new Error,In.INVALID_VALUE("file_path"),cr.BAD_REQUEST,void 0,void 0,!0);if(dh.isEmptyOrZeroLength(t))throw ar(new Error,In.INVALID_VALUE("Source format"),cr.BAD_REQUEST,void 0,void 0,!0);if(dh.isEmpty(r))throw ar(new Error,In.NOT_FOUND("Data"),cr.BAD_REQUEST,void 0,void 0,!0);if(t===z$){let n=ow.createWriteStream(e);return ode(r).pipe(n),await hde(n),{message:lde,path:e}}else if(t===Q$){let n=ow.createWriteStream(e),s=jg.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(f=>({label:f,value:f})));let c={objectMode:!0};return await new nde(i,c).fromInput(s).toOutput(n).promise(!1),{message:ude,path:e}}throw ar(new Error,In.INVALID_VALUE("format"),cr.BAD_REQUEST)}a(mde,"saveToLocal");async function gde(e){if(!e.s3||Object.keys(e.s3).length===0)throw ar(new Error,In.MISSING_VALUE("S3 object"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ar(new Error,In.MISSING_VALUE("aws_access_key_id"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ar(new Error,In.MISSING_VALUE("aws_secret_access_key"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.bucket))throw ar(new Error,In.MISSING_VALUE("bucket"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.key))throw ar(new Error,In.MISSING_VALUE("key"),cr.BAD_REQUEST);if(Xn.isEmptyOrZeroLength(e.s3.region))throw ar(new Error,In.MISSING_VALUE("region"),cr.BAD_REQUEST);let t=j$(e);if(!Xn.isEmpty(t))throw ar(new Error,t,cr.BAD_REQUEST);bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await J$(e)}catch(l){throw bs.error(l),l}let n,s=await rde.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new jg.PassThrough;if(e.format===Q$){i=e.s3.key+".csv";let l=cde(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===z$){i=e.s3.key+".json";let l=new jg.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let u=r.length,f="";for(let[d,h]of r.entries()){let _=d===u-1?JSON.stringify(h):JSON.stringify(h)+",";f+=_,d!==0&&d%dde===0&&(l.push(f),f="")}f.length!==0&&l.push(f),l.push("]"),l.push(null)}else throw ar(new Error,In.INVALID_VALUE("format"),cr.BAD_REQUEST);return new ade({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(gde,"export_to_s3");function j$(e){if(bs.trace("in exportCoreValidation"),Xn.isEmpty(e.format))return"format missing";if(Y$.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Y$.join(", ")}`;let t=e.search_operation.operation;if(Xn.isEmpty(t))return"search_operation.operation missing";if(K$.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${K$.join(", ")}`}a(j$,"exportCoreValidation");async function J$(e){bs.trace("in getRecords");let t,r;if(dh.isEmpty(e.search_operation)||dh.isEmptyOrZeroLength(e.search_operation.operation))throw ar(new Error,In.INVALID_VALUE("Search operation"),cr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=_de;break;case"search_by_hash":t=fde;break;case"search_by_conditions":t=aw.searchByConditions;break;case"sql":{let n=kg();t=W$(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,bs.error(r),ar(new Error,r,cr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(J$,"getRecords")});var eV=P((JPe,Z$)=>{"use strict";var lw=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Z$.exports=lw});var nV=P((ZPe,rV)=>{"use strict";var Sde=(H(),D(q)),tV=require("moment"),Tde=require("uuid").v4,uw=class{static{a(this,"JobObject")}constructor(){this.id=Tde(),this.type=void 0,this.start_datetime=tV().valueOf(),this.created_datetime=tV().valueOf(),this.end_datetime=void 0,this.status=Sde.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};rV.exports=uw});var dw=P((tDe,dV)=>{"use strict";var Ade=require("uuid").v4,cV=pn(),lV=Kr(),Rde=Ws(),yde=ou(),bde=eV(),At=(H(),D(q)),Ode=nV(),Nde=um(),si=j(),wde=Xd(),sd=ae(),{promisify:Ide}=require("util"),ul=require("moment"),Cde=kg(),Jg=WN(),sV=gR(),{deleteTransactionLogsBeforeValidator:Pde}=wN(),{handleHDBError:iV,hdb_errors:Dde,ClientError:Lde}=_e(),{HTTP_STATUS_CODES:oV}=Dde,aV=lV.searchByValue,Mde=lV.searchByHash,vde=cV.insert,Ude=Ide(Cde.evaluateSQL),xde=cV.update;dV.exports={addJob:kde,updateJob:Gde,handleGetJob:Bde,handleGetJobsByStartDate:Hde,getJobById:uV};async function Bde(e){if(e.id===void 0)throw new Lde("'id' is required");let t=await uV(e.id);return sd.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(Bde,"handleGetJob");async function Hde(e){try{let t=await Fde(e);if(si.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=ul(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ul(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 si.error(r),new Error(r)}}a(Hde,"handleGetJobsByStartDate");async function kde(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||sd.isEmptyOrZeroLength(e.operation)){let f="job parameter is invalid";return si.info(f),t.error=f,t}if(!At.JOB_TYPE_ENUM[e.operation])return si.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case At.OPERATIONS_ENUM.CSV_FILE_LOAD:n=Jg.fileObject(e);break;case At.OPERATIONS_ENUM.CSV_URL_LOAD:n=Jg.urlObject(e);break;case At.OPERATIONS_ENUM.CSV_DATA_LOAD:n=Jg.dataObject(e);break;case At.OPERATIONS_ENUM.IMPORT_FROM_S3:n=Jg.s3FileObject(e);break;case At.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case At.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=sV(e,"date");break;case At.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=sV(e,"timestamp");break;case At.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Pde(e);break;case At.OPERATIONS_ENUM.RESTART_SERVICE:if(At.HDB_PROCESS_SERVICES[e.service]===void 0)throw iV(new Error,"Invalid service",oV.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw iV(n,n.message,oV.BAD_REQUEST,void 0,void 0,!0);let s=new Ode;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 Rde(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await aV(i))}catch(f){let d=`There was an error inserting a new job: ${f}`;return si.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Ade();try{o=await aV(i)}catch(f){let d=`There was an error inserting a new job: ${f}`;return si.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return si.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new wde(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await vde(l)}catch(f){return si.error(`There was an error inserting a job for job type: ${e.operation} -- ${f}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let f=`Created a job with type ${s.type} and id ${s.id}`;t.message=f,t.createdJob=s,t.success=!0,si.trace(f)}return t}a(kde,"addJob");async function Fde(e){let t=ul(e.from_date,ul.ISO_8601),r=ul(e.to_date,ul.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 bde(n,e.hdb_user);try{return await Ude(s)}catch(i){throw si.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(Fde,"getJobsInDateRange");async function uV(e){if(sd.isEmptyOrZeroLength(e))return sd.errorizeMessage("Invalid job ID specified.");let t=new yde(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Mde(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return si.error(n),sd.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(uV,"getJobById");async function Gde(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(sd.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=ul().valueOf());let t=new Nde(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await xde(t),r}a(Gde,"updateJob")});var SV=P((nDe,gV)=>{"use strict";var fV=ae(),Rr=(H(),D(q)),qde=require("moment"),Xg=sw(),fh=j(),_V=dw(),hV=cw(),pV=Ac(),EV=rt(),$de=Mg(),Vde=Wu(),{parentPort:Kde,isMainThread:mV}=require("worker_threads"),{onMessageByType:Yde}=rt(),fw=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Wde(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(fV.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(fV.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await Mi(e,Xg.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await Mi(e,Xg.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await Mi(e,Xg.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await Mi(e,Xg.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await Mi(e,hV.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await Mi(e,hV.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await Mi(e,pV.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await Mi(e,pV.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Mi(e,$de.deleteTransactionLogsBefore);break;case Rr.JOB_TYPE_ENUM.restart_service:return await Mi(e,Vde.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Wde,"parseMessage");async function Mi(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=qde().valueOf(),await _V.updateJob(e.job),await zde(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):fh.error(`There was an error running ${t.name} job with id ${e.job.id}`),fh.error(n),e.job.message=n,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await _V.updateJob(e.job)}catch(s){throw fh.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Mi,"runJob");async function zde(e){fh.trace("launching job thread:",e),mV?EV.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Kde.postMessage({type:Rr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(zde,"launchJobThread");mV&&Yde(Rr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{EV.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){fh.error(r)}});gV.exports={parseMessage:Wde,RunnerMessage:fw}});var AV=P((iDe,TV)=>{"use strict";var _w=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};TV.exports=_w});var NN=P((cDe,Sw)=>{"use strict";var nS=Kr(),Ew=kg(),Zg=sw(),Po=km(),eS=lo(),hh=Ac(),Qde=Zb(),_h=qn(),tS=n_(),It=ON(),rS=j(),jde=sO(),Jde=Jm(),RV=CO(),Xde=Zm(),Zde=LO(),efe=MO(),tfe=xO(),rfe=HO(),hw=sg(),yV=cw(),nfe=Bg(),mw=dw(),V=(H(),D(q)),{hdb_errors:Eh,handleHDBError:ph}=_e(),{HTTP_STATUS_CODES:bV}=Eh,pw=JO(),OV=Wu(),UV=require("util"),od=pn(),sfe=$s(),ife=Mu(),NV=SV(),wV=_u(),IV=(Og(),D(J_)),CV=wt(),PV=Mg(),DV=Z_(),{setServerUtilities:ofe}=(of(),D(iw)),{CONTEXT:aDe}=(ta(),D(sA)),{_assignPackageExport:afe}=ui(),{transformReq:cfe}=ae(),{server:lfe}=($r(),D(ic)),en=rS.loggerWithTag("operation"),id=Xs(),LV=(Wc(),D(Yc)),ufe=zN(),MV=nS.searchByHash,dfe=nS.searchByValue,ffe=UV.promisify(nS.search),_fe=UV.promisify(Ew.evaluateSQL),hfe={[V.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.CREATE_TABLE]:!0,[V.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[V.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[V.OPERATIONS_ENUM.DROP_TABLE]:!0,[V.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Z=AV();async function xV(e,t){try{if(e.body.operation!=="read_log"&&(rS.log_level===V.LOG_LEVELS.INFO||rS.log_level===V.LOG_LEVELS.DEBUG||rS.log_level===V.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;en.info(c)}}catch(n){en.error(n)}let r=await ufe.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return hfe[e.body.operation]&&sfe.setSchemaDataToGlobal(n=>{n&&en.error(n)}),r}a(xV,"processLocalTransaction");var vV=Efe();Sw.exports={chooseOperation:BV,getOperationFunction:HV,operation:gw,processLocalTransaction:xV,executeJob:Os};ofe(Sw.exports);lfe.operation=gw;function BV(e){let t;try{t=HV(e)}catch(s){throw en.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=Ew.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Ew.checkASTPermissions(e,i);if(o)throw en.error(`${bV.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),ph(new Error,o,Eh.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.OPERATIONS_ENUM.LOGIN&&e.operation!==V.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=nfe.verifyPerms(i,s);if(o)throw en.error(`${bV.FORBIDDEN} from operation ${e.operation}`),en.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),ph(new Error,o,Eh.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw ph(s,"There was an error when trying to choose an operation path")}return r}a(BV,"chooseOperation");function HV(e){if(en.trace(`getOperationFunction with operation: ${e.operation}`),vV.has(e.operation))return vV.get(e.operation);throw ph(new Error,Eh.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Eh.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(HV,"getOperationFunction");afe("operation",gw);function gw(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=BV(e);return xV({body:e},n)}a(gw,"operation");async function pfe(e){en.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[V.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case V.OPERATIONS_ENUM.INSERT:o=await od.insert(i);break;case V.OPERATIONS_ENUM.UPDATE:o=await od.update(i);break;case V.OPERATIONS_ENUM.UPSERT:o=await od.upsert(i);break;case V.OPERATIONS_ENUM.DELETE:o=await hh.deleteRecord(i);break;default:en.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){en.info("Invalid operation in transaction"),en.error(o)}}a(pfe,"catchup");async function Os(e){cfe(e);let t,r;try{r=await mw.addJob(e),t=r.createdJob,en.info("addJob result",r);let n=new NV.RunnerMessage(t,e);return{message:await NV.parseMessage(n)??`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 en.error(s),ph(n,s)}}a(Os,"executeJob");function Efe(){let e=new Map;return e.set(V.OPERATIONS_ENUM.INSERT,new Z(od.insert)),e.set(V.OPERATIONS_ENUM.UPDATE,new Z(od.update)),e.set(V.OPERATIONS_ENUM.UPSERT,new Z(od.upsert)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Z(nS.searchByConditions)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_HASH,new Z(MV)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_ID,new Z(MV)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Z(dfe)),e.set(V.OPERATIONS_ENUM.SEARCH,new Z(ffe)),e.set(V.OPERATIONS_ENUM.SQL,new Z(_fe)),e.set(V.OPERATIONS_ENUM.CSV_DATA_LOAD,new Z(Os,Zg.csvDataLoad)),e.set(V.OPERATIONS_ENUM.CSV_FILE_LOAD,new Z(Os,Zg.csvFileLoad)),e.set(V.OPERATIONS_ENUM.CSV_URL_LOAD,new Z(Os,Zg.csvURLLoad)),e.set(V.OPERATIONS_ENUM.IMPORT_FROM_S3,new Z(Os,Zg.importFromS3)),e.set(V.OPERATIONS_ENUM.CREATE_SCHEMA,new Z(Po.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_DATABASE,new Z(Po.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_TABLE,new Z(Po.createTable)),e.set(V.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Z(Po.createAttribute)),e.set(V.OPERATIONS_ENUM.DROP_SCHEMA,new Z(Po.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_DATABASE,new Z(Po.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_TABLE,new Z(Po.dropTable)),e.set(V.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Z(Po.dropAttribute)),e.set(V.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Z(eS.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Z(eS.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_TABLE,new Z(eS.describeTable)),e.set(V.OPERATIONS_ENUM.DESCRIBE_ALL,new Z(eS.describeAll)),e.set(V.OPERATIONS_ENUM.DELETE,new Z(hh.deleteRecord)),e.set(V.OPERATIONS_ENUM.ADD_USER,new Z(_h.addUser)),e.set(V.OPERATIONS_ENUM.ALTER_USER,new Z(_h.alterUser)),e.set(V.OPERATIONS_ENUM.DROP_USER,new Z(_h.dropUser)),e.set(V.OPERATIONS_ENUM.LIST_USERS,new Z(_h.listUsersExternal)),e.set(V.OPERATIONS_ENUM.LIST_ROLES,new Z(tS.listRoles)),e.set(V.OPERATIONS_ENUM.ADD_ROLE,new Z(tS.addRole)),e.set(V.OPERATIONS_ENUM.ALTER_ROLE,new Z(tS.alterRole)),e.set(V.OPERATIONS_ENUM.DROP_ROLE,new Z(tS.dropRole)),e.set(V.OPERATIONS_ENUM.USER_INFO,new Z(_h.userInfo)),e.set(V.OPERATIONS_ENUM.READ_LOG,new Z(jde)),e.set(V.OPERATIONS_ENUM.ADD_NODE,new Z(Jde)),e.set(V.OPERATIONS_ENUM.UPDATE_NODE,new Z(RV)),e.set(V.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Z(RV)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE,new Z(Xde)),e.set(V.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Z(Zde)),e.set(V.OPERATIONS_ENUM.PURGE_STREAM,new Z(efe)),e.set(V.OPERATIONS_ENUM.SET_CONFIGURATION,new Z(CV.setConfiguration)),e.set(V.OPERATIONS_ENUM.CLUSTER_STATUS,new Z(tfe.clusterStatus)),e.set(V.OPERATIONS_ENUM.CLUSTER_NETWORK,new Z(rfe)),e.set(V.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Z(hw.setRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Z(hw.getRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Z(hw.deleteRoutes)),e.set(V.OPERATIONS_ENUM.EXPORT_TO_S3,new Z(Os,yV.export_to_s3)),e.set(V.OPERATIONS_ENUM.CREATE_CSR,new Z(id.createCsr)),e.set(V.OPERATIONS_ENUM.SIGN_CERTIFICATE,new Z(id.signCertificate)),e.set(V.OPERATIONS_ENUM.LIST_CERTIFICATES,new Z(id.listCertificates)),e.set(V.OPERATIONS_ENUM.ADD_CERTIFICATES,new Z(id.addCertificate)),e.set(V.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new Z(id.removeCertificate)),e.set(V.OPERATIONS_ENUM.GET_KEY,new Z(id.getKey)),e.set(V.OPERATIONS_ENUM.ADD_NODE_BACK,new Z(LV.addNodeBack)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE_BACK,new Z(LV.removeNodeBack)),e.set(V.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Z(Os,hh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Z(Os,hh.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.EXPORT_LOCAL,new Z(Os,yV.export_local)),e.set(V.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Z(mw.handleGetJobsByStartDate)),e.set(V.OPERATIONS_ENUM.GET_JOB,new Z(mw.handleGetJob)),e.set(V.OPERATIONS_ENUM.GET_FINGERPRINT,new Z(pw.getFingerprint)),e.set(V.OPERATIONS_ENUM.SET_LICENSE,new Z(pw.setLicense)),e.set(V.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Z(pw.getRegistrationInfo)),e.set(V.OPERATIONS_ENUM.RESTART,new Z(OV.restart)),e.set(V.OPERATIONS_ENUM.RESTART_SERVICE,new Z(Os,OV.restartService)),e.set(V.OPERATIONS_ENUM.CATCHUP,new Z(pfe)),e.set(V.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Z(ife.systemInformation)),e.set(V.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Z(Os,hh.deleteAuditLogsBefore)),e.set(V.OPERATIONS_ENUM.READ_AUDIT_LOG,new Z(Qde)),e.set(V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Z(wV.createTokens)),e.set(V.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Z(wV.refreshOperationToken)),e.set(V.OPERATIONS_ENUM.LOGIN,new Z(IV.login)),e.set(V.OPERATIONS_ENUM.LOGOUT,new Z(IV.logout)),e.set(V.OPERATIONS_ENUM.GET_CONFIGURATION,new Z(CV.getConfiguration)),e.set(V.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Z(It.customFunctionsStatus)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Z(It.getCustomFunctions)),e.set(V.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Z(It.getComponentFile)),e.set(V.OPERATIONS_ENUM.GET_COMPONENTS,new Z(It.getComponents)),e.set(V.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Z(It.setComponentFile)),e.set(V.OPERATIONS_ENUM.DROP_COMPONENT,new Z(It.dropComponent)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Z(It.getCustomFunction)),e.set(V.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Z(It.setCustomFunction)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Z(It.dropCustomFunction)),e.set(V.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Z(It.addComponent)),e.set(V.OPERATIONS_ENUM.ADD_COMPONENT,new Z(It.addComponent)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Z(It.dropCustomFunctionProject)),e.set(V.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(It.packageComponent)),e.set(V.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Z(It.packageComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(It.deployComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Z(It.deployComponent)),e.set(V.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Z(PV.readTransactionLog)),e.set(V.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Z(Os,PV.deleteTransactionLogsBefore)),e.set(V.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Z(DV.installModules)),e.set(V.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Z(DV.auditModules)),e.set(V.OPERATIONS_ENUM.GET_BACKUP,new Z(Po.getBackup)),e.set(V.OPERATIONS_ENUM.ADD_SSH_KEY,new Z(It.addSSHKey)),e.set(V.OPERATIONS_ENUM.UPDATE_SSH_KEY,new Z(It.updateSSHKey)),e.set(V.OPERATIONS_ENUM.DELETE_SSH_KEY,new Z(It.deleteSSHKey)),e.set(V.OPERATIONS_ENUM.LIST_SSH_KEYS,new Z(It.listSSHKeys)),e.set(V.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new Z(It.setSSHKnownHosts)),e.set(V.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new Z(It.getSSHKnownHosts)),e}a(Efe,"initializeOperationFunctionMap")});var iS=P((uDe,GV)=>{"use strict";var Tw=(H(),D(q)),mfe=ae(),mh=j(),{handleHDBError:Aw,hdb_errors:sS}=_e(),{isMainThread:gfe}=require("worker_threads"),{Readable:Sfe}=require("stream"),kV=require("os"),Tfe=require("util"),Afe=mb(),Rfe=Tfe.promisify(Afe.authorize),FV=NN(),{createGzip:yfe,constants:bfe}=require("zlib");function Ofe(e){let t=`Found an uncaught exception with message: ${e.message}. ${kV.EOL}Stack: ${e.stack} ${kV.EOL}Terminating ${gfe?"HDB":"thread"}.`;console.error(t),mh.fatal(t),process.exit(1)}a(Ofe,"handleServerUncaughtException");function Nfe(e,t,r){if(mh[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:sS.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(Nfe,"serverErrorHandler");function wfe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=Aw(new Error,"Invalid JSON.",sS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(mfe.isEmpty(e.body.operation)){let n=Aw(new Error,"Request body must include an 'operation' property.",sS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(wfe,"reqBodyValidationHandler");function Ife(e,t,r){let n;e.body.operation!==Tw.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Tw.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Tw.OPERATIONS_ENUM.LOGOUT?Rfe(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{mh.warn(s),mh.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(Aw(s,i,sS.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(Ife,"authHandler");async function Cfe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=FV.chooseOperation(e.body);let s=await FV.processLocalTransaction(e,n);if(s instanceof Sfe&&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(yfe({level:bfe.Z_BEST_SPEED})))}return s}catch(s){throw mh.error(s),s}}a(Cfe,"handlePostRequest");GV.exports={authHandler:Ife,handlePostRequest:Cfe,handleServerUncaughtException:Ofe,serverErrorHandler:Nfe,reqBodyValidationHandler:wfe}});var KV=P((fDe,VV)=>{"use strict";var Pfe=require("fastify-plugin"),{handlePostRequest:qV,authHandler:Dfe,reqBodyValidationHandler:Lfe}=iS();async function Mfe(e){e.decorate("hdbCore",{preValidation:[Lfe,Dfe],request:a(t=>$V(qV(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>$V(qV(t,r,!0)),"requestWithoutAuthentication")})}a(Mfe,"hdbCore");async function $V(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($V,"convertAsyncIterators");VV.exports=Pfe(Mfe)});var WV=P((pDe,YV)=>{"use strict";var hDe=require("fs"),oS=ce();oS.initSync();var{CONFIG_PARAMS:Rw}=(H(),D(q)),vfe=1024*1024*1024;function Ufe(e){let t=oS.get(Rw.HTTP_TIMEOUT),r=oS.get(Rw.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:vfe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:oS.get(Rw.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(Ufe,"getServerOptions");YV.exports=Ufe});var jV=P((mDe,QV)=>{"use strict";var yw=ce();yw.initSync();var{CONFIG_PARAMS:zV}=(H(),D(q));function xfe(){let e=yw.get(zV.HTTP_CORSACCESSLIST),t=yw.get(zV.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(xfe,"getCORSOptions");QV.exports=xfe});var ZV=P((SDe,XV)=>{"use strict";var JV=ce();JV.initSync();var Bfe=(H(),D(q));function Hfe(){return JV.get(Bfe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Hfe,"getHeaderTimeoutConfig");XV.exports=Hfe});var Ow={};Be(Ow,{customFunctionsServer:()=>Gfe,ready:()=>_1,start:()=>Ffe});function Ffe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Do||(Do=f1(t),je.http((await Do).server));let o=await Do,c=(0,bw.dirname)(s),l=(0,bw.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!e1.has(c)){e1.add(c);try{o.register($fe(c,l))}catch(u){if(u.message==="Root plugin has already booted")lt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:_1}}async function Gfe(){try{lt.info("In Custom Functions Fastify server"+process.cwd()),lt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),lt.debug(`Custom Functions server process ${process.pid} starting up.`),await qfe();let e=o1.get(B.HTTP_SECUREPORT)>0,t;try{t=Do=await f1(e)}catch(r){throw lt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw lt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){lt.error(`Custom Functions ${process.pid} Error: ${e}`),lt.error(e),process.exit(1)}}async function qfe(){try{lt.info("Custom Functions starting configuration."),await a1.setUsersWithRolesCache(),lt.info("Custom Functions completed configuration.")}catch(e){lt.error(e)}}function $fe(e,t){return async function(r){try{lt.info("Custom Functions starting buildRoutes"),lt.trace("Loading fastify routes folder "+e),(0,t1.existsSync)(e)&&r.register(i1.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:lt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?lt.error(s.message):s&&lt.error(s),o()})}catch(n){lt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function f1(e){lt.info("Custom Functions starting buildServer.");let t=(0,c1.default)(e),r=(0,r1.default)(t);r.server.headersTimeout=(0,u1.default)(),r.setErrorHandler(d1.serverErrorHandler);let n=(0,l1.default)();return n&&r.register(n1.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(s1.default),await r.register(kfe),await r.after(),yA(r),lt.info("Custom Functions completed buildServer."),r}function _1(){if(Do)return Do.then?Do.then(e=>e.ready()):Do.ready()}var bw,t1,r1,n1,s1,i1,o1,lt,kfe,a1,c1,l1,u1,d1,Do,e1,h1=be(()=>{bw=require("path"),t1=require("fs"),r1=U(require("fastify")),n1=U(require("@fastify/cors")),s1=U(cb()),i1=U(require("@fastify/autoload")),o1=U(ce());H();lt=U(j()),kfe=U(KV()),a1=U(qn()),c1=U(WV()),l1=U(jV()),u1=U(ZV()),d1=U(iS());eo();$r();e1=new Set;a(Ffe,"start");a(Gfe,"customFunctionsServer");a(qfe,"setUp");a($fe,"buildRouteFolder");a(f1,"buildServer");a(_1,"ready")});var Nw={};Be(Nw,{start:()=>Vfe});function Vfe(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,S1.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){E1||(E1=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=p1.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,m1.default)(s,(0,g1.realpathSync)(o))}}return i(s)},{runFirst:!0})),p1.set(r,n)}}}var m1,g1,S1,p1,E1,T1=be(()=>{m1=U(require("send")),g1=require("fs"),S1=U(require("serve-static")),p1=new Map;a(Vfe,"start")});var R1={};Be(R1,{Request:()=>ww,createReuseportFd:()=>aS});var A1,ww,Iw,Cw,aS,Pw=be(()=>{A1=require("os"),ww=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 Cw(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new Iw(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},Iw=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},Cw=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)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,A1.platform)()!="win32"&&(aS=require("node-unix-socket").createReuseportFd)});var Lw=P((wDe,y1)=>{"use strict";var gh=ce();gh.initSync();var ad=require("fs-extra"),Dw=require("path"),cd=(H(),D(q)),Kfe=require("crypto"),Yfe=require("uuid").v4;y1.exports=Wfe;function Wfe(){if(gh.getHdbBasePath()!==void 0){let e=Dw.join(gh.getHdbBasePath(),cd.LICENSE_KEY_DIR_NAME,cd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=Dw.join(gh.getHdbBasePath(),cd.LICENSE_KEY_DIR_NAME,cd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=Dw.join(gh.getHdbBasePath(),cd.LICENSE_KEY_DIR_NAME,cd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{ad.accessSync(r),ad.accessSync(e),ad.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=Yfe(),i=Kfe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});ad.writeFileSync(r,s),ad.writeFileSync(e,i.privateKey),ad.writeFileSync(t,i.publicKey)}else throw n}}}a(Wfe,"checkJWTTokenExist")});var O1=P((CDe,b1)=>{"use strict";var Mw=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};b1.exports={HdbInfoInsertObject:Mw}});var I1=P((DDe,w1)=>{"use strict";var N1=(H(),D(q)),vw=class{static{a(this,"UpgradeObject")}constructor(t,r){this[N1.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[N1.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};w1.exports={UpgradeObject:vw}});var cS=P((MDe,P1)=>{"use strict";var Ns=require("prompt"),ld=require("chalk"),C1=j(),ii=require("os"),Uw=ec(),xw=["yes","y"];async function zfe(e){let t=`${ii.EOL}`+ld.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ii.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ii.EOL}${ii.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ii.EOL}`;Ns.override=Uw(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:ld.magenta(`${ii.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return C1.error("There was an error when prompting user about an upgrade."),C1.error(s),!1}return xw.includes(n.CONFIRM_UPGRADE)}a(zfe,"forceUpdatePrompt");async function Qfe(e){let t=`${ii.EOL}`+ld.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ii.EOL}`);Ns.override=Uw(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:ld.magenta(`${ii.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return xw.includes(n.CONFIRM_DOWNGRADE)}a(Qfe,"forceDowngradePrompt");async function jfe(){let e=`${ii.EOL}`+ld.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=Uw(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:ld.magenta(`${ii.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return xw.includes(r.GENERATE_CERTS)}a(jfe,"upgradeCertsPrompt");P1.exports={forceUpdatePrompt:zfe,forceDowngradePrompt:Qfe,upgradeCertsPrompt:jfe}});var Hw=P((UDe,D1)=>{"use strict";var Bw=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};D1.exports=Bw});var M1=P((GDe,L1)=>{"use strict";var Jfe=ae(),Xfe=wt(),BDe=j(),HDe=require("path"),kDe=require("fs"),FDe=(H(),D(q));L1.exports={getOldPropsValue:Zfe};function Zfe(e,t,r=!1){let n=t.getRaw(e);return Jfe.isNotEmptyAndHasValue(n)?n:r?Xfe.getDefaultConfig(e):""}a(Zfe,"getOldPropsValue")});var B1=P(($De,x1)=>{"use strict";var Ua=require("path"),xa=require("fs-extra"),e_e=require("properties-reader"),t_e=Hw(),lr=j(),{getOldPropsValue:ut}=M1(),{HDB_SETTINGS_NAMES:me,CONFIG_PARAMS:dl}=(H(),D(q)),fl=wt(),lS=ce(),v1=ae(),vi=(H(),D(q)),kw=new t_e("3.1.0"),U1=[];function r_e(){let e=e_e(lS.get(me.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),lr.info(t);let r=` ;Settings for the HarperDB process.
39
39
 
40
40
  ;The directory selected during install where the database files reside.
41
- ${me.HDB_ROOT_KEY} = ${lt(me.HDB_ROOT_KEY,e)}
41
+ ${me.HDB_ROOT_KEY} = ${ut(me.HDB_ROOT_KEY,e)}
42
42
  ;The port the HarperDB REST interface will listen on.
43
- ${me.SERVER_PORT_KEY} = ${lt(me.SERVER_PORT_KEY,e)}
43
+ ${me.SERVER_PORT_KEY} = ${ut(me.SERVER_PORT_KEY,e)}
44
44
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
45
- ${me.HTTP_SECURE_ENABLED_KEY} = ${lt(me.HTTP_SECURE_ENABLED_KEY,e)}
45
+ ${me.HTTP_SECURE_ENABLED_KEY} = ${ut(me.HTTP_SECURE_ENABLED_KEY,e)}
46
46
  ;The path to the SSL certificate used when running with HTTPS enabled.
47
- ${me.CERT_KEY} = ${lt(me.CERT_KEY,e)}
47
+ ${me.CERT_KEY} = ${ut(me.CERT_KEY,e)}
48
48
  ;The path to the SSL private key used when running with HTTPS enabled.
49
- ${me.PRIVATE_KEY_KEY} = ${lt(me.PRIVATE_KEY_KEY,e)}
49
+ ${me.PRIVATE_KEY_KEY} = ${ut(me.PRIVATE_KEY_KEY,e)}
50
50
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
51
- ${me.CORS_ENABLED_KEY} = ${lt(me.CORS_ENABLED_KEY,e)}
51
+ ${me.CORS_ENABLED_KEY} = ${ut(me.CORS_ENABLED_KEY,e)}
52
52
  ;Allows for setting allowable domains with CORS. Comma separated list.
53
- ${me.CORS_WHITELIST_KEY} = ${lt(me.CORS_WHITELIST_KEY,e)}
53
+ ${me.CORS_WHITELIST_KEY} = ${ut(me.CORS_WHITELIST_KEY,e)}
54
54
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
55
- ${me.SERVER_TIMEOUT_KEY} = ${lt(me.SERVER_TIMEOUT_KEY,e,!0)}
55
+ ${me.SERVER_TIMEOUT_KEY} = ${ut(me.SERVER_TIMEOUT_KEY,e,!0)}
56
56
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
57
- ${me.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${lt(me.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
57
+ ${me.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${ut(me.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
58
58
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
59
- ${me.SERVER_HEADERS_TIMEOUT_KEY} = ${lt(me.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
59
+ ${me.SERVER_HEADERS_TIMEOUT_KEY} = ${ut(me.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
60
60
  ;Define whether to log to file or not.
61
- ${me.LOG_TO_FILE} = ${dl.getDefaultConfig(ul.LOGGING_FILE)}
61
+ ${me.LOG_TO_FILE} = ${fl.getDefaultConfig(dl.LOGGING_FILE)}
62
62
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
63
- ${me.LOG_TO_STDSTREAMS} = ${dl.getDefaultConfig(ul.LOGGING_STDSTREAMS)}
63
+ ${me.LOG_TO_STDSTREAMS} = ${fl.getDefaultConfig(dl.LOGGING_STDSTREAMS)}
64
64
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
65
- ${me.LOG_LEVEL_KEY} = ${lt(me.LOG_LEVEL_KEY,e)}
65
+ ${me.LOG_LEVEL_KEY} = ${ut(me.LOG_LEVEL_KEY,e)}
66
66
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
67
- ${me.LOG_PATH_KEY} = ${lt(me.LOG_PATH_KEY,e)}
67
+ ${me.LOG_PATH_KEY} = ${ut(me.LOG_PATH_KEY,e)}
68
68
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
69
- ${me.LOG_DAILY_ROTATE_KEY} = ${lt(me.LOG_DAILY_ROTATE_KEY,e)}
69
+ ${me.LOG_DAILY_ROTATE_KEY} = ${ut(me.LOG_DAILY_ROTATE_KEY,e)}
70
70
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
71
71
  ;daily log files which may consume a large amount of storage depending on your log settings.
72
- ${me.LOG_MAX_DAILY_FILES_KEY} = ${lt(me.LOG_MAX_DAILY_FILES_KEY,e)}
72
+ ${me.LOG_MAX_DAILY_FILES_KEY} = ${ut(me.LOG_MAX_DAILY_FILES_KEY,e)}
73
73
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
74
- ${me.PROPS_ENV_KEY} = ${lt(me.PROPS_ENV_KEY,e)}
74
+ ${me.PROPS_ENV_KEY} = ${ut(me.PROPS_ENV_KEY,e)}
75
75
  ;This allows self signed certificates to be used in clustering. This is a security risk
76
76
  ;as clustering will not validate the cert, so should only be used internally.
77
77
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
78
- ${me.ALLOW_SELF_SIGNED_SSL_CERTS} = ${lt(me.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
78
+ ${me.ALLOW_SELF_SIGNED_SSL_CERTS} = ${ut(me.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
79
79
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
80
- ${me.MAX_HDB_PROCESSES} = ${lt(me.MAX_HDB_PROCESSES,e)}
80
+ ${me.MAX_HDB_PROCESSES} = ${ut(me.MAX_HDB_PROCESSES,e)}
81
81
  ;Set to true to enable clustering. Requires a valid enterprise license.
82
- ${me.CLUSTERING_ENABLED_KEY} = ${lt(me.CLUSTERING_ENABLED_KEY,e,!0)}
82
+ ${me.CLUSTERING_ENABLED_KEY} = ${ut(me.CLUSTERING_ENABLED_KEY,e,!0)}
83
83
  ;The port that will be used for HarperDB clustering.
84
- ${me.CLUSTERING_PORT_KEY} = ${lt(me.CLUSTERING_PORT_KEY,e)}
84
+ ${me.CLUSTERING_PORT_KEY} = ${ut(me.CLUSTERING_PORT_KEY,e)}
85
85
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
86
- ${me.CLUSTERING_NODE_NAME_KEY} = ${lt(me.CLUSTERING_NODE_NAME_KEY,e)}
86
+ ${me.CLUSTERING_NODE_NAME_KEY} = ${ut(me.CLUSTERING_NODE_NAME_KEY,e)}
87
87
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
88
- ${me.CLUSTERING_USER_KEY} = ${lt(me.CLUSTERING_USER_KEY,e)}
88
+ ${me.CLUSTERING_USER_KEY} = ${ut(me.CLUSTERING_USER_KEY,e)}
89
89
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
90
- ${me.DISABLE_TRANSACTION_LOG_KEY} = ${lt(me.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
90
+ ${me.DISABLE_TRANSACTION_LOG_KEY} = ${ut(me.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
91
91
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
92
- ${me.OPERATION_TOKEN_TIMEOUT_KEY} = ${lt(me.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
92
+ ${me.OPERATION_TOKEN_TIMEOUT_KEY} = ${ut(me.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
93
93
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
94
- ${me.REFRESH_TOKEN_TIMEOUT_KEY} = ${lt(me.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
94
+ ${me.REFRESH_TOKEN_TIMEOUT_KEY} = ${ut(me.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
95
95
  ;The port the IPC server will run on.
96
- ${me.IPC_SERVER_PORT} = ${dl.getDefaultConfig(ul.IPC_NETWORK_PORT)}
96
+ ${me.IPC_SERVER_PORT} = ${fl.getDefaultConfig(dl.IPC_NETWORK_PORT)}
97
97
  ;Run HDB in the foreground.
98
- ${me.RUN_IN_FOREGROUND} = ${dl.getDefaultConfig(ul.OPERATIONSAPI_FOREGROUND)}
98
+ ${me.RUN_IN_FOREGROUND} = ${fl.getDefaultConfig(dl.OPERATIONSAPI_FOREGROUND)}
99
99
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
100
- ${me.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${dl.getDefaultConfig(ul.CUSTOMFUNCTIONS_ENABLED)}
100
+ ${me.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${fl.getDefaultConfig(dl.CUSTOMFUNCTIONS_ENABLED)}
101
101
  ;The port used to access the custom functions server.
102
- ${me.CUSTOM_FUNCTIONS_PORT_KEY} = ${dl.getDefaultConfig(ul.HTTP_PORT)}
102
+ ${me.CUSTOM_FUNCTIONS_PORT_KEY} = ${fl.getDefaultConfig(dl.HTTP_PORT)}
103
103
  ;The path to the folder containing HarperDB custom function files.
104
- ${me.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Da.join(lt(me.HDB_ROOT_KEY,e),"custom_functions")}
104
+ ${me.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Ua.join(ut(me.HDB_ROOT_KEY,e),"custom_functions")}
105
105
  ;Set the max number of processes HarperDB will start for the Custom Functions server
106
- ${me.MAX_CUSTOM_FUNCTION_PROCESSES} = ${dl.getDefaultConfig(ul.HTTP_THREADS)}
107
- `,n=mS.get("settings_path"),s=Da.dirname(n),i=Da.join(s,"3_1_0_upgrade_settings.bak");try{ir.info(`Backing up old settings file to: ${i}`),La.copySync(n,i)}catch(c){throw ir.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ir.info("New settings file values for 3.1.0 upgrade:",r),ir.info(`Creating new/upgraded settings file at '${n}'`),La.writeFileSync(n,r),ir.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ir.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ir.error(c),La.copySync(i,n),c}mS.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ir.info(o),o}a(__e,"updateSettingsFile_3_1_0");function h_e(){let e=Da.join(B1.getHomeDir(),Ui.HDB_HOME_DIR_NAME,Ui.LICENSE_KEY_DIR_NAME,Ui.LICENSE_FILE_NAME),t=Da.join(B1.getHomeDir(),Ui.HDB_HOME_DIR_NAME,Ui.LICENSE_KEY_DIR_NAME,Ui.REG_KEY_FILE_NAME),r=Da.join(mS.getHdbBasePath(),Ui.LICENSE_KEY_DIR_NAME,Ui.LICENSE_FILE_NAME),n=Da.join(r,Ui.LICENSE_FILE_NAME),s=Da.join(r,Ui.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ir.info(i);let o="Creating .license directory";console.log(o),ir.info(o),La.mkdirpSync(r);try{La.accessSync(e);try{let c="Moving licence file";console.log(c),ir.info(c),La.moveSync(e,n);let l="License file successfully moved.";console.log(l),ir.info(l)}catch{let l="moving license file failed";console.error(l),ir.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),ir.warn(l)}try{La.accessSync(t);try{let c="Moving registration file";console.log(c),ir.info(c),La.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),ir.info(l)}catch{let l="moving registration file failed";console.error(l),ir.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),ir.warn(l)}}a(h_e,"moveLicenseFiles");kw.sync_functions.push(__e);kw.sync_functions.push(h_e);x1.push(kw);H1.exports=x1});var V1=P((YDe,$1)=>{"use strict";var es=ot(),{insertRecords:m_e}=dc(),p_e=on(),Ma=Dt(),E_e=re(),Po=j(),g_e=re(),Bi=require("fs-extra"),Do=require("path"),S_e=require("cli-progress"),wh=require("assert"),T_e=require("pino"),A_e=ne();$1.exports=R_e;var pS,F1,ES,Fw,en,Ih=!1;async function R_e(e=!0){return pS=A_e.getHdbBasePath(),F1=Do.join(pS,"schema"),ES=Do.join(pS,"4_0_0_upgrade_tmp"),Fw=Do.join(pS,"transactions"),console.info("Reindexing upgrade started for schemas"),Po.notify("Reindexing upgrade started for schemas"),await q1(F1,!1,e),await Bi.pathExists(Fw)&&(console.info(`
106
+ ${me.MAX_CUSTOM_FUNCTION_PROCESSES} = ${fl.getDefaultConfig(dl.HTTP_THREADS)}
107
+ `,n=lS.get("settings_path"),s=Ua.dirname(n),i=Ua.join(s,"3_1_0_upgrade_settings.bak");try{lr.info(`Backing up old settings file to: ${i}`),xa.copySync(n,i)}catch(c){throw lr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{lr.info("New settings file values for 3.1.0 upgrade:",r),lr.info(`Creating new/upgraded settings file at '${n}'`),xa.writeFileSync(n,r),lr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),lr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),lr.error(c),xa.copySync(i,n),c}lS.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),lr.info(o),o}a(r_e,"updateSettingsFile_3_1_0");function n_e(){let e=Ua.join(v1.getHomeDir(),vi.HDB_HOME_DIR_NAME,vi.LICENSE_KEY_DIR_NAME,vi.LICENSE_FILE_NAME),t=Ua.join(v1.getHomeDir(),vi.HDB_HOME_DIR_NAME,vi.LICENSE_KEY_DIR_NAME,vi.REG_KEY_FILE_NAME),r=Ua.join(lS.getHdbBasePath(),vi.LICENSE_KEY_DIR_NAME,vi.LICENSE_FILE_NAME),n=Ua.join(r,vi.LICENSE_FILE_NAME),s=Ua.join(r,vi.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),lr.info(i);let o="Creating .license directory";console.log(o),lr.info(o),xa.mkdirpSync(r);try{xa.accessSync(e);try{let c="Moving licence file";console.log(c),lr.info(c),xa.moveSync(e,n);let l="License file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving license file failed";console.error(l),lr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),lr.warn(l)}try{xa.accessSync(t);try{let c="Moving registration file";console.log(c),lr.info(c),xa.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving registration file failed";console.error(l),lr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),lr.warn(l)}}a(n_e,"moveLicenseFiles");kw.sync_functions.push(r_e);kw.sync_functions.push(n_e);U1.push(kw);x1.exports=U1});var q1=P((KDe,G1)=>{"use strict";var Zn=at(),{insertRecords:s_e}=Ec(),i_e=an(),Ba=Mt(),o_e=ae(),Lo=j(),a_e=ae(),Ui=require("fs-extra"),Mo=require("path"),c_e=require("cli-progress"),Sh=require("assert"),l_e=require("pino"),u_e=ce();G1.exports=d_e;var uS,H1,dS,Fw,tn,Th=!1;async function d_e(e=!0){return uS=u_e.getHdbBasePath(),H1=Mo.join(uS,"schema"),dS=Mo.join(uS,"4_0_0_upgrade_tmp"),Fw=Mo.join(uS,"transactions"),console.info("Reindexing upgrade started for schemas"),Lo.notify("Reindexing upgrade started for schemas"),await k1(H1,!1,e),await Ui.pathExists(Fw)&&(console.info(`
108
108
 
109
- Reindexing upgrade started for transaction logs`),Po.notify("Reindexing upgrade started for transaction logs"),await q1(Fw,!0,e)),Po.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Ih?", but errors occurred":"")}a(R_e,"reindexUpgrade");async function q1(e,t,r){let n=await Bi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Do.join(e,o.toString());if(o===".DS_Store")continue;let l=await Bi.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Bi.statSync(Do.join(c,d)).isDirectory())try{await y_e(o,d,t),en.info(`Reindexing started for ${o}.${d}`),Po.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await O_e(o,d,c,t,r),en.info(`Reindexing completed for ${o}.${d}`),Po.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Ih=!0,h.schema_path=c,h.table_name=d,Po.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Po.error(h),en.error(h),console.error(h)}}}if(!Ih)try{await Bi.rm(ES,{recursive:!0})}catch{}}a(q1,"processTables");async function y_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Do.join(ES,s);await Bi.ensureDir(ES),await Bi.writeFile(i,""),en=T_e({level:"debug",formatters:{bindings(){}}},i)}a(y_e,"initPinoLogger");var b_e=20;async function O_e(e,t,r,n,s){let i;try{i=await es.openEnvironment(r,t,n)}catch(E){if(E.message==="MDB_INVALID: File is not an LMDB file"){Po.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),en.error(E);return}throw E}let o=I_e(i.dbis),c=es.openDBI(i,o),l=Object.keys(i.dbis),u=es.statDBI(i,o);en.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new S_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await es.createEnvironment(r,t,!1);es.createDBI(d,o,!1,!0);let h=[];try{for(let E of c.getRange({start:!1}))E.value={...E.value},h.push(E),n||e==="system"&&(t==="hdb_schema"&&(E.key=E.key.toString(),E.value.name=E.value.name.toString()),t==="hdb_table"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.name=E.value.name.toString()),t==="hdb_attribute"&&(E.key=E.key.toString(),E.value.schema=E.value.schema.toString(),E.value.table=E.value.table.toString(),E.value.attribute=E.value.attribute.toString())),h.length>b_e&&await _();await _()}catch(E){throw Ih=!0,en.error(E),E}async function _(){let E,A=h.map(({value:M})=>M);n?E=await Promise.all(A.map(M=>N_e(d,M))):E=await m_e(d,o,l.filter(M=>M!=="__blob__"),A,!1);for(let M=0,H=h.length;M<H;M++){let{key:k,value:V}=h[M];en.info(`Record hash value: ${k} hash: ${o}`);let q;n?q=E[M]:q=E.written_hashes.indexOf(k)>-1,wh(q,!0),w_e(d,o,V[o],n),en.info(`Insert success, written hashes: ${E.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Po.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),en.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let m=es.statDBI(i,o),S=es.statDBI(d,o);if(en.info(`Old stats entry count: ${m.entryCount}. New stats entry count: ${S.entryCount}`),wh.deepStrictEqual(m.entryCount,S.entryCount),await es.closeEnvironment(i),await es.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let E=Do.join(r,t),A=Do.join(E,"data.mdb"),w=Do.join(E,"lock.mdb");await Bi.unlink(A),await Bi.unlink(w),await Bi.rmdir(E),en.info(`Deleted old environment files from schema folder: ${A}, ${w}`)}let g=await es.openEnvironment(r,t),T=es.statDBI(g,o);en.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(T)}`),wh.deepStrictEqual(T.entryCount,S.entryCount),await es.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(O_e,"processTable");async function N_e(e,t){es.initializeDBIs(e,Ma.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ma.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ma.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ma.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),g_e.isEmpty(t.user_name)||e.dbis[Ma.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ma.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(N_e,"insertTransaction");function w_e(e,t,r,n){let i=e.dbis[t].get(r);wh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ma.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ma.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!E_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];G1(e,c,d,r)}else G1(e,c,l,r)}a(w_e,"validateIndices");function G1(e,t,r,n){try{let s=!1,i=p_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||en.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),wh.deepStrictEqual(s,!0)}catch(s){Ih=!0,en.error(s),console.error(s)}}a(G1,"validateIndex");function I_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(I_e,"getHashDBI")});var j1=P((jDe,z1)=>{"use strict";var gS=require("path"),va=require("fs-extra"),C_e=Hw(),fl=j(),K1=Ot(),qw=ne(),ai=v(),SS=re(),P_e=require("properties-reader"),D_e=Ys(),L_e=aE(),M_e=$r(),zDe=require("util"),v_e=M_e.searchByValue,U_e=fn(),B_e=ZE(),x_e=yt(),H_e=V1(),Y1=Zs(),k_e=hS(),Dh=new C_e("4.0.0"),W1=[],Ch,Ph;async function F_e(){try{if(await k_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Ch){let t=SS.changeExtension(Ch,".bak");await va.move(Ch,t)}if(Ph){let t=SS.changeExtension(Ph,".bak");await va.move(Ph,t)}await Y1.generateKeys()}else console.log("Using existing certificates."),Y1.updateConfigCert(Ch,Ph,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(F_e,"generateNewKeys");async function q_e(){console.log("Updating HarperDB nodes."),fl.info("Updating HarperDB nodes.");let e=[];try{let t=new D_e(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await v_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!x_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ai.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(SS.isEmptyOrZeroLength(n))return;let s=new L_e(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await U_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{B_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(q_e,"updateNodes");async function G_e(){let e=qw.get(ai.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(gS.join("config","settings.js"))){fl.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),fl.info(t);let r=gS.dirname(e),n=qw.get(ai.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=gS.join(n,"backup","4_0_0_upgrade_settings.bak"),i=gS.join(n,ai.HDB_CONFIG_FILE);try{fl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),va.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{fl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),fl.info("Updating env variables with new settings values");let d=K1.initOldConfig(e);Ch=d[ai.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Ph=d[ai.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],K1.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=SS.getPropsFilePath();va.accessSync(o,va.constants.F_OK|va.constants.R_OK);let l=P_e(o).get(ai.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
- install_user = ${l}`;try{va.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{qw.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{va.removeSync(r),console.log(f),fl.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(G_e,"updateSettingsFile_4_0_0");Dh.async_functions.push(G_e);Dh.async_functions.push(F_e);Dh.async_functions.push(H_e);Dh.async_functions.push(q_e);W1.push(Dh);z1.exports=W1});var Gw=P((JDe,Z1)=>{"use strict";var _l=re(),$_e=v(),Q1=j(),{DATA_VERSION:V_e,UPGRADE_VERSION:K_e}=$_e.UPGRADE_JSON_FIELD_NAMES_ENUM,J1=k1(),TS=j1(),hl=new Map;J1&&J1.forEach(e=>{hl.set(e.version,e)});TS&&TS.forEach(e=>{hl.set(e.version,e)});TS&&TS.forEach(e=>{hl.set(e.version,e)});function Y_e(){return[...hl.keys()].sort(_l.compareVersions)}a(Y_e,"getSortedVersions");function X1(e){let t=e[V_e],r=e[K_e];return _l.isEmptyOrZeroLength(t)||_l.isEmptyOrZeroLength(r)?(Q1.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Q1.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...hl.keys()].sort(_l.compareVersions).filter(function(n){return _l.compareVersions(n,t)>0&&_l.compareVersions(n,r)<=0})}a(X1,"getVersionsForUpgrade");function W_e(e){return X1(e).length>0}a(W_e,"hasUpgradesRequired");function z_e(e){return _l.isEmptyOrZeroLength(e)?null:hl.has(e)?hl.get(e):null}a(z_e,"getDirectiveByVersion");Z1.exports={getSortedVersions:Y_e,getDirectiveByVersion:z_e,getVersionsForUpgrade:X1,hasUpgradesRequired:W_e}});var RS=P((ZDe,sK)=>{"use strict";var j_e=require("util"),$w=require("chalk"),Q_e=require("os"),tK=fn(),J_e=$r(),ts=v(),rK=w1(),Kw=dR(),{UpgradeObject:eK}=P1(),{forceDowngradePrompt:X_e}=hS(),Z_e=kc(),AS=j(),dd=re(),Yw=Gs(),ehe=(Pe(),se(rt)),the=Gw(),rhe=j_e.promisify(Yw.setSchemaDataToGlobal),nhe=J_e.searchByValue,she="info_id",ihe="2.9.9",ohe="3.0.0";async function ahe(e){let t=new rK.HdbInfoInsertObject(1,e,e),r=new Kw.InsertObject(ts.OPERATIONS_ENUM.INSERT,ts.SYSTEM_SCHEMA_NAME,ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ts.INFO_TABLE_HASH_ATTRIBUTE,[t]);return Yw.setSchemaDataToGlobal(),tK.insert(r)}a(ahe,"insertHdbInstallInfo");async function Vw(e){let t,r=await nK(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new rK.HdbInfoInsertObject(i,e,e);let o=new Kw.InsertObject(ts.OPERATIONS_ENUM.INSERT,ts.SYSTEM_SCHEMA_NAME,ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ts.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await rhe(),tK.insert(o)}a(Vw,"insertHdbUpgradeInfo");async function nK(){let e=new Kw.NoSQLSeachObject(ts.SYSTEM_SCHEMA_NAME,ts.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,she,ts.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await nhe(e))}catch(r){console.error(r)}return t}a(nK,"getAllHdbInfoRecords");async function che(){let e=await nK();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(che,"getLatestHdbInfoRecord");async function lhe(){AS.info("Checking if HDB software has been updated");try{let e=Z_e.version(),t=await che(),r;if(dd.isEmpty(t))r=ihe;else if(r=t.data_version_num,dd.compareVersions(r.toString(),e.toString())>0){if(!dd.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log($w.yellow(`This instance's data was last run on version ${r}`)),console.error($w.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Q_e.EOL}${ts.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");dd.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log($w.yellow(`This instance's data was last run on version ${r}`)),await X_e(new eK(r,e))?await Vw(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(Yw.setSchemaDataToGlobal(),uhe(r),e.toString()===r.toString())return;let n=new eK(r,e);if(the.hasUpgradesRequired(n))return n;dd.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await Vw(n.upgrade_version),AS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw AS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),AS.fatal(e),e}}a(lhe,"getVersionUpdateInfo");function uhe(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${ts.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in ehe.databases.system))throw console.log(t),new Error(t);if(!dd.isEmpty(e)&&e<ohe)throw console.log(t),new Error(t)}a(uhe,"checkIfInstallIsSupported");sK.exports={insertHdbInstallInfo:ahe,insertHdbUpgradeInfo:Vw,getVersionUpdateInfo:lhe}});var cK=P((tLe,aK)=>{"use strict";var yS=require("joi"),{boolean:dhe,string:Ww,number:fhe}=yS.types(),iK=require("fs-extra"),Lh=v(),oK=require("path"),_he=_t();aK.exports=hhe;function hhe(e){let t=Ww.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=yS.object({[Lh.INSTALL_PROMPTS.ROOTPATH]:yS.custom(mhe),[Lh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:yS.alternatives([fhe.min(0),Ww]).allow("null",null),[Lh.INSTALL_PROMPTS.TC_AGREEMENT]:Ww.valid("yes","YES","Yes"),[Lh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Lh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:dhe});return _he.validateBySchema(e,r)}a(hhe,"installValidator");function mhe(e,t){if(iK.existsSync(oK.join(e,"system/hdb_user/data.mdb"))||iK.existsSync(oK.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(mhe,"validateRootAvailable")});var uK=P((nLe,lK)=>{"use strict";var{mkdirpSync:phe,copySync:Ehe}=require("fs-extra"),Ua=require("path"),fd=v(),jw=j(),ghe=kn(),zw=to(),She=ft();lK.exports=The;async function The(e){jw.trace("Mounting HarperDB"),ml(e),ml(Ua.join(e,"backup")),ml(Ua.join(e,"keys")),ml(Ua.join(e,"keys",fd.LICENSE_FILE_NAME)),ml(Ua.join(e,"log")),ml(Ua.join(e,"database")),ml(Ua.join(e,"components")),Ehe(Ua.resolve(fd.PACKAGE_ROOT,"./utility/install/README.md"),Ua.join(e,"README.md")),await Ahe()}a(The,"mountHdb");async function Ahe(){let e=jf(),t=Object.keys(zw);for(let r=0;r<t.length;r++){let n=t[r],s=zw[n].hash_attribute;try{She.initSystemSchemaPaths(fd.SYSTEM_SCHEMA_NAME,n);let i=new e(fd.SYSTEM_SCHEMA_NAME,n,s);i.attributes=zw[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await ghe.createTable(n,i)}catch(i){throw jw.error(`issue creating environment for ${fd.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Ahe,"createLMDBTables");function ml(e){phe(e,{mode:fd.HDB_FILE_PERMISSIONS}),jw.info(`Directory ${e} created`)}a(ml,"makeDirectory")});var bK=P((aLe,yK)=>{"use strict";var Jw=require("os"),mK=require("inquirer"),Is=require("fs-extra"),Rhe=require("properties-reader"),El=require("chalk"),Hi=require("path"),yhe=require("human-readable-ids").hri,bhe=require("ora"),Ohe=require("yaml"),or=j(),Ba=ne(),Mh=re(),OS=Qa(),pK=RS(),EK=kc(),ue=v(),{CONFIG_PARAM_MAP:iLe,CONFIG_PARAMS:wt}=ue,Nhe=cK(),whe=uK(),Xw=Ot(),Ihe=Gn(),Che=N_(),Phe=Lw(),Dhe=Gs(),Lhe=require("util").promisify,Mhe=Lhe(Dhe.setSchemaDataToGlobal),dK=Zs(),pl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Br=a(e=>El.magenta.bold(e),"HDB_PROMPT_MSG"),vhe="https://harperdb.io/legal/end-user-license-agreement",xa=Jw.EOL,Lo="",Uhe="yes",fK="Starting HarperDB install...",_K="HarperDB installation was successful.",hK="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Bhe="An out of date version of HarperDB is already installed.",Qw="It appears that HarperDB is already installed. Exiting install...",xhe="Aborting install",oLe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Hhe=new RegExp(/^[^\s.,*>]+$/),khe=Jw.homedir(),Fhe=Hi.join(khe,ue.HDB_ROOT_DIR_NAME),qhe="HDB_ADMIN",Ghe="CLUSTER_USER",$he="dev",Vhe="localhost",bS={[wt.HTTP_CORS]:!0,[wt.HTTP_CORSACCESSLIST]:["*"],[wt.HTTP_PORT]:9926,[wt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[wt.THREADS_COUNT]:1,[wt.THREADS_DEBUG]:!0,[wt.LOGGING_STDSTREAMS]:!0,[wt.LOGGING_LEVEL]:"info",[wt.OPERATIONSAPI_NETWORK_PORT]:9925,[wt.LOCALSTUDIO_ENABLED]:!0},Ur={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Ha=OS([ue.INSTALL_PROMPTS.HDB_CONFIG]),xi,gK=!1,Zw=!1,SK=!1;yK.exports={install:TK,updateConfigEnv:tme,setIgnoreExisting:rme};TK.createSuperUser=RK;async function TK(){console.log(Br(xa+fK+xa)),or.notify(fK);let e;Ha[ue.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Khe());let t=Whe();Object.assign(t,e),t[ue.INSTALL_PROMPTS.TC_AGREEMENT]&&t[ue.INSTALL_PROMPTS.ROOTPATH]&&t[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[ue.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(SK=!0,t[ue.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Nhe(t);if(r)throw r.message;await zhe(),await jhe(t);let n=await Yhe(t);xi=n[ue.INSTALL_PROMPTS.ROOTPATH],Ha[ue.INSTALL_PROMPTS.HDB_CONFIG]&&Hi.dirname(Ha[ue.INSTALL_PROMPTS.HDB_CONFIG])===xi&&(gK=!0),!Zw&&!Ha[ue.INSTALL_PROMPTS.HDB_CONFIG]&&await Is.pathExists(Hi.join(xi,ue.HDB_CONFIG_FILE))&&(console.error(Qw),process.exit());let s=bhe({prefixText:Br("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Mh.isEmpty(xi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Ba.setHdbBasePath(xi),await whe(xi),await Qhe(),await Jhe(n),or.initLogSettings(!0),await RK(n),await Zhe(n),await dK.updateConfigCert(),await dK.generateCertsKeys(),await eme(),Phe(),s.stop(),console.log(Br(xa+_K+xa)),or.notify(_K)}a(TK,"install");function Khe(){let e=Ohe.parseDocument(Is.readFileSync(Ha[ue.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=Xw.flattenConfig(e.toJSON());return t[ue.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ue.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Khe,"getConfigFromFile");async function Yhe(e){or.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:pl,when:Mo(e[ue.INSTALL_PROMPTS.ROOTPATH],Ur.DESTINATION),name:ue.INSTALL_PROMPTS.ROOTPATH,prefix:Lo,default:Fhe,validate:a(async s=>ws(s)?ws(s):await Is.pathExists(Hi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Br(Ur.DESTINATION)},{type:"input",transformer:pl,when:Mo(e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Ur.HDB_USERNAME),name:ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lo,default:qhe,validate:a(s=>ws(s)?ws(s):(t=s,!0),"validate"),message:Br(Ur.HDB_USERNAME)},{type:"password",when:Mo(e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Ur.HDB_PASS),name:ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lo,validate:a(s=>ws(s)?ws(s):!0,"validate"),message:Br(Ur.HDB_PASS)},{type:"input",transformer:pl,when:Mo(e[ue.INSTALL_PROMPTS.DEFAULTS_MODE],Ur.DEFAULTS_MODE),name:ue.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Lo,default:$he,validate:a(s=>ws(s)?ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Br(Ur.DEFAULTS_MODE)}];if(SK||r.push({type:"input",name:ue.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:pl,when:Mo(e[ue.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Ur.REPLICATION_HOSTNAME),prefix:Lo,default:Vhe,message:Br(Ur.REPLICATION_HOSTNAME)}),Mh.autoCastBoolean(e[ue.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:pl,when:Mo(e[ue.INSTALL_PROMPTS.CLUSTERING_NODENAME],Ur.NODE_NAME),name:ue.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lo,default:yhe.random(),validate:a(i=>Hhe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Br(Ur.NODE_NAME)},{type:"input",transformer:pl,when:Mo(e[ue.INSTALL_PROMPTS.CLUSTERING_USER],Ur.CLUSTER_USERNAME),name:ue.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lo,default:Ghe,validate:a(i=>ws(i)?ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Br(Ur.CLUSTER_USERNAME)},{type:"password",when:Mo(e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Ur.CLUSTER_PASS),name:ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lo,validate:a(i=>ws(i)?ws(i):!0,"validate"),message:Br(Ur.CLUSTER_PASS)}];r.push(...s)}let n=await mK.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(Yhe,"installPrompts");function Mo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Br(t)} ${El.gray("[hidden]")}`),or.trace(`${Br(t)} [hidden]`)):(console.log(`${Br(t)} ${e}`),or.trace(`${Br(t)} ${e}`)),!1):!0}a(Mo,"displayCmdEnvVar");function ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ws,"checkForEmptyValue");function Whe(){let e=Object.keys(ue.INSTALL_PROMPTS),t=OS(e),r=OS(Object.keys(ue.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ue.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Whe,"checkForPromptOverride");async function zhe(){or.trace("Checking for existing install.");let e=Mh.getPropsFilePath(),t=await Is.pathExists(e),r;if(t){or.trace(`Install found an existing boot prop file at:${e}`);let n=Rhe(e),s=Xw.getConfigValue(ue.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ue.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Is.pathExists(s)}if(!t&&Mh.noBootFile()&&(r=!0),r&&!Zw){if(or.trace(`Install found existing HDB config at:${e}`),await pK.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${EK.version()}. Exiting install...`;console.log(xa+El.magenta.bold(Bhe)),console.log(El.magenta.bold(s)),or.error(s)}else console.log(xa+El.magenta.bold(Qw)),or.error(Qw);process.exit(0)}}a(zhe,"checkForExistingInstall");async function jhe(e){or.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${vhe}${xa}and can be viewed by typing or copying and pasting the URL into your web browser.${xa}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Lo,transformer:pl,when:Mo(e[ue.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ue.INSTALL_PROMPTS.TC_AGREEMENT,message:Br(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:El.yellow("Please enter 'yes' or 'no'"),"validate")},n=await mK.prompt([r]);n[ue.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ue.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Uhe&&(console.log(El.yellow(hK)),or.error(hK),process.exit(0))}a(jhe,"termsAgreement");async function Qhe(){let e=Hi.join(xi,ue.HDB_CONFIG_FILE),t;try{t=Jw.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
- install_user = ${t}`,n=Mh.getHomeDir(),s=Hi.join(n,ue.HDB_HOME_DIR_NAME),i=Hi.join(s,ue.LICENSE_KEY_DIR_NAME);try{Is.mkdirpSync(s,{mode:ue.HDB_FILE_PERMISSIONS}),Is.mkdirpSync(i,{mode:ue.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ue.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Hi.join(s,ue.BOOT_PROPS_FILE_NAME);try{await Is.writeFile(o,r)}catch(c){throw or.error(`There was an error creating the boot file at path: ${o}`),c}Ba.setProperty(ue.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Ba.setProperty(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Ba.setProperty(Ba.BOOT_PROPS_FILE_PATH,o)}}a(Qhe,"createBootPropertiesFile");async function Jhe(e){or.trace("Creating HarperDB config file");let t=OS(Object.keys(ue.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[ue.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in bS){if(r===wt.HTTP_PORT&&t[wt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??bS[r],t[wt.HTTP_SECUREPORT]=null;continue}else if(r===wt.HTTP_PORT)continue;if(r===wt.OPERATIONSAPI_NETWORK_PORT&&t[wt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??bS[r],t[wt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===wt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=bS[r])}}else t[wt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[wt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[wt.HTTP_PORT.toLowerCase()]&&(t[wt.HTTP_SECUREPORT]=null);try{Ha[ue.INSTALL_PROMPTS.HDB_CONFIG]||Xw.createConfigFile(t),Ba.initSync()}catch(r){Xhe(r)}}a(Jhe,"createConfigFile");function Xhe(e){or.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(xhe);let t=Hi.resolve(Ba.get(Ba.BOOT_PROPS_FILE_PATH),"../");t&&Is.removeSync(t),xi&&(gK?Is.readdirSync(xi,{withFileTypes:!0}).forEach(n=>{let s=Hi.join(n.path,n.name);s!==Ha[ue.INSTALL_PROMPTS.HDB_CONFIG]&&Is.removeSync(s)}):Is.removeSync(xi)),process.exit(1)}a(Xhe,"rollbackInstall");async function AK(e,t){or.trace("Creating admin user"),await Mhe();let r;try{r=await Che.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await Ihe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(AK,"createAdminUser");async function RK(e){or.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await AK(t,r),delete e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(RK,"createSuperUser");async function Zhe(e){or.trace("Creating Cluster user.");let t;e[ue.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ue.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await AK({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ue.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Zhe,"createClusterUser");async function eme(){let e=EK.version();if(e)await pK.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(eme,"insertHdbVersionInfo");function tme(e){Ha[ue.INSTALL_PROMPTS.HDB_CONFIG]=e}a(tme,"updateConfigEnv");function rme(e){Zw=e}a(rme,"setIgnoreExisting")});var wK=P((lLe,NK)=>{"use strict";var eI=re(),rs=j(),OK=Gw();NK.exports={processDirectives:nme};async function nme(e){console.log("Starting upgrade process...");let t=OK.getVersionsForUpgrade(e),r=ome(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;rs.notify(c),console.log(c);let l=[],u=[];try{l=sme(o.sync_functions)}catch(f){throw rs.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await ime(o.async_functions)}catch(f){throw rs.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(nme,"processDirectives");function sme(e){if(eI.isEmptyOrZeroLength(e))return rs.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return rs.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(rs.info(`Running function ${r.name}`),!(r instanceof Function)){rs.info("Variable being processed is not a function");continue}let n=r();rs.info(n),t.push(n)}return t}a(sme,"runSyncFunctions");async function ime(e){if(eI.isEmptyOrZeroLength(e))return rs.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return rs.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(rs.info(`Running function ${s.name}`),!(s instanceof Function)){rs.info("Variable being processed is not a function");continue}let i=await s();rs.info(i),t.push(i)}return t}a(ime,"runAsyncFunctions");function ome(e){if(eI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=OK.getDirectiveByVersion(r);n&&t.push(n)}return t}a(ome,"getUpgradeDirectivesToInstall")});var vK=P((dLe,MK)=>{"use strict";var NS=ne();NS.initSync();var DK=require("chalk"),IK=require("fs-extra"),Uo=j(),vo=v(),CK=kc(),ame=wK(),tI=re(),LK=RS(),cme=hS(),PK=YT(),lme=Gs(),ume=require("util").promisify,dme=ume(lme.setSchemaDataToGlobal),rI,{UPGRADE_VERSION:wS}=vo.UPGRADE_JSON_FIELD_NAMES_ENUM;MK.exports={upgrade:fme};async function fme(e){await dme(),rI===void 0&&(rI=K_()),IK.existsSync(NS.get(NS.BOOT_PROPS_FILE_PATH))||(vh("The hdb_boot_properties file was not found. Please install HDB.",vo.LOG_LEVELS.ERROR),process.exit(1)),IK.existsSync(NS.get(vo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(vh("The hdb settings file was not found. Please make sure HDB is installed.",vo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await LK.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),vh(`This version of HarperDB is ${CK.version()}`,vo.LOG_LEVELS.INFO);let r=t[wS]?t[wS]:CK.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${vo.HDB_SUPPORT_ADDRESS}`),Uo.notify("Missing new version field from upgrade info object"),process.exit(1)),await _me();let n,s=0;try{n=await cme.forceUpdatePrompt(t)}catch(i){Uo.error("There was an error when prompting user about upgrade."),Uo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Uo.info(`Starting upgrade to version ${r}`),await hme(t),vh(`HarperDB was successfully upgraded to version ${t[wS]}`,vo.LOG_LEVELS.INFO)}a(fme,"upgrade");async function _me(){let e=!1,t=await PK.findPs(vo.HDB_PROC_NAME);if(tI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await PK.findPs("hdb_express");tI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await rI.list();tI.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(DK.red(r)),Uo.error(r),process.exit(1)}}a(_me,"checkIfRunning");async function hme(e){try{await ame.processDirectives(e)}catch(t){throw vh("There was an error during the data upgrade. Please check the logs.",vo.LOG_LEVELS.ERROR),t}try{await LK.insertHdbUpgradeInfo(e[wS])}catch(t){Uo.error("Error updating the 'hdb_info' system table."),Uo.error(t)}}a(hme,"runUpgrade");function vh(e,t=void 0){t||(t=Uo.info),Uo[t](e),console.log(DK.magenta(e))}a(vh,"printToLogAndConsole")});var kK=P((_Le,HK)=>{"use strict";var{promises:sI,createReadStream:mme,createWriteStream:pme}=require("fs"),{createGzip:Eme}=require("zlib"),{promisify:gme}=require("util"),{pipeline:Sme}=require("stream"),Tme=gme(Sme),Ame=require("path"),Sl=ne();Sl.initSync();var gl=j(),{CONFIG_PARAMS:Uh,ITC_EVENT_TYPES:Rme}=v(),{onMessageFromWorkers:yme}=tt(),bme=6e4,Ome="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Nme="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",nI,BK;HK.exports=xK;yme(e=>{e.type===Rme.RESTART&&(Sl.initSync(!0),clearInterval(BK),Sl.get(Uh.LOGGING_ROTATION_ENABLED)&&xK())});async function xK(){try{let e=gl.getLogFilePath(),t=Sl.get(Uh.LOGGING_ROTATION_MAXSIZE),r=Sl.get(Uh.LOGGING_ROTATION_INTERVAL);if(!t&&!r){gl.error(Ome);return}let n=Sl.get(Uh.LOGGING_ROTATION_PATH);if(!n){gl.error(Nme);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}nI=Date.now()/6e4,gl.trace("Log rotate enabled, maxSize:",t,"interval:",r),BK=setInterval(async()=>{if(s){let o;o=await sI.stat(e),o.size>=s&&await UK(e,n)}i&&Date.now()/6e4-nI>=i&&(await UK(e,n),nI=Date.now()/6e4)},bme).unref()}catch(e){gl.error(e)}}a(xK,"logRotator");async function UK(e,t){let r=Sl.get(Uh.LOGGING_ROTATION_COMPRESS),n=Ame.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Tme(mme(e),Eme(),pme(n)),await sI.unlink(e)):await sI.rename(e,n),gl.closeLogFile(),gl.notify(`hdb.log rotated, old log moved to ${n}`)}a(UK,"moveLogFile")});var WK=P(YK=>{"use strict";var pe=ne();pe.initSync();var mLe=zu(),Kt=v(),ns=j(),Bo=require("fs-extra"),xo=require("path"),wme=Lw(),{install:Ime}=bK(),iI=require("chalk"),Cme=vu(),Ho=re(),oI=Ot(),qK=Qa(),FK=ag(),Pme=vK(),Dme=kK(),{compactOnStart:Lme}=(GO(),se(qO)),Mme=require("minimist"),vme=Zs(),{PACKAGE_ROOT:Ume,CONFIG_PARAMS:Ne}=v(),{startHTTPThreads:Bme,startSocketServer:pLe,mostIdleRouting:ELe,remoteAffinityRouting:gLe}=(aI(),se(zK)),xme=RS(),{isMainThread:Hme}=require("worker_threads"),SLe=to(),TLe=so(),ALe=sy(),RLe=jf(),IS=v(),ki,_d,GK=!1,kme="Upgrade complete. Starting HarperDB.",Fme="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",qme="HarperDB not found, starting install process.",Gme="There was an error during install, check install_log.log for more details. Exiting.",$me="HarperDB successfully started.";function Vme(){if(!GK){let e=a(()=>{Bo.removeSync(xo.join(pe.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(Vme,"addExitListeners");async function $K(e=!1,t=!1){if(console.log(iI.magenta("Starting HarperDB...")),ns.suppressLogging?.(()=>{console.log(iI.magenta(""+Bo.readFileSync(xo.join(Ume,"utility/install/ascii_logo.txt"))))}),await KK()===!1){console.log(qme);try{await Ime()}catch(l){console.error(Gme,l),ns.error(l),process.exit(1)}}if(!e){let l=qK(Object.keys(Kt.CONFIG_PARAM_MAP),!0);!Ho.isEmpty(l)&&!Ho.isEmptyOrZeroLength(Object.keys(l))&&oI.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=_d?.service==="clustering";_d?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=xo.join(pe.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.HDB_PID_FILE),i=jme(s);i&&Qme(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),ki===void 0&&(ki=K_()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),pe.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await FK.generateNatsConfig(),await ki.startClusteringProcesses(!0),process.exit()),Vme(),await Bo.writeFile(xo.join(pe.get(IS.CONFIG_PARAMS.ROOTPATH),IS.HDB_PID_FILE),`${process.pid}`),ns.info("HarperDB PID",process.pid);let o;try{let l=await xme.getVersionUpdateInfo();l!==void 0&&(o=l[Kt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Pme.upgrade(l),console.log(kme))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),ns.error(l)):(console.error(Fme,l),ns.error(l)),process.exit(1)}wme(),Wme(),await vme.reviewSelfSignedCert(),Ho.autoCastBoolean(pe.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Hme&&await FK.generateNatsConfig(t)}a($K,"initialize");async function Kme(e=!1){try{_d=Mme(process.argv),_d.ROOTPATH&&oI.updateConfigObject("settings_path",xo.join(_d.ROOTPATH,Kt.HDB_CONFIG_FILE)),await $K(e,!0),pe.get(Kt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Lme();let t=process.env.IS_SCRIPTED_SERVICE&&!_d.service;Ho.autoCastBoolean(pe.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ki.startClusteringProcesses(),await ki.startClusteringThreads()),await Bme(process.env.DEV_MODE?1:pe.get(IS.CONFIG_PARAMS.THREADS_COUNT)??pe.get(IS.CONFIG_PARAMS.THREADS)),pe.get(Kt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Dme(),t||VK()}catch(t){console.error(t),ns.error(t),process.exit(1)}}a(Kme,"main");function VK(){ns.suppressLogging(()=>{console.log(iI.magenta(`HarperDB ${Cme.version} successfully started`))}),ns.notify($me)}a(VK,"started");async function Yme(e=!0){GK=!e;try{ki===void 0&&(ki=K_()),ki.enterPM2Mode(),await $K(),Ho.autoCastBoolean(pe.get(Kt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ki.startClusteringProcesses(),await ki.startService(Kt.PROCESS_DESCRIPTORS.HDB),VK(),e&&process.exit(0)}catch(t){console.error(t),ns.error(t),process.exit(1)}}a(Yme,"launch");function Wme(){let e=xo.join(pe.get(Kt.CONFIG_PARAMS.ROOTPATH),Kt.LICENSE_KEY_DIR_NAME,Kt.LICENSE_FILE_NAME),t=xo.join(e,Kt.LICENSE_FILE_NAME),r=xo.join(e,Kt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=qK(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ho.isEmpty(n)||Ho.isEmpty(s))return;Bo.mkdirpSync(e),Bo.writeFileSync(r,n),Bo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ns.error(s)}}a(Wme,"writeLicenseFromVars");Object.assign(YK,{launch:Yme,main:Kme,isHdbInstalled:KK,startupLog:zme});async function KK(){try{await Bo.stat(Ho.getPropsFilePath()),await Bo.stat(pe.get(Kt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ho.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ns.error(`Error checking for HDB install - ${e}`),e}return!0}a(KK,"isHdbInstalled");function zme(e){let r=a(_=>_.padEnd(20),"pad"),n=`
112
- `;pe.get(Ne.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${pe.get(Ne.REPLICATION_HOSTNAME)}
113
- `),pe.get(Ne.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${pe.get(Ne.REPLICATION_URL)}
114
- `),n+=`${r("Worker Threads:")}${pe.get(Ne.THREADS_COUNT)}
115
- `,n+=`${r("Root Path:")}${pe.get(Ne.ROOTPATH)}
116
- `,pe.get(Ne.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=pe.get(Ne.THREADS_DEBUG_PORT)?`, TCP: ${pe.get(Ne.THREADS_DEBUG_PORT)}
109
+ Reindexing upgrade started for transaction logs`),Lo.notify("Reindexing upgrade started for transaction logs"),await k1(Fw,!0,e)),Lo.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Th?", but errors occurred":"")}a(d_e,"reindexUpgrade");async function k1(e,t,r){let n=await Ui.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Mo.join(e,o.toString());if(o===".DS_Store")continue;let l=await Ui.readdir(c),u=l.length;for(let f=0;f<u;f++){let d=l[f];if(d!==".DS_Store"&&Ui.statSync(Mo.join(c,d)).isDirectory())try{await f_e(o,d,t),tn.info(`Reindexing started for ${o}.${d}`),Lo.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await h_e(o,d,c,t,r),tn.info(`Reindexing completed for ${o}.${d}`),Lo.notify(`Reindexing completed for ${o}.${d}`)}catch(h){Th=!0,h.schema_path=c,h.table_name=d,Lo.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Lo.error(h),tn.error(h),console.error(h)}}}if(!Th)try{await Ui.rm(dS,{recursive:!0})}catch{}}a(k1,"processTables");async function f_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Mo.join(dS,s);await Ui.ensureDir(dS),await Ui.writeFile(i,""),tn=l_e({level:"debug",formatters:{bindings(){}}},i)}a(f_e,"initPinoLogger");var __e=20;async function h_e(e,t,r,n,s){let i;try{i=await Zn.openEnvironment(r,t,n)}catch(m){if(m.message==="MDB_INVALID: File is not an LMDB file"){Lo.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),tn.error(m);return}throw m}let o=m_e(i.dbis),c=Zn.openDBI(i,o),l=Object.keys(i.dbis),u=Zn.statDBI(i,o);tn.info(`Old environment stats: ${JSON.stringify(u)}`);let f=new c_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});f.start(u.entryCount,0,{});let d=await Zn.createEnvironment(r,t,!1);Zn.createDBI(d,o,!1,!0);let h=[];try{for(let m of c.getRange({start:!1}))m.value={...m.value},h.push(m),n||e==="system"&&(t==="hdb_schema"&&(m.key=m.key.toString(),m.value.name=m.value.name.toString()),t==="hdb_table"&&(m.key=m.key.toString(),m.value.schema=m.value.schema.toString(),m.value.name=m.value.name.toString()),t==="hdb_attribute"&&(m.key=m.key.toString(),m.value.schema=m.value.schema.toString(),m.value.table=m.value.table.toString(),m.value.attribute=m.value.attribute.toString())),h.length>__e&&await _();await _()}catch(m){throw Th=!0,tn.error(m),m}async function _(){let m,A=h.map(({value:M})=>M);n?m=await Promise.all(A.map(M=>p_e(d,M))):m=await s_e(d,o,l.filter(M=>M!=="__blob__"),A,!1);for(let M=0,F=h.length;M<F;M++){let{key:G,value:K}=h[M];tn.info(`Record hash value: ${G} hash: ${o}`);let ee;n?ee=m[M]:ee=m.written_hashes.indexOf(G)>-1,Sh(ee,!0),E_e(d,o,K[o],n),tn.info(`Insert success, written hashes: ${m.written_hashes}`),f.increment()}h=[],f.value/f.total*100%10===0&&Lo.notify(`${e}.${t} ${f.value}/${f.total} records inserted`),tn.info(`${f.value}/${f.total} records inserted`)}a(_,"finishOutstanding"),f.stop();let p=Zn.statDBI(i,o),S=Zn.statDBI(d,o);if(tn.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${S.entryCount}`),Sh.deepStrictEqual(p.entryCount,S.entryCount),await Zn.closeEnvironment(i),await Zn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let m=Mo.join(r,t),A=Mo.join(m,"data.mdb"),w=Mo.join(m,"lock.mdb");await Ui.unlink(A),await Ui.unlink(w),await Ui.rmdir(m),tn.info(`Deleted old environment files from schema folder: ${A}, ${w}`)}let g=await Zn.openEnvironment(r,t),T=Zn.statDBI(g,o);tn.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(T)}`),Sh.deepStrictEqual(T.entryCount,S.entryCount),await Zn.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(h_e,"processTable");async function p_e(e,t){Zn.initializeDBIs(e,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ba.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),a_e.isEmpty(t.user_name)||e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(p_e,"insertTransaction");function E_e(e,t,r,n){let i=e.dbis[t].get(r);Sh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!o_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,f=l.length;u<f;u++){let d=l[u];F1(e,c,d,r)}else F1(e,c,l,r)}a(E_e,"validateIndices");function F1(e,t,r,n){try{let s=!1,i=i_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||tn.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),Sh.deepStrictEqual(s,!0)}catch(s){Th=!0,tn.error(s),console.error(s)}}a(F1,"validateIndex");function m_e(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(m_e,"getHashDBI")});var W1=P((zDe,Y1)=>{"use strict";var fS=require("path"),Ha=require("fs-extra"),g_e=Hw(),_l=j(),$1=wt(),Gw=ce(),oi=(H(),D(q)),_S=ae(),S_e=require("properties-reader"),T_e=Ws(),A_e=um(),R_e=Kr(),WDe=require("util"),y_e=R_e.searchByValue,b_e=pn(),O_e=sg(),N_e=Ot(),w_e=q1(),V1=Xs(),I_e=cS(),yh=new g_e("4.0.0"),K1=[],Ah,Rh;async function C_e(){try{if(await I_e.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Ah){let t=_S.changeExtension(Ah,".bak");await Ha.move(Ah,t)}if(Rh){let t=_S.changeExtension(Rh,".bak");await Ha.move(Rh,t)}await V1.generateKeys()}else console.log("Using existing certificates."),V1.updateConfigCert(Ah,Rh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(C_e,"generateNewKeys");async function P_e(){console.log("Updating HarperDB nodes."),_l.info("Updating HarperDB nodes.");let e=[];try{let t=new T_e(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await y_e(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!N_e.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let f=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(f),f}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let f=0,d=c.subscriptions.length;f<d;f++){let h=c.subscriptions[f],_=h.channel.split(":");u.push({schema:_[0],table:_[1],publish:h.publish,subscribe:h.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:oi.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(_S.isEmptyOrZeroLength(n))return;let s=new A_e(oi.SYSTEM_SCHEMA_NAME,oi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await b_e.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{O_e.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(P_e,"updateNodes");async function D_e(){let e=Gw.get(oi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(fS.join("config","settings.js"))){_l.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),_l.info(t);let r=fS.dirname(e),n=Gw.get(oi.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=fS.join(n,"backup","4_0_0_upgrade_settings.bak"),i=fS.join(n,oi.HDB_CONFIG_FILE);try{_l.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Ha.copySync(e,s)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{_l.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),_l.info("Updating env variables with new settings values");let d=$1.initOldConfig(e);Ah=d[oi.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Rh=d[oi.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],$1.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=_S.getPropsFilePath();Ha.accessSync(o,Ha.constants.F_OK|Ha.constants.R_OK);let l=S_e(o).get(oi.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
+ install_user = ${l}`;try{Ha.writeFileSync(o,u)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{Gw.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let f="New settings file for 4.0.0 upgrade successfully created.";try{Ha.removeSync(r),console.log(f),_l.info(f)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(D_e,"updateSettingsFile_4_0_0");yh.async_functions.push(D_e);yh.async_functions.push(C_e);yh.async_functions.push(w_e);yh.async_functions.push(P_e);K1.push(yh);Y1.exports=K1});var qw=P((jDe,J1)=>{"use strict";var hl=ae(),L_e=(H(),D(q)),z1=j(),{DATA_VERSION:M_e,UPGRADE_VERSION:v_e}=L_e.UPGRADE_JSON_FIELD_NAMES_ENUM,Q1=B1(),hS=W1(),pl=new Map;Q1&&Q1.forEach(e=>{pl.set(e.version,e)});hS&&hS.forEach(e=>{pl.set(e.version,e)});hS&&hS.forEach(e=>{pl.set(e.version,e)});function U_e(){return[...pl.keys()].sort(hl.compareVersions)}a(U_e,"getSortedVersions");function j1(e){let t=e[M_e],r=e[v_e];return hl.isEmptyOrZeroLength(t)||hl.isEmptyOrZeroLength(r)?(z1.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),z1.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...pl.keys()].sort(hl.compareVersions).filter(function(n){return hl.compareVersions(n,t)>0&&hl.compareVersions(n,r)<=0})}a(j1,"getVersionsForUpgrade");function x_e(e){return j1(e).length>0}a(x_e,"hasUpgradesRequired");function B_e(e){return hl.isEmptyOrZeroLength(e)?null:pl.has(e)?pl.get(e):null}a(B_e,"getDirectiveByVersion");J1.exports={getSortedVersions:U_e,getDirectiveByVersion:B_e,getVersionsForUpgrade:j1,hasUpgradesRequired:x_e}});var ES=P((XDe,rK)=>{"use strict";var H_e=require("util"),$w=require("chalk"),k_e=require("os"),Z1=pn(),F_e=Kr(),es=(H(),D(q)),eK=O1(),Kw=yR(),{UpgradeObject:X1}=I1(),{forceDowngradePrompt:G_e}=cS(),{packageJson:q_e}=_t(),pS=j(),ud=ae(),Yw=$s(),$_e=(De(),D(nt)),V_e=qw(),K_e=H_e.promisify(Yw.setSchemaDataToGlobal),Y_e=F_e.searchByValue,W_e="info_id",z_e="2.9.9",Q_e="3.0.0";async function j_e(e){let t=new eK.HdbInfoInsertObject(1,e,e),r=new Kw.InsertObject(es.OPERATIONS_ENUM.INSERT,es.SYSTEM_SCHEMA_NAME,es.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,es.INFO_TABLE_HASH_ATTRIBUTE,[t]);return Yw.setSchemaDataToGlobal(),Z1.insert(r)}a(j_e,"insertHdbInstallInfo");async function Vw(e){let t,r=await tK(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new eK.HdbInfoInsertObject(i,e,e);let o=new Kw.InsertObject(es.OPERATIONS_ENUM.INSERT,es.SYSTEM_SCHEMA_NAME,es.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,es.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await K_e(),Z1.insert(o)}a(Vw,"insertHdbUpgradeInfo");async function tK(){let e=new Kw.NoSQLSeachObject(es.SYSTEM_SCHEMA_NAME,es.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,W_e,es.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Y_e(e))}catch(r){console.error(r)}return t}a(tK,"getAllHdbInfoRecords");async function J_e(){let e=await tK();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(J_e,"getLatestHdbInfoRecord");async function X_e(){pS.info("Checking if HDB software has been updated");try{let e=q_e.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await J_e(),r;if(ud.isEmpty(t))r=z_e;else if(r=t.data_version_num,ud.compareVersions(r.toString(),e.toString())>0){if(!ud.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log($w.yellow(`This instance's data was last run on version ${r}`)),console.error($w.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${k_e.EOL}${es.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");ud.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log($w.yellow(`This instance's data was last run on version ${r}`)),await G_e(new X1(r,e))?await Vw(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(Yw.setSchemaDataToGlobal(),Z_e(r),e.toString()===r.toString())return;let n=new X1(r,e);if(V_e.hasUpgradesRequired(n))return n;ud.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await Vw(n.upgrade_version),pS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw pS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),pS.fatal(e),e}}a(X_e,"getVersionUpdateInfo");function Z_e(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${es.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in $_e.databases.system))throw console.log(t),new Error(t);if(!ud.isEmpty(e)&&e<Q_e)throw console.log(t),new Error(t)}a(Z_e,"checkIfInstallIsSupported");rK.exports={insertHdbInstallInfo:j_e,insertHdbUpgradeInfo:Vw,getVersionUpdateInfo:X_e}});var oK=P((eLe,iK)=>{"use strict";var mS=require("joi"),{boolean:ehe,string:Ww,number:the}=mS.types(),nK=require("fs-extra"),bh=(H(),D(q)),sK=require("path"),rhe=pt();iK.exports=nhe;function nhe(e){let t=Ww.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=mS.object({[bh.INSTALL_PROMPTS.ROOTPATH]:mS.custom(she),[bh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:mS.alternatives([the.min(0),Ww]).allow("null",null),[bh.INSTALL_PROMPTS.TC_AGREEMENT]:Ww.valid("yes","YES","Yes"),[bh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[bh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:ehe});return rhe.validateBySchema(e,r)}a(nhe,"installValidator");function she(e,t){if(nK.existsSync(sK.join(e,"system/hdb_user/data.mdb"))||nK.existsSync(sK.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(she,"validateRootAvailable")});var cK=P((rLe,aK)=>{"use strict";var{mkdirpSync:ihe,copySync:ohe}=require("fs-extra"),ka=require("path"),Oh=(H(),D(q)),{PACKAGE_ROOT:ahe}=_t(),Qw=j(),che=kn(),zw=io(),lhe=ht();aK.exports=uhe;async function uhe(e){Qw.trace("Mounting HarperDB"),El(e),El(ka.join(e,"backup")),El(ka.join(e,"keys")),El(ka.join(e,"keys",Oh.LICENSE_FILE_NAME)),El(ka.join(e,"log")),El(ka.join(e,"database")),El(ka.join(e,"components")),ohe(ka.resolve(ahe,"./utility/install/README.md"),ka.join(e,"README.md")),await dhe()}a(uhe,"mountHdb");async function dhe(){let e=Jf(),t=Object.keys(zw);for(let r=0;r<t.length;r++){let n=t[r],s=zw[n].hash_attribute;try{lhe.initSystemSchemaPaths(Oh.SYSTEM_SCHEMA_NAME,n);let i=new e(Oh.SYSTEM_SCHEMA_NAME,n,s);i.attributes=zw[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await che.createTable(n,i)}catch(i){throw Qw.error(`issue creating environment for ${Oh.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(dhe,"createLMDBTables");function El(e){ihe(e,{mode:Oh.HDB_FILE_PERMISSIONS}),Qw.info(`Directory ${e} created`)}a(El,"makeDirectory")});var RK=P((oLe,AK)=>{"use strict";var Jw=require("os"),_K=require("inquirer"),Is=require("fs-extra"),fhe=require("properties-reader"),gl=require("chalk"),Bi=require("path"),_he=require("human-readable-ids").hri,hhe=require("ora"),phe=require("yaml"),ur=j(),Fa=ce(),Nh=ae(),SS=ec(),hK=ES(),{packageJson:pK}=_t(),de=(H(),D(q)),{CONFIG_PARAM_MAP:sLe,CONFIG_PARAMS:Ct}=de,Ehe=oK(),mhe=cK(),Xw=wt(),ghe=qn(),She=n_(),The=Lw(),Ahe=$s(),Rhe=require("util").promisify,yhe=Rhe(Ahe.setSchemaDataToGlobal),lK=Xs(),ml=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Hr=a(e=>gl.magenta.bold(e),"HDB_PROMPT_MSG"),bhe="https://harperdb.io/legal/end-user-license-agreement",Ga=Jw.EOL,vo="",Ohe="yes",uK="Starting HarperDB install...",dK="HarperDB installation was successful.",fK="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Nhe="An out of date version of HarperDB is already installed.",jw="It appears that HarperDB is already installed. Exiting install...",whe="Aborting install",iLe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Ihe=new RegExp(/^[^\s.,*>]+$/),Che=Jw.homedir(),Phe=Bi.join(Che,de.HDB_ROOT_DIR_NAME),Dhe="HDB_ADMIN",Lhe="CLUSTER_USER",Mhe="dev",vhe="localhost",gS={[Ct.HTTP_CORS]:!0,[Ct.HTTP_CORSACCESSLIST]:["*"],[Ct.HTTP_PORT]:9926,[Ct.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Ct.THREADS_COUNT]:1,[Ct.THREADS_DEBUG]:!0,[Ct.LOGGING_STDSTREAMS]:!0,[Ct.LOGGING_LEVEL]:"info",[Ct.OPERATIONSAPI_NETWORK_PORT]:9925,[Ct.LOCALSTUDIO_ENABLED]:!0},Br={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},qa=SS([de.INSTALL_PROMPTS.HDB_CONFIG]),xi,EK=!1,Zw=!1,mK=!1;AK.exports={install:gK,updateConfigEnv:Khe,setIgnoreExisting:Yhe};gK.createSuperUser=TK;async function gK(){console.log(Hr(Ga+uK+Ga)),ur.notify(uK);let e;qa[de.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Uhe());let t=Bhe();Object.assign(t,e),t[de.INSTALL_PROMPTS.TC_AGREEMENT]&&t[de.INSTALL_PROMPTS.ROOTPATH]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[de.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(mK=!0,t[de.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Ehe(t);if(r)throw r.message;await Hhe(),await khe(t);let n=await xhe(t);xi=n[de.INSTALL_PROMPTS.ROOTPATH],qa[de.INSTALL_PROMPTS.HDB_CONFIG]&&Bi.dirname(qa[de.INSTALL_PROMPTS.HDB_CONFIG])===xi&&(EK=!0),!Zw&&!qa[de.INSTALL_PROMPTS.HDB_CONFIG]&&await Is.pathExists(Bi.join(xi,de.HDB_CONFIG_FILE))&&(console.error(jw),process.exit());let s=hhe({prefixText:Hr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Nh.isEmpty(xi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Fa.setHdbBasePath(xi),await mhe(xi),await Fhe(),await Ghe(n),ur.initLogSettings(!0),await TK(n),await $he(n),await lK.updateConfigCert(),await lK.generateCertsKeys(),await Vhe(),The(),s.stop(),console.log(Hr(Ga+dK+Ga)),ur.notify(dK)}a(gK,"install");function Uhe(){let e=phe.parseDocument(Is.readFileSync(qa[de.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=Xw.flattenConfig(e.toJSON());return t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[de.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Uhe,"getConfigFromFile");async function xhe(e){ur.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:ml,when:Uo(e[de.INSTALL_PROMPTS.ROOTPATH],Br.DESTINATION),name:de.INSTALL_PROMPTS.ROOTPATH,prefix:vo,default:Phe,validate:a(async s=>ws(s)?ws(s):await Is.pathExists(Bi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Hr(Br.DESTINATION)},{type:"input",transformer:ml,when:Uo(e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Br.HDB_USERNAME),name:de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:vo,default:Dhe,validate:a(s=>ws(s)?ws(s):(t=s,!0),"validate"),message:Hr(Br.HDB_USERNAME)},{type:"password",when:Uo(e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Br.HDB_PASS),name:de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:vo,validate:a(s=>ws(s)?ws(s):!0,"validate"),message:Hr(Br.HDB_PASS)},{type:"input",transformer:ml,when:Uo(e[de.INSTALL_PROMPTS.DEFAULTS_MODE],Br.DEFAULTS_MODE),name:de.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:vo,default:Mhe,validate:a(s=>ws(s)?ws(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Hr(Br.DEFAULTS_MODE)}];if(mK||r.push({type:"input",name:de.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:ml,when:Uo(e[de.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Br.REPLICATION_HOSTNAME),prefix:vo,default:vhe,message:Hr(Br.REPLICATION_HOSTNAME)}),Nh.autoCastBoolean(e[de.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:ml,when:Uo(e[de.INSTALL_PROMPTS.CLUSTERING_NODENAME],Br.NODE_NAME),name:de.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:vo,default:_he.random(),validate:a(i=>Ihe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Hr(Br.NODE_NAME)},{type:"input",transformer:ml,when:Uo(e[de.INSTALL_PROMPTS.CLUSTERING_USER],Br.CLUSTER_USERNAME),name:de.INSTALL_PROMPTS.CLUSTERING_USER,prefix:vo,default:Lhe,validate:a(i=>ws(i)?ws(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Hr(Br.CLUSTER_USERNAME)},{type:"password",when:Uo(e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Br.CLUSTER_PASS),name:de.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:vo,validate:a(i=>ws(i)?ws(i):!0,"validate"),message:Hr(Br.CLUSTER_PASS)}];r.push(...s)}let n=await _K.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(xhe,"installPrompts");function Uo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Hr(t)} ${gl.gray("[hidden]")}`),ur.trace(`${Hr(t)} [hidden]`)):(console.log(`${Hr(t)} ${e}`),ur.trace(`${Hr(t)} ${e}`)),!1):!0}a(Uo,"displayCmdEnvVar");function ws(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ws,"checkForEmptyValue");function Bhe(){let e=Object.keys(de.INSTALL_PROMPTS),t=SS(e),r=SS(Object.keys(de.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=de.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Bhe,"checkForPromptOverride");async function Hhe(){ur.trace("Checking for existing install.");let e=Nh.getPropsFilePath(),t=await Is.pathExists(e),r;if(t){ur.trace(`Install found an existing boot prop file at:${e}`);let n=fhe(e),s=Xw.getConfigValue(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(de.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Is.pathExists(s)}if(!t&&Nh.noBootFile()&&(r=!0),r&&!Zw){if(ur.trace(`Install found existing HDB config at:${e}`),await hK.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${pK.version}. Exiting install...`;console.log(Ga+gl.magenta.bold(Nhe)),console.log(gl.magenta.bold(s)),ur.error(s)}else console.log(Ga+gl.magenta.bold(jw)),ur.error(jw);process.exit(0)}}a(Hhe,"checkForExistingInstall");async function khe(e){ur.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${bhe}${Ga}and can be viewed by typing or copying and pasting the URL into your web browser.${Ga}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:vo,transformer:ml,when:Uo(e[de.INSTALL_PROMPTS.TC_AGREEMENT],t),name:de.INSTALL_PROMPTS.TC_AGREEMENT,message:Hr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:gl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await _K.prompt([r]);n[de.INSTALL_PROMPTS.TC_AGREEMENT]&&n[de.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Ohe&&(console.log(gl.yellow(fK)),ur.error(fK),process.exit(0))}a(khe,"termsAgreement");async function Fhe(){let e=Bi.join(xi,de.HDB_CONFIG_FILE),t;try{t=Jw.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
+ install_user = ${t}`,n=Nh.getHomeDir(),s=Bi.join(n,de.HDB_HOME_DIR_NAME),i=Bi.join(s,de.LICENSE_KEY_DIR_NAME);try{Is.mkdirpSync(s,{mode:de.HDB_FILE_PERMISSIONS}),Is.mkdirpSync(i,{mode:de.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${de.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Bi.join(s,de.BOOT_PROPS_FILE_NAME);try{await Is.writeFile(o,r)}catch(c){throw ur.error(`There was an error creating the boot file at path: ${o}`),c}Fa.setProperty(de.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Fa.setProperty(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Fa.setProperty(Fa.BOOT_PROPS_FILE_PATH,o)}}a(Fhe,"createBootPropertiesFile");async function Ghe(e){ur.trace("Creating HarperDB config file");let t=SS(Object.keys(de.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[de.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in gS){if(r===Ct.HTTP_PORT&&t[Ct.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??gS[r],t[Ct.HTTP_SECUREPORT]=null;continue}else if(r===Ct.HTTP_PORT)continue;if(r===Ct.OPERATIONSAPI_NETWORK_PORT&&t[Ct.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??gS[r],t[Ct.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Ct.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=gS[r])}}else t[Ct.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Ct.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Ct.HTTP_PORT.toLowerCase()]&&(t[Ct.HTTP_SECUREPORT]=null);try{qa[de.INSTALL_PROMPTS.HDB_CONFIG]||Xw.createConfigFile(t),Fa.initSync()}catch(r){qhe(r)}}a(Ghe,"createConfigFile");function qhe(e){ur.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(whe);let t=Bi.resolve(Fa.get(Fa.BOOT_PROPS_FILE_PATH),"../");t&&Is.removeSync(t),xi&&(EK?Is.readdirSync(xi,{withFileTypes:!0}).forEach(n=>{let s=Bi.join(n.path,n.name);s!==qa[de.INSTALL_PROMPTS.HDB_CONFIG]&&Is.removeSync(s)}):Is.removeSync(xi)),process.exit(1)}a(qhe,"rollbackInstall");async function SK(e,t){ur.trace("Creating admin user"),await yhe();let r;try{r=await She.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await ghe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(SK,"createAdminUser");async function TK(e){ur.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await SK(t,r),delete e[de.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[de.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(TK,"createSuperUser");async function $he(e){ur.trace("Creating Cluster user.");let t;e[de.INSTALL_PROMPTS.CLUSTERING_USER]&&e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[de.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await SK({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[de.INSTALL_PROMPTS.CLUSTERING_USER],delete e[de.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a($he,"createClusterUser");async function Vhe(){let e=pK.version;if(e)await hK.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Vhe,"insertHdbVersionInfo");function Khe(e){qa[de.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Khe,"updateConfigEnv");function Yhe(e){Zw=e}a(Yhe,"setIgnoreExisting")});var OK=P((cLe,bK)=>{"use strict";var eI=ae(),ts=j(),yK=qw();bK.exports={processDirectives:Whe};async function Whe(e){console.log("Starting upgrade process...");let t=yK.getVersionsForUpgrade(e),r=jhe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ts.notify(c),console.log(c);let l=[],u=[];try{l=zhe(o.sync_functions)}catch(f){throw ts.error(`Error while running an upgrade script for ${o.version}`),f}try{u=await Qhe(o.async_functions)}catch(f){throw ts.error(`Error while running an upgrade script for ${o.version}`),f}n.push(...l,...u)}return n}a(Whe,"processDirectives");function zhe(e){if(eI.isEmptyOrZeroLength(e))return ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ts.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ts.info(`Running function ${r.name}`),!(r instanceof Function)){ts.info("Variable being processed is not a function");continue}let n=r();ts.info(n),t.push(n)}return t}a(zhe,"runSyncFunctions");async function Qhe(e){if(eI.isEmptyOrZeroLength(e))return ts.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ts.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ts.info(`Running function ${s.name}`),!(s instanceof Function)){ts.info("Variable being processed is not a function");continue}let i=await s();ts.info(i),t.push(i)}return t}a(Qhe,"runAsyncFunctions");function jhe(e){if(eI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=yK.getDirectiveByVersion(r);n&&t.push(n)}return t}a(jhe,"getUpgradeDirectivesToInstall")});var LK=P((uLe,DK)=>{"use strict";var TS=ce();TS.initSync();var CK=require("chalk"),NK=require("fs-extra"),Bo=j(),xo=(H(),D(q)),Jhe=OK(),tI=ae(),PK=ES(),Xhe=cS(),wK=KT(),Zhe=$s(),{packageJson:IK}=_t(),epe=require("util").promisify,tpe=epe(Zhe.setSchemaDataToGlobal),rI,{UPGRADE_VERSION:nI}=xo.UPGRADE_JSON_FIELD_NAMES_ENUM;DK.exports={upgrade:rpe};async function rpe(e){await tpe(),rI===void 0&&(rI=K_()),NK.existsSync(TS.get(TS.BOOT_PROPS_FILE_PATH))||(wh("The hdb_boot_properties file was not found. Please install HDB.",xo.LOG_LEVELS.ERROR),process.exit(1)),NK.existsSync(TS.get(xo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(wh("The hdb settings file was not found. Please make sure HDB is installed.",xo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await PK.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),wh(`This version of HarperDB is ${IK.version}`,xo.LOG_LEVELS.INFO);let r=t[nI]??IK.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${xo.HDB_SUPPORT_ADDRESS}`),Bo.notify("Missing new version field from upgrade info object"),process.exit(1)),await npe();let n,s=0;try{n=await Xhe.forceUpdatePrompt(t)}catch(i){Bo.error("There was an error when prompting user about upgrade."),Bo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Bo.info(`Starting upgrade to version ${r}`),await spe(t),wh(`HarperDB was successfully upgraded to version ${t[nI]}`,xo.LOG_LEVELS.INFO)}a(rpe,"upgrade");async function npe(){let e=!1,t=await wK.findPs(xo.HDB_PROC_NAME);if(tI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await wK.findPs("hdb_express");tI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await rI.list();tI.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(CK.red(r)),Bo.error(r),process.exit(1)}}a(npe,"checkIfRunning");async function spe(e){try{await Jhe.processDirectives(e)}catch(t){throw wh("There was an error during the data upgrade. Please check the logs.",xo.LOG_LEVELS.ERROR),t}try{await PK.insertHdbUpgradeInfo(e[nI])}catch(t){Bo.error("Error updating the 'hdb_info' system table."),Bo.error(t)}}a(spe,"runUpgrade");function wh(e,t=void 0){t||(t=Bo.info),Bo[t](e),console.log(CK.magenta(e))}a(wh,"printToLogAndConsole")});var BK=P((fLe,xK)=>{"use strict";var{promises:iI,createReadStream:ipe,createWriteStream:ope}=require("fs"),{createGzip:ape}=require("zlib"),{promisify:cpe}=require("util"),{pipeline:lpe}=require("stream"),upe=cpe(lpe),dpe=require("path"),Tl=ce();Tl.initSync();var Sl=j(),{CONFIG_PARAMS:Ih,ITC_EVENT_TYPES:fpe}=(H(),D(q)),{onMessageFromWorkers:_pe}=rt(),hpe=6e4,ppe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Epe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",sI,vK;xK.exports=UK;_pe(e=>{e.type===fpe.RESTART&&(Tl.initSync(!0),clearInterval(vK),Tl.get(Ih.LOGGING_ROTATION_ENABLED)&&UK())});async function UK(){try{let e=Sl.getLogFilePath(),t=Tl.get(Ih.LOGGING_ROTATION_MAXSIZE),r=Tl.get(Ih.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Sl.error(ppe);return}let n=Tl.get(Ih.LOGGING_ROTATION_PATH);if(!n){Sl.error(Epe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}sI=Date.now()/6e4,Sl.trace("Log rotate enabled, maxSize:",t,"interval:",r),vK=setInterval(async()=>{if(s){let o;o=await iI.stat(e),o.size>=s&&await MK(e,n)}i&&Date.now()/6e4-sI>=i&&(await MK(e,n),sI=Date.now()/6e4)},hpe).unref()}catch(e){Sl.error(e)}}a(UK,"logRotator");async function MK(e,t){let r=Tl.get(Ih.LOGGING_ROTATION_COMPRESS),n=dpe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await upe(ipe(e),ape(),ope(n)),await iI.unlink(e)):await iI.rename(e,n),Sl.closeLogFile(),Sl.notify(`hdb.log rotated, old log moved to ${n}`)}a(MK,"moveLogFile")});var KK=P(VK=>{"use strict";var ge=ce();ge.initSync();Wu();var Ht=(H(),D(q)),{CONFIG_PARAMS:we}=Ht,rs=j(),Ho=require("fs-extra"),ko=require("path"),mpe=Lw(),{install:gpe}=RK(),oI=require("chalk"),{packageJson:Spe,PACKAGE_ROOT:Tpe}=_t(),Fo=ae(),aI=wt(),kK=ec(),HK=fg(),Ape=LK(),Rpe=BK(),{compactOnStart:ype}=(uN(),D(lN)),bpe=require("minimist"),Ope=Xs(),{startHTTPThreads:Npe}=(cI(),D(YK)),wpe=ES(),{isMainThread:Ipe}=require("worker_threads"),hLe=io(),pLe=lo(),ELe=Ey(),mLe=Jf(),AS=(H(),D(q)),Hi,dd,FK=!1,Cpe="Upgrade complete. Starting HarperDB.",Ppe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Dpe="HarperDB not found, starting install process.",Lpe="There was an error during install, check install_log.log for more details. Exiting.",Mpe="HarperDB successfully started.";function vpe(){if(!FK){let e=a(()=>{Ho.removeSync(ko.join(ge.get(Ht.CONFIG_PARAMS.ROOTPATH),Ht.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(vpe,"addExitListeners");async function GK(e=!1,t=!1){if(console.log(oI.magenta("Starting HarperDB...")),rs.suppressLogging?.(()=>{console.log(oI.magenta(""+Ho.readFileSync(ko.join(Tpe,"utility/install/ascii_logo.txt"))))}),await $K()===!1){console.log(Dpe);try{await gpe()}catch(l){console.error(Lpe,l),rs.error(l),process.exit(1)}}if(!e){let l=kK(Object.keys(Ht.CONFIG_PARAM_MAP),!0);!Fo.isEmpty(l)&&!Fo.isEmptyOrZeroLength(Object.keys(l))&&aI.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=dd?.service==="clustering";dd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=ko.join(ge.get(Ht.CONFIG_PARAMS.ROOTPATH),Ht.HDB_PID_FILE),i=kpe(s);i&&i!==1&&Fpe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),Hi===void 0&&(Hi=K_()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ge.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await HK.generateNatsConfig(),await Hi.startClusteringProcesses(!0),process.exit()),vpe(),await Ho.writeFile(ko.join(ge.get(AS.CONFIG_PARAMS.ROOTPATH),AS.HDB_PID_FILE),`${process.pid}`),rs.info("HarperDB PID",process.pid);let o;try{let l=await wpe.getVersionUpdateInfo();l!==void 0&&(o=l[Ht.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Ape.upgrade(l),console.log(Cpe))}catch(l){o?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${o}. Exiting HarperDB.`,l),rs.error(l)):(console.error(Ppe,l),rs.error(l)),process.exit(1)}mpe(),Bpe(),await Ope.reviewSelfSignedCert(),Fo.autoCastBoolean(ge.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Ipe&&await HK.generateNatsConfig(t)}a(GK,"initialize");async function Upe(e=!1){try{dd=bpe(process.argv),dd.ROOTPATH&&aI.updateConfigObject("settings_path",ko.join(dd.ROOTPATH,Ht.HDB_CONFIG_FILE)),await GK(e,!0),ge.get(Ht.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await ype();let t=process.env.IS_SCRIPTED_SERVICE&&!dd.service;Fo.autoCastBoolean(ge.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Hi.startClusteringProcesses(),await Hi.startClusteringThreads()),await Npe(process.env.DEV_MODE?1:ge.get(AS.CONFIG_PARAMS.THREADS_COUNT)??ge.get(AS.CONFIG_PARAMS.THREADS)),ge.get(Ht.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Rpe(),t||qK()}catch(t){console.error(t),rs.error(t),process.exit(1)}}a(Upe,"main");function qK(){rs.suppressLogging(()=>{console.log(oI.magenta(`HarperDB ${Spe.version} successfully started`))}),rs.notify(Mpe)}a(qK,"started");async function xpe(e=!0){FK=!e;try{Hi===void 0&&(Hi=K_()),Hi.enterPM2Mode(),await GK(),Fo.autoCastBoolean(ge.get(Ht.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Hi.startClusteringProcesses(),await Hi.startService(Ht.PROCESS_DESCRIPTORS.HDB),qK(),e&&process.exit(0)}catch(t){console.error(t),rs.error(t),process.exit(1)}}a(xpe,"launch");function Bpe(){let e=ko.join(ge.get(Ht.CONFIG_PARAMS.ROOTPATH),Ht.LICENSE_KEY_DIR_NAME,Ht.LICENSE_FILE_NAME),t=ko.join(e,Ht.LICENSE_FILE_NAME),r=ko.join(e,Ht.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=kK(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Fo.isEmpty(n)||Fo.isEmpty(s))return;Ho.mkdirpSync(e),Ho.writeFileSync(r,n),Ho.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),rs.error(s)}}a(Bpe,"writeLicenseFromVars");Object.assign(VK,{launch:xpe,main:Upe,isHdbInstalled:$K,startupLog:Hpe});async function $K(){try{await Ho.stat(Fo.getPropsFilePath()),await Ho.stat(ge.get(Ht.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Fo.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw rs.error(`Error checking for HDB install - ${e}`),e}return!0}a($K,"isHdbInstalled");function Hpe(e){let r=a(_=>_.padEnd(20),"pad"),n=`
112
+ `;ge.get(we.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ge.get(we.REPLICATION_HOSTNAME)}
113
+ `),ge.get(we.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ge.get(we.REPLICATION_URL)}
114
+ `),n+=`${r("Worker Threads:")}${ge.get(we.THREADS_COUNT)}
115
+ `,n+=`${r("Root Path:")}${ge.get(we.ROOTPATH)}
116
+ `,ge.get(we.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=ge.get(we.THREADS_DEBUG_PORT)?`, TCP: ${ge.get(we.THREADS_DEBUG_PORT)}
117
117
  `:`
118
- `);let s=xo.join(pe.get(Ne.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${pe.get(Ne.LOGGING_LEVEL)}, location: ${s+(pe.get(Ne.LOGGING_STDSTREAMS)?", stdout/err":"")}
119
- `,n+=r("Default:"),n+=pe.get(Ne.HTTP_PORT)?`HTTP (and WS): ${pe.get(Ne.HTTP_PORT)}, `:"",n+=pe.get(Ne.HTTP_SECUREPORT)?`HTTPS (and WS): ${pe.get(Ne.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${pe.get(Ne.HTTP_CORS)?`enabled for ${pe.get(Ne.HTTP_CORSACCESSLIST)}`:"disabled"}
120
- `,n+=r("Operations API:"),n+=pe.get(Ne.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${pe.get(Ne.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=pe.get(Ne.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${pe.get(Ne.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${pe.get(Ne.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${pe.get(Ne.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${pe.get(Ne.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
121
- `,n+=r("MQTT:"),n+=pe.get(Ne.MQTT_NETWORK_PORT)?`TCP: ${pe.get(Ne.MQTT_NETWORK_PORT)}, `:"",n+=pe.get(Ne.MQTT_NETWORK_SECUREPORT)?`TLS: ${pe.get(Ne.MQTT_NETWORK_SECUREPORT)}`:"",n+=pe.get(Ne.MQTT_WEBSOCKET)&&pe.get(Ne.HTTP_PORT)?`, WS: ${pe.get(Ne.HTTP_PORT)}`:"",n+=pe.get(Ne.MQTT_WEBSOCKET)&&pe.get(Ne.HTTP_SECUREPORT)?`, WSS: ${pe.get(Ne.HTTP_SECUREPORT)}
118
+ `);let s=ko.join(ge.get(we.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${ge.get(we.LOGGING_LEVEL)}, location: ${s+(ge.get(we.LOGGING_STDSTREAMS)?", stdout/err":"")}
119
+ `,n+=r("Default:"),n+=ge.get(we.HTTP_PORT)?`HTTP (and WS): ${ge.get(we.HTTP_PORT)}, `:"",n+=ge.get(we.HTTP_SECUREPORT)?`HTTPS (and WS): ${ge.get(we.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${ge.get(we.HTTP_CORS)?`enabled for ${ge.get(we.HTTP_CORSACCESSLIST)}`:"disabled"}
120
+ `,n+=r("Operations API:"),n+=ge.get(we.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${ge.get(we.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=ge.get(we.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${ge.get(we.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${ge.get(we.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${ge.get(we.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${ge.get(we.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
121
+ `,n+=r("MQTT:"),n+=ge.get(we.MQTT_NETWORK_PORT)?`TCP: ${ge.get(we.MQTT_NETWORK_PORT)}, `:"",n+=ge.get(we.MQTT_NETWORK_SECUREPORT)?`TLS: ${ge.get(we.MQTT_NETWORK_SECUREPORT)}`:"",n+=ge.get(we.MQTT_WEBSOCKET)&&ge.get(we.HTTP_PORT)?`, WS: ${ge.get(we.HTTP_PORT)}`:"",n+=ge.get(we.MQTT_WEBSOCKET)&&ge.get(we.HTTP_SECUREPORT)?`, WSS: ${ge.get(we.HTTP_SECUREPORT)}
122
122
  `:`
123
- `;let i=pe.get(Ne.REPLICATION_PORT)??pe.get(Ne.OPERATIONSAPI_NETWORK_PORT),o=pe.get(Ne.REPLICATION_SECUREPORT)??pe.get(Ne.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
124
- `;let l=[],u=oI.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,m]of e)for(let S of m){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
125
- `);let h=pe.get(Ne.HTTP_PORT)?`HTTP: ${pe.get(Ne.HTTP_PORT)}, `:"";h+=pe.get(Ne.HTTP_SECUREPORT)?`HTTPS: ${pe.get(Ne.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
123
+ `;let i=ge.get(we.REPLICATION_PORT)??ge.get(we.OPERATIONSAPI_NETWORK_PORT),o=ge.get(we.REPLICATION_SECUREPORT)??ge.get(we.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=o?`WSS: ${o} `:"",n+=`${c.slice(0,-2)}
124
+ `;let l=[],u=aI.getConfigObj();for(let _ in u)u[_].package&&l.push(_);let f={},d=`${r("REST:")}`;for(let[_,p]of e)for(let S of p){let g=S.name;g==="rest"&&(d+=`${S.protocol_name}: ${_}, `),l.includes(g)&&(f[g]?f[g]+=`${S.protocol_name}: ${_}, `:f[g]=`${S.protocol_name}: ${_}, `)}d.length>21&&(d=d.slice(0,-2),n+=`${d}
125
+ `);let h=ge.get(we.HTTP_PORT)?`HTTP: ${ge.get(we.HTTP_PORT)}, `:"";h+=ge.get(we.HTTP_SECUREPORT)?`HTTPS: ${ge.get(we.HTTP_SECUREPORT)}, `:"",h.length>21&&(h=h.slice(0,-2));for(let _ of l)f[_]?n+=`${r(_+": ")}${f[_].slice(0,-2)}
126
126
  `:n+=`${r(_+": ")}${h}
127
- `;console.log(n),pe.get(Ne.LOGGING_STDSTREAMS)&&ns.logsAtLevel("info")&&ns.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(zme,"startupLog");function jme(e){try{return Number.parseInt(Bo.readFileSync(e,"utf8"),10)}catch{return null}}a(jme,"readPidFile");function Qme(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(Qme,"isProcessRunning")});var EI=P(ko=>{"use strict";aA();var{isMainThread:cI,parentPort:kh,threadId:PS,workerData:Jme}=require("node:worker_threads"),{Socket:Xme,createServer:Zme}=require("node:net"),{createServer:epe,IncomingMessage:tpe}=require("node:http"),{createServer:rpe}=require("node:https"),{createSecureServer:npe}=require("node:http2"),{Blob:spe}=(ls(),se(Qm)),{unlinkSync:rY,existsSync:ipe}=require("fs"),Cn=j(),ut=ne(),Yt=v(),{server:Fh}=(Gr(),se(tc)),{WebSocketServer:ope}=require("ws"),{createServer:ape}=require("node:tls"),{getTicketKeys:cpe,restartNumber:lpe,getWorkerIndex:hd}=tt(),{Headers:lI,appendHeader:upe}=(J_(),se(mq)),{recordAction:Bh,recordActionBinary:jK}=(Ci(),se(S_)),{Request:nY,createReuseportFd:Hh}=(_S(),se(Pw)),{checkMemoryLimit:dpe}=qu(),{createTLSSelector:sY}=Zs(),{resolvePath:iY}=Ot(),{startupLog:fpe}=WK(),{Readable:QK}=require("node:stream"),_pe=di(),oY=ut.get(Yt.CONFIG_PARAMS.THREADS_DEBUG);if(oY){let e;if(cI)e=ut.get(Yt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Cn.info("Could not close debugger",t)}});else{let t=ut.get(Yt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&hd()>=0&&(e=t+hd())}if(e){let t=ut.get(Yt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ut.get(Yt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Cn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&cI)try{require("inspector").open(9229)}catch(e){lpe<=1&&Cn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:OLe,CONFIG_PARAMS:hpe}=Yt;ut.initSync();var mpe=ut.get(hpe.HTTP_SESSIONAFFINITY),Fi={},uI=new Map;ko.registerServer=hI;ko.httpServer=pI;ko.deliverSocket=_I;ko.startServers=aY;ko.listenOnPorts=cY;ko.globals=_pe;ko.when_components_loaded=null;Fh.http=pI;Fh.request=Epe;Fh.socket=gpe;Fh.ws=Spe;Fh.upgrade=dY;var xh={},CS={},DS={},dI=[];function aY(){return ko.when_components_loaded=US().loadRootComponents(!0).then(()=>{kh?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)_I(n,r,s);else if(t.requestId)ppe(t);else if(t.type===Yt.ITC_EVENT_TYPES.SHUTDOWN){Cn.trace("received shutdown request",PS);for(let i in Fi){let o=Fi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?Cn.info(`Closing ${_.length} idle connections`):h&&Cn.warn(`Forcefully closing ${_.length} active connections`);for(let m=0,S=_.length;m<S;m++){let g=_[m].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
127
+ `;console.log(n),ge.get(we.LOGGING_STDSTREAMS)&&rs.logsAtLevel("info")&&rs.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(Hpe,"startupLog");function kpe(e){try{return Number.parseInt(Ho.readFileSync(e,"utf8"),10)}catch{return null}}a(kpe,"readPidFile");function Fpe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(Fpe,"isProcessRunning")});var gI=P(Go=>{"use strict";oA();var{isMainThread:lI,parentPort:Lh,threadId:yS,workerData:Gpe}=require("node:worker_threads"),{Socket:qpe,createServer:$pe}=require("node:net"),{createServer:Vpe,IncomingMessage:Kpe}=require("node:http"),{createServer:Ype}=require("node:https"),{createSecureServer:Wpe}=require("node:http2"),{Blob:zpe}=(cs(),D(Yp)),{unlinkSync:eY,existsSync:Qpe}=require("fs"),Cn=j(),dt=ce(),Qt=(H(),D(q)),{server:Mh}=($r(),D(ic)),{WebSocketServer:jpe}=require("ws"),{createServer:Jpe}=require("node:tls"),{getTicketKeys:Xpe,restartNumber:Zpe,getWorkerIndex:fd}=rt(),{Headers:uI,appendHeader:eEe}=(d_(),D(Jx)),{recordAction:Ch,recordActionBinary:WK}=(Ci(),D(u_)),{Request:tY,createReuseportFd:Dh}=(Pw(),D(R1)),{checkMemoryLimit:tEe}=Fu(),{createTLSSelector:rY}=Xs(),{resolvePath:nY}=wt(),{startupLog:rEe}=KK(),{Readable:zK}=require("node:stream"),nEe=ui(),sY=dt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG);if(sY){let e;if(lI)e=dt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Cn.info("Could not close debugger",t)}});else{let t=dt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&fd()>=0&&(e=t+fd())}if(e){let t=dt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=dt.get(Qt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Cn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&lI)try{require("inspector").open(9229)}catch(e){Zpe<=1&&Cn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:TLe,CONFIG_PARAMS:sEe}=Qt;dt.initSync();var iEe=dt.get(sEe.HTTP_SESSIONAFFINITY),ki={},dI=new Map;Go.registerServer=pI;Go.httpServer=mI;Go.deliverSocket=hI;Go.startServers=iY;Go.listenOnPorts=oY;Go.globals=nEe;Go.when_components_loaded=null;Mh.http=mI;Mh.request=aEe;Mh.socket=cEe;Mh.ws=lEe;Mh.upgrade=lY;var Ph={},RS={},bS={},fI=[];function iY(){return Go.when_components_loaded=IS().loadRootComponents(!0).then(()=>{Lh?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)hI(n,r,s);else if(t.requestId)oEe(t);else if(t.type===Qt.ITC_EVENT_TYPES.SHUTDOWN){Cn.trace("received shutdown request",yS);for(let i in ki){let o=ki[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(h=>h.description.includes("connections")),f=0,d=setInterval(()=>{f++;let h=f>=100,_=o[u][h?"all":"idle"]();if(_.length===0){h&&clearInterval(d);return}f===1?Cn.info(`Closing ${_.length} idle connections`):h&&Cn.warn(`Forcefully closing ${_.length} active connections`);for(let p=0,S=_.length;p<S;p++){let g=_[p].socket;g._httpMessage&&!g._httpMessage.finished&&!h||(h?g.destroySoon():g.end(`HTTP/1.1 408 Request Timeout\r
128
128
  Connection: close\r
129
129
  \r
130
- `))}},25).unref()}o.close?.(()=>{if(ut.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&hd()==0)try{rY(iY(ut.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,PS),o.cantCleanupProperly||Cn.warn("Had to forcefully exit the thread",PS),process.exit(0)},5e3).unref()})}if(oY||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Cn.info("Could not close debugger",i)}}}).ref();let e;Hh&&!mpe&&(e=cY()),Promise.resolve(e).then(()=>{if(hd()===0)try{fpe(uI)}catch(t){console.error("Error displaying start-up log",t)}kh?.postMessage({type:Yt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(aY,"startServers");function cY(){let e=[];for(let t in Fi){let r=Fi[t];if(t.includes?.("/")&&hd()==0){ipe(t)&&rY(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Cn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ut.get(Yt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=hd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?Hh?n={fd:Hh(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:Hh?n={fd:Hh(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Cn.trace("Listening on port "+t,PS)}).on("error",c)}))}return Promise.all(e)}a(cY,"listenOnPorts");!cI&&!Jme?.noServerStart&&aY();function _I(e,t,r){let n=e?.read?e:new Xme({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Fi[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=Fi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Cn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(_I,"deliverSocket");var JK=new Map;function ppe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=JK.get(s),r){case"connection":i=_I(void 0,t),JK.set(s,i),i.write=(c,l,u)=>(kh.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(kh.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),kh.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(ppe,"proxyRequest");var{getComponentName:LS}=(dh(),se(uh));function hI(e,t,r=!0){t||(t=ut.get(Yt.CONFIG_PARAMS.HTTP_PORT));let n=Fi[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",tY),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Fi[t]=e;e.on("unhandled",tY)}a(hI,"registerServer");function mI(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],ut.get(Yt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ut.get(Yt.CONFIG_PARAMS.HTTP_PORT),secure:ut.get(Yt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ut.get(Yt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ut.get(Yt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ut.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:iY(ut.get(Yt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(mI,"getPorts");function pI(e,t){let r=[];for(let{port:n,secure:s}of mI(t))r.push(lY(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?dI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,hI(e,n,!1)),DS[n]=vS(dI,n);return r}a(pI,"httpServer");function MS(e,t){let r=uI.get(e)??[];uI.set(e,[...r,t])}a(MS,"setPortServerMap");function lY(e,t,r,n){if(MS(e,{protocol_name:t?"HTTPS":"HTTP",name:LS()}),!CS[e]){let s=r?"operationsApi_network":"http",i=ut.get(s+"_keepAliveTimeout"),o=ut.get(s+"_timeout"),c=ut.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:ut.get(Yt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=ut.get(s+"_mtls"),f=ut.get(s+"_mtls_required"),d;t&&(d=ut.get(s+"_http2")??!r,Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:cpe(),SNICallback:sY(r?"operations-api":"server",u)}));let h=dpe(),_=CS[e]=(t?d?npe:rpe:epe)(l,async(m,S)=>{try{let T=performance.now(),E=new nY(m,S);r&&(E.isOperationsServer=!0);let A=await DS[e](E);if(!A){if(E._nodeResponse.statusCode)return;A=uY(E)}if(A.headers?.set||(A.headers=new lI(A.headers)),h?A.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):A.headers?.set?.("Server","HarperDB"),A.status===-1){for(let G of A.headers||[])S.setHeader(G[0],G[1]);return m.baseRequest=E,S.baseResponse=A,CS[e].emit("unhandled",m,S)}let w=A.status||200,M=performance.now(),H=M-T,k=A.body,V;if(!A.handlesHeaders){let G=A.headers||new lI;k?k.length>=0?(typeof k=="string"?G.set("Content-Length",Buffer.byteLength(k)):G.set("Content-Length",k.length),V=!0):k instanceof spe&&(G.set("Content-Length",k.size),k=k.stream()):(G.set("Content-Length","0"),V=!0);let le=`hdb;dur=${H.toFixed(2)}`;A.wasCacheMiss&&(le+=", miss"),upe(G,"Server-Timing",le,!0),S.headersSent||S.writeHead(w,G&&(G[Symbol.iterator]?Array.from(G):G)),V&&S.end(k)}let q=E.handlerPath,ae=E.method;if(Bh(H,"duration",q,ae,A.wasCacheMiss==null?void 0:A.wasCacheMiss?"cache-miss":"cache-hit"),jK(w<400,"success",q,ae),jK(1,"response_"+w,q,ae),!V)if(k instanceof ReadableStream&&(k=QK.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=QK.from(k)),k?.pipe){k.pipe(S),k.destroy&&S.on("close",()=>{k.destroy()});let G=0;k.on("data",le=>{G+=le.length}),k.on("end",()=>{Bh(performance.now()-M,"transfer",q,ae),Bh(G,"bytes-sent",q,ae)})}else k?.then?k.then(G=>{S.end(G)},g):S.end(k)}catch(T){g(T)}function g(T){let E=T.headers;S.writeHead(T.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),S.end(T.toString()),T.statusCode?T.statusCode===500?Cn.warn(T):Cn.info(T):Cn.error(T)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",m=>{m._parent.startTime&&Bh(performance.now()-m._parent.startTime,"tls-handshake",e),Bh(m.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),hI(_,e)}return CS[e]}a(lY,"getHTTPServer");function vS(e,t){let r=uY;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(vS,"makeCallbackChain");function uY(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new lI}}a(uY,"unhandled");function Epe(e,t){pI(e,{requestOnly:!0,...t})}a(Epe,"onRequest");function gpe(e,t){let r;if(t.securePort){MS(t.securePort,{protocol_name:"TLS",name:LS()});let n=sY("server",t.mtls);r=ape({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),Fi[t.securePort]=r}return t.port&&(MS(t.port,{protocol_name:"TCP",name:LS()}),r=Zme(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Fi[t.port]=r),r}a(gpe,"onSocket");Object.defineProperty(tpe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var XK=[],fI={};function dY(e,t){for(let{port:r}of mI(t))XK[t?.runFirst?"unshift":"push"]({listener:e,port:r}),fI[r]=vS(XK,r)}a(dY,"onUpgrade");var ZK=[],eY={};function Spe(e,t){let r=[];for(let{port:n,secure:s}of mI(t)){MS(n,{protocol_name:s?"WSS":"WS",name:LS()});let i=lY(n,s,t?.isOperationsServer,t?.mtls);xh[n]||(xh[n]=new ope({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),xh[n].on("connection",(o,c)=>{let l=new nY(c);l.isWebSocket=!0;let u=DS[n](l);eY[n](o,l,u)}),dY((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):xh[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),xh[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{fI[n]&&fI[n](o,c,l)})),r.push(i),ZK[t?.runFirst?"unshift":"push"]({listener:e,port:n}),eY[n]=vS(ZK,n),DS[n]=vS(dI,n)}return r}a(Spe,"onWebSocket");function tY(e,t){t.writeHead(404),t.end(`Not found
131
- `)}a(tY,"defaultNotFound")});var zK={};Fe(zK,{startHTTPThreads:()=>Ape,startSocketServer:()=>RI,updateWorkerIdleness:()=>SY});async function Ape(e=2,t){try{if(t)TI(0,1,!0);else{let{loadRootComponents:r}=US();if(e===0)return(0,Cs.setMainIsWorker)(!0),await EI().startServers(),Promise.resolve([]);await r()}gY();for(let r=0;r<e;r++)TI(r,e);return Promise.all(EY)}finally{(0,Cs.threadsHaveStarted)()}}function gY(){let e=(0,mY.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),SI=setInterval(()=>{HS.notify(e)},Tpe).unref())}function TI(e,t=1,r){if(gI++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:Sd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===Sd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});EY.push(s),await s,md.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=xS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=md.indexOf(n);o>-1&&md.splice(o,1)}if(a(i,"removeWorker"),pd){let o=pd;pd=[];for(let c of o)pY[c.localPort](null,c)}}}),r){let n=setInterval(()=>{AI?AI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),gI=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function RI(e=0,t){if(typeof e=="string")try{(0,kS.existsSync)(e)&&(0,kS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Rpe:r=ype(t):r=yI;let n=(0,Ed.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=pY[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),AI=!0,r(o,(c,l)=>{if(!c){if(fY){let f=o._socket||new Ed.Socket({handle:o,writable:!0,readable:!0});fY.deliverSocket(f,e,l),f.resume()}else gI>0?(pd.length===0&&setTimeout(()=>{pd.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,pd.push(o)):(console.log("start up a dynamic thread to handle request"),TI(0));mr(!1,"socket-routed");return}c.requests++;let u=o.fd;if(u>=0)c.postMessage({port:e,fd:u,data:l});else{let f=o._socket||new Ed.Socket({handle:o,writable:!0,readable:!0});Npe(f,c,e)}mr(!0,"socket-routed")})};let s=vu();HS.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 yI(e,t){let r,n=0;for(let s of md){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=BS)return BS=i,t(r);n=i}BS=0,t(r)}function Rpe(e,t){let r={};e.getpeername(r);let n=r.address,s=gd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);yI(e,o=>{gd.set(n,{worker:o,lastUsed:i}),t(o)})}function ype(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Ed.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=gd.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);yI(n,d=>{gd.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function SY(){BS=0;for(let e of md)e.expectedIdle=e.recentELU.idle+bpe,e.requests=1;md.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Npe(e,t,r){let n=Ope++;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(),xS.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")),xS.delete(n)),s.event=="destroy"&&(e.destroy(),xS.delete(n))})}var Cs,Ed,Sd,HS,kS,hY,mY,md,pd,pY,fY,gI,EY,SI,Tpe,AI,BS,_Y,gd,bpe,xS,Ope,aI=Oe(()=>{Cs=L(tt()),Ed=require("net"),Sd=L(v()),HS=L(j()),kS=require("fs");Ci();hY=require("worker_threads"),mY=L(qu()),md=[],pd=[],pY=[],gI=0,EY=[];hY.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===Sd.ITC_EVENT_TYPES.RESTART&&SI&&(clearInterval(SI),gY())}));Tpe=6e5;a(Ape,"startHTTPThreads");a(gY,"licenseWarning");a(TI,"startHTTPWorker");a(RI,"startSocketServer");BS=0;a(yI,"findMostIdleWorker");_Y=36e5,gd=new Map;a(Rpe,"findByRemoteAddressAffinity");a(ype,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of gd)r.lastUsed+_Y<e&&gd.delete(t)},_Y).unref();bpe=1e3;a(SY,"updateWorkerIdleness");(0,Cs.setMonitorListener)(SY);xS=new Map,Ope=1;a(Npe,"proxySocket")});var yY=P((ULe,RY)=>{"use strict";var wpe=require("cluster"),Tl=ne();Tl.initSync();var AY=v(),PLe=require("util"),Fo=j(),DLe=require("fs"),Ipe=require("fastify"),LLe=vu(),Cpe=require("@fastify/cors"),Ppe=require("@fastify/compress"),Dpe=require("@fastify/static"),Lpe=Sw(),Mpe=require("path"),{PACKAGE_ROOT:vpe}=v(),Upe=Gs(),Bpe=re(),xpe=Gn(),Hpe=qu(),{server:kpe}=(Gr(),se(tc)),{node_request_key:MLe}=(_S(),se(Pw)),{authHandler:Fpe,handlePostRequest:qpe,serverErrorHandler:Gpe,reqBodyValidationHandler:$pe}=uS(),vLe=require("net"),{registerContentHandlers:Vpe}=(Zc(),se(lV)),Kpe=6e4,Ype=1024*1024*1024,Wpe="TRUE",{CONFIG_PARAMS:qh}=AY,Td;RY.exports={hdbServer:TY,start:TY};async function TY(e){try{Fo.debug("In Fastify server"+process.cwd()),Fo.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Fo.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=wpe.isMaster,await zpe();let t=e.securePort>0;Td=jpe(t),await Td.ready(),e||(e={}),e.isOperationsServer=!0;try{kpe.http(Td.server,e),Td.server.closeIdleConnections||await Td.listen({port:0,host:"::"})}catch(r){throw Td.close(),Fo.error(r),Fo.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Fo.fatal(t),process.exit(1)}}a(TY,"operationsServer");async function zpe(){Fo.trace("Configuring HarperDB process."),Upe.setSchemaDataToGlobal(),await xpe.setUsersWithRolesCache(),await Hpe.getLicense()}a(zpe,"setUp");function jpe(e){Fo.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Qpe(e),r=Ipe(t);r.server.headersTimeout=Xpe(),r.setErrorHandler(Gpe);let n=Jpe();n&&r.register(Cpe,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(Lpe),r.register(Ppe),r.register(Dpe,{root:Mpe.join(vpe,"studio/build-local")}),Vpe(r);let s=Tl.get(AY.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Bpe.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[$pe,Fpe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),qpe(i,o)}),r.get("/health",()=>"HarperDB is running."),Fo.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(jpe,"buildServer");function Qpe(e){let t=Tl.get(qh.OPERATIONSAPI_NETWORK_TIMEOUT),r=Tl.get(qh.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:Ype,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Qpe,"getServerOptions");function Jpe(){let e=Tl.get(qh.OPERATIONSAPI_NETWORK_CORS),t=Tl.get(qh.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Wpe)&&(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(Jpe,"getCORSOpts");function Xpe(){return Tl.get(qh.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Kpe}a(Xpe,"getHeaderTimeoutConfig")});var CI={};Fe(CI,{disableNATS:()=>eEe,publishToStream:()=>GS,setNATSReplicator:()=>bI,setPublishToStream:()=>tEe,setSubscription:()=>II,start:()=>Zpe});function Zpe(){Gh.default.get($h.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nEe()}function eEe(e=!0){IY=e}function tEe(e,t){GS=e,II=t}function nEe(){if(IY||process.env._DISABLE_NATS)return;let e=Qe(),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];bI(s,r,i)}}Uc((r,n)=>{bI(r.tableName,r.databaseName,r),n&&PY(r)}),!bY&&(bY=!0)}function bI(e,t,r){if(t==="system"&&sEe.includes(e))return;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 qr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){PY(i)}static subscribe(){let i=new Mn;return II(t,e,i),i}static subscribeOnThisThread(i){return i<(Gh.default.get($h.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??rEe)}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 FS(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=CY;return i}a(n,"getNATSTransaction")}function PY(e){let t=Gh.default.get($h.default.CONFIG_PARAMS.CLUSTERING_NODENAME);GS(`${NI.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,wI.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 OY,NI,wI,NY,wY,Gh,$h,qS,IY,GS,II,rEe,CY,bY,sEe,FS,OI,DY=Oe(()=>{Pe();Xo();OY=L(Er()),NI=L(yt()),wI=L(no());vl();NY=L($S()),wY=L(on()),Gh=L(ne()),$h=L(v()),qS=L(j());a(Zpe,"start");a(eEe,"disableNATS");GS=OY.publishToStream,II=NY.setSubscription;a(tEe,"setPublishToStream");rEe=2;a(nEe,"assignReplicationSource");sEe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(bI,"setNATSReplicator");a(PY,"publishSchema");FS=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=Gh.default.get($h.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(qS.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(GS(`${NI.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,wI.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw qS.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},OI=class extends FS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,wY.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};CY=new OI});async function BY({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await PI.get(e,{returnNonexistent:!0});i=new MI(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await PI.get(e);o&&o.delete()}i=new KS(e,t)}return n&&(n.id=e,n.user={username:t?.username},Vh.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function DI(){return VS++,VS>65500&&(VS=1),VS}function LI(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=pi.getMatch(n,"mqtt");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 At(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var MY,ka,vY,UY,LY,PI,Vh,VS,KS,MI,xY=Oe(()=>{Pe();Fl();MY=L(on()),ka=L(j());Xa();vY=L(tt()),UY=L(EI());Gr();LY=100,PI=it({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"}]}}]}),Vh=it({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,vY.getWorkerIndex)()===0&&(async()=>{await UY.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Vh.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await je.getUser(r.user.username));try{await LI(r,t,r)}catch{(0,ka.warn)("Failed to publish will",t)}Vh.delete(e.id)}})();a(BY,"getSession");VS=1;a(DI,"getNextMessageId");KS=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(T=>T.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,ka.trace)("Resuming subscription from",s,"from",o);let _=pi.getMatch(u,"mqtt");if(!_){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let T=h.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,T.indexOf("+")===T.length-1)h.onlyChildren=!0,h.url="/"+T.slice(0,T.length-1);else{let E=T.split("/"),A;for(let H=0;H<E.length;H++)if(E[H].indexOf("+")>-1)if(E[H]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let w=!0;E[E.length-1]==="#"&&(E.length--,w=!1),A&&(n=a(H=>{let k=H.id;if(!Array.isArray(k)||w&&k.length!==E.length)return!1;for(let V=0;V<E.length;V++)if(E[V]!=="+"&&E[V]!==k[V])return!1;return!0},"filter"));let M=E.indexOf("+");h.url="/"+(M>-1?E.slice(0,M):E).concat("").join("/")}}let m=_.path,S=_.Resource,g=await At(h,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let E=await S.subscribe(h,T);if(!E)return;if(!E[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let A=(async()=>{for await(let w of E)try{let M;if(w.type&&w.type!=="put"&&w.type!=="delete"&&w.type!=="message"&&w.type!=="patch"||n&&!n(w))continue;r?(w.topic=s,M=this.needsAcknowledge(w)):(w.acknowledge?.(),M=DI());let H=w.id;if(Array.isArray(H)&&(H=kl(H)),H==null&&(H=""),await this.listener(m+"/"+H,w.value,M,t)===!1)break;this.awaitingAcks?.size>LY?await new Promise(V=>setTimeout(V,this.awaitingAcks.size-LY)):await new Promise(setImmediate)}catch(M){(0,ka.warn)(M)}})();return E});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=DI();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return LI(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();At(r,async()=>{try{if(!t){let n=await Vh.get(this.sessionId);n?.doesExist()&&await LI(n,n.data,r)}}finally{await Vh.delete(this.sessionId)}}).catch(n=>{(0,ka.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(LI,"publish");MI=class extends KS{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=DI(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;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,ka.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.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,MY.getNextMonotonicTime)()),(0,ka.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),PI.put(this.sessionRecord)}}});var UI={};Fe(UI,{bypassAuth:()=>iEe,start:()=>oEe});function iEe(){GY=!0}function oEe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new qY.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),ar.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:m}=kY(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",m),u.on("error",S=>{ar.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),ar.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,Ad.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&WS.notify?.({username:f?.username,status:xr.AUTH_AUDIT_STATUS.SUCCESS,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(m){throw(0,Ad.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&WS.error?.({username:_,status:xr.AUTH_AUDIT_STATUS.FAILURE,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),m}}else ar.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),ar.error?.(_)}else if(l.required)return ar.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&GY&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,FY.getSuperUser)(),ar.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=kY(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{ar.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function kY(e,t,r,n,s){HY||(HY=!0,g_(d=>{YS>0&&d.push({metric:"mqtt-connections",connections:YS,byThread:!0})}));let i;YS++;let o,c={protocolVersion:4},l=(0,zS.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){YS--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!1,"connection","mqtt","disconnect"),ar.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){ar.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,m=_?.indexOf("/",1),S=m>0?_.slice(0,m):_;mr(d.length,"bytes-received",S,T(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await je.getUser(d.username,d.password.toString(),r),(0,Ad.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&WS.notify?.({username:n?.username,status:xr.AUTH_AUDIT_STATUS.SUCCESS,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(q){return(0,Ad.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&WS.error?.({username:d.username,status:xr.AUTH_AUDIT_STATUS.FAILURE,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,q),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let q=e.deserialize||(e.deserialize=Io(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?q(d.will.payload):void 0,delete d.will.payload}o=BY({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(q){return ar.error?.(q),s.events.emit("auth-failed",d,e,q),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:q.code||5,returnCode:q.code||128})}s.events.emit("connected",o,e),Wn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((q,ae,G,le)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",q);let z=q.indexOf("/",1),Ae=z>0?q.slice(0,z):q;g({cmd:"publish",topic:q,payload:E(ae),messageId:G||Math.floor(Math.random()*1e8),qos:le.qos},Ae);let ge=e._socket??e;return ge.writableNeedDrain?new Promise(Ce=>ge.once("drain",Ce)):!ge.closed}catch(z){return ar.error?.(z),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let A=[];for(let q of d.subscriptions){let ae;try{let G=await o.addSubscription(q,q.qos>=1);ae=G?G.qos||0:c.protocolVersion<5?128:143}catch(G){s.events.emit("error",G,e,q,o),G.statusCode?G.statusCode===500?ar.warn?.(G):ar.info?.(G):ar.error?.(G),ae=c.protocolVersion<5?128:G.statusCode===403?135:G.statusCode===404?143:128}A.push(ae)}await o.committed,g({cmd:"suback",granted:A,messageId:d.messageId});break;case"unsubscribe":{let q=[];for(let ae of d.unsubscriptions)q.push(o.removeSubscription(ae)?0:17);g({cmd:"unsuback",granted:q,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let w=d.qos===2?"pubrec":"puback",M=e.deserialize||(e.deserialize=Io(r?.headers.get?.("content-type"))),k=(d.payload?.length||0)>0?M(d.payload):void 0,V;try{V=await o.publish(d,k)}catch(q){s.events.emit("error",q,e,d,o),ar.warn?.(q),d.qos>0&&g({cmd:w,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:w,messageId:d.messageId,reasonCode:V===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!0,"connection","mqtt","disconnect"),ar.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(A){s.events.emit("error",A,e,d,o),ar.error?.(A),g({cmd:"disconnect"})}function g(A,w){let M=(0,zS.generate)(A,c);t(M),mr(M.length,"bytes-sent",w,T(A),"mqtt")}a(g,"sendPacket");function T(A){return A.qos>0?A.cmd+",qos="+A.qos:A.cmd}a(T,"packetMethodName");function E(A){return Xc(A,r)}a(E,"serialize")}),l.on("error",d=>{ar.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var zS,FY,Ad,xr,vI,qY,WS,ar,GY,HY,YS,$Y=Oe(()=>{zS=require("mqtt-packet");xY();FY=L(Gn());Zc();Ci();Gr();Ad=L(ne()),xr=L(v()),vI=L(Qi()),qY=require("events"),WS=(0,vI.loggerWithTag)("auth-event"),ar=(0,vI.loggerWithTag)("mqtt"),GY=(0,Ad.get)(xr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(iEe,"bypassAuth");a(oEe,"start");YS=0;a(kY,"onSocket")});var uh={};Fe(uh,{component_errors:()=>yd,getComponentName:()=>dEe,loadComponent:()=>JS,loadComponentDirectories:()=>jY,setErrorReporter:()=>uEe});function jY(e,t){t&&(xI=t),e&&(kI=e);let r=[];if((0,dt.existsSync)(BI)){let s=(0,dt.readdirSync)(BI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,ht.join)(BI,o);r.push(JS(c,xI,Fa.HDB_ROOT_DIR_NAME,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(JS(n,xI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{zY=!0})}function uEe(e){Kh=e}async function JS(e,t,r,n,s,i){let o=(0,dt.realpathSync)(e);if(jS.has(o))return jS.get(o);jS.set(o,!0),s&&(kI=s);try{let c;n&&(yd=new Map);let l=(0,ht.join)(e,"harperdb-config.yaml");(0,dt.existsSync)(l)?c=n?(0,XS.getConfigObj)():(0,HI.parseDocument)((0,dt.readFileSync)(l,"utf8")).toJSON():!n&&(0,dt.existsSync)(l=(0,ht.join)(e,"config.yaml"))?c=(0,HI.parseDocument)((0,dt.readFileSync)(l,"utf8")).toJSON():c=FI;let u=(0,ht.join)(e,"node_modules","harperdb");try{Al.isMainThread&&(n||(0,dt.existsSync)(u)&&(0,dt.realpathSync)(Fa.PACKAGE_ROOT)!==(0,dt.realpathSync)(u))&&((0,dt.rmSync)(u,{recursive:!0,force:!0}),(0,dt.existsSync)((0,ht.join)(e,"node_modules"))||(0,dt.mkdirSync)((0,ht.join)(e,"node_modules")),(0,dt.symlinkSync)(Fa.PACKAGE_ROOT,u,"dir"))}catch(h){Rd.default.error("Error symlinking harperdb module",h)}let f=QS,d=n;for(let h in c){QS=h;let _=c[h];if(yd.set(n?h:(0,ht.basename)(e),!1),!_)continue;let m,S=_.package;try{if(S){let w=e,M;for(;!(0,dt.existsSync)(M=(0,ht.join)(w,"node_modules",h));)if(w=(0,ht.dirname)(w),w.length<(0,WY.getHdbBasePath)().length){M=null;break}if(M)m=await JS(M,t,r,!1),d=!0;else throw new Error(`Unable to find package ${h}:${S}`)}else m=lEe[h];if(!m)continue;let g=a(w=>(w.origin=r,it(w)),"ensureTable"),T=_.network||(_.port||_.securePort)&&_,E=T?.securePort||T?.https&&T.port,A=!T?.https&&T?.port;if(Al.isMainThread&&(m=await m.startOnMainThread?.({server:je,ensureTable:g,port:A,securePort:E,resources:t,..._})||m,n&&T))for(let w of[A,E])try{if(+w&&!VY.includes(w)){let M=qI.get(Fa.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);M&&Rd.default.warn("Session affinity is not recommended and may cause memory leaks"),(M||!fS)&&(VY.push(w),RI(w,M))}}catch(M){console.error("Error listening on socket",w,M,h)}if(t.isWorker&&(m=await m.start?.({server:je,ensureTable:g,port:A,securePort:E,resources:t,..._})||m),kI.set(m,!0),(m.handleFile||m.handleDirectory||m.setupFile||m.setupDirectory)&&_.files!=null){if(_.files.includes(".."))throw(0,YY.handleHDBError)("Can not reference parent directories");let w=(0,ht.join)(e,_.files).replace(/\\/g,"/"),M=w.indexOf("/*");if(M>-1&&_.files!==FI[h]?.files&&!(0,dt.existsSync)(w.slice(0,M)))throw new Error(`The path '${w.slice(0,M)}' does not exist and cannot be used as the base of the resolved 'files' path value '${_.files}'`);let H=(0,ht.basename)(e),k=_.path||"/";k=k.startsWith("/")?k:k.startsWith("./")?"/"+H+k.slice(2):k==="."?"/"+H:"/"+H+"/"+k;let V,q,ae;if(_.root){let le=_.root;le.startsWith("/")&&(le=le.slice(1)),le.endsWith("/")&&(le=le.slice(0,-1)),le+="/",q=(0,ht.join)(e,le)}else(ae=w.indexOf("/*"))>-1?(q=w.slice(0,ae+1),V=(0,ht.relative)(e,q)):_.files.indexOf("/")>-1&&(q=w.slice(0,w.lastIndexOf("/")+1),V=(0,ht.relative)(e,q));let G=!1;if(Al.isMainThread&&m.setupDirectory&&(G=await m.setupDirectory?.(k,q,t)),t.isWorker&&m.handleDirectory&&(G=await m.handleDirectory?.(k,q,t)),G){d=!0;continue}for(let le of await(0,KY.default)(w,{onlyFiles:!1,objectMode:!0})){let{path:z,dirent:Ae}=le;d=!0;let ge=(0,ht.relative)(e,z).replace(/\\/g,"/");if(V)if(ge.startsWith(V))ge=ge.slice(V.length+1);else throw new Error(`The root path '${_.root}' does not reference a valid part of the file path '${ge}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ce=k+(k.endsWith("/")?"":"/")+ge;try{if(Ae.isFile()){let he=await cEe(z);Al.isMainThread&&await m.setupFile?.(he,Ce,z,t),t.isWorker&&await m.handleFile?.(he,Ce,z,t)}else Al.isMainThread&&await m.setupDirectory?.(Ce,z,t),t.isWorker&&await m.handleDirectory?.(Ce,z,t)}catch(he){he.message=`Could not load ${Ae.isFile()?"file":"directory"} '${z}'${_.module?" using '"+_.module+"'":""} for application '${e}' due to: ${he.message}`,Kh?.(he),((0,bd.getWorkerIndex)()===0?console:Rd.default).error(he),t.set(_.path||"/",new Zo(he)),yd.set(n?h:(0,ht.basename)(e),he.message)}}}}catch(g){g.message=`Could not load component '${h}' for application '${(0,ht.basename)(e)}' due to: ${g.message}`,Kh?.(g),((0,bd.getWorkerIndex)()===0?console:Rd.default).error(g),t.set(_.path||"/",new Zo(g),null,!0),yd.set(n?h:(0,ht.basename)(e),g.message)}}if(QS=f,Al.isMainThread&&!zY&&i&&(0,bd.watchDir)(e,async()=>jY()),c.extensionModule){let h=await iS((0,ht.join)(e,c.extensionModule));return jS.set(o,h),h}if(!d&&t.isWorker){let h=`${e} did not load any modules, resources, or files, is this a valid component?`;Kh?.(new Error(h)),((0,bd.getWorkerIndex)()===0?console:Rd.default).error(h),yd.set((0,ht.basename)(e),h)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,Kh?.(c),t.set("",new Zo(c))}}var dt,ht,Al,HI,qI,Fa,KY,bd,Rd,YY,WY,aEe,XS,cEe,BI,kI,zY,xI,yd,lEe,FI,VY,jS,Kh,QS,dEe,dh=Oe(()=>{dt=require("fs"),ht=require("path"),Al=require("worker_threads"),HI=require("yaml"),qI=L(ne()),Fa=L(v());sD();SV();yV();wV();IV();HV();E1();y1();KY=L(require("fast-glob")),bd=L(tt()),Rd=L(j());ow();Gr();YY=L(fe());Pe();aI();WY=L(ne()),aEe=L(yY());Ag();DY();fs();$Y();XS=L(Ot());_S();oA();({readFile:cEe}=dt.promises),BI=(0,XS.resolvePath)(qI.get(Fa.CONFIG_PARAMS.COMPONENTSROOT)),kI=new Map,yd=new Map;a(jY,"loadComponentDirectories");lEe={REST:aS,rest:aS,graphql:sw,graphqlSchema:uA,roles:iw,jsResource:cw,fastifyRoutes:Ow,login:uw,static:Nw,operationsApi:aEe,customFunctions:{},http:{},clustering:CI,replication:ha,authentication:X_,mqtt:UI},FI={rest:!0,graphql:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(FI,"static",{value:{files:"web/**"}});VY=[],jS=new Map;a(uEe,"setErrorReporter");dEe=a(()=>QS,"getComponentName");a(JS,"loadComponent")});var US=P((dMe,JY)=>{var{isMainThread:QY}=require("worker_threads"),{getTables:fEe,getDatabases:lMe,table:uMe}=(Pe(),se(rt)),{loadComponentDirectories:_Ee,loadComponent:hEe}=(dh(),se(uh)),{resetResources:mEe}=(Fl(),se(ZP)),pEe=eN(),EEe=Ot(),{dirname:gEe}=require("path"),{getConnection:SEe}=Er(),TEe=ne(),{CONFIG_PARAMS:AEe}=v(),{loadCertificates:REe}=Zs(),GI=new Map;async function yEe(e=!1){!QY&&TEe.get(AEe.CLUSTERING_ENABLED)&&SEe();try{QY&&await pEe()}catch(n){console.error(n)}let t=mEe();fEe(),t.isWorker=e,await REe(),await hEe(gEe(EEe.getConfigFilePath()),t,"hdb",!0,GI),await _Ee(GI,t);let r=[];for(let[n]of GI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(yEe,"loadRootComponents");JY.exports.loadRootComponents=yEe});var tt=P((_Me,ci)=>{"use strict";aA();var{Worker:bEe,MessageChannel:OEe,parentPort:qi,isMainThread:WI,threadId:NEe,workerData:Gi}=require("worker_threads"),{PACKAGE_ROOT:wEe}=v(),{join:tW,isAbsolute:IEe,extname:CEe}=require("path"),{server:rW}=(Gr(),se(tc)),{watch:PEe,readdir:DEe}=require("fs/promises"),{totalmem:XY}=require("os"),Yh=v(),nW=ne(),$i=j(),{randomBytes:LEe}=require("crypto"),{_assignPackageExport:MEe}=di(),vEe=v(),ZY=1024*1024,qa=[],Ps=[],UEe=50,zI=1e4,BEe="restart",sW="request_thread_info",iW="resource_report",oW="thread_info",aW="added-port",xEe="ack",$I;MEe("threads",Ps);ci.exports={startWorker:VI,restartWorkers:QI,shutdownWorkers:GEe,workers:qa,setMonitorListener:QEe,onMessageFromWorkers:$Ee,onMessageByType:hW,broadcast:KEe,broadcastWithAcknowledgement:WEe,setChildListenerByType:qEe,getWorkerIndex:cW,getWorkerCount:lW,getTicketKeys:dW,setMainIsWorker:kEe,setTerminateTimeout:HEe,restartNumber:Gi?.restartNumber||1};Ps.onMessageByType=hW;Ps.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ps.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};ci.exports.whenThreadsStarted=new Promise(e=>{ci.exports.threadsHaveStarted=e});var jI;function HEe(e){zI=e}a(HEe,"setTerminateTimeout");function cW(){return Gi?Gi.workerIndex:jI?0:void 0}a(cW,"getWorkerIndex");function lW(){return Gi?Gi.workerCount:jI?1:void 0}a(lW,"getWorkerCount");function kEe(e){jI=e,ci.exports.threadsHaveStarted()}a(kEe,"setMainIsWorker");var uW=1,ZS;function dW(){return ZS||(ZS=WI?LEe(48):Gi.ticketKeys,ZS)}a(dW,"getTicketKeys");Object.defineProperty(rW,"workerIndex",{get(){return cW()}});Object.defineProperty(rW,"workerCount",{get(){return lW()}});var fW={[sW](e,t){zEe(t)},[iW](e,t){jEe(t,e)}};function VI(e,t={}){let r=process.constrainedMemory?.()||XY();r=Math.min(r,XY(),2e4*ZY);let n=nW.get(Yh.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/ZY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ps){let u=new OEe;u.existingPort=l,i.push(u),o.push(u.port2)}CEe(e)||(e+=".js");let c=new bEe(IEe(e)?e:tW(wEe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:uW=t.threadCount,name:t.name,restartNumber:ci.exports.restartNumber,ticketKeys:dW()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:aW,port:l,threadId:c.threadId},[l]);return tT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>VI(e,t),c.on("error",l=>{$i.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{qa.splice(qa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<UEe?(t.unexpectedRestarts=c.unexpectedRestarts+1,VI(e,t)):$i.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{fW[l.type]?.(l,c)}),qa.push(c),XEe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(VI,"startWorker");var FEe=[Yh.THREAD_TYPES.HTTP];async function QI(e=null,t=Math.max(uW>3,1),r=!0){if(WI){if(r){let{loadRootComponents:o}=US();await o()}ci.exports.restartNumber++,t<1&&(t=t*qa.length);let n=[],s=[];for(let o of qa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;$i.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ci.exports.restartNumber,type:Yh.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=FEe.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{$i.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},zI*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===vEe.ITC_EVENT_TYPES.CHILD_STARTED&&($i.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");$i.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),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}=zu();r&&(e==="http"||!e)&&nW.get(Yh.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else qi.postMessage({type:BEe,workerType:e})}a(QI,"restartWorkers");function qEe(e,t){fW[e]=t}a(qEe,"setChildListenerByType");function GEe(e){return QI(e,1/0,!1)}a(GEe,"shutdownWorkers");var _W=[];function $Ee(e){_W.push(e)}a($Ee,"onMessageFromWorkers");var KI=new Map;function hW(e,t){let r=KI.get(e);r||KI.set(e,r=[]),r.push(t)}a(hW,"onMessageByType");var VEe=10;async function KEe(e,t){let r=0;for(let n of Ps)try{n.postMessage(e),r++>VEe&&(r=0,await new Promise(setImmediate))}catch(s){$i.error("Unable to send message to worker",s)}t&&pW(e,null)}a(KEe,"broadcast");var eT=new Map,YEe=1;function WEe(e){return new Promise(t=>{let r=0;for(let n of Ps)try{let s=YEe++,i=a(()=>{eT.delete(s),--r===0&&t(),n!==qi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,eT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of eT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){$i.error("Unable to send message to worker",s)}r===0&&t()})}a(WEe,"broadcastWithAcknowledgement");function zEe(e){e.postMessage({type:oW,workers:mW()})}a(zEe,"sendThreadInfo");function mW(){let e=Date.now();return qa.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(mW,"getChildWorkerInfo");function jEe(e,t){e.resources=t,e.resources.updated=Date.now()}a(jEe,"recordResourceReport");var YI;function QEe(e){YI=e}a(QEe,"setMonitorListener");var JEe=1e3,eW=!1;function XEe(){eW||(eW=!0,setInterval(()=>{for(let e of qa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}YI&&YI()},JEe).unref())}a(XEe,"startMonitoring");var ZEe=1e3;if(qi&&Gi?.addPorts){tT(qi);for(let e=0,t=Gi.addPorts.length;e<t;e++){let r=Gi.addPorts[e];r.threadId=Gi.addThreadIds[e],tT(r)}setInterval(()=>{let e=process.memoryUsage();qi.postMessage({type:iW,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ZEe).unref(),$I=a(()=>new Promise((e,t)=>{qi.on("message",r),qi.postMessage({type:sW});function r(n){n.type===oW&&(qi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else $I=mW;ci.exports.getThreadInfo=$I;function tT(e,t){Ps.push(e),e.on("message",r=>{if(r.type===aW)r.port.threadId=r.threadId,tT(r.port);else if(r.type===xEe){let n=eT.get(r.id);n&&n()}else pW(r,e)}).on("close",()=>{Ps.splice(Ps.indexOf(e),1)}).on("exit",()=>{Ps.splice(Ps.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(tT,"addPort");function pW(e,t){for(let n of _W)n(e,t);let r=KI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){$i.error(s)}}a(pW,"notifyMessageListeners");if(WI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await DEe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(tW(s,o.name));try{for await(let{filename:o}of PEe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await QI(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");ci.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else qi.on("message",async e=>{let{type:t}=e;t===Yh.ITC_EVENT_TYPES.SHUTDOWN&&(ci.exports.restartNumber=e.restartNumber,qi.unref(),setTimeout(()=>{$i.warn("Thread did not voluntarily terminate",NEe),process.exit(0)},zI).unref())})});var a0={};Fe(a0,{ACTION_32_BIT:()=>tp,ACTION_64_BIT:()=>rge,AUDIT_STORE_OPTIONS:()=>Y_,Decoder:()=>vc,HAS_BLOBS:()=>ks,HAS_CURRENT_RESIDENCY_ID:()=>cc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Af,HAS_ORIGINATING_OPERATION:()=>Tf,HAS_PREVIOUS_RESIDENCY_ID:()=>lc,REMOTE_SEQUENCE_UPDATE:()=>RE,createAuditEntry:()=>Kl,getLastRemoved:()=>Tb,openAuditStore:()=>iT,readAuditEntry:()=>Rt,removeAuditEntry:()=>oT,setAuditRetention:()=>tge,transactionKeyEncoder:()=>NW});function iT(e){let t=e.auditStore=e.openDB(JI.AUDIT_STORE_NAME,{create:!1,...Y_});t||(t=e.auditStore=e.openDB(JI.AUDIT_STORE_NAME,Y_),gW(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(i,o,c){return r[i]=c,t.tableStores[i]=o,t.deleteCallbacks=r,{remove(){delete r[i]}}};let n=null;function s(i=rT){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c,l;try{for(let{key:u,value:f}of t.getRange({start:1,snapshot:!1,end:Date.now()-XI})){try{c=oT(t,u,f)}catch(d){Od.warn("Error removing audit entry",d)}if(l=u,await new Promise(setImmediate),++o>=ege){i=10;break}}await c}finally{o===0?i=Math.min(i<<1,XI/10):gW(t,l),s(i)}},i).unref()}if(a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,zh.getWorkerIndex)()===(0,zh.getWorkerCount)()-1&&s(rT),(0,zh.getWorkerIndex)()===0&&!EW)for(let i of t.getKeys({reverse:!0,limit:1}))i>Date.now()&&(EW=!0,Od.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function oT(e,t,r){let n=nge(r),s;if(n&ks){s=Rt(r);let i=e.tableStores[s.tableId];i.getEntry(s.recordId).version!==s.version&&ic(()=>Xi(s.getValue(i)),i.rootStore)}if((n&15)===ZI){s=s||Rt(r);let i=s.tableId;e.tableStores[s.tableId].getEntry(s.recordId).version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function gW(e,t){eC[0]=t,e.put(Symbol.for("last-removed"),wW)}function Tb(e){let t=e.get(Symbol.for("last-removed"));if(t)return wW.set(t),eC[0]}function tge(e,t=rT){XI=e,rT=t}function Kl(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=IW[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let m=1;if(n&&(n>1?Ga.setFloat64(0,n):Ds.set(DA),m=9),l){if(l&255)throw new Error("Illegal extended type");m+=3}T(s),T(t),g(r),Ga.setFloat64(m,e),m+=8,l&cc&&T(u),l&lc&&T(f),l&Af&&(Ga.setFloat64(m,d),m+=8),l&Tf&&T(CW[h]),i?g(i):Ds[m++]=0,l?Ga.setUint32(n?8:0,_|l|3221225472):Ds[n?8:0]=_;let S=Ds.subarray(0,m);if(c)return Buffer.concat([S,c]);return S;function g(E){let A=m;m+=1,m=(0,Rl.writeKey)(E,Ds,m);let w=m-A-1;w>127?w>16383?(Od.error("Key or username was too large for audit entry",E),m=A+1,Ds[A]=0):(Ds.copyWithin(A+2,A+1,m),Ga.setUint16(A,w|32768),m++):Ds[A]=w}function T(E){E<128?Ds[m++]=E:E<16384?(Ga.setUint16(m,E|32768),m+=2):E<1056964608?(Ga.setUint32(m,E|3221225472),m+=4):(Ds[m]=255,Ga.setUint32(m+1,E),m+=5)}}function nge(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new vc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Rt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new vc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,m,S;if(i&cc&&(h=n.readInt()),i&lc&&(_=n.readInt()),i&Af&&(m=n.readFloat64()),i&Tf){let E=n.readInt();S=CW[E]}l=n.readInt();let g=n.position,T=n.position+=l;return{type:IW[i&7],tableId:c,nodeId:o,get recordId(){return(0,Rl.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return T>g?(0,Rl.readKey)(e,g,T):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(E,A,w){if(i&nT||i&Wh&&!A)return ic(()=>E.decoder.decode(e.subarray(n.position,r)),E.rootStore);if(i&Wh&&w)return gy(E.getEntry(this.recordId),w,E)},getBinaryValue(){return i&(nT|Wh)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:m,originatingOperation:S}}catch(n){return Od.error("Reading audit entry error",n,e),{}}}var Rl,sT,JI,bW,zh,OW,Od,Ds,Ga,NW,Y_,XI,ege,eC,wW,rT,EW,nT,Wh,SW,ZI,TW,AW,RW,yW,tp,rge,RE,cc,lc,Tf,Af,ks,IW,CW,vc,Zi=Oe(()=>{Rl=require("ordered-binary"),sT=L(ne()),JI=L(Dt()),bW=L(v()),zh=L(tt()),OW=L(re());Yl();Od=L(j());Vp();ls();(0,sT.initSync)();Ds=Buffer.alloc(1024),Ga=new DataView(Ds.buffer,Ds.byteOffset,1024),NW={writeKey(e,t,r){return e===Sf?(t.set(Sf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Rl.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,Rl.readKey)(e,t,r)}},Y_={encoding:"binary",keyEncoder:NW},XI=(0,OW.convertToMS)((0,sT.get)(bW.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,ege=1e3,eC=new Float64Array(1),wW=new Uint8Array(eC.buffer),rT=1e4,EW=!1;a(iT,"openAuditStore");a(oT,"removeAuditEntry");a(gW,"updateLastRemoved");a(Tb,"getLastRemoved");a(tge,"setAuditRetention");nT=16,Wh=32,SW=1,ZI=2,TW=3,AW=4,RW=5,yW=6,tp=14,rge=15,RE=11,cc=512,lc=1024,Tf=2048,Af=4096,ks=8192,IW={put:SW|nT,[SW]:"put",delete:ZI,[ZI]:"delete",message:TW|nT,[TW]:"message",invalidate:AW|Wh,[AW]:"invalidate",patch:RW|Wh,[RW]:"patch",relocate:yW,[yW]:"relocate"},CW={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(Kl,"createAuditEntry");a(nge,"readAction");a(Rt,"readAuditEntry");vc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function nC(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=DW,sge(e.primaryStore,e.auditStore)):(c=PW,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{LW(PW[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=kl(t);let f=new rC(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function LW(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),MW(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Rt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=kl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,tC.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,tC.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d>-1?l=l.slice(0,d):l=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function sge(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=DW[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{LW(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function MW(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Dx(e){return e.nextTransaction||(nC({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),MW(e)),e.nextTransaction}var tC,PW,DW,rC,Ab=Oe(()=>{tC=L(j());vl();Fl();Zi();PW=Object.create(null),DW=Object.create(null);a(nC,"addSubscription");rC=class extends Mn{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;if(t){let 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(LW,"notifyFromTransactionData");a(sge,"listenToCommits");a(MW,"nextTransaction");a(Dx,"whenNextTransaction")});var RN={};Fe(RN,{EVICTED:()=>Jo,INVALIDATED:()=>cs,coerceType:()=>lT,makeTable:()=>dT,setServerUtilities:()=>fge});function dT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:m,evictionMS:S,audit:g,trackDeletes:T}=e,{attributes:E}=e;E||(E=[]);let A=vA(i,n,l),w,M,H={},k=Promise.resolve(),V,q,ae;for(let Y of E)(Y.assignCreatedTime||Y.name==="__createdtime__")&&(V=Y),(Y.assignUpdatedTime||Y.name==="__updatedtime__")&&(q=Y),Y.expiresAt&&(ae=Y),Y.isPrimaryKey&&(H=Y);let G,le=[],z=[],Ae=1,ge=2,Ce={},he={},Ht=864e5,kt,zt,lr,Ud=!1,Ka,DT=new Map,LT=new Map,Ct,Bd,xd=wd.get(Ms.CONFIG_PARAMS.REPLICATION_DATABASES);if(Array.isArray(xd)){for(let Y of xd)if(Y.name===c&&Y.replicateTo>=0){Bd=Y.replicateTo;break}}let MT=i.getRange({start:!1,end:!1}).constructor,dm=10,Hd=6;g&&Gd();class De extends qr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=E;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=V;static updatedTimeProperty=q;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return m}static dbisDB=f;static schemaDefined=u;static sourcedFrom(p,b){if(b&&(this.sourceOptions=b,(b.expiration||b.eviction||b.scanInterval)&&this.setTTLExpiration(b)),b?.intermediateSource)p.intermediateSource=!0,this.sources.unshift(p);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===p.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(p)}M=M||p.get&&(!p.get.reliesOnPrototype||p.prototype.get),w=w||p.load;let R=a(I=>{let D=this.sources;if(D=D.filter(B=>B.intermediateSource&&B[I]&&(!B[I].reliesOnPrototype||B.prototype[I])),D.length>0)if(D.length===1){let B=D[0];return(N,U,F)=>{if(N?.source!==B)return B[I](U,F,N)}}else return(B,N,U)=>{let F=[];for(let K of D){if(B?.source===K)break;F.push(K[I](N,U,B))}return Promise.all(F)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let O=a(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(D,B,N)=>{if(!D?.source)return y[I](B,N,D)}},"getApplyToCanonicalSource");Ce={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},he={put:R("put"),patch:R("patch"),delete:R("delete"),publish:R("publish"),invalidate:R("invalidate")};let C=y.shouldRevalidateEvents;return(async()=>{let I=!1,D,B=a(async(N,U)=>{let F=N.value,K=N.table?Ge[c][N.table]:De;if(c===Ms.SYSTEM_SCHEMA_NAME&&(N.table===Ms.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||N.table===Ms.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),N.id===void 0&&(N.id=F[K.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=p;let Z={residencyId:Vo(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId},x=await K.getResource(N.id,U,Z);switch(N.finished&&await N.finished,N.type){case"put":return C?x._writeInvalidate(Z):x._writeUpdate(F,!0,Z);case"patch":return C?x._writeInvalidate(Z):x._writeUpdate(F,!1,Z);case"delete":return x._writeDelete(Z);case"publish":return x._writePublish(F,Z);case"invalidate":return x._writeInvalidate(Z);case"relocate":return x._writeRelocate(Z);default:Ue.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=p.subscribe;N&&T==null&&(T=!0);let U={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},F=p.subscribeOnThisThread?p.subscribeOnThisThread((0,yl.getWorkerIndex)(),U):(0,yl.getWorkerIndex)()===0,K=N&&F&&await p.subscribe?.(U);if(K){let Z;for await(let x of K)try{if(!(x.type==="transaction"?x.writes[0]:x)){Ue.default.error?.("Bad subscription event",x);continue}if(x.source=p,x.type==="end_txn"){if(Z?.resolve(),x.localTime&&D!==x.localTime){if(x.remoteNodeIds?.length>0){let ie=[Symbol.for("seq"),x.remoteNodeIds[0]],ee=f.get(ie),W=ee?.nodes;W||(W=[]);for(let _e of x.remoteNodeIds.slice(1)){let Re=W.find(Le=>Le.id===_e);W=W.filter(Le=>Le.id!==_e||Le===Re),Re||(Re={id:_e,seqId:0},W.push(Re)),Re.seqId=Math.max(ee?.seqId??1,x.localTime),_e===Z?.nodeId&&(Re.lastTxnTime=x.timestamp)}let de=Math.max(ee?.seqId??1,x.localTime);Ue.default.trace?.("Received txn",c,new Date(de),new Date(x.localTime),x.remoteNodeIds),f.put(ie,{seqId:de,nodes:W})}D=x.localTime}x.onCommit&&Z?.committed.then(x.onCommit);continue}if(Z)if(x.beginTxn)Z.resolve();else{Z.write_promises.push(B(x,Z));continue}!x.timestamp&&x.version&&(x.timestamp=x.version);let te=At(x,()=>{if(x.type==="transaction"){let ie=[];for(let ee of x.writes)try{ie.push(B(ee,x))}catch(W){throw W.message+=" writing "+JSON.stringify(ee)+" of event "+JSON.stringify(x),W}return Promise.all(ie)}else if(x.type==="define_schema"){let ie=this.attributes.slice(0),ee;for(let W of x.attributes)ie.find(de=>de.name===W.name)||(ie.push(W),ee=!0);ee&&(it({table:s,database:c,attributes:ie,origin:"cluster"}),Qh.signalSchemaChange(new Jh.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return x.beginTxn?(Z=x,Z.write_promises=[B(x,x)],new Promise(ie=>{Z.resolve=()=>ie(Promise.all(Z.write_promises))})):B(x,x)});Z&&(Z.committed=te),I&&te&&!te?.waitingForUserChange&&(te.then(()=>Qh.signalUserChange(new Jh.UserEventMsg(process.pid))),te.waitingForUserChange=!0),x.onCommit&&(te?te.then(x.onCommit):x.onCommit())}catch(Me){Ue.default.error?.("error in subscription handler",Me)}}}catch(N){Ue.default.error?.(N)}})(),this}static get isCaching(){return M}static get shouldRevalidateEvents(){return this.prototype.get!==De.prototype.get}static getResource(p,b,R){let y=super.getResource(p,b,R);if(p!=null){wr(p);try{if(y.getRecord?.())return y;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let O=!R?.async||i.cache?.get?.(p),C=mt(b),I=C.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Dn(p,b,{transaction:I,ensureLoaded:R?.ensureLoaded},O,D=>{if(D?De._updateResource(y,D):y.#e=null,b.onlyIfCached&&b.noCacheStore){if(!y.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(R?.ensureLoaded){let B=fm(p,D,b,y);if(B)return C?.disregardReadTxn(),y.#i=!0,iC(B,N=>(De._updateResource(y,N),y))}return y})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(p)),O}}return y}static _updateResource(p,b){p.#r=b,p.#e=b?.value??null,p.#n=b?.version}ensureLoaded(){let p=fm(this.getId(),this.#r,this.getContext());if(p)return this.#i=!0,iC(p,b=>{this.#r=b,this.#e=b.value,this.#n=b.version})}static getNewId(){let p=H?.type;if(p==="String"||p==="ID")return super.getNewId();if(!Ct){let O=i.getEntry(Symbol.for("id_allocation")),C=O?.value,I;if(C&&C.nodeName===server.hostname&&(!hge(i)||C.pid===process.pid)){let D=C.start,B=C.end;I=D;for(let N of i.getKeys({start:B,end:D,limit:1,reverse:!0}))I=N}else C=y(O?.version??null),I=C.start;Ct=new BigInt64Array([BigInt(I)+1n]),Ct=new BigInt64Array(i.getUserSharedBuffer("id",Ct.buffer)),Ct.maxSafeId=C.end}let b=Number(Atomics.add(Ct,0,1n)),R=p==="Int"?512:1048576;if(b+R>=Ct.maxSafeId){let O=a(C=>{Ct.maxSafeId=b+(p==="Int"?1023:4194303);let I=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=C?void 0:i.useReadTransaction(),B=Number(Ct[0]);for(let F of i.getKeys({start:B+1,end:I,limit:1,transaction:D}))I=F;D?.done();let{value:N,version:U}=i.getEntry(Symbol.for("id_allocation"));if(Ct.maxSafeId<I){if(N.end>Ct.maxSafeId-100)return;Ue.default.info?.("New id allocation",b,Ct.maxSafeId,U),i.put(Symbol.for("id_allocation"),{start:N.start,end:Ct.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),U)}else{Ue.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ct.maxSafeId}, but id of ${I} detected`);let F=y(U);F.alreadyUpdated||Atomics.store(Ct,0,BigInt(F.start+1)),Ct.maxSafeId=F.end}},"updateEnd");b+R===Ct.maxSafeId?setImmediate(O):b+100>=Ct.maxSafeId&&(Ue.default.warn?.(`Synchronous id allocation required on table ${s}${p=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return b;function y(O){let C=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=C/4,D,B,N=!1,U,F;do{U=Math.floor(Math.random()*C),F={start:U,end:U+(p==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let K of i.getKeys({start:U,limit:1,reverse:!0}))D=K;B=C;for(let K of i.getKeys({start:U+1,end:C,limit:1}))B=K;I*=.875,I<1e3&&!N&&(N=!0,Ue.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${p==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,U,D,B,I))}while(!(I<B-U&&(I<U-D||D===0)));return i.transactionSync(()=>{let K=i.getEntry(Symbol.for("id_allocation"));return(K?.version??null)==O?(Ue.default.info?.("Allocated new id range",F),i.put(Symbol.for("id_allocation"),F,Date.now()),F):(Ue.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...K.value})})}}static setTTLExpiration(p){if(typeof p=="number")m=p*1e3,S||(S=0);else if(p&&typeof p=="object")m=p.expiration*1e3,S=(p.eviction||0)*1e3,Ht=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(m<0)throw new Error("Expiration can not be negative");Ht=Ht||(m+S)/4,$o()}static getResidencyRecord(p){return f.get([Symbol.for("residency_by_id"),p])}static setResidency(p){De.getResidency=p}static setResidencyById(p){De.getResidencyById=p}static getResidency(p,b,R){if(De.getResidencyById)return De.getResidencyById(p[t]);let y=Bd;if(b.replicateTo!=null){if(Array.isArray(b.replicateTo))return b.replicateTo.includes(server.hostname)?b.replicateTo:[server.hostname,...b.replicateTo];b.replicateTo>=0&&(y=b.replicateTo)}if(y>=0&&server.nodes){let O=[server.hostname];if(R)O.push(...R.slice(0,y));else{let C=server.nodes.map(B=>B.name),I=Math.floor(C.length*Math.random());O.push(...C.slice(I,I+y));let D=I+y-C.length;D>0&&O.push(...C.slice(0,D))}return O}}static enableAuditing(p=!0){g=p,p&&Gd(),De.audit=p}static coerceId(p){return p===""?null:lT(p,H)}static async dropTable(){delete Ge[c][s];for(let p of i.getRange({versions:!0,snapshot:!1,lazy:!0}))p.metadataFlags&ks&&p.value&&Xi(p.value);if(c===o){for(let p of E)f.remove(De.tableName+"/"+p.name),r[p.name]?.drop();f.remove(De.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await cT.default.remove(data_path),await cT.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Qh.signalSchemaChange(new Jh.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this.isCollection)return this.search(p);if(this.getId()===null){if(p?.conditions)return this.search(p);let b=De.getRecordCount();return{recordCount:b.recordCount,estimatedRecordRange:b.estimatedRange,records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:E}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(p,b){let R=Ya(p);if(R?.read){if(R.isSuperUser)return!0;let y=R.attribute_permissions,O=b?.select;if(y?.length>0||Ud&&O){if(b||(b={}),O){let C=y?.length>0&&sC(y,"read");b.select=O.map(I=>{let D=I.name||I;if(!C||C[D]){let B=lr[D]?.definition?.tableClass;if(B){if(I.name||(I={name:I}),!B.prototype.allowRead.call(null,p,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else b.select=y.filter(C=>C.read&&!lr[C.attribute_name]).map(C=>C.attribute_name);return b}else return!0}}allowUpdate(p,b){let R=Ya(p);if(R?.update){let y=R.attribute_permissions;if(y?.length>0){let O=sC(y,"update");for(let C in b)if(!O[C])return!1;for(let C of y){let I=C.attribute_name;!C.update&&!(I in b)&&(b[I]=this.getProperty(I))}}return Ll(this.getContext())}}allowCreate(p,b){if(this.isCollection){let R=Ya(p);if(R?.insert){let y=R.attribute_permissions;if(y?.length>0){let O=sC(y,"insert");for(let C in b)if(!O[C])return!1;return Ll(this.getContext())}else return Ll(this.getContext())}}else return this.allowUpdate(p,{})}allowDelete(p){return Ya(p)?.delete&&Ll(this.getContext())}update(p,b){if(!mt(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let y;return typeof p=="object"&&p&&(b?(Object.isFrozen(p)&&(p={...p}),this.#e={},this.#t=p):(y=this.#t,y&&(p=Object.assign(y,p)),this.#t=p)),this._writeUpdate(this.#t,b),this}addTo(p,b){if(typeof b=="number"||typeof b=="bigint")this.#s===UW?this.set(p,(+this.getProperty(p)||0)+b):(this.#s||this.update(),this.set(p,new Wp(b)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,b){if(typeof b=="number")return this.addTo(p,-b);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(p){this.#t=p}setRecord(p){this.#e=p}invalidate(){this._writeInvalidate()}_writeInvalidate(p){let b=this.getContext(),R=this.getId();wr(R),mt(this.getContext()).addWrite({key:R,store:i,invalidated:!0,entry:this.#r,before:Ce.invalidate?.bind(this,b,R),beforeIntermediate:he.invalidate?.bind(this,b,R),commit:a((O,C)=>{if(Wi(O,C,p?.nodeId)<=0)return;let I=null;for(let D in r)I||(I={}),I[D]=this.getProperty(D);Ue.default.trace?.(`Invalidating entry id: ${R}, timestamp: ${new Date(O).toISOString()}`),A(R,I,this.#r,O,cs,g,{user:b?.user,residencyId:p?.residencyId,nodeId:p?.nodeId},"invalidate")},"commit")})}_writeRelocate(p){let b=this.getContext(),R=this.getId();wr(R),mt(this.getContext()).addWrite({key:R,store:i,invalidated:!0,entry:this.#r,before:Ce.relocate?.bind(this,b,R),beforeIntermediate:he.relocate?.bind(this,b,R),commit:a((O,C)=>{if(Wi(O,C,p?.nodeId)<=0)return;let I=De.getResidencyRecord(p.residencyId),D=0,B=null,N=C?.value;if(I&&!I.includes(server.hostname)){for(let U in r)B||(B={}),B[U]=N(U);D=cs}else B=N;Ue.default.trace?.(`Relocating entry id: ${R}, timestamp: ${new Date(O).toISOString()}`),A(R,B,this.#r,O,D,g,{user:b.user,residencyId:p.residencyId,nodeId:p.nodeId,expiresAt:p.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(p,b){let R={previousResidency:this.getResidencyRecord(p.residencyId),isRelocation:!0},y=this.getResidency(b.value,R),O;if(y){if(!Array.isArray(y))throw new Error("Residency must be an array, but was: "+y);if(!y.includes(server.hostname))return;O=Vo(y)}let I=A(p.key,b.value,p,p.version,0,!0,{residencyId:O,expiresAt:b.expiresAt},"relocate",!1,null)}static evict(p,b,R){let y=this.Source,O;if(!((M||g)&&(!b||(O=i.getEntry(p),!O||!b)||O.version!==R))){if(M){if(i.hasLock(p,O.version))return;let C;for(let I in r)C||(C={}),C[I]=b[I];if(C)return A(p,C,O,R,Jo,null,null,null,!0)}if(i.ifVersion(p,R,()=>{Yi(p,b,null)}),g)return A(p,null,O,R,Jo,null,null,null,!0);ac(i,O??i.getEntry(p),R)}}lock(){throw new Error("Not yet implemented")}static operation(p,b){return p.table||=s,p.schema||=c,$W.operation(p,b)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,b,R){let y=this.getContext(),O=mt(y),C=this.getId();wr(C);let I=this.#r;this.#s=b?UW:lge;let D={key:C,store:i,entry:I,nodeName:y?.nodeName,validate:a(B=>{p||(p=this.#t),b||p&&Kp(this.#t===p?this:p)?y?.source||(O.checkOverloaded(),this.validate(p,!b),q&&(p[q.name]=q.type==="Date"?new Date(B):q.type==="String"?new Date(B).toISOString():B),b&&(t&&p[t]!==C&&(p[t]=C),V&&(I?.value?p[V.name]=I?.value[V.name]:p[V.name]=V.type==="Date"?new Date(B):V.type==="String"?new Date(B).toISOString():B),p=wc(p))):O.removeWrite(D)},"validate"),before:b?Ce.put?()=>Ce.put(y,C,p):null:Ce.patch?()=>Ce.patch(y,C,p):Ce.put?()=>Ce.put(y,C,wc(this)):null,beforeIntermediate:b?he.put?()=>he.put(y,C,p):null:he.patch?()=>he.patch(y,C,p):he.put?()=>he.put(y,C,wc(this)):null,commit:a((B,N,U)=>{if(U){if(y&&N?.version>(y.lastModified||0)&&(y.lastModified=N.version),this.#r=N,N?.value&&N.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");b||(this.#e=N?.value??null)}this.#t=void 0,this.#n=B;let F=N?.value,K=p;this.#s=0;let Z=Wi(B,N,R?.nodeId),x;if(Z<=0)if(g){let W=N.localTime,de=N.version;Ue.default.trace?.("Applying CRDT update to record with id: ",C,"applying later update:",de);let _e=[];for(;W>B||de>=B&&W>0;){let Re=l.get(W);if(!Re)break;let Le=Rt(Re);if(de=Le.version,de>=B){if(de===B){if(Z=Wi(B,{version:de,localTime:W},R?.nodeId),Z===0)return;if(Z>0)continue}if(Le.type==="patch")_e.push(Le),x=p;else if(Le.type==="put"||Le.type==="delete")return}W=Le.previousLocalTime}_e.sort((Re,Le)=>Re.version-Le.version);for(let Re of _e){let Le=Re.getValue(i);if(K=$p(K,Le,b),Ue.default.debug?.("Rebuilding update with future patch:",K),!K)return}}else{if(b)return;K=$p(K,F,b),Ue.default.debug?.("Rebuilding update without audit:",K)}let Me;if(b?Me=K:(this.#e=F,Me=wc(this,K)),this.#e=Me,Me&&Me.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let te;if(R?.residencyId!=null)te=R.residencyId;else{I?.residencyId&&(y.previousResidency=De.getResidencyRecord(I.residencyId));let W=De.getResidency(Me,y);if(W){if(!Array.isArray(W))throw new Error("Residency must be an array, got: "+W);W.includes(server.hostname)||W.push(server.hostname)}te=Vo(W)}b||(x=p);let ie=y?.expiresAt??(m?m+Date.now():-1);Ue.default.trace?.(`Saving record with id: ${C}, timestamp: ${new Date(B).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${N?", replaces entry from: "+new Date(N.version).toISOString():", new entry"}`,Me),Yi(C,F,Me);let ee=b?"put":"patch";A(C,Me,N,B,0,g,{user:y?.user,residencyId:te,expiresAt:ie,nodeId:R?.nodeId,originatingOperation:y?.originatingOperation},ee,!1,x),y.expiresAt&&$o()},"commit")};O.addWrite(D)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this.isCollection){for await(let b of this.search(p))(await De.getResource(b[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this.#e?this._writeDelete(p):!1}_writeDelete(p){let b=mt(this.getContext()),R=this.getId();wr(R);let y=this.getContext();return b.addWrite({key:R,store:i,entry:this.#r,nodeName:y?.nodeName,before:Ce.delete?.bind(this,y,R),beforeIntermediate:he.delete?.bind(this,y,R),commit:a((O,C,I)=>{let D=C?.value;I&&(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),De._updateResource(this,C)),!(Wi(O,C,p?.nodeId)<=0)&&(Yi(this.getId(),D),Ue.default.trace?.(`Deleting record with id: ${R}, txn timestamp: ${new Date(O).toISOString()}`),g||T?(A(R,null,this.#r,O,0,g,{user:y?.user,nodeId:p?.nodeId},"delete"),g||$o()):ac(i,C))},"commit")}),!0}search(p){let b=this.getContext(),R=mt(b);if(!p)throw new Error("No query provided");let y=p.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this.getId()&&(y=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(y));let O,C={};function I(W,de){let _e;switch(de){case"and":case void 0:if(W.length<1)throw new Error('An "and" operator requires at least one condition');_e=!0;break;case"or":if(W.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+de)}for(let Re of W){if(Re.conditions){Re.conditions=I(Re.conditions,Re.operator);continue}let Le=Re[0]??Re.attribute,Ze=Le==null?H:mi(E,Le);if(Ze)(Ze.type||tA[Re.comparator])&&(Re[1]===void 0?Re.value=B(Re.value,Ze):Re[1]=B(Re[1],Ze));else if(Le!=null)throw(0,Or.handleHDBError)(new Error,`${Le} is not a defined attribute`,404);if(Re.chainedConditions)if(Re.chainedConditions.length===1&&(!Re.operator||Re.operator=="and")){let kr=Re.chainedConditions[0],Ir,vs;if(kr.comparator==="gt"||kr.comparator==="greater_than"||kr.comparator==="ge"||kr.comparator==="greater_than_equal"?(Ir=Re,vs=kr):(Ir=kr,vs=Re),Ir.comparator!=="lt"&&Ir.comparator!=="less_than"&&Ir.comparator!=="le"&&Ir.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Se=vs.comparator==="ge"||vs.comparator==="greater_than_equal",Tt=Ir.comparator==="le"||Ir.comparator==="less_than_equal";Re.comparator=(Se?"ge":"gt")+(Tt?"le":"lt"),Re.value=[vs.value,Ir.value]}else throw new Error("Multiple chained conditions are not currently supported")}return W}a(I,"prepareConditions");function D(W,de){if(p.enforceExecutionOrder)return W;for(let _e of W)_e.conditions&&(_e.conditions=D(_e.conditions,_e.operator));return W.length>1&&de!=="or"?(0,qW.sortBy)(W,Mm(De)):W}a(D,"orderConditions");function B(W,de){return Array.isArray(W)?W.map(_e=>lT(_e,de)):lT(W,de)}a(B,"coerceTypedValues");let N=p.operator;(y.length>0||N)&&(y=I(y,N));let U=typeof p.sort=="object"&&p.sort,F;if(U&&N!=="or"){let W=U.attribute;if(W==null)throw new Or.ClientError("Sort requires an attribute");if(O=y.find(de=>Hl(de.attribute)===Hl(W)),!O){let de=mi(E,W);if(!de)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(W)?W.join("."):W} is not a defined attribute`,404);if(de.indexed)O={attribute:W,comparator:"sort"},y.push(O);else if(y.length===0&&!p.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(W)?W.join("."):W} is not indexed and not combined with any other conditions`,404)}O&&(O.descending=!!U.descending)}y=D(y,N),U&&(O&&y[0]===O?U.next&&(F={dbOrderedAttribute:U.attribute,attribute:U.next.attribute,descending:U.next.descending,next:U.next.next}):(O&&y.splice(y.indexOf(O),1),F=U));let K=p.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:y,operator:N,postOrdering:F,selectApplied:!!K};let Z=R.useReadTxn(),x=rA(y,N,De,Z,p,b,(W,de)=>Fd(W,K,b,Z,de),C),Me=p.ensureLoaded!==!1;F||(x=ee(x));let te=De.transformEntryForSelect(K,b,Z,C,Me,!0),ie=De.transformToOrderedSelect(x,K,F,Z,b,te);function ee(W){return p.offset||p.limit!==void 0?W.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):W}return a(ee,"applyOffset"),F&&(ie=ee(ie)),ie.onDone=()=>{ie.onDone=null,R.doneReadTxn()},ie.selectApplied=!0,ie.getColumns=()=>{if(K){let W=[];for(let de of K)de==="*"?W.push(...E.map(_e=>_e.name)):W.push(de.name||de);return W}return E.filter(W=>!W.computed&&!W.relationship).map(W=>W.name)},ie}static transformToOrderedSelect(p,b,R,y,O,C){let I=new MT;if(R){p=Fd(p,b,y,O,null);let D;I.iterate=function(){let N,U=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),F,K=R.dbOrderedAttribute,Z,x,Me=!0;function te(ee){let W=ee.next&&te(ee.next),de=ee.descending;return(_e,Re)=>{let Le=Dl(_e,ee.attribute,y),Ze=Dl(Re,ee.attribute,y),kr=de?(0,bl.compareKeys)(Ze,Le):(0,bl.compareKeys)(Le,Ze);return kr===0?W?.(_e,Re)||0:kr}}a(te,"createComparator");let ie=te(R);return{async next(){let ee;if(N)if(ee=N.next(),ee.done){if(F)return I.onDone&&I.onDone(),ee}else return{value:await C.call(this,ee.value)};D=[],Z&&D.push(Z);do if(ee=await U.next(),ee.done){if(F=!0,D.length)break;return I.onDone&&I.onDone(),ee}else{let W=ee.value;if(W?.then&&(W=await W),K){let de=Dl(W,K,y);if(Me)Me=!1,x=de;else if(de!==x){x=de,Z=W;break}}D.push(W)}while(!0);return R.isGrouped,D.sort(ie),N=D[Symbol.iterator](),ee=N.next(),ee.done?(I.onDone&&I.onDone(),ee):{value:await C.call(this,ee.value)}},return(){I.onDone&&I.onDone(),U.return()},throw(){I.onDone&&I.onDone(),U.throw()}}};let B=a(N=>{if(typeof b=="object"&&Array.isArray(N.attribute))for(let U=0;U<b.length;U++){let F=b[U],K;if(F.name===N.attribute[0]){for(K=F.sort||(F.sort={});K.next;)K=K.next;K.attribute=N.attribute.slice(1),K.descending=N.descending}else F===N.attribute[0]&&(b[U]=K={name:F,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&B(N.next)},"applySortingOnSelect");B(R)}else I.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),I=I.map(function(D){try{let B=C.call(this,D);return typeof B?.catch=="function"?B.catch(N=>{throw N.partialObject={[t]:D.key},N}):B}catch(B){throw B.partialObject={[t]:D.key},B}});return I}static transformEntryForSelect(p,b,R,y,O,C){if(p&&(p===t||p?.length===1&&p[0]===t&&Array.isArray(p))){let N=a(U=>(b?.transaction?.stale&&(b.transaction.stale=!1),U?.key??U),"transform");return p===t?N:p.asArray?U=>[N(U)]:U=>({[t]:N(U)})}let I;O&&M&&!(typeof p=="string"?[p]:p)?.every(N=>{let U;return typeof N=="object"?U=N.name:U=N,r[U]||U===t})&&(I=!0);let D,B=a(function(N){let U;if(b?.transaction?.stale&&(b.transaction.stale=!1),N!=null){if(U=N.value||N.deref?.()?.value,!U&&(N.key===void 0||N.deref)||N.metadataFlags&cs){if(N.metadataFlags&cs&&b.replicateFrom===!1&&C&&N.residencyId)return $a.SKIP;if(N=Dn(N.key??N,b,{transaction:R,lazy:p?.length<4,ensureLoaded:O},this?.isSync,F=>F),N?.then)return N.then(B.bind(this));U=N?.value}if(I&&N?.metadataFlags&(cs|Jo)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(b.onlyIfCached&&b.noCacheStore)return{[t]:N.key,message:"This entry has expired"};let F=fm(N.key??N,N,b);if(F?.then)return F.then(B)}}if(U==null)return C?$a.SKIP:U;if(p&&!(p[0]==="*"&&p.length===1)){let F,K=a((x,Me)=>{let te;typeof x=="object"?te=x.name:te=x;let ie=lr?.[te],ee;if(ie){let W=y?.[te];if(W)if(W.hasMappings){let _e=ie.from?U[ie.from]:Hl(N.key);ee=W.get(_e),ee||(ee=[])}else ee=W.fromRecord?.(U);else ee=ie(U,b,N);let de=a(_e=>{if(_e&&typeof _e=="object"){let Re=ie.definition?.tableClass||De;D||(D={});let Le=D[te]||(D[te]=Re.transformEntryForSelect(te===x?null:x.select||(Array.isArray(x)?x:null),b,R,W,O));if(Array.isArray(_e)){let Ze=[],kr=Re.transformToOrderedSelect(_e,x.select,typeof x.sort=="object"&&x.sort,b,R,Le)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ir=a(Se=>{for(;!Se.done;){if(Se?.then)return Se.then(Ir);Ze.push(Se.value),Se=kr.next()}Me(Ze,te)},"nextValue"),vs=Ir(kr.next());vs&&(F||(F=[]),F.push(vs));return}else if(_e=Le.call(this,_e),_e?.then){F||(F=[]),F.push(_e.then(Ze=>Me(Ze,te)));return}}Me(_e,te)},"handleResolvedValue");ee?.then?(F||(F=[]),F.push(ee.then(de))):de(ee);return}else ee=U[te],ee&&typeof ee=="object"&&te!==x&&(ee=De.transformEntryForSelect(x.select||x,b,R,null)({value:ee}));Me(ee,te)},"selectAttribute"),Z;if(typeof p=="string")K(p,x=>{Z=x});else if(Array.isArray(p))if(p.asArray)Z=[],p.forEach((x,Me)=>{x==="*"?p[Me]=U:K(x,te=>Z[Me]=te)});else{Z={};let x=p.forceNulls;for(let Me of p)if(Me==="*")for(let te in U)Z[te]=U[te];else K(Me,(te,ie)=>{te===void 0&&x&&(te=null),Z[ie]=te})}else throw new Or.ClientError("Invalid select"+p);return F?Promise.all(F).then(()=>Z):Z}return U},"transform");return B}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||it({table:s,database:c,schemaDefined:u,attributes:E,audit:!0}),p||(p={});let b=!p.rawEvents,R=[],y=this,O=nC(De,this.getId()??null,function(I,D,B,N){try{let U=D.getValue?.(i,b),F=D.type;if(!U&&F==="patch"&&b){let Z=i.getEntry(I);Z?.version===D.version?U=Z.value:U=D.getValue?.(i,!0,B),F="put"}let K={id:I,localTime:B,value:U,version:D.version,type:F,beginTxn:N};R?R.push(K):this.send(K)}catch(U){Ue.default.error?.(U)}},p.startTime||0,p),C=(async()=>{this.isCollection&&(O.includeDescendants=!0,p.onlyChildren&&(O.onlyChildren=!0)),p.supportsTransactions&&(O.supportsTransactions=!0);let I=this.getId(),D=p.previousCount;D>1e3&&(D=1e3);let B=p.startTime;if(this.isCollection){if(B){if(D)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:U}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let F=Rt(U);if(F.tableId!==n)continue;let K=F.recordId;if(I==null||kW(I,K)){let Z=F.getValue(i,b,N);if(O.send({id:K,localTime:N,value:Z,version:F.version,type:F.type}),O.queue?.length>xW&&await O.waitForDrain()===!1)return}O.startTime=N}}else if(D){let N=[];for(let{key:U,value:F}of l.getRange({start:"z",end:!1,reverse:!0}))try{let K=Rt(F);if(K.tableId!==n)continue;let Z=K.recordId;if(I==null||kW(I,Z)){let x=K.getValue(i,b,U);if(N.push({id:Z,localTime:U,value:x,version:K.version,type:K.type}),--D<=0)break}}catch(K){Ue.default.error("Error getting history entry",U,K)}for(let U=N.length;U>0;)O.send(N[--U]);N[0]&&(O.startTime=N[0].localTime)}else if(!p.omitCurrent){for(let{key:N,value:U,version:F,localTime:K}of i.getRange({start:I??!1,end:I==null?void 0:[I,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(U&&(O.send({id:N,localTime:K,value:U,version:F,type:"put"}),O.queue?.length>xW&&await O.waitForDrain()===!1))return}}else{D&&!B&&(B=0);let N=this.#r?.localTime;if(N===MA&&(i.cache?.delete(I),this.#r=i.getEntry(I),Ue.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),Ue.default.trace?.("Subscription from",B,"from",I,N),B<N){let U=[],F=N;do{let K=l.get(F);if(K){p.omitCurrent=!0;let Z=Rt(K),x=Z.getValue(i,b,F);b&&(Z.type="put"),U.push({id:I,value:x,localTime:F,...Z}),F=Z.previousLocalTime}else break;D&&D--}while(F>B&&D!==0);for(let K=U.length;K>0;)O.send(U[--K]);O.startTime=N}!p.omitCurrent&&this.doesExist()&&O.send({id:I,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of R)O.send(N);R=null})();return p.listener&&O.on("data",p.listener),O}static subscribeOnThisThread(p,b){return p===0||b?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(p,b){this._writePublish(p,b)}_writePublish(p,b){let R=mt(this.getContext()),y=this.getId()||null;y!=null&&wr(y);let O=this.getContext();R.addWrite({key:y,store:i,entry:this.#r,nodeName:O?.nodeName,validate:a(()=>{O?.source||(R.checkOverloaded(),this.validate(p))},"validate"),before:Ce.publish?.bind(this,O,y,p),beforeIntermediate:he.publish?.bind(this,O,y,p),commit:a((C,I,D)=>{I===void 0&&T&&!g&&$o(),Ue.default.trace?.(`Publishing message to id: ${y}, timestamp: ${new Date(C).toISOString()}`),A(y,I?.value??null,I,I?.version||C,0,!0,{user:O?.user,residencyId:b?.residencyId,expiresAt:O?.expiresAt,nodeId:b?.nodeId},"message",!1,p)},"commit")})}validate(p,b){let R,y=a((O,C,I)=>{if(C.type&&O!=null)if(b&&O.__op__&&(O=O.value),C.properties){typeof O!="object"&&(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be an object${C.type?" ("+C.type+")":""}`);let D=C.properties;for(let B=0,N=D.length;B<N;B++){let U=D[B],F=y(O[U.name],U,I+"."+U.name);F&&(O[U.name]=F)}if(C.sealed&&O!=null&&typeof O=="object")for(let B in O)D.find(N=>N.name===B)||(R||(R=[])).push(`Property ${B} is not allowed within object in property ${I}`)}else switch(C.type){case"Int":(typeof O!="number"||O>>0!==O)&&(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(D=>typeof D=="string")||(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a string`);break;case"Boolean":typeof O!="boolean"&&(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a Buffer or Uint8Array`);break;case"Blob":O instanceof Ei||(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a Blob`);break;case"array":if(Array.isArray(O)){if(C.elements)for(let D=0,B=O.length;D<B;D++){let N=O[D],U=y(N,C.elements,I+"[*]");U&&(O[D]=U)}}else(R||(R=[])).push(`Value ${Ls(O)} in property ${I} must be a Buffer or Uint8Array`);break}C.nullable===!1&&O==null&&(R||(R=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let O=0,C=E.length;O<C;O++){let I=E[O];if(!(I.relationship||I.computed)&&(!b||I.name in p)){let D=y(p[I.name],I,I.name);D&&(p[I.name]=D)}}if(d)for(let O in p)E.find(C=>C.name===O)||(R||(R=[])).push(`Property ${O} is not allowed`);if(R)throw new Or.ClientError(R.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return M?!!this.#i:void 0}static async addAttributes(p){let b=E.slice(0);for(let R of p){if(!R.name)throw new Or.ClientError("Attribute name is required");if(R.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,GW.validateAttribute)(R.name),b.push(R)}return it({table:s,database:c,schemaDefined:u,attributes:b}),De.indexingOperation}static async removeAttributes(p){let b=E.filter(R=>!p.includes(R.name));return it({table:s,database:c,schemaDefined:u,attributes:b}),De.indexingOperation}static getSize(){let p=i.getStats();return(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getAuditSize(){let p=l?.getStats();return p&&(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getStorageStats(){let p=i.env.path,b=cT.default.statfsSync(p);return{available:b.bavail*b.bsize,free:b.bfree*b.bsize,size:b.blocks*b.bsize}}static getRecordCount(p){let b=i.getStats().entryCount,R=1e3/2,y=performance.now(),O=Math.floor(b/2),C=p?.exactCount,I=0,D=0,B;for(let{value:N}of i.getRange({start:!0,lazy:!0}))if(N!=null&&I++,D++,!C&&D<O&&performance.now()-y>R){B=D;break}if(B){let N=I;I=0;for(let{value:ee}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:B}))ee!=null&&I++;let U=B*2,F=(I+N)/U,K=Math.pow((I-N+1)/B/2,2)+F*(1-F)/U,Z=Math.max(Math.sqrt(K)*b,1),x=Math.round(F*b),Me=Math.max(x-1.96*Z,I+N),te=Math.min(x+1.96*Z,b),ie=Math.pow(10,Math.round(Math.log10(Z)));return ie>x&&(ie=ie/10),I=Math.round(x/ie)*ie,{recordCount:I,estimatedRange:[Math.round(Me),Math.round(te)]}}return{recordCount:I}}static updatedAttributes(){lr=this.propertyResolvers={$id:a((p,b,R)=>({value:R.key}),"$id"),$updatedtime:a((p,b,R)=>R.version,"$updatedtime"),$record:a((p,b,R)=>R?{value:p}:p,"$record")};for(let p of this.attributes){p.resolve=null;let b=p.relationship,R=p.computed;if(b)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),R&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Ud=!0,b.to)p.elements?.definition?(lr[p.name]=p.resolve=(y,O,C)=>{let I=y[b.from?b.from:t],D=p.elements.definition.tableClass;return C?xl({attribute:b.to,value:I},mt(O).getReadTxn(),!1,D,!1).asArray:D.search([{attribute:b.to,value:I}],O).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,b.from&&(p.resolve.from=b.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(b.from){let y=p.definition||p.elements?.definition;y?(lr[p.name]=p.resolve=(O,C,I)=>{let D=O[b.from];if(D!==void 0){if(p.elements){let B,N=D?.map(U=>{let F=I?y.tableClass.primaryStore.getEntry(U,{transaction:mt(C).getReadTxn()}):y.tableClass.get(U,C);return F?.then&&(B=!0),F});return b.filterMissing?B?Promise.all(N).then(U=>U.filter(FW)):N.filter(FW):B?Promise.all(N):N}return I?y.tableClass.primaryStore.getEntry(D,{transaction:mt(C).getReadTxn()}):y.tableClass.get(D,C)}},p.set=(O,C)=>{if(Array.isArray(C)){let I=C.map(D=>D.getId?.()||D[y.tableClass.primaryKey]);O[b.from]=I}else{let I=C.getId?.()||C[y.tableClass.primaryKey];O[b.from]=I}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=b.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`);else R&&(typeof R.from=="function"&&this.setComputedAttribute(p.name,R.from),lr[p.name]=p.resolve=(y,O,C)=>{let I=typeof R.from=="string"?y[R.from]:y,D=this.userResolvers[p.name];if(D)return D(I,O,C);Ue.default.warn(`Computed attribute "${p.name}" does not have a function assigned to it. Please use setComputedAttribute('${p.name}', resolver) to assign a resolver function.`),this.userResolvers[p.name]=()=>{}})}zp(this,this)}static setComputedAttribute(p,b){let R=mi(E,p);if(!R){console.error(`The attribute "${p}" does not exist in the table "${s}"`);return}if(!R.computed){console.error(`The attribute "${p}" is not defined as computed in the table "${s}"`);return}this.userResolvers[p]=b}static async deleteHistory(p=0,b=!1){let R;for(let{key:y,value:O}of l.getRange({start:0,end:p}))await Nd(),Rt(O).tableId===n&&(R=oT(l,y,O));if(b)for(let y of i.getRange({start:0,versions:!0})){let{key:O,value:C,localTime:I}=y;await Nd(),C===null&&I<p&&(R=ac(i,y))}await R}static async*getHistory(p=0,b=1/0){for(let{key:R,value:y}of l.getRange({start:p||1,end:b})){await Nd();let O=Rt(y);O.tableId===n&&(yield{id:O.recordId,localTime:R,version:O.version,type:O.type,value:O.getValue(i,!0,R),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(p){let b=[];if(p==null)throw new Error("An id is required");let R=i.getEntry(p);if(!R)return b;let y=R.localTime;if(!y)throw new Error("The entry does not have a local audit time");let O=0;do{await Nd();let C=l.get(y);if(C){let I=Rt(C);b.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(O<1e3&&y);return b.reverse()}static cleanup(){G?.remove()}}De.updatedAttributes();let kd=De.prototype;return m&&De.setTTLExpiration(m/1e3),ae&&_m(),De;function Yi(Y,p,b){let R;for(let y in r){let O=r[y],C=O.isIndexing,I=lr[y],D=b&&(I?I(b):b[y]),B=p&&(I?I(p):p[y]);if(D===B&&!C)continue;R=!0;let N=O.indexNulls,U=(0,jh.getIndexedValues)(D,N),F=(0,jh.getIndexedValues)(B,N);if(F?.length>0){let K=new Set(F);if(U=U?U.filter(Z=>{if(K.has(Z))K.delete(Z);else return!0}):[],F=Array.from(K),(F.length>0||U.length>0)&&vW){let Z=F.concat(U).map(x=>({key:x,value:Y}));O.prefetch(Z,HW)}for(let Z=0,x=F.length;Z<x;Z++)O.remove(F[Z],Y)}else U?.length>0&&vW&&O.prefetch(U.map(K=>({key:K,value:Y})),HW);if(U)for(let K=0,Z=U.length;K<Z;K++)O.put(U[K],Y)}return R}a(Yi,"updateIndices");function wr(Y){switch(typeof Y){case"number":return!0;case"string":if(Y.length<659)return!0;if(Y.length>BW)throw new Error("Primary key size is too large: "+Y.length);break;case"object":if(Y===null)throw new Error("Invalid primary key of null");break;case"bigint":if(Y<2n**64n&&Y>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Y)}if((0,bl.writeKey)(Y,uge,0)>BW)throw new Error("Primary key size is too large: "+Y.length);return!0}a(wr,"checkValidId");function Dn(Y,p,b,R,y){if(De.getResidencyById&&b.ensureLoaded&&p?.replicateFrom!==!1){let C=De.getResidencyById(Y);if(C&&!C.includes(server.hostname)&&w)return w({key:Y,residency:C}).then(y)}let O=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),b.transaction?.isDone)return y(null,Y);let C=i.getEntry(Y,b);return C?.residencyId&&C.metadataFlags&cs&&w&&b.ensureLoaded&&p?.replicateFrom!==!1?w(C).then(I=>y(I,Y),I=>(Ue.default.error?.("Error loading remote record",Y,C,b,I),y(null,Y))):(C&&p&&(C?.version>(p.lastModified||0)&&(p.lastModified=C.version),C?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=C.localTime)),y(C,Y))},"whenPrefetched");return R?O():Ae>0?(Ae--,O()):new Promise((C,I)=>{Ae===0?(Ae--,i.prefetch([Y],()=>{D(),B()})):(le.push(Y),z.push(B),le.length>Hd&&(Ae--,D()));function D(){if(le.length>0){let N=z;i.prefetch(le,()=>{Ae===-1?D():Ae++;for(let U of N)U()}),le=[],z=[],ge>2&&ge--}else Ae=ge,ge<dm&&ge++}a(D,"prefetch");function B(){try{C(O())}catch(N){I(N)}}a(B,"load")})}a(Dn,"loadLocalRecord");function Ya(Y){if(!Y?.role)return;let p=Y.role.permission;if(p.super_user)return dge;let b=p[c],R,y=b?.tables;if(y)return y[s];if(c==="data"&&(R=p[s])&&!R.tables)return R}a(Ya,"getTablePermissions");function fm(Y,p,b,R){if(M){let y=!1;if(b.noCache?y=!0:(p?(!p.value||p.metadataFlags&(cs|Jo)||p.expiresAt!=null&&p.expiresAt<Date.now())&&(y=!0):y=!0,Wn(!y,"cache-hit",s)),y){let O=qd(Y,p,b).then(C=>(C?.value&&C?.value.getRecord?.()&&Ue.default.error?.("Can not assign a record that is already a resource"),b&&(C?.version>(b.lastModified||0)&&(b.lastModified=C.version),b.lastRefreshed=Date.now()),C));if(b?.onlyIfCached||p?.value&&R?.allowStaleWhileRevalidate?.(p,Y)){if(O.catch(C=>Ue.default.warn?.(C)),b?.onlyIfCached&&!R.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return O}}else if(p?.value&&p.expiresAt!=null&&p.expiresAt<Date.now())return De.evict(p.key,p.value,p.version),p.value=null,{then(y){return y(p)}}}a(fm,"ensureLoadedFromSource");function mt(Y){let p=Y?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let b=p.next;if(!b)return p=p.next=new Ja,p.lmdbDb=i,p;p=b}while(!0)}else return new Pm}a(mt,"txnForContext");function Dl(Y,p,b){if(!Y)return;let R=Y.value||i.getEntry(Y.key)?.value;if(typeof p=="object"){let O=lr,C=R;for(let I=0,D=p.length;I<D;I++){let B=p[I],N=O?.[B];C=N&&C?N(C,b,!0)?.value:C?.[B],O=N?.definition?.tableClass?.propertyResolvers}return C}let y=lr[p];return y?y(R,b):R[p]}a(Dl,"getAttributeValue");function Fd(Y,p,b,R,y){let O=y?.length,C={transaction:R,lazy:O>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},I;function D(B,N){let U=B?.value;if(!U)return $a.SKIP;for(let F=0;F<O;F++)if(!I?.includes(F)&&!y[F](U,B))return $a.SKIP;return N!==void 0&&(B.key=N),B}if(a(D,"processEntry"),O>0||!Y.hasEntries){let B=Y.map(N=>{if(I=null,typeof N=="object"&&N?.key!==void 0)return O>0?D(N):N;if(N==null)return $a.SKIP;for(let U=0;U<O;U++){let K=y[U].idFilter;if(K){if(!K(N))return $a.SKIP;I||(I=[]),I.push(U)}}return Dn(N,b,C,!1,D)});return Array.isArray(Y)&&(B=B.filter(N=>N!==$a.SKIP)),B.hasEntries=!0,B}return Y}a(Fd,"transformToEntries");function Wi(Y,p,b=server.replication?.getThisNodeId(l)){if(Y<=p?.version){if(p?.version===Y&&b!==void 0){let R=server.replication?.exportIdMapping(l),y=p.localTime,O=y&&l.get(y);if(O){let C,I,D=Rt(O);for(let B in R)R[B]===b&&(C=B),R[B]===D.nodeId&&(I=B);if(C>I)return 1;if(C===I)return 0}}return-1}return 1}a(Wi,"precedesExistingVersion");async function qd(Y,p,b){let R=p?.metadataFlags,y=p?.version,O,C;if(!i.attemptLock(Y,y,()=>{clearTimeout(C);let N=i.getEntry(Y);!N||!N.value||N.metadataFlags&(cs|Jo)?O(qd(Y,i.getEntry(Y),b)):O(N)}))return new Promise(N=>{O=N,C=setTimeout(()=>{i.unlock(Y,y)},cge)});let I=p?.value,D={requestContext:b,replacingRecord:I,replacingEntry:p,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:b?.resourceCache},B=b?.responseHeaders;return new Promise((N,U)=>{let F;iC(At(D,async K=>{let Z=performance.now(),x,Me,te;try{for(let de of De.sources)if(de.get&&(!de.get.reliesOnPrototype||de.prototype.get)){if(de.available?.(p)===!1)continue;if(D.source=de,x=await de.get(Y,D),x)break}te=R&cs;let ee=D.lastModified||te&&y;Me=te||ee>y||!I,ee||(ee=(0,jh.getNextMonotonicTime)());let W=performance.now()-Z;if(mr(W,"cache-resolution",s,null,"success"),B&&gg(B,"Server-Timing",`cache-resolve;dur=${W.toFixed(2)}`,!0),K.timestamp=ee,m&&D.expiresAt==null&&(D.expiresAt=Date.now()+m),x){if(typeof x!="object")throw new Error("Only objects can be cached and stored in tables");if(x.status>0&&x.headers)if(x.status>=300)if(x.status===304)x=I,ee=y;else throw new Or.ServerError(x.body||"Error from source",x.status);else x=x.body;typeof x.toJSON=="function"&&(x=x.toJSON()),t&&x[t]!==Y&&(x[t]=Y)}F=!0,N({key:Y,version:ee,value:x})}catch(ee){ee.message+=` while resolving record ${Y} for ${s}`,I&&((ee.code==="ECONNRESET"||ee.code==="ECONNREFUSED"||ee.code==="EAI_AGAIN")&&!b?.mustRevalidate||b?.staleIfError&&(ee.statusCode===500||ee.statusCode===502||ee.statusCode===503||ee.statusCode===504))?(N({key:Y,version:y,value:I}),Ue.default.trace?.(ee.message,"(returned stale record)")):U(ee);let W=performance.now()-Z;mr(W,"cache-resolution",s,null,"fail"),B&&gg(B,"Server-Timing",`cache-resolve;dur=${W.toFixed(2)}`,!0),D.transaction.abort();return}if(b?.noCacheStore||D.noCacheStore){D.transaction.abort();return}mt(D).addWrite({key:Y,store:i,entry:p,nodeName:"source",commit:a((ee,W)=>{if(W?.version!==y)return;let de=Yi(Y,I,x);x?(he.put?.(D,Y,x),Ue.default.trace?.(`Writing resolved record from source with id: ${Y}, timestamp: ${new Date(ee).toISOString()}`),A(Y,x,W,ee,0,g&&Me||null,{user:D?.user,expiresAt:D.expiresAt},"put",!!te)):W&&(he.delete?.(D,Y),Ue.default.trace?.(`Deleting resolved record from source with id: ${Y}, timestamp: ${new Date(ee).toISOString()}`),g||T?A(Y,null,W,ee,0,g&&Me||null,{user:D?.user},"delete",!!te):ac(i,W,y))},"commit")})}),()=>{i.unlock(Y,y)},K=>{i.unlock(Y,y),F&&Ue.default.error?.("Error committing cache update",K)})})}a(qd,"getFromSource");function Ll(Y){if(!Y||Y.user?.role?.permission?.super_user)return!0;if(Y.replicateTo)throw new Or.ClientError("Can not specify replication parameters without super user permissions",403);if(Y.replicatedConfirmation)throw new Or.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Ll,"checkContextPermissions");function $o(){if(Ht!==kt&&(kt=Ht,(0,yl.getWorkerIndex)()===(0,yl.getWorkerCount)()-1)){if(zt&&clearTimeout(zt),!Ht)return;let Y=new Date;Y.setMonth(0),Y.setDate(1),Y.setHours(0),Y.setMinutes(0),Y.setSeconds(0);let p=Math.ceil((Date.now()-Y.getTime())/Ht)*Ht+Y.getTime(),b=a(R=>{Ue.default.trace?.(`Scheduled next cleanup scan at ${new Date(R)}ms`),zt=setTimeout(()=>k=k.then(async()=>{if(b(Math.max(R+Ht,Date.now())),i.rootStore.status!=="open"){clearTimeout(zt);return}let y=50,O=new Array(y),C=0;Ue.default.info?.(`Starting cleanup scan for ${s}`);try{let I=0;for(let D of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:B,value:N,version:U,expiresAt:F}=D,K;N===null&&!g&&U+age<Date.now()?K=ac(i,D,U):F!=null&&F+S<Date.now()&&(K=De.evict(B,N,U),I++),K&&(await O[C],O[C]=K.catch(Z=>{Ue.default.error?.("Cleanup error",Z)}),++C>=y&&(C=0)),await Nd()}Ue.default.info?.(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){Ue.default.warn?.(`Error in cleanup scan for ${s}:`,I)}}),Math.min(R-Date.now(),2147483647)).unref()},"startNextTimer");b(p)}}a($o,"scheduleCleanup");function Gd(){G=l?.addDeleteRemovalCallback(n,i,(Y,p)=>{i.remove(Y,p)})}a(Gd,"addDeleteRemoval");function _m(){(0,yl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ka){Ka=!0;try{let Y=ae.name,p=r[Y];if(!p)throw new Error(`expiresAt attribute ${ae} must be indexed`);for(let b of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let R of p.getValues(b)){let y=i.getEntry(R);y?.value?y.value[Y]<Date.now()&&De.evict(R,y.value,y.version):i.ifVersion(R,y?.version,()=>p.remove(b,R))}await Nd()}}catch(Y){Ue.default.error?.("Error in evicting old records",Y)}finally{Ka=!1}}},oge).unref()}a(_m,"runRecordExpirationEviction");function Vo(Y){if(Y){let p=Y.join(","),b=f.get([Symbol.for("residency_by_set"),p]);return b||(f.put([Symbol.for("residency_by_set"),p],b=Math.floor(Math.random()*2147483647)),f.put([Symbol.for("residency_by_id"),b],Y),b)}}a(Vo,"getResidencyId")}function sC(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 HW(){}function fge(e){$W=e}function lT(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return aT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return aT(+e);case"Float":return e==="null"?null:aT(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;_ge.test(e)||(e+="Z");let n=new Date(e);return aT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,uT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function aT(e){if(isNaN(e))throw new SyntaxError;return e}function kW(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);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 iC(e,t,r){return e?.then?e.then(t,r):t(e)}function FW(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function hge(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ms,$a,jh,qW,GW,wd,Or,Qh,Jh,Ue,bl,yl,uT,cT,ige,$W,oge,age,vW,cge,UW,lge,cs,Jo,uge,BW,xW,dge,FMe,_ge,Nd,lf=Oe(()=>{Ms=L(v()),$a=require("lmdb"),jh=L(on()),qW=require("lodash"),GW=L(rf());Xo();Dm();wd=L(ne());Ab();Or=L(fe()),Qh=L(oo()),Jh=L(Ks());Pe();cf();Ue=L(Qi());Ay();Xa();bl=require("ordered-binary"),yl=L(tt());Zi();uT=L(re());Yl();Ci();Vp();J_();cT=L(require("node:fs"));ls();ige=new Uint8Array(9);ige[8]=192;oge=6e4,age=864e5;wd.initSync();vW=wd.get(Ms.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),cge=1e4,UW=1,lge=2,cs=1,Jo=8,uge=Buffer.allocUnsafeSlow(8192),BW=1978,xW=100,dge={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},FMe=(0,uT.convertToMS)(wd.get(Ms.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(dT,"makeTable");a(sC,"attributesAsObject");a(HW,"noop");a(fge,"setServerUtilities");_ge=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(lT,"coerceType");a(aT,"rejectNaN");a(kW,"isDescendantId");Nd=a(()=>new Promise(setImmediate),"rest");a(iC,"when");a(FW,"exists");a(Ls,"stringify");a(hge,"hasOtherProcesses")});var rt={};Fe(rt,{database:()=>au,database_envs:()=>qo,databases:()=>Ge,dropDatabase:()=>Ny,dropTableMeta:()=>Sge,getDatabases:()=>Qe,getDefaultCompression:()=>hg,getTables:()=>mge,onRemovedDB:()=>R_,onUpdatedTable:()=>Uc,readMetaDb:()=>Xh,resetDatabases:()=>Yu,table:()=>it,tables:()=>Zn});function mge(){return mT||Qe(),Zn||{}}function Qe(){if(mT)return Ge;mT=!0,Pd=new Map;let e=(0,Wt.getHdbBasePath)()&&(0,It.join)((0,Wt.getHdbBasePath)(),Ar.DATABASES_DIR_NAME),t=(0,Wt.get)(Ar.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Wt.get)(Ar.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,ss.existsSync)(e)?e:(0,It.join)((0,Wt.getHdbBasePath)(),Ar.LEGACY_DATABASES_DIR_NAME)),!e)return;if((0,ss.existsSync)(e))for(let n of(0,ss.readdirSync)(e,{withFileTypes:!0})){let s=(0,It.basename)(n.name,".mdb");n.isFile()&&(0,It.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Xh((0,It.join)(e,n.name),null,s)}if((0,ss.existsSync)((0,Cd.getBaseSchemaPath)())){for(let n of(0,ss.readdirSync)((0,Cd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,It.join)((0,Cd.getBaseSchemaPath)(),n.name),i=(0,It.join)((0,Cd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,ss.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,It.extname)(o.name).toLowerCase()===".mdb"){let c=(0,It.join)(i,o.name);Xh((0,It.join)(s,o.name),(0,It.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ss.existsSync)(i))for(let c of(0,ss.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,It.extname)(c.name).toLowerCase()===".mdb"&&Xh((0,It.join)(i,c.name),(0,It.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,It.join)(l.path,(0,It.basename)(c+".mdb"));(0,ss.existsSync)(u)&&Xh(u,c,n,null,!0)}}for(let n in Ge){let s=Pd.get(n);if(s){let i=Ge[n];n.includes("delete")&&xt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(xt.trace(`delete table class ${o}`),delete i[o])}else if(delete Ge[n],n==="data"){for(let i in Zn)delete Zn[i];delete Zn[pT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(Ge.system)for(let n of r)Ge.system[n]&&(Ge.system[n].replicate=!1);return Pd=null,Ge}function Yu(){mT=!1;for(let[,e]of qo)e.needsDeletion=!0;Qe();for(let[e,t]of qo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),qo.delete(e),delete Ge[t.databaseName],em.forEach(r=>r(t.databaseName)));return Ge}function Xh(e,t,r=cC,n,s){let i=new oC.default(e,!1);try{let o=qo.get(e);o?o.needsDeletion=!1:(o=(0,Dd.open)(i),qo.set(e,o));let c=new Ol.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(fT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,ss.existsSync)(n)&&(i.path=n,u=(0,Dd.open)(i),u.isLegacy=!0):u=iT(o));let f=WW(r),d=f[pT],h=new Map;for(let{key:_,value:m}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=m.name:g||(g=S,S=t,m.name||(m.name=g,m.indexed=!m.is_hash_attribute)),d?.add(S);let T=h.get(S);T||h.set(S,T={attributes:[]}),(g==null||m.is_hash_attribute)&&(T.primary=m),g!=null&&T.attributes.push(m),Object.defineProperty(m,"key",{value:_,configurable:!0})}for(let[_,m]of h){let{attributes:S,primary:g}=m;if(!g){for(let z of S)if(z.is_hash_attribute||z.isPrimaryKey){g=z;break}if(!g){xt.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let T=f[_],E={},A=[],w,M,H=typeof g.audit=="boolean"?g.audit:(0,Wt.get)(Ar.CONFIG_PARAMS.LOGGING_AUDITLOG),k=g.trackDeletes,V=g.expiration,q=g.eviction,ae=g.sealed,G=g.splitSegments,le=g.replicate;if(T)E=T.indices,A=T.attributes,T.schemaVersion++;else{w=g.tableId,w?w>=(l.get(Id)||0)&&(l.putSync(Id,w+1),xt.info(`Updating next table id (it was out of sync) to ${w+1} for ${_}`)):(g.tableId=w=l.get(Id),w||(w=1),xt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Id,w+1),l.putSync(g.key,g));let z=new Ol.default(!g.is_hash_attribute,g.is_hash_attribute);if(z.compression=g.compression,z.compression){let Ae=(0,Wt.get)(Ar.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||YW;z.compression.threshold=Ae}M=np(o.openDB(g.key,z),o),o.databaseName=r,M.tableId=w}for(let z of S){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!E[z.name]){let ge=new Ol.default(!z.is_hash_attribute,z.is_hash_attribute);E[z.name]=o.openDB(z.key,ge),E[z.name].indexNulls=z.indexNulls}let Ae=A.find(ge=>ge.name===z.name);Ae?A.splice(A.indexOf(Ae),1,z):A.push(z)}}catch(Ae){xt.error("Error trying to update attribute",z,A,E,Ae)}}if(!T){T=zW(f,_,dT({primaryStore:M,auditStore:u,audit:H,sealed:ae,splitSegments:G,replicate:le,expirationMS:V&&V*1e3,evictionMS:q&&q*1e3,trackDeletes:k,tableName:_,tableId:w,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:E,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let z of Zh)z(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function WW(e){let t=Ge[e];if(t||(e==="data"?t=Ge[e]=Zn:e==="system"?Object.defineProperty(Ge,"system",{value:t=Object.create(null),configurable:!0}):t=Ge[e]=Object.create(null)),Pd&&!Pd.has(e)){let r=new Set;t[pT]=r,Pd.set(e,r)}return t}function zW(e,t,r){return e[t]=r,r}function au({database:e,table:t}){e||(e=cC),Qe();let r=WW(e),n=(0,It.join)((0,Wt.getHdbBasePath)(),Ar.DATABASES_DIR_NAME),s=(0,Wt.get)(Ar.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,Wt.get)(Ar.CONFIG_PARAMS.STORAGE_PATH)||((0,ss.existsSync)(n)?n:(0,It.join)((0,Wt.getHdbBasePath)(),Ar.LEGACY_DATABASES_DIR_NAME));let o=(0,It.join)(n,(i?t:e)+".mdb"),c=qo.get(o);if(!c||c.status==="closed"){let l=new oC.default(o,!1);c=(0,Dd.open)(l),qo.set(o,c)}return c.auditStore||(c.auditStore=iT(c)),c}async function Ny(e){if(!Ge[e])throw new Error("Schema does not exist");let t=Ge[e],r;for(let n in t)r=t[n].primaryStore.rootStore,qo.delete(r.path),r.status==="open"&&(await r.close(),await tm.remove(r.path));if(r||(r=au({database:e,table:null}),r.status==="open"&&(await r.close(),await tm.remove(r.path))),e==="data"){for(let n in Zn)delete Zn[n];delete Zn[pT]}delete Ge[e],em.forEach(n=>n(e)),await yA(r)}function it(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=cC);let m=au({database:r,table:t}),S=Ge[r];xt.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(m.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let T,E,A;h==null&&(h=!0);let w=new Ol.default(!1);for(let G of o)G.attribute&&!G.name?(G.name=G.attribute,G.indexed=!0):G.attribute=G.name,G.expiresAt&&(G.indexed=!0);let M,H;if(g){if(T=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let G=m.auditStore;E=o.find(ge=>ge.isPrimaryKey)||{},T=E.name,E.is_hash_attribute=E.isPrimaryKey=!0,E.schemaDefined=h,E.compression=hg(),d&&(E.trackDeletes=!0),c=E.audit=typeof c=="boolean"?c:(0,Wt.get)(Ar.CONFIG_PARAMS.LOGGING_AUDITLOG),n&&(E.expiration=n),s&&(E.eviction=s),E.splitSegments=!1,typeof l=="boolean"&&(E.sealed=l),typeof f=="boolean"&&(E.replicate=f),_&&(E.origins?E.origins.includes(_)||E.origins.push(_):E.origins=[_]),xt.trace(`${t} table loading, opening primary store`);let le=new Ol.default(!1,!0);le.compression=E.compression;let z=t+"/";if(A=m.dbisDb=m.openDB(fT.INTERNAL_DBIS_NAME,w),ae(),A.get(z))return H&&H(),Yu(),it(e);let Ae=np(m.openDB(z,le),m);m.databaseName=r,Ae.tableId=A.get(Id),xt.trace(`Assigning new table id ${Ae.tableId} for ${t}`),Ae.tableId||(Ae.tableId=1),A.put(Id,Ae.tableId+1),E.tableId=Ae.tableId,g=zW(S,t,dT({primaryStore:Ae,auditStore:G,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:T,tableName:t,tableId:Ae.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:A})),g.schemaVersion=1,M=!0,A.put(z,E)}let k=g.indices;A=A||(m.dbisDb=m.openDB(fT.INTERNAL_DBIS_NAME,w)),g.dbisDB=A;let V=[];for(let{key:G,value:le}of A.getRange({start:!0})){let[z,Ae]=G.toString().split("/");if(Ae===""&&(Ae=le.name),Ae){if(z!==t)continue}else continue;let ge=o.find(he=>he.name===Ae),Ce=!ge?.indexed&&le.indexed&&!le.isPrimaryKey;if((!ge||Ce)&&(ae(),M=!0,ge||A.remove(G),Ce)){let he=g.indices[z];he&&V.push(he)}}let q=[];try{for(let G of o||[]){if((G.relationship||G.computed)&&(M=!0,G.relationship))continue;let le=t+"/"+(G.name||"");Object.defineProperty(G,"key",{value:le,configurable:!0});let z=A.get(le);if(G.isPrimaryKey){if(z=z||A.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let ge={...z};typeof c=="boolean"&&(c&&g.enableAuditing(c),ge.audit=c),n&&(ge.expiration=+n),s&&(ge.eviction=+s),l!==void 0&&(ge.sealed=l),f!==void 0&&(ge.replicate=f),M=!0,ae(),A.put(le,ge)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let Ae=!z||z.type!==G.type||z.indexed!==G.indexed||z.nullable!==G.nullable||z.version!==G.version||JSON.stringify(z.properties)!==JSON.stringify(G.properties)||JSON.stringify(z.elements)!==JSON.stringify(G.elements);if(G.indexed){let ge=new Ol.default(!0,!1),Ce=m.openDB(le,ge);(Ae||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<rm.workerData?.restartNumber)&&(M=!0,ae(),z=A.get(le),(Ae||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<rm.workerData?.restartNumber)&&(M=!0,G.indexNulls===void 0&&(G.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(G.lastIndexedKey=z?.lastIndexedKey??void 0,G.indexingPID=process.pid,Ce.isIndexing=!0,Object.defineProperty(G,"dbi",{value:Ce}),q.push(G))),A.put(le,G)),z?.indexNulls&&G.indexNulls===void 0&&(G.indexNulls=!0),Ce.indexNulls=G.indexNulls,k[G.name]=Ce}else Ae&&(M=!0,ae(),A.put(le,G))}}finally{H&&H()}if(M&&(g.schemaVersion++,g.updatedAttributes()),xt.trace(`${t} table loading, running index`),q.length>0||V.length>0?g.indexingOperation=gge(g,q,V):M&&_T.signalSchemaChange(new hT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,M)for(let G of Zh)G(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),xt.trace(`${t} table loaded`),g;function ae(){H||m.transactionSync(()=>({then(G){H=G}}))}a(ae,"startTxn")}async function gge(e,t,r){try{xt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await _T.signalSchemaChange(new hT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Dd.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let m=0;m<l;m++){let S=t[m],g=S.name;try{let T=S.resolve,E=h&&(T?T(h):h[g]),A=(0,VW.getIndexedValues)(E);if(A)for(let w=0,M=A.length;w<M;w++)S.dbi.put(A[w],d)}catch(T){o[g]||(o[g]=!0,xt.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>f--,m=>{f--,xt.error(m)}),rm.workerData&&rm.workerData.restartNumber!==KW.restartNumber&&(i=!0),++c%100===0||i){for(let m of t)m.lastIndexedKey=d,e.dbisDB.put(m.key,m);if(i)return}f>pge?await s:f>Ege&&await new Promise(m=>setImmediate(m))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await _T.signalSchemaChange(new hT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),xt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){xt.error("Error in indexing",n)}}function Sge({table:e,database:t}){let r=au({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 Uc(e){return Zh.push(e),{remove(){let t=Zh.indexOf(e);t>-1&&Zh.splice(t,1)}}}function R_(e){return em.push(e),{remove(){let t=em.indexOf(e);t>-1&&em.splice(t,1)}}}function hg(){let e=(0,Wt.get)(Ar.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,Wt.get)(Ar.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,Wt.get)(Ar.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||YW,n={startingOffset:32};return t&&(n.dictionary=tm.readFileSync(t)),r&&(n.threshold=r),e&&n}var Wt,fT,Dd,It,ss,Cd,Ol,oC,Ar,tm,aC,VW,_T,hT,rm,xt,KW,cC,pT,YW,Zn,Ge,Id,Zh,em,mT,qo,Pd,pge,Ege,Pe=Oe(()=>{Wt=L(ne()),fT=L(Dt()),Dd=require("lmdb"),It=require("path"),ss=require("fs"),Cd=L(ft());lf();Ol=L(Rf()),oC=L(yf()),Ar=L(v()),tm=L(require("fs-extra")),aC=L(di()),VW=L(on()),_T=L(oo()),hT=L(Ks()),rm=require("worker_threads"),xt=L(j()),KW=L(tt());Zi();Yl();ls();cC="data",pT=Symbol("defined-tables"),YW=((0,Wt.get)(Ar.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,Wt.initSync)();Zn=Object.create(null),Ge=Object.create(null);(0,aC._assignPackageExport)("databases",Ge);(0,aC._assignPackageExport)("tables",Zn);Id=Symbol.for("next-table-id"),Zh=[],em=[],qo=new Map;a(mge,"getTables");a(Qe,"getDatabases");a(Yu,"resetDatabases");a(Xh,"readMetaDb");a(WW,"ensureDB");a(zW,"setTable");a(au,"database");a(Ny,"dropDatabase");a(it,"table");pge=1e3,Ege=10;a(gge,"runIndexing");a(Sge,"dropTableMeta");a(Uc,"onUpdatedTable");a(R_,"onRemovedDB");a(hg,"getDefaultCompression")});var re=P((QMe,cz)=>{"use strict";var Va=require("path"),ZW=require("fs-extra"),Pn=j(),jW=require("fs-extra"),ET=require("os"),Tge=require("net"),Age=require("recursive-iterator"),cr=v(),Rge=YT(),QW=require("papaparse"),gT=require("moment"),{inspect:yge}=require("util"),JW=require("is-number"),jMe=require("lodash"),bge=require("minimist"),Oge=require("https"),Nge=require("http"),{hdb_errors:ST}=fe(),wge=/^((\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)))$/,ez=require("util").promisify(setTimeout),Ige=100,Cge=5,Pge="",Dge=4,XW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};cz.exports={isEmpty:is,isEmptyOrZeroLength:Vi,arrayHasEmptyValues:vge,arrayHasEmptyOrZeroLengthValues:Uge,buildFolderPath:Bge,isBoolean:tz,errorizeMessage:Lge,stripFileExtension:Hge,autoCast:kge,autoCastJSON:rz,autoCastJSONDeep:uC,removeDir:Fge,compareVersions:qge,isCompatibleDataVersion:Gge,escapeRawValue:$ge,unescapeValue:Vge,stringifyProps:Kge,timeoutPromise:Wge,isClusterOperation:jge,getClusterUser:Jge,checkGlobalSchemaTable:Qge,getHomeDir:sz,getPropsFilePath:Yge,promisifyPapaParse:Xge,removeBOM:iz,createEventPromise:Zge,checkProcessRunning:eSe,checkSchemaTableExist:tSe,checkSchemaExists:oz,checkTableExists:az,getStartOfTomorrowInSeconds:rSe,getLimitKey:nSe,isObject:xge,isNotEmptyAndHasValue:Mge,autoCasterIsNumberCheck:nz,backtickASTSchemaItems:sSe,isPortTaken:zge,createForkArgs:iSe,autoCastBoolean:oSe,async_set_timeout:ez,getTableHashAttribute:aSe,doesSchemaExist:cSe,doesTableExist:lSe,stringifyObj:uSe,ms_to_time:dSe,changeExtension:fSe,getEnvCliRootPath:dC,noBootFile:_Se,httpRequest:hSe,transformReq:mSe,convertToMS:pSe,PACKAGE_ROOT:cr.PACKAGE_ROOT};function Lge(e){return e instanceof Error?e:new Error(e)}a(Lge,"errorizeMessage");function is(e){return e==null}a(is,"isEmpty");function Mge(e){return!is(e)&&(e||e===0||e===""||tz(e))}a(Mge,"isNotEmptyAndHasValue");function Vi(e){return is(e)||e.length===0||e.size===0}a(Vi,"isEmptyOrZeroLength");function vge(e){if(is(e))return!0;for(let t=0;t<e.length;t++)if(is(e[t]))return!0;return!1}a(vge,"arrayHasEmptyValues");function Uge(e){if(Vi(e))return!0;for(let t=0;t<e.length;t++)if(Vi(e[t]))return!0;return!1}a(Uge,"arrayHasEmptyOrZeroLengthValues");function Bge(...e){try{return e.join(Va.sep)}catch{console.error(e)}}a(Bge,"buildFolderPath");function tz(e){return is(e)?!1:e===!0||e===!1}a(tz,"isBoolean");function xge(e){return is(e)?!1:typeof e=="object"}a(xge,"isObject");function Hge(e){return Vi(e)?Pge:e.slice(0,-Dge)}a(Hge,"stripFileExtension");function kge(e){return is(e)||e===""||typeof e!="string"?e:XW[e]!==void 0?XW[e]:nz(e)===!0?Number(e):wge.test(e)?new Date(e):e}a(kge,"autoCast");function rz(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(rz,"autoCastJSON");function uC(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=uC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=uC(r);n!==r&&(e[t]=n)}return e}else return rz(e)}a(uC,"autoCastJSONDeep");function nz(e){if(e.startsWith("0.")&&JW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&JW(e))}a(nz,"autoCasterIsNumberCheck");async function Fge(e){if(Vi(e))throw new Error(`Directory path: ${e} does not exist`);try{await jW.emptyDir(e),await jW.remove(e)}catch(t){throw Pn.error(`Error removing files in ${e} -- ${t}`),t}}a(Fge,"removeDir");function qge(e,t){if(Vi(e)){Pn.info("Invalid current version sent as parameter.");return}if(Vi(t)){Pn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(qge,"compareVersions");function Gge(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Gge,"isCompatibleDataVersion");function $ge(e){if(is(e))return e;let t=String(e);return t==="."?cr.UNICODE_PERIOD:t===".."?cr.UNICODE_PERIOD+cr.UNICODE_PERIOD:t.replace(cr.FORWARD_SLASH_REGEX,cr.UNICODE_FORWARD_SLASH)}a($ge,"escapeRawValue");function Vge(e){if(is(e))return e;let t=String(e);return t===cr.UNICODE_PERIOD?".":t===cr.UNICODE_PERIOD+cr.UNICODE_PERIOD?"..":String(e).replace(cr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Vge,"unescapeValue");function Kge(e,t){if(is(e))return Pn.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+ET.EOL}!Vi(n)&&n[0]===";"?r+=" "+n+s+ET.EOL:Vi(n)||(r+=n+"="+s+ET.EOL)}catch{Pn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Kge,"stringifyProps");function sz(){let e;try{e=ET.homedir()}catch{e=process.env.HOME}return e}a(sz,"getHomeDir");function Yge(){let e=Va.join(sz(),cr.HDB_HOME_DIR_NAME,cr.BOOT_PROPS_FILE_NAME);return ZW.existsSync(e)||(e=Va.join(__dirname,"../","hdb_boot_properties.file")),e}a(Yge,"getPropsFilePath");function Wge(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(Wge,"timeoutPromise");async function zge(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Tge.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(zge,"isPortTaken");function jge(e){try{return cr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(jge,"isClusterOperation");function Qge(e,t){let r=(Pe(),se(rt)).getDatabases();if(!r[e])return ST.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return ST.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Qge,"checkGlobalSchemaTable");function Jge(e,t){if(is(t)){Pn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(is(e)||Vi(e)){Pn.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){Pn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Pn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Jge,"getClusterUser");function Xge(){QW.parsePromise=function(e,t,r){return new Promise(function(n,s){QW.parse(e,{header:!0,transformHeader:iz,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Xge,"promisifyPapaParse");function iz(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(iz,"removeBOM");function Zge(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Pn.info(`Got cluster status event response: ${yge(s)}`);try{i.cancel()}catch{Pn.error("Error trying to cancel timeout.")}n(s)})})}a(Zge,"createEventPromise");async function eSe(e){let t=!0,r=0;do await ez(Ige*r++),(await Rge.findPs(e)).length>0&&(t=!1);while(t&&r<Cge);if(t)throw new Error(`process ${e} was not started`)}a(eSe,"checkProcessRunning");function tSe(e,t){let r=oz(e);if(r)return r;let n=az(e,t);if(n)return n}a(tSe,"checkSchemaTableExist");function oz(e){let{getDatabases:t}=(Pe(),se(rt));if(!t()[e])return ST.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(oz,"checkSchemaExists");function az(e,t){let{getDatabases:r}=(Pe(),se(rt));if(!r()[e][t])return ST.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(az,"checkTableExists");function rSe(){let e=gT().utc().add(1,"d").startOf("d").unix(),t=gT().utc().unix();return e-t}a(rSe,"getStartOfTomorrowInSeconds");function nSe(){return gT().utc().format("DD-MM-YYYY")}a(nSe,"getLimitKey");function sSe(e){try{let t=new Age(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){Pn.error("Got an error back ticking items."),Pn.error(t)}}a(sSe,"backtickASTSchemaItems");function iSe(e){return[e]}a(iSe,"createForkArgs");function oSe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(oSe,"autoCastBoolean");function aSe(e,t){let{getDatabases:r}=(Pe(),se(rt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(aSe,"getTableHashAttribute");function cSe(e){let{getDatabases:t}=(Pe(),se(rt));return t()[e]!==void 0}a(cSe,"doesSchemaExist");function lSe(e,t){let{getDatabases:r}=(Pe(),se(rt));return r()[e]?.[t]!==void 0}a(lSe,"doesTableExist");function uSe(e){try{return JSON.stringify(e)}catch{return e}}a(uSe,"stringifyObj");function dSe(e){let t=gT.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(dSe,"ms_to_time");function fSe(e,t){let r=Va.basename(e,Va.extname(e));return Va.join(Va.dirname(e),r+t)}a(fSe,"changeExtension");function dC(){if(process.env[cr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[cr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=bge(process.argv);if(e[cr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[cr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(dC,"getEnvCliRootPath");var lC;function _Se(){if(lC)return lC;let e=dC();if(dC()&&ZW.pathExistsSync(Va.join(e,cr.HDB_CONFIG_FILE)))return lC=!0,!0}a(_Se,"noBootFile");function hSe(e,t){let r;return e.protocol==="http:"?r=Nge:r=Oge,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(hSe,"httpRequest");function mSe(e){if(!e.schema&&!e.database){e.schema=cr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(mSe,"transformReq");function pSe(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(pSe,"convertToMS")});var ne=P((_z,hz)=>{"use strict";var fC=require("fs-extra"),Nl=require("path"),lz=require("os"),ESe=require("properties-reader"),sm=j(),nm=re(),Ie=v(),TT=Ot(),gSe="Error initializing environment manager",AT="BOOT_PROPS_FILE_PATH",uz=!1,SSe={[Ie.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Go={};Object.assign(_z,hz.exports={BOOT_PROPS_FILE_PATH:AT,getHdbBasePath:TSe,setHdbBasePath:ASe,get:dz,initSync:ySe,setProperty:Ve,initTestEnvironment:OSe,setCloneVar:bSe});function TSe(){return Go[Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(TSe,"getHdbBasePath");function ASe(e){Go[Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ASe,"setHdbBasePath");function dz(e){let t=TT.getConfigValue(e);return t===void 0?Go[e]:t}a(dz,"get");function Ve(e,t){SSe[e]&&(Go[e]=t),TT.updateConfigObject(e,t)}a(Ve,"setProperty");function RSe(){let e;try{e=nm.getPropsFilePath(),fC.accessSync(e,fC.constants.F_OK|fC.constants.R_OK),uz=!0;let t=ESe(e);return Go[Ie.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ie.HDB_SETTINGS_NAMES.INSTALL_USER),Go[Ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Go[AT]=e,!0}catch{return sm.trace(`Environment manager found no properties file at ${e}`),!1}}a(RSe,"doesPropFileExist");function ySe(e=!1){try{((uz||RSe()||nm.noBootFile())&&!fz||e)&&(TT.initConfig(e),Go[Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=TT.getConfigValue(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){sm.error(gSe),sm.error(t),console.error(t),process.exit(1)}}a(ySe,"initSync");var fz=!1;function bSe(e){fz=e}a(bSe,"setCloneVar");function OSe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Nl.join(__dirname,"../../","unitTests");Go[AT]=Nl.join(l,"hdb_boot_properties.file"),Ve(Ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Nl.join(l,"settings.test")),Ve(Ie.HDB_SETTINGS_NAMES.INSTALL_USER,lz.userInfo()?lz.userInfo().username:void 0),Ve(Ie.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ve(Ie.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Nl.join(l,"envDir","log")),Ve(Ie.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ve(Ie.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ve(Ie.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ve(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Nl.join(l,"envDir")),Ve(Ie.CONFIG_PARAMS.STORAGE_PATH,Nl.join(l,"envDir")),s&&(Ve(Ie.CONFIG_PARAMS.HTTP_SECUREPORT,dz(Ie.CONFIG_PARAMS.HTTP_PORT)),Ve(Ie.CONFIG_PARAMS.HTTP_PORT,null)),Ve(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ve(Ie.CONFIG_PARAMS.HTTP_PORT,9926),Ve(Ie.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ve(Ie.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ve(Ie.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,nm.isEmpty(i)?!1:i),Ve(Ie.CONFIG_PARAMS.HTTP_CORS,nm.isEmpty(i)?!1:i),Ve(Ie.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ve(Ie.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ve(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ve(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ve(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Nl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ve(Ie.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,nm.isEmpty(c)?!1:c),o&&(Ve("CORS_ACCESSLIST",o),Ve(Ie.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ve(Ie.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ve(Ie.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ve(Ie.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ve(Ie.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ve(Ie.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ve(Ie.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${AT}. Please check your boot props and settings files`;sm.fatal(r),sm.error(t)}}a(OSe,"initTestEnvironment")});var Er=P((sve,Dz)=>{"use strict";var Nr=ne();Nr.initSync();var NSe=require("fs-extra"),wSe=require("semver"),am=require("path"),{monotonicFactory:ISe}=require("ulidx"),pz=ISe(),CSe=require("util"),Ez=require("child_process"),PSe=CSe.promisify(Ez.exec),DSe=Ez.spawn,Hr=yt(),Ke=v(),RT=re(),li=j(),yT=no(),LSe=eE(),im=Ot(),{broadcast:MSe,onMessageByType:vSe,getWorkerIndex:USe}=tt(),{isMainThread:gz}=require("worker_threads"),{Encoder:BSe,decode:pC}=require("msgpackr"),Sz=new BSe,{isEmpty:Pl}=RT,Tz=Gn(),ZMe=48*36e11;gz&&vSe(Ke.ITC_EVENT_TYPES.RESTART,()=>{tn=void 0,Cl=void 0});var{connect:xSe,StorageType:HSe,RetentionPolicy:kSe,AckPolicy:EC,DeliverPolicy:gC,DiscardPolicy:FSe,NatsConnection:eve,JetStreamManager:tve,JetStreamClient:rve,StringCodec:nve,JSONCodec:qSe,createInbox:SC,headers:GSe,ErrorCode:mz}=require("nats"),{PACKAGE_ROOT:$Se}=v(),VSe=vu(),{recordAction:KSe}=(Ci(),se(S_)),{encodeBlobsAsBuffers:YSe}=(ls(),se(Qm)),Az=qSe(),WSe="clustering",zSe=VSe.engines[Hr.NATS_SERVER_NAME],jSe=am.join($Se,"dependencies"),mC=am.join(jSe,`${process.platform}-${process.arch}`,Hr.NATS_BINARY_NAME),_C,hC,om,wl,Il;Dz.exports={runCommand:Rz,checkNATSServerInstalled:QSe,createConnection:TC,getConnection:cm,getJetStreamManager:lm,getJetStream:bz,getNATSReferences:Ki,getServerList:XSe,createLocalStream:AC,listStreams:Oz,deleteLocalStream:ZSe,getServerConfig:Ld,listRemoteStreams:eTe,viewStream:tTe,viewStreamIterator:rTe,publishToStream:nTe,request:oTe,reloadNATS:RC,reloadNATSHub:aTe,reloadNATSLeaf:cTe,extractServerName:iTe,requestErrorHandler:lTe,createLocalTableStream:Cz,createTableStreams:fTe,purgeTableStream:Pz,purgeSchemaTableStreams:_Te,getStreamInfo:hTe,updateLocalStreams:pTe,closeConnection:JSe,getJsmServerName:bT,addNatsMsgHeader:Nz,clearClientCache:yz,updateRemoteConsumer:uTe,createConsumer:wz,updateConsumerIterator:dTe};async function Rz(e,t=void 0){let{stdout:r,stderr:n}=await PSe(e,{cwd:t});if(n)throw new Error(n.replace(`
130
+ `))}},25).unref()}o.close?.(()=>{if(dt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&fd()==0)try{eY(nY(dt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,yS),o.cantCleanupProperly||Cn.warn("Had to forcefully exit the thread",yS),process.exit(0)},5e3).unref()})}if(sY||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Cn.info("Could not close debugger",i)}}}).ref();let e;Dh&&!iEe&&(e=oY()),Promise.resolve(e).then(()=>{if(fd()===0)try{rEe(dI)}catch(t){console.error("Error displaying start-up log",t)}Lh?.postMessage({type:Qt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(iY,"startServers");function oY(){let e=[];for(let t in ki){let r=ki[t];if(t.includes?.("/")&&fd()==0){Qpe(t)&&eY(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Cn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=dt.get(Qt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=fd();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?Dh?n={fd:Dh(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:Dh?n={fd:Dh(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Cn.trace("Listening on port "+t,yS)}).on("error",c)}))}return Promise.all(e)}a(oY,"listenOnPorts");!lI&&!Gpe?.noServerStart&&iY();function hI(e,t,r){let n=e?.read?e:new qpe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=ki[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=ki[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Cn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(hI,"deliverSocket");var QK=new Map;function oEe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=QK.get(s),r){case"connection":i=hI(void 0,t),QK.set(s,i),i.write=(c,l,u)=>(Lh.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Lh.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Lh.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(oEe,"proxyRequest");var{getComponentName:OS}=(nh(),D(rh));function pI(e,t,r=!0){t||(t=dt.get(Qt.CONFIG_PARAMS.HTTP_PORT));let n=ki[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",ZK),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else ki[t]=e;e.on("unhandled",ZK)}a(pI,"registerServer");function EI(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],dt.get(Qt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:dt.get(Qt.CONFIG_PARAMS.HTTP_PORT),secure:dt.get(Qt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),dt.get(Qt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:dt.get(Qt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&dt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:nY(dt.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(EI,"getPorts");function mI(e,t){let r=[];for(let{port:n,secure:s}of EI(t))r.push(aY(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?fI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,pI(e,n,!1)),bS[n]=wS(fI,n);return r}a(mI,"httpServer");function NS(e,t){let r=dI.get(e)??[];dI.set(e,[...r,t])}a(NS,"setPortServerMap");function aY(e,t,r,n){if(NS(e,{protocol_name:t?"HTTPS":"HTTP",name:OS()}),!RS[e]){let s=r?"operationsApi_network":"http",i=dt.get(s+"_keepAliveTimeout"),o=dt.get(s+"_timeout"),c=dt.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:dt.get(Qt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=dt.get(s+"_mtls"),f=dt.get(s+"_mtls_required"),d;t&&(d=dt.get(s+"_http2")??!r,Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!f,requestCert:!!(u||n),ticketKeys:Xpe(),SNICallback:rY(r?"operations-api":"server",u)}));let h=tEe(),_=RS[e]=(t?d?Wpe:Ype:Vpe)(l,async(p,S)=>{try{let T=performance.now(),m=new tY(p,S);r&&(m.isOperationsServer=!0);let A=await bS[e](m);if(!A){if(m._nodeResponse.statusCode)return;A=cY(m)}if(A.headers?.set||(A.headers=new uI(A.headers)),h?A.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):A.headers?.set?.("Server","HarperDB"),A.status===-1){for(let re of A.headers||[])S.setHeader(re[0],re[1]);return p.baseRequest=m,S.baseResponse=A,RS[e].emit("unhandled",p,S)}let w=A.status||200,M=performance.now(),F=M-T,G=A.body,K,ee=!1;if(!A.handlesHeaders){let re=A.headers||new uI;G?G.length>=0?(typeof G=="string"?re.set("Content-Length",Buffer.byteLength(G)):re.set("Content-Length",G.length),K=!0):G instanceof zpe&&(G.size?re.set("Content-Length",G.size):G.on&&(ee=!0,G.on("size",he=>{S.headersSent||S.setHeader("Content-Length",he)})),G=G.stream()):(re.set("Content-Length","0"),K=!0);let z=`hdb;dur=${F.toFixed(2)}`;if(A.wasCacheMiss&&(z+=", miss"),eEe(re,"Server-Timing",z,!0),!S.headersSent)if(ee){if(S.statusCode=w,re)if(re[Symbol.iterator])for(let[he,Te]of re)S.setHeader(he,Te);else for(let he in re)S.setHeader(he,re[he])}else S.writeHead(w,re&&(re[Symbol.iterator]?Array.from(re):re));K&&S.end(G)}let ie=m.handlerPath,X=m.method;if(Ch(F,"duration",ie,X,A.wasCacheMiss==null?void 0:A.wasCacheMiss?"cache-miss":"cache-hit"),WK(w<400,"success",ie,X),WK(1,"response_"+w,ie,X),!K)if(G instanceof ReadableStream&&(G=zK.fromWeb(G)),(G[Symbol.iterator]||G[Symbol.asyncIterator])&&(G=zK.from(G)),G?.pipe){G.pipe(S),G.destroy&&S.on("close",()=>{G.destroy()});let re=0;G.on("data",z=>{re+=z.length}),G.on("end",()=>{Ch(performance.now()-M,"transfer",ie,X),Ch(re,"bytes-sent",ie,X)})}else G?.then?G.then(re=>{S.end(re)},g):S.end(G)}catch(T){g(T)}function g(T){let m=T.headers;S.writeHead(T.statusCode||500,m&&(m[Symbol.iterator]?Array.from(m):m)),S.end(T.toString()),T.statusCode?T.statusCode===500?Cn.warn(T):Cn.info(T):Cn.error(T)}a(g,"onError")});i>=0&&(_.keepAliveTimeout=i),c>=0&&(_.headersTimeout=c),t&&(_.ports||(_.ports=[]),_.ports.push(e),l.SNICallback.initialize(_),u&&(_.mtlsConfig=u),_.on("secureConnection",p=>{p._parent.startTime&&Ch(performance.now()-p._parent.startTime,"tls-handshake",e),Ch(p.isSessionReused(),"tls-reused",e)}),_.isSecure=!0),pI(_,e)}return RS[e]}a(aY,"getHTTPServer");function wS(e,t){let r=cY;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(wS,"makeCallbackChain");function cY(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new uI}}a(cY,"unhandled");function aEe(e,t){mI(e,{requestOnly:!0,...t})}a(aEe,"onRequest");function cEe(e,t){let r;if(t.securePort){NS(t.securePort,{protocol_name:"TLS",name:OS()});let n=rY("server",t.mtls);r=Jpe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),ki[t.securePort]=r}return t.port&&(NS(t.port,{protocol_name:"TCP",name:OS()}),r=$pe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),ki[t.port]=r),r}a(cEe,"onSocket");Object.defineProperty(Kpe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var jK=[],_I={};function lY(e,t){for(let{port:r}of EI(t))jK[t?.runFirst?"unshift":"push"]({listener:e,port:r}),_I[r]=wS(jK,r)}a(lY,"onUpgrade");var JK=[],XK={};function lEe(e,t){let r=[];for(let{port:n,secure:s}of EI(t)){NS(n,{protocol_name:s?"WSS":"WS",name:OS()});let i=aY(n,s,t?.isOperationsServer,t?.mtls);Ph[n]||(Ph[n]=new jpe({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Ph[n].on("connection",(o,c)=>{let l=new tY(c);l.isWebSocket=!0;let u=bS[n](l);XK[n](o,l,u)}),lY((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):Ph[n].handleUpgrade(o,c,l,f=>{o.__harperdb_request_upgraded=!0,u(o,c,l),Ph[n].emit("connection",f,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{_I[n]&&_I[n](o,c,l)})),r.push(i),JK[t?.runFirst?"unshift":"push"]({listener:e,port:n}),XK[n]=wS(JK,n),bS[n]=wS(fI,n)}return r}a(lEe,"onWebSocket");function ZK(e,t){t.writeHead(404),t.end(`Not found
131
+ `)}a(ZK,"defaultNotFound")});var YK={};Be(YK,{startHTTPThreads:()=>dEe,startSocketServer:()=>yI,updateWorkerIdleness:()=>gY});async function dEe(e=2,t){try{if(t)AI(0,1,!0);else{let{loadRootComponents:r}=IS();if(e===0)return(0,Cs.setMainIsWorker)(!0),await gI().startServers(),Promise.resolve([]);await r()}mY();for(let r=0;r<e;r++)AI(r,e);return Promise.all(EY)}finally{(0,Cs.threadsHaveStarted)()}}function mY(){let e=(0,_Y.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),TI=setInterval(()=>{DS.notify(e)},uEe).unref())}function AI(e,t=1,r){if(SI++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:kT.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===xT.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});EY.push(s),await s,_d.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=PS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=_d.indexOf(n);o>-1&&_d.splice(o,1)}if(a(i,"removeWorker"),hd){let o=hd;hd=[];for(let c of o)pY[c.localPort](null,c)}}}),r){let n=setInterval(()=>{RI?RI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),SI=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function yI(e=0,t){if(typeof e=="string")try{(0,LS.existsSync)(e)&&(0,LS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=fEe:r=_Ee(t):r=bI;let n=(0,pd.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=pY[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),RI=!0,r(i,(o,c)=>{if(!o){if(uY){let u=i._socket||new pd.Socket({handle:i,writable:!0,readable:!0});uY.deliverSocket(u,e,c),u.resume()}else SI>0?(hd.length===0&&setTimeout(()=>{hd.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(),i.localPort=e,hd.push(i)):(console.log("start up a dynamic thread to handle request"),AI(0));sr(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new pd.Socket({handle:i,writable:!0,readable:!0});EEe(u,o,e)}sr(!0,"socket-routed")})},DS.info(`HarperDB ${hY.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function bI(e,t){let r,n=0;for(let s of _d){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=CS)return CS=i,t(r);n=i}CS=0,t(r)}function fEe(e,t){let r={};e.getpeername(r);let n=r.address,s=Ed.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);bI(e,o=>{Ed.set(n,{worker:o,lastUsed:i}),t(o)})}function _Ee(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new pd.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Ed.get(l),f=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=f,s(u.worker);bI(n,d=>{Ed.set(l,{worker:d,lastUsed:f}),s(d,o)})})}a(r,"findByHeaderAffinity")}function gY(){CS=0;for(let e of _d)e.expectedIdle=e.recentELU.idle+hEe,e.requests=1;_d.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function EEe(e,t,r){let n=pEe++;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(),PS.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")),PS.delete(n)),s.event=="destroy"&&(e.destroy(),PS.delete(n))})}var Cs,pd,DS,LS,fY,_Y,hY,_d,hd,pY,uY,SI,EY,TI,uEe,RI,CS,dY,Ed,hEe,PS,pEe,cI=be(()=>{Cs=U(rt()),pd=require("net");H();DS=U(j()),LS=require("fs");Ci();fY=require("worker_threads"),_Y=U(Fu()),hY=U(_t()),_d=[],hd=[],pY=[],SI=0,EY=[];fY.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===HT.RESTART&&TI&&(clearInterval(TI),mY())}));uEe=6e5;a(dEe,"startHTTPThreads");a(mY,"licenseWarning");a(AI,"startHTTPWorker");a(yI,"startSocketServer");CS=0;a(bI,"findMostIdleWorker");dY=36e5,Ed=new Map;a(fEe,"findByRemoteAddressAffinity");a(_Ee,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ed)r.lastUsed+dY<e&&Ed.delete(t)},dY).unref();hEe=1e3;a(gY,"updateWorkerIdleness");(0,Cs.setMonitorListener)(gY);PS=new Map,pEe=1;a(EEe,"proxySocket")});var RY=P((OLe,AY)=>{"use strict";var mEe=require("cluster"),Al=ce();Al.initSync();var TY=(H(),D(q)),qo=j(),gEe=require("fastify"),SEe=require("@fastify/cors"),TEe=require("@fastify/compress"),AEe=require("@fastify/static"),REe=cb(),yEe=require("path"),{PACKAGE_ROOT:bEe}=_t(),OEe=$s(),NEe=ae(),wEe=qn(),IEe=Fu(),{server:CEe}=($r(),D(ic)),{authHandler:PEe,handlePostRequest:DEe,serverErrorHandler:LEe,reqBodyValidationHandler:MEe}=iS(),{registerContentHandlers:vEe}=(eo(),D(bA)),UEe=6e4,xEe=1024*1024*1024,BEe="TRUE",{CONFIG_PARAMS:vh}=TY,md;AY.exports={hdbServer:SY,start:SY};async function SY(e){try{qo.debug("In Fastify server"+process.cwd()),qo.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),qo.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=mEe.isMaster,await HEe();let t=e.securePort>0;md=kEe(t),await md.ready(),e||(e={}),e.isOperationsServer=!0;try{CEe.http(md.server,e),md.server.closeIdleConnections||await md.listen({port:0,host:"::"})}catch(r){throw md.close(),qo.error(r),qo.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),qo.fatal(t),process.exit(1)}}a(SY,"operationsServer");async function HEe(){qo.trace("Configuring HarperDB process."),OEe.setSchemaDataToGlobal(),await wEe.setUsersWithRolesCache(),await IEe.getLicense()}a(HEe,"setUp");function kEe(e){qo.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=FEe(e),r=gEe(t);r.server.headersTimeout=qEe(),r.setErrorHandler(LEe);let n=GEe();n&&r.register(SEe,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(REe),r.register(TEe),r.register(AEe,{root:yEe.join(bEe,"studio/build-local")}),vEe(r);let s=Al.get(TY.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!NEe.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[MEe,PEe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),DEe(i,o)}),r.get("/health",()=>"HarperDB is running."),qo.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(kEe,"buildServer");function FEe(e){let t=Al.get(vh.OPERATIONSAPI_NETWORK_TIMEOUT),r=Al.get(vh.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:xEe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(FEe,"getServerOptions");function GEe(){let e=Al.get(vh.OPERATIONSAPI_NETWORK_CORS),t=Al.get(vh.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===BEe)&&(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(GEe,"getCORSOpts");function qEe(){return Al.get(vh.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??UEe}a(qEe,"getHeaderTimeoutConfig")});var PI={};Be(PI,{disableNATS:()=>VEe,publishToStream:()=>US,setNATSReplicator:()=>OI,setPublishToStream:()=>KEe,setSubscription:()=>CI,start:()=>$Ee});function $Ee(){Uh.default.get(B.CLUSTERING_ENABLED)&&WEe()}function VEe(e=!0){wY=e}function KEe(e,t){US=e,CI=t}function WEe(){if(wY||process.env._DISABLE_NATS)return;let e=Je(),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];OI(s,r,i)}}$c((r,n)=>{OI(r.tableName,r.databaseName,r),n&&CY(r)}),!yY&&(yY=!0)}function OI(e,t,r){if(t==="system"&&zEe.includes(e))return;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 qr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){CY(i)}static subscribe(){let i=new Mn;return CI(t,e,i),i}static subscribeOnThisThread(i){return i<(Uh.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??YEe)}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 MS(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=IY;return i}a(n,"getNATSTransaction")}function CY(e){let t=Uh.default.get(B.CLUSTERING_NODENAME);US(`${wI.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,II.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 bY,wI,II,OY,NY,Uh,vS,wY,US,CI,YEe,IY,yY,zEe,MS,NI,PY=be(()=>{De();ta();bY=U(Sr()),wI=U(Ot()),II=U(co());Ul();OY=U(xS()),NY=U(an()),Uh=U(ce());H();vS=U(j());a($Ee,"start");a(VEe,"disableNATS");US=bY.publishToStream,CI=OY.setSubscription;a(KEe,"setPublishToStream");YEe=2;a(WEe,"assignReplicationSource");zEe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(OI,"setNATSReplicator");a(CY,"publishSchema");MS=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=Uh.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let f of i){let d=f.table,h=f.operation=="put"?"upsert":f.operation;l||(vS.trace(`Sending transaction event ${h}`),u=l={operation:h,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,h!=="delete"&&h!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===h?(o.push(f.record),c.push(f.id)):u=u.next={operation:h,table:d,id:f.id,record:f.record},f.expiresAt&&(u.expiresAt=f.expiresAt)}l&&n.push(US(`${wI.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,II.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(f=>{throw vS.error("An error has occurred trying to replicate transaction",l,f),f.statusCode=504,f}))}return Promise.all(n)}},NI=class extends MS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,NY.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};IY=new NI});async function UY({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await DI.get(e,{returnNonexistent:!0});i=new vI(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await DI.get(e);o&&o.delete()}i=new HS(e,t)}return n&&(n.id=e,n.user={username:t?.username},xh.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function LI(){return BS++,BS>65500&&(BS=1),BS}function MI(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=pi.getMatch(n,"mqtt");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 yt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var LY,$a,MY,vY,DY,DI,xh,BS,HS,vI,xY=be(()=>{De();Gl();LY=U(an()),$a=U(j());rc();MY=U(rt()),vY=U(gI());$r();DY=100,DI=ot({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"}]}}]}),xh=ot({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,MY.getWorkerIndex)()===0&&(async()=>{await vY.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of xh.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await je.getUser(r.user.username));try{await MI(r,t,r)}catch{(0,$a.warn)("Failed to publish will",t)}xh.delete(e.id)}})();a(UY,"getSession");BS=1;a(LI,"getNextMessageId");HS=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let f=this.subscriptions.find(T=>T.topic===s),d;f?(d=i>0,f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1)):d=i===2;let h={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,$a.trace)("Resuming subscription from",s,"from",o);let _=pi.getMatch(u,"mqtt");if(!_){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(h.url=_.relativeURL,h.url.indexOf("+")>-1||h.url.indexOf("#")>-1){let T=h.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(h.isCollection=!0,T.indexOf("+")===T.length-1)h.onlyChildren=!0,h.url="/"+T.slice(0,T.length-1);else{let m=T.split("/"),A;for(let F=0;F<m.length;F++)if(m[F].indexOf("+")>-1)if(m[F]==="+")A=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&A)throw new Error("Filters can not be combined");let w=!0;m[m.length-1]==="#"&&(m.length--,w=!1),A&&(n=a(F=>{let G=F.id;if(!Array.isArray(G)||w&&G.length!==m.length)return!1;for(let K=0;K<m.length;K++)if(m[K]!=="+"&&m[K]!==G[K])return!1;return!0},"filter"));let M=m.indexOf("+");h.url="/"+(M>-1?m.slice(0,M):m).concat("").join("/")}}let p=_.path,S=_.Resource,g=await yt(h,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let m=await S.subscribe(h,T);if(!m)return;if(!m[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let A=(async()=>{for await(let w of m)try{let M;if(w.type&&w.type!=="put"&&w.type!=="delete"&&w.type!=="message"&&w.type!=="patch"||n&&!n(w))continue;r?(w.topic=s,M=this.needsAcknowledge(w)):(w.acknowledge?.(),M=LI());let F=w.id;if(Array.isArray(F)&&(F=Fl(F)),F==null&&(F=""),await this.listener(p+"/"+F,w.value,M,t)===!1)break;this.awaitingAcks?.size>DY?await new Promise(K=>setTimeout(K,this.awaitingAcks.size-DY)):await new Promise(setImmediate)}catch(M){(0,$a.warn)(M)}})();return m});if(g)return g.topic=s,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=LI();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return MI(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();yt(r,async()=>{try{if(!t){let n=await xh.get(this.sessionId);n?.doesExist()&&await MI(n,n.data,r)}}finally{await xh.delete(this.sessionId)}}).catch(n=>{(0,$a.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(MI,"publish");vI=class extends HS{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=LI(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;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,$a.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.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,LY.getNextMonotonicTime)()),(0,$a.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),DI.put(this.sessionRecord)}}});var xI={};Be(xI,{bypassAuth:()=>QEe,start:()=>jEe});function QEe(){GY=!0}function jEe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new FY.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,f,d,h)=>{if(f.headers.get("sec-websocket-protocol")!=="mqtt")return h(u,f,d);o.events.emit("connection",u),dr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:_,onClose:p}=HY(u,S=>{u.send(S)},f,Promise.resolve(d).then(()=>f?.user),o);u.on("message",_),u.on("close",p),u.on("error",S=>{dr.info?.("WebSocket error",S)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let f;if(o.events.emit("connection",u),dr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let _=l.user;if(_!==null){(_===void 0||_==="Common Name"||_==="CN")&&(_=u.getPeerCertificate().subject.CN);try{f=await e.getUser(_,null,null),(0,gd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&FS.notify?.({username:f?.username,status:Us.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(p){throw(0,gd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&FS.error?.({username:_,status:Us.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),p}}else dr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(_){o.events.emit("error",_,u),dr.error?.(_)}else if(l.required)return dr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!f&&GY&&u.remoteAddress.includes("127.0.0.1")&&(f=await(0,kY.getSuperUser)(),dr.debug?.("Auto-authorizing local connection",f?.username));let{onMessage:d,onClose:h}=HY(u,_=>u.write(_),null,f,o);u.on("data",d),u.on("close",h),u.on("error",_=>{dr.info?.("Socket error",_)})},{port:t,securePort:s,mtls:l})),c}function HY(e,t,r,n,s){BY||(BY=!0,l_(d=>{kS>0&&d.push({metric:"mqtt-connections",connections:kS,byThread:!0})}));let i;kS++;let o,c={protocolVersion:4},l=(0,GS.parser)({protocolVersion:5});function u(d){l.parse(d)}a(u,"onMessage");function f(){kS--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!1,"connection","mqtt","disconnect"),dr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(f,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n);let h=d.cmd;if(o)o.then&&await o;else if(h!=="connect"){dr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let _=d.topic,p=_?.indexOf("/",1),S=p>0?_.slice(0,p):_;sr(d.length,"bytes-received",S,T(d),"mqtt");try{switch(o?.receivedPacket?.(),h){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await je.getUser(d.username,d.password.toString(),r),(0,gd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&FS.notify?.({username:n?.username,status:Us.SUCCESS,type:zo.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(ie){return(0,gd.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&FS.error?.({username:d.username,status:Us.FAILURE,type:zo.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,ie),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let ie=e.deserialize||(e.deserialize=ro(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?ie(d.will.payload):void 0,delete d.will.payload}o=UY({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(ie){return dr.error?.(ie),s.events.emit("auth-failed",d,e,ie),Wn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:ie.code||5,returnCode:ie.code||128})}s.events.emit("connected",o,e),Wn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let A=a(async(ie,X,re,z)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",ie);let he=ie.indexOf("/",1),Te=he>0?ie.slice(0,he):ie;g({cmd:"publish",topic:ie,payload:await m(X),messageId:re||Math.floor(Math.random()*1e8),qos:z.qos},Te);let Ie=e._socket??e;return Ie.writableNeedDrain?new Promise(pe=>Ie.once("drain",pe)):!Ie.closed}catch(he){return dr.error?.(he),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(A),o.sessionWasPresent&&await o.resume();break;case"subscribe":let w=[];for(let ie of d.subscriptions){let X;try{let re=await o.addSubscription(ie,ie.qos>=1);X=re?re.qos||0:c.protocolVersion<5?128:143}catch(re){s.events.emit("error",re,e,ie,o),re.statusCode?re.statusCode===500?dr.warn?.(re):dr.info?.(re):dr.error?.(re),X=c.protocolVersion<5?128:re.statusCode===403?135:re.statusCode===404?143:128}w.push(X)}await o.committed,g({cmd:"suback",granted:w,messageId:d.messageId});break;case"unsubscribe":{let ie=[];for(let X of d.unsubscriptions)ie.push(o.removeSubscription(X)?0:17);g({cmd:"unsuback",granted:ie,messageId:d.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let M=d.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=ro(r?.headers.get?.("content-type"))),K=(d.payload?.length||0)>0?F(d.payload):void 0,ee;try{ee=await o.publish(d,K)}catch(ie){s.events.emit("error",ie,e,d,o),dr.warn?.(ie),d.qos>0&&g({cmd:M,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&g({cmd:M,messageId:d.messageId,reasonCode:ee===!1?144:0},d.topic);break;case"pubrec":g({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wn(!0,"connection","mqtt","disconnect"),dr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(A){s.events.emit("error",A,e,d,o),dr.error?.(A),g({cmd:"disconnect"})}function g(A,w){let M=(0,GS.generate)(A,c);t(M),sr(M.length,"bytes-sent",w,T(A),"mqtt")}a(g,"sendPacket");function T(A){return A.qos>0?A.cmd+",qos="+A.qos:A.cmd}a(T,"packetMethodName");function m(A){return sa(A,r)}a(m,"serialize")}),l.on("error",d=>{dr.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:f}}var GS,kY,gd,UI,FY,FS,dr,GY,BY,kS,qY=be(()=>{GS=require("mqtt-packet");xY();kY=U(qn());eo();Ci();$r();gd=U(ce());H();UI=U(Qi()),FY=require("events"),FS=(0,UI.loggerWithTag)("auth-event"),dr=(0,UI.loggerWithTag)("mqtt"),GY=(0,gd.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(QEe,"bypassAuth");a(jEe,"start");kS=0;a(HY,"onSocket")});var rh={};Be(rh,{component_errors:()=>Td,getComponentName:()=>tme,loadComponent:()=>VS,loadComponentDirectories:()=>zY,setErrorReporter:()=>eme});function zY(e,t){t&&(HI=t),e&&(GI=e);let r=[];if((0,ft.existsSync)(BI)){let s=(0,ft.readdirSync)(BI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Et.join)(BI,o);r.push(VS(c,HI,LT,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(VS(n,HI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{WY=!0})}function eme(e){Bh=e}async function VS(e,t,r,n,s,i){let o=(0,ft.realpathSync)(e);if(qS.has(o))return qS.get(o);qS.set(o,!0),s&&(GI=s);try{let c;n&&(Td=new Map);let l=(0,Et.join)(e,"harperdb-config.yaml");(0,ft.existsSync)(l)?c=n?(0,KS.getConfigObj)():(0,kI.parseDocument)((0,ft.readFileSync)(l,"utf8")).toJSON():!n&&(0,ft.existsSync)(l=(0,Et.join)(e,"config.yaml"))?c=(0,kI.parseDocument)((0,ft.readFileSync)(l,"utf8")).toJSON():c=qI;let u=(0,Et.join)(e,"node_modules","harperdb");try{Rl.isMainThread&&(n||(0,ft.existsSync)(u)&&(0,ft.realpathSync)(FI.PACKAGE_ROOT)!==(0,ft.realpathSync)(u))&&((0,ft.rmSync)(u,{recursive:!0,force:!0}),(0,ft.existsSync)((0,Et.join)(e,"node_modules"))||(0,ft.mkdirSync)((0,Et.join)(e,"node_modules")),(0,ft.symlinkSync)(FI.PACKAGE_ROOT,u,"dir"))}catch(h){Sd.default.error("Error symlinking harperdb module",h)}let f=$S,d=n;for(let h in c){$S=h;let _=c[h];if(Td.set(n?h:(0,Et.basename)(e),!1),!_)continue;let p,S=_.package;try{if(S){let w=e,M;for(;!(0,ft.existsSync)(M=(0,Et.join)(w,"node_modules",h));)if(w=(0,Et.dirname)(w),w.length<(0,YY.getHdbBasePath)().length){M=null;break}if(M)p=await VS(M,t,r,!1),d=!0;else throw new Error(`Unable to find package ${h}:${S}`)}else p=ZEe[h];if(!p)continue;let g=a(w=>(w.origin=r,ot(w)),"ensureTable"),T=_.network||(_.port||_.securePort)&&_,m=T?.securePort||T?.https&&T.port,A=!T?.https&&T?.port;if(Rl.isMainThread&&(p=await p.startOnMainThread?.({server:je,ensureTable:g,port:A,securePort:m,resources:t,..._})||p,n&&T))for(let w of[A,m])try{if(+w&&!$Y.includes(w)){let M=$I.get(B.HTTP_SESSIONAFFINITY);M&&Sd.default.warn("Session affinity is not recommended and may cause memory leaks"),(M||!aS)&&($Y.push(w),yI(w,M))}}catch(M){console.error("Error listening on socket",w,M,h)}if(t.isWorker&&(p=await p.start?.({server:je,ensureTable:g,port:A,securePort:m,resources:t,..._})||p),GI.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&_.files!=null){if(_.files.includes(".."))throw(0,KY.handleHDBError)("Can not reference parent directories");let w=(0,Et.join)(e,_.files).replace(/\\/g,"/"),M=w.indexOf("/*");if(M>-1&&_.files!==qI[h]?.files&&!(0,ft.existsSync)(w.slice(0,M)))throw new Error(`The path '${w.slice(0,M)}' does not exist and cannot be used as the base of the resolved 'files' path value '${_.files}'`);let F=(0,Et.basename)(e),G=_.path||"/";G=G.startsWith("/")?G:G.startsWith("./")?"/"+F+G.slice(2):G==="."?"/"+F:"/"+F+"/"+G;let K,ee,ie;if(_.root){let re=_.root;re.startsWith("/")&&(re=re.slice(1)),re.endsWith("/")&&(re=re.slice(0,-1)),re+="/",ee=(0,Et.join)(e,re)}else(ie=w.indexOf("/*"))>-1?(ee=w.slice(0,ie+1),K=(0,Et.relative)(e,ee)):_.files.indexOf("/")>-1&&(ee=w.slice(0,w.lastIndexOf("/")+1),K=(0,Et.relative)(e,ee));let X=!1;if(Rl.isMainThread&&p.setupDirectory&&(X=await p.setupDirectory?.(G,ee,t)),t.isWorker&&p.handleDirectory&&(X=await p.handleDirectory?.(G,ee,t)),X){d=!0;continue}for(let re of await(0,VY.default)(w,{onlyFiles:!1,objectMode:!0})){let{path:z,dirent:he}=re;d=!0;let Te=(0,Et.relative)(e,z).replace(/\\/g,"/");if(K)if(Te.startsWith(K))Te=Te.slice(K.length+1);else throw new Error(`The root path '${_.root}' does not reference a valid part of the file path '${Te}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ie=G+(G.endsWith("/")?"":"/")+Te;try{if(he.isFile()){let pe=await XEe(z);Rl.isMainThread&&await p.setupFile?.(pe,Ie,z,t),t.isWorker&&await p.handleFile?.(pe,Ie,z,t)}else Rl.isMainThread&&await p.setupDirectory?.(Ie,z,t),t.isWorker&&await p.handleDirectory?.(Ie,z,t)}catch(pe){pe.message=`Could not load ${he.isFile()?"file":"directory"} '${z}'${_.module?" using '"+_.module+"'":""} for application '${e}' due to: ${pe.message}`,Bh?.(pe),((0,Ad.getWorkerIndex)()===0?console:Sd.default).error(pe),t.set(_.path||"/",new ra(pe)),Td.set(n?h:(0,Et.basename)(e),pe.message)}}}}catch(g){g.message=`Could not load component '${h}' for application '${(0,Et.basename)(e)}' due to: ${g.message}`,Bh?.(g),((0,Ad.getWorkerIndex)()===0?console:Sd.default).error(g),t.set(_.path||"/",new ra(g),null,!0),Td.set(n?h:(0,Et.basename)(e),g.message)}}if($S=f,Rl.isMainThread&&!WY&&i&&(0,Ad.watchDir)(e,async()=>zY()),c.extensionModule){let h=await rm((0,Et.join)(e,c.extensionModule));return qS.set(o,h),h}if(!d&&t.isWorker){let h=`${e} did not load any modules, resources, or files, is this a valid component?`;Bh?.(new Error(h)),((0,Ad.getWorkerIndex)()===0?console:Sd.default).error(h),Td.set((0,Et.basename)(e),h)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,Bh?.(c),t.set("",new ra(c))}}var ft,Et,Rl,kI,$I,FI,VY,Ad,Sd,KY,YY,JEe,KS,XEe,BI,GI,WY,HI,Td,ZEe,qI,$Y,qS,Bh,$S,tme,nh=be(()=>{ft=require("fs"),Et=require("path"),Rl=require("worker_threads"),kI=require("yaml"),$I=U(ce()),FI=U(_t());H();aD();$D();Tx();bx();Ox();aB();h1();T1();VY=U(require("fast-glob")),Ad=U(rt()),Sd=U(j());Yy();$r();KY=U(_e());De();cI();YY=U(ce()),JEe=U(RY());Og();PY();_s();qY();KS=U(wt());Pw();iA();({readFile:XEe}=ft.promises),BI=(0,KS.resolvePath)($I.get(B.COMPONENTSROOT)),GI=new Map,Td=new Map;a(zY,"loadComponentDirectories");ZEe={REST:cm,rest:cm,graphql:NA,graphqlSchema:lA,roles:Ky,jsResource:zy,fastifyRoutes:Ow,login:jy,static:Nw,operationsApi:JEe,customFunctions:{},http:{},clustering:PI,replication:Aa,authentication:J_,mqtt:xI},qI={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(qI,"static",{value:{files:"web/**"}});$Y=[],qS=new Map;a(eme,"setErrorReporter");tme=a(()=>$S,"getComponentName");a(VS,"loadComponent")});var IS=P((tMe,jY)=>{var{isMainThread:QY}=require("worker_threads"),{getTables:rme,getDatabases:ZLe,table:eMe}=(De(),D(nt)),{loadComponentDirectories:nme,loadComponent:sme}=(nh(),D(rh)),{resetResources:ime}=(Gl(),D(rD)),ome=RN(),ame=wt(),{dirname:cme}=require("path"),{getConnection:lme}=Sr(),ume=ce(),{CONFIG_PARAMS:dme}=(H(),D(q)),{loadCertificates:fme}=Xs(),VI=new Map;async function _me(e=!1){!QY&&ume.get(dme.CLUSTERING_ENABLED)&&lme();try{QY&&await ome()}catch(n){console.error(n)}let t=ime();rme(),t.isWorker=e,await fme(),await sme(cme(ame.getConfigFilePath()),t,"hdb",!0,VI),await nme(VI,t);let r=[];for(let[n]of VI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(_me,"loadRootComponents");jY.exports.loadRootComponents=_me});var rt=P((nMe,ai)=>{"use strict";oA();var{Worker:hme,MessageChannel:pme,parentPort:Fi,isMainThread:QI,threadId:Eme,workerData:Gi}=require("worker_threads"),{PACKAGE_ROOT:mme}=_t(),{join:eW,isAbsolute:gme,extname:Sme}=require("path"),{server:tW}=($r(),D(ic)),{watch:Tme,readdir:Ame}=require("fs/promises"),{totalmem:JY}=require("os"),Rd=(H(),D(q)),rW=ce(),qi=j(),{randomBytes:Rme}=require("crypto"),{_assignPackageExport:yme}=ui(),XY=1024*1024,Va=[],Ps=[],bme=50,jI=1e4,Ome="restart",nW="request_thread_info",sW="resource_report",iW="thread_info",oW="added-port",Nme="ack",KI;yme("threads",Ps);ai.exports={startWorker:YI,restartWorkers:XI,shutdownWorkers:Dme,workers:Va,setMonitorListener:kme,onMessageFromWorkers:Lme,onMessageByType:_W,broadcast:vme,broadcastWithAcknowledgement:xme,setChildListenerByType:Pme,getWorkerIndex:aW,getWorkerCount:cW,getTicketKeys:uW,setMainIsWorker:Ime,setTerminateTimeout:wme,restartNumber:Gi?.restartNumber||1};Ps.onMessageByType=_W;Ps.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ps.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};ai.exports.whenThreadsStarted=new Promise(e=>{ai.exports.threadsHaveStarted=e});var JI;function wme(e){jI=e}a(wme,"setTerminateTimeout");function aW(){return Gi?Gi.workerIndex:JI?0:void 0}a(aW,"getWorkerIndex");function cW(){return Gi?Gi.workerCount:JI?1:void 0}a(cW,"getWorkerCount");function Ime(e){JI=e,ai.exports.threadsHaveStarted()}a(Ime,"setMainIsWorker");var lW=1,YS;function uW(){return YS||(YS=QI?Rme(48):Gi.ticketKeys,YS)}a(uW,"getTicketKeys");Object.defineProperty(tW,"workerIndex",{get(){return aW()}});Object.defineProperty(tW,"workerCount",{get(){return cW()}});var dW={[nW](e,t){Bme(t)},[sW](e,t){Hme(t,e)}};function YI(e,t={}){let r=process.constrainedMemory?.()||JY();r=Math.min(r,JY(),2e4*XY);let n=rW.get(Rd.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/XY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ps){let u=new pme;u.existingPort=l,i.push(u),o.push(u.port2)}Sme(e)||(e+=".js");let c=new hme(gme(e)?e:eW(mme,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:lW=t.threadCount,name:t.name,restartNumber:ai.exports.restartNumber,ticketKeys:uW()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:oW,port:l,threadId:c.threadId},[l]);return zS(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>YI(e,t),c.on("error",l=>{qi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Va.splice(Va.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<bme?(t.unexpectedRestarts=c.unexpectedRestarts+1,YI(e,t)):qi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{dW[l.type]?.(l,c)}),Va.push(c),Gme(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(YI,"startWorker");var Cme=[Rd.THREAD_TYPES.HTTP];async function XI(e=null,t=Math.max(lW>3,1),r=!0){if(QI){if(r){let{loadRootComponents:o}=IS();await o()}ai.exports.restartNumber++,t<1&&(t=t*Va.length);let n=[],s=[];for(let o of Va.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;qi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ai.exports.restartNumber,type:Rd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Cme.indexOf(o.name)>-1,l=new Promise(u=>{let f=setTimeout(()=>{qi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},jI*2).unref();o.on("exit",()=>{clearTimeout(f),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),f=new Promise(d=>{let h=a(_=>{_.type===Rd.ITC_EVENT_TYPES.CHILD_STARTED&&(qi.trace("Worker has started",u.threadId),d(),s.splice(s.indexOf(f)),u.off("message",h))},"startListener");qi.trace("Waiting for worker to start",u.threadId),u.on("message",h)});s.push(f),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}=Wu();r&&(e==="http"||!e)&&rW.get(Rd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Fi.postMessage({type:Ome,workerType:e})}a(XI,"restartWorkers");function Pme(e,t){dW[e]=t}a(Pme,"setChildListenerByType");function Dme(e){return XI(e,1/0,!1)}a(Dme,"shutdownWorkers");var fW=[];function Lme(e){fW.push(e)}a(Lme,"onMessageFromWorkers");var WI=new Map;function _W(e,t){let r=WI.get(e);r||WI.set(e,r=[]),r.push(t)}a(_W,"onMessageByType");var Mme=10;async function vme(e,t){let r=0;for(let n of Ps)try{n.postMessage(e),r++>Mme&&(r=0,await new Promise(setImmediate))}catch(s){qi.error("Unable to send message to worker",s)}t&&pW(e,null)}a(vme,"broadcast");var WS=new Map,Ume=1;function xme(e){return new Promise(t=>{let r=0;for(let n of Ps)try{let s=Ume++,i=a(()=>{WS.delete(s),--r===0&&t(),n!==Fi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,WS.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of WS)o.port===n&&o()})),n.postMessage(e),r++}catch(s){qi.error("Unable to send message to worker",s)}r===0&&t()})}a(xme,"broadcastWithAcknowledgement");function Bme(e){e.postMessage({type:iW,workers:hW()})}a(Bme,"sendThreadInfo");function hW(){let e=Date.now();return Va.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(hW,"getChildWorkerInfo");function Hme(e,t){e.resources=t,e.resources.updated=Date.now()}a(Hme,"recordResourceReport");var zI;function kme(e){zI=e}a(kme,"setMonitorListener");var Fme=1e3,ZY=!1;function Gme(){ZY||(ZY=!0,setInterval(()=>{for(let e of Va){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}zI&&zI()},Fme).unref())}a(Gme,"startMonitoring");var qme=1e3;if(Fi&&Gi?.addPorts){zS(Fi);for(let e=0,t=Gi.addPorts.length;e<t;e++){let r=Gi.addPorts[e];r.threadId=Gi.addThreadIds[e],zS(r)}setInterval(()=>{let e=process.memoryUsage();Fi.postMessage({type:sW,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qme).unref(),KI=a(()=>new Promise((e,t)=>{Fi.on("message",r),Fi.postMessage({type:nW});function r(n){n.type===iW&&(Fi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else KI=hW;ai.exports.getThreadInfo=KI;function zS(e,t){Ps.push(e),e.on("message",r=>{if(r.type===oW)r.port.threadId=r.threadId,zS(r.port);else if(r.type===Nme){let n=WS.get(r.id);n&&n()}else pW(r,e)}).on("close",()=>{Ps.splice(Ps.indexOf(e),1)}).on("exit",()=>{Ps.splice(Ps.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(zS,"addPort");function pW(e,t){for(let n of fW)n(e,t);let r=WI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){qi.error(s)}}a(pW,"notifyMessageListeners");if(QI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Ame(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(eW(s,o.name));try{for await(let{filename:o}of Tme(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await XI(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");ai.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Fi.on("message",async e=>{let{type:t}=e;t===Rd.ITC_EVENT_TYPES.SHUTDOWN&&(ai.exports.restartNumber=e.restartNumber,Fi.unref(),setTimeout(()=>{qi.warn("Thread did not voluntarily terminate",Eme),process.exit(0)},jI).unref())})});var k0={};Be(k0,{ACTION_32_BIT:()=>eE,ACTION_64_BIT:()=>Kme,AUDIT_STORE_OPTIONS:()=>Y_,Decoder:()=>qc,HAS_BLOBS:()=>ks,HAS_CURRENT_RESIDENCY_ID:()=>_c,HAS_EXPIRATION_EXTENDED_TYPE:()=>Sf,HAS_ORIGINATING_OPERATION:()=>gf,HAS_PREVIOUS_RESIDENCY_ID:()=>hc,REMOTE_SEQUENCE_UPDATE:()=>Cm,createAuditEntry:()=>Yl,getLastRemoved:()=>Qb,openAuditStore:()=>XS,readAuditEntry:()=>bt,removeAuditEntry:()=>ZS,setAuditRetention:()=>Vme,transactionKeyEncoder:()=>bW});function XS(e){let t=e.auditStore=e.openDB(ZI.AUDIT_STORE_NAME,{create:!1,...Y_});t||(t=e.auditStore=e.openDB(ZI.AUDIT_STORE_NAME,Y_),mW(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(i,o,c){return r[i]=c,t.tableStores[i]=o,t.deleteCallbacks=r,{remove(){delete r[i]}}};let n=null;function s(i=QS){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c,l;try{for(let{key:u,value:f}of t.getRange({start:1,snapshot:!1,end:Date.now()-eC})){try{c=ZS(t,u,f)}catch(d){yd.warn("Error removing audit entry",d)}if(l=u,await new Promise(setImmediate),++o>=$me){i=10;break}}await c}finally{o===0?i=Math.min(i<<1,eC/10):mW(t,l),s(i)}},i).unref()}if(a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,kh.getWorkerIndex)()===(0,kh.getWorkerCount)()-1&&s(QS),(0,kh.getWorkerIndex)()===0&&!EW)for(let i of t.getKeys({reverse:!0,limit:1}))i>Date.now()&&(EW=!0,yd.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function ZS(e,t,r){let n=Yme(r),s;if(n&ks){s=bt(r);let i=e.tableStores[s.tableId];i.getEntry(s.recordId).version!==s.version&&cc(()=>Zi(s.getValue(i)),i.rootStore)}if((n&15)===tC){s=s||bt(r);let i=s.tableId;e.tableStores[s.tableId].getEntry(s.recordId).version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function mW(e,t){rC[0]=t,e.put(Symbol.for("last-removed"),OW)}function Qb(e){let t=e.get(Symbol.for("last-removed"));if(t)return OW.set(t),rC[0]}function Vme(e,t=QS){eC=e,QS=t}function Yl(e,t,r,n,s,i,o,c,l,u,f,d,h){let _=NW[o];if(!_)throw new Error(`Invalid audit entry type ${o}`);let p=1;if(n&&(n>1?Ka.setFloat64(0,n):Ds.set(xA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}T(s),T(t),g(r),Ka.setFloat64(p,e),p+=8,l&_c&&T(u),l&hc&&T(f),l&Sf&&(Ka.setFloat64(p,d),p+=8),l&gf&&T(wW[h]),i?g(i):Ds[p++]=0,l?Ka.setUint32(n?8:0,_|l|3221225472):Ds[n?8:0]=_;let S=Ds.subarray(0,p);if(c)return Buffer.concat([S,c]);return S;function g(m){let A=p;p+=1,p=(0,yl.writeKey)(m,Ds,p);let w=p-A-1;w>127?w>16383?(yd.error("Key or username was too large for audit entry",m),p=A+1,Ds[A]=0):(Ds.copyWithin(A+2,A+1,p),Ka.setUint16(A,w|32768),p++):Ds[A]=w}function T(m){m<128?Ds[p++]=m:m<16384?(Ka.setUint16(p,m|32768),p+=2):m<1056964608?(Ka.setUint32(p,m|3221225472),p+=4):(Ds[p]=255,Ka.setUint32(p+1,m),p+=5)}}function Yme(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new qc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function bt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new qc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,f=n.position+=l,d=n.readFloat64(),h,_,p,S;if(i&_c&&(h=n.readInt()),i&hc&&(_=n.readInt()),i&Sf&&(p=n.readFloat64()),i&gf){let m=n.readInt();S=wW[m]}l=n.readInt();let g=n.position,T=n.position+=l;return{type:NW[i&7],tableId:c,nodeId:o,get recordId(){return(0,yl.readKey)(e,u,f)},getBinaryRecordId(){return e.subarray(u,f)},version:d,previousLocalTime:s,get user(){return T>g?(0,yl.readKey)(e,g,T):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(m,A,w){if(i&jS||i&Hh&&!A)return cc(()=>m.decoder.decode(e.subarray(n.position,r)),m.rootStore);if(i&Hh&&w)return Py(m.getEntry(this.recordId),w,m)},getBinaryValue(){return i&(jS|Hh)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:h,previousResidencyId:_,expiresAt:p,originatingOperation:S}}catch(n){return yd.error("Reading audit entry error",n,e),{}}}var yl,JS,ZI,kh,yW,yd,Ds,Ka,bW,Y_,eC,$me,rC,OW,QS,EW,jS,Hh,gW,tC,SW,TW,AW,RW,eE,Kme,Cm,_c,hc,gf,Sf,ks,NW,wW,qc,no=be(()=>{yl=require("ordered-binary"),JS=U(ce()),ZI=U(Mt());H();kh=U(rt()),yW=U(ae());Wl();yd=U(j());$E();cs();(0,JS.initSync)();Ds=Buffer.alloc(2816),Ka=new DataView(Ds.buffer,Ds.byteOffset,2816),bW={writeKey(e,t,r){return e===mf?(t.set(mf,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,yl.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,yl.readKey)(e,t,r)}},Y_={encoding:"binary",keyEncoder:bW},eC=(0,yW.convertToMS)((0,JS.get)(B.LOGGING_AUDITRETENTION))||86400*3,$me=1e3,rC=new Float64Array(1),OW=new Uint8Array(rC.buffer),QS=1e4,EW=!1;a(XS,"openAuditStore");a(ZS,"removeAuditEntry");a(mW,"updateLastRemoved");a(Qb,"getLastRemoved");a(Vme,"setAuditRetention");jS=16,Hh=32,gW=1,tC=2,SW=3,TW=4,AW=5,RW=6,eE=14,Kme=15,Cm=11,_c=512,hc=1024,gf=2048,Sf=4096,ks=8192,NW={put:gW|jS,[gW]:"put",delete:tC,[tC]:"delete",message:SW|jS,[SW]:"message",invalidate:TW|Hh,[TW]:"invalidate",patch:AW|Hh,[AW]:"patch",relocate:RW,[RW]:"relocate"},wW={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(Yl,"createAuditEntry");a(Yme,"readAction");a(bt,"readAuditEntry");qc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),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(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function iC(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=CW,Wme(e.primaryStore,e.auditStore)):(c=IW,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{PW(IW[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Fl(t);let f=new sC(r);f.startTime=n;let d=u.get(t);return d?d.push(f):(u.set(t,d=[f]),d.tables=u,d.key=t),f.subscriptions=d,f}function PW(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),DW(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=bt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Fl(c),u=0;do{let f=o.get(l);if(f){for(let h of f)if(!(u>0&&!(h.includeDescendants&&!(h.onlyChildren&&u>1)))){if(h.startTime>=n){(0,nC.info)("omitting",c,h.startTime,n);continue}try{let _;h.supportsTransactions&&h.txnInProgress!==i.version&&(_=!0,h.txnInProgress||(r?r.push(h):r=[h]),h.txnInProgress=i.version),h.listener(c,i,n,_)}catch(_){console.error(_),(0,nC.info)(_)}}}if(l==null)break;let d=l.lastIndexOf?.("/",l.length-2);d>-1?l=l.slice(0,d):l=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Wme(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=CW[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{PW(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function DW(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function LH(e){return e.nextTransaction||(iC({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),DW(e)),e.nextTransaction}var nC,IW,CW,sC,jb=be(()=>{nC=U(j());Ul();Gl();no();IW=Object.create(null),CW=Object.create(null);a(iC,"addSubscription");sC=class extends Mn{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;if(t){let 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(PW,"notifyFromTransactionData");a(Wme,"listenToCommits");a(DW,"nextTransaction");a(LH,"whenNextTransaction")});var iw={};Be(iw,{EVICTED:()=>ea,INVALIDATED:()=>as,coerceType:()=>rT,makeTable:()=>sT,setServerUtilities:()=>tge});function sT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:f,sealed:d,splitSegments:h,replicate:_}=e,{expirationMS:p,evictionMS:S,audit:g,trackDeletes:T}=e,{attributes:m}=e;m||(m=[]);let A=kA(i,n,l),w,M,F={},G=Promise.resolve(),K,ee,ie;for(let W of m)(W.assignCreatedTime||W.name==="__createdtime__")&&(K=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(ee=W),W.expiresAt&&(ie=W),W.isPrimaryKey&&(F=W);let X,re=[],z=[],he=1,Te=2,Ie={},pe={},Ft=864e5,Gt,Jt,fr,Md=!1,za,bT=new Map,OT=new Map,Dt,vd,Ud=Od.get(B.REPLICATION_DATABASES);if(Array.isArray(Ud)){for(let W of Ud)if(W.name===c&&W.replicateTo>=0){vd=W.replicateTo;break}}let NT=i.getRange({start:!1,end:!1}).constructor,rp=10,xd=6;g&&Fd();class Le extends qr{#e;#t;#n;#r;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=m;static replicate=_;static sealed=d;static splitSegments=h??!0;static createdTimeProperty=K;static updatedTimeProperty=ee;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return p}static dbisDB=f;static schemaDefined=u;static sourcedFrom(E,O){if(O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}M=M||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),w=w||E.load;let R=a(I=>{let L=this.sources;if(L=L.filter(x=>x.intermediateSource&&x[I]&&(!x[I].reliesOnPrototype||x.prototype[I])),L.length>0)if(L.length===1){let x=L[0];return(N,v,$)=>{if(N?.source!==x)return x[I](v,$,N)}}else return(x,N,v)=>{let $=[];for(let Y of L){if(x?.source===Y)break;$.push(Y[I](N,v,x))}return Promise.all($)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=a(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(L,x,N)=>{if(!L?.source)return y[I](x,N,L)}},"getApplyToCanonicalSource");Ie={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},pe={put:R("put"),patch:R("patch"),delete:R("delete"),publish:R("publish"),invalidate:R("invalidate")};let C=y.shouldRevalidateEvents;return(async()=>{let I=!1,L,x=a(async(N,v)=>{let $=N.value,Y=N.table?$e[c][N.table]:Le;if(c===UT&&(N.table===dp.ROLE_TABLE_NAME||N.table===dp.USER_TABLE_NAME)&&(I=!0),N.id===void 0&&(N.id=$[Y.primaryKey],N.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(N));N.source=E;let ne={residencyId:Yo(N.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:N.nodeId},k=await Y.getResource(N.id,v,ne);switch(N.finished&&await N.finished,N.type){case"put":return C?k._writeInvalidate(ne):k._writeUpdate($,!0,ne);case"patch":return C?k._writeInvalidate(ne):k._writeUpdate($,!1,ne);case"delete":return k._writeDelete(ne);case"publish":return k._writePublish($,ne);case"invalidate":return k._writeInvalidate(ne);case"relocate":return k._writeRelocate(ne);default:xe.default.error?.("Unknown operation",N.type,N.id)}},"writeUpdate");try{let N=E.subscribe;N&&T==null&&(T=!0);let v={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},$=E.subscribeOnThisThread?E.subscribeOnThisThread((0,bl.getWorkerIndex)(),v):(0,bl.getWorkerIndex)()===0,Y=N&&$&&await E.subscribe?.(v);if(Y){let ne;for await(let k of Y)try{if(!(k.type==="transaction"?k.writes[0]:k)){xe.default.error?.("Bad subscription event",k);continue}if(k.source=E,k.type==="end_txn"){if(ne?.resolve(),k.localTime&&L!==k.localTime){if(k.remoteNodeIds?.length>0){let le=[Symbol.for("seq"),k.remoteNodeIds[0]],se=f.get(le),Q=se?.nodes;Q||(Q=[]);for(let Ee of k.remoteNodeIds.slice(1)){let ye=Q.find(Me=>Me.id===Ee);Q=Q.filter(Me=>Me.id!==Ee||Me===ye),ye||(ye={id:Ee,seqId:0},Q.push(ye)),ye.seqId=Math.max(se?.seqId??1,k.localTime),Ee===ne?.nodeId&&(ye.lastTxnTime=k.timestamp)}let fe=Math.max(se?.seqId??1,k.localTime);xe.default.trace?.("Received txn",c,new Date(fe),new Date(k.localTime),k.remoteNodeIds),f.put(le,{seqId:fe,nodes:Q})}L=k.localTime}k.onCommit&&ne?.committed.then(k.onCommit);continue}if(ne)if(k.beginTxn)ne.resolve();else{ne.write_promises.push(x(k,ne));continue}!k.timestamp&&k.version&&(k.timestamp=k.version);let oe=yt(k,()=>{if(k.type==="transaction"){let le=[];for(let se of k.writes)try{le.push(x(se,k))}catch(Q){throw Q.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(k),Q}return Promise.all(le)}else if(k.type==="define_schema"){let le=this.attributes.slice(0),se;for(let Q of k.attributes)le.find(fe=>fe.name===Q.name)||(le.push(Q),se=!0);se&&(ot({table:s,database:c,attributes:le,origin:"cluster"}),Gh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,$t.CREATE_TABLE,c,s)))}else return k.beginTxn?(ne=k,ne.write_promises=[x(k,k)],new Promise(le=>{ne.resolve=()=>le(Promise.all(ne.write_promises))})):x(k,k)});ne&&(ne.committed=oe),I&&oe&&!oe?.waitingForUserChange&&(oe.then(()=>Gh.signalUserChange(new qh.UserEventMsg(process.pid))),oe.waitingForUserChange=!0),k.onCommit&&(oe?oe.then(k.onCommit):k.onCommit())}catch(ve){xe.default.error?.("error in subscription handler",ve)}}}catch(N){xe.default.error?.(N)}})(),this}static get isCaching(){return M}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(E,O,R){let y=super.getResource(E,O,R);if(E!=null){Ir(E);try{if(y.getRecord?.())return y;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let b=!R?.async||i.cache?.get?.(E),C=mt(O),I=C.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Dn(E,O,{transaction:I,ensureLoaded:R?.ensureLoaded},b,L=>{if(L?Le._updateResource(y,L):y.#e=null,O.onlyIfCached&&O.noCacheStore){if(!y.doesExist())throw new Nr.ServerError("Entry is not cached",504)}else if(R?.ensureLoaded){let x=np(E,L,O,y);if(x)return C?.disregardReadTxn(),y.#i=!0,aC(x,N=>(Le._updateResource(y,N),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(E)),b}}return y}static _updateResource(E,O){E.#r=O,E.#e=O?.value??null,E.#n=O?.version}ensureLoaded(){let E=np(this.getId(),this.#r,this.getContext());if(E)return this.#i=!0,aC(E,O=>{this.#r=O,this.#e=O.value,this.#n=O.version})}static getNewId(){let E=F?.type;if(E==="String"||E==="ID")return super.getNewId();if(!Dt){let b=i.getEntry(Symbol.for("id_allocation")),C=b?.value,I;if(C&&C.nodeName===server.hostname&&(!nge(i)||C.pid===process.pid)){let L=C.start,x=C.end;I=L;for(let N of i.getKeys({start:x,end:L,limit:1,reverse:!0}))I=N}else C=y(b?.version??null),I=C.start;Dt=new BigInt64Array([BigInt(I)+1n]),Dt=new BigInt64Array(i.getUserSharedBuffer("id",Dt.buffer)),Dt.maxSafeId=C.end}let O=Number(Atomics.add(Dt,0,1n)),R=E==="Int"?512:1048576;if(O+R>=Dt.maxSafeId){let b=a(C=>{Dt.maxSafeId=O+(E==="Int"?1023:4194303);let I=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,L=C?void 0:i.useReadTransaction(),x=Number(Dt[0]);for(let $ of i.getKeys({start:x+1,end:I,limit:1,transaction:L}))I=$;L?.done();let{value:N,version:v}=i.getEntry(Symbol.for("id_allocation"));if(Dt.maxSafeId<I){if(N.end>Dt.maxSafeId-100)return;xe.default.info?.("New id allocation",O,Dt.maxSafeId,v),i.put(Symbol.for("id_allocation"),{start:N.start,end:Dt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),v)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Dt.maxSafeId}, but id of ${I} detected`);let $=y(v);$.alreadyUpdated||Atomics.store(Dt,0,BigInt($.start+1)),Dt.maxSafeId=$.end}},"updateEnd");O+R===Dt.maxSafeId?setImmediate(b):O+100>=Dt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return O;function y(b){let C=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=C/4,L,x,N=!1,v,$;do{v=Math.floor(Math.random()*C),$={start:v,end:v+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},L=0;for(let Y of i.getKeys({start:v,limit:1,reverse:!0}))L=Y;x=C;for(let Y of i.getKeys({start:v+1,end:C,limit:1}))x=Y;I*=.875,I<1e3&&!N&&(N=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,v,L,x,I))}while(!(I<x-v&&(I<v-L||L===0)));return i.transactionSync(()=>{let Y=i.getEntry(Symbol.for("id_allocation"));return(Y?.version??null)==b?(xe.default.info?.("Allocated new id range",$),i.put(Symbol.for("id_allocation"),$,Date.now()),$):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...Y.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,S||(S=0);else if(E&&typeof E=="object")p=E.expiration*1e3,S=(E.eviction||0)*1e3,Ft=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");Ft=Ft||(p+S)/4,Ko()}static getResidencyRecord(E){return f.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Le.getResidency=E}static setResidencyById(E){Le.getResidencyById=E}static getResidency(E,O,R){if(Le.getResidencyById)return Le.getResidencyById(E[t]);let y=vd;if(O.replicateTo!=null){if(Array.isArray(O.replicateTo))return O.replicateTo.includes(server.hostname)?O.replicateTo:[server.hostname,...O.replicateTo];O.replicateTo>=0&&(y=O.replicateTo)}if(y>=0&&server.nodes){let b=[server.hostname];if(R)b.push(...R.slice(0,y));else{let C=server.nodes.map(x=>x.name),I=Math.floor(C.length*Math.random());b.push(...C.slice(I,I+y));let L=I+y-C.length;L>0&&b.push(...C.slice(0,L))}return b}}static enableAuditing(E=!0){g=E,E&&Fd(),Le.audit=E}static coerceId(E){return E===""?null:rT(E,F)}static async dropTable(){delete $e[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&ks&&E.value&&Zi(E.value);if(c===o){for(let E of m)f.remove(Le.tableName+"/"+E.name),r[E.name]?.drop();f.remove(Le.tableName+"/"),i.drop(),await f.committed}else console.log("legacy dropTable"),await i.close(),await tT.default.remove(data_path),await tT.default.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Gh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,$t.DROP_TABLE,c,s))}get(E){if(typeof E=="string")return this.getProperty(E);if(this.isCollection)return this.search(E);if(this.getId()===null){if(E?.conditions)return this.search(E);let O=Le.getRecordCount();return{recordCount:O.recordCount,estimatedRecordRange:O.estimatedRange,records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:m}}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,O){let R=Qa(E);if(R?.read){if(R.isSuperUser)return!0;let y=R.attribute_permissions,b=O?.select;if(y?.length>0||Md&&b){if(O||(O={}),b){let C=y?.length>0&&oC(y,"read");O.select=b.map(I=>{let L=I.name||I;if(!C||C[L]){let x=fr[L]?.definition?.tableClass;if(x){if(I.name||(I={name:I}),!x.prototype.allowRead.call(null,E,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else O.select=y.filter(C=>C.read&&!fr[C.attribute_name]).map(C=>C.attribute_name);return O}else return!0}}allowUpdate(E,O){let R=Qa(E);if(R?.update){let y=R.attribute_permissions;if(y?.length>0){let b=oC(y,"update");for(let C in O)if(!b[C])return!1;for(let C of y){let I=C.attribute_name;!C.update&&!(I in O)&&(O[I]=this.getProperty(I))}}return Ml(this.getContext())}}allowCreate(E,O){if(this.isCollection){let R=Qa(E);if(R?.insert){let y=R.attribute_permissions;if(y?.length>0){let b=oC(y,"insert");for(let C in O)if(!b[C])return!1;return Ml(this.getContext())}else return Ml(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E){return Qa(E)?.delete&&Ml(this.getContext())}update(E,O){if(!mt(this.getContext()))throw new Error("Can not update a table resource outside of a transaction");if(E===!1)return this;let y;return typeof E=="object"&&E&&(O?(Object.isFrozen(E)&&(E={...E}),this.#e={},this.#t=E):(y=this.#t,y&&(E=Object.assign(y,E)),this.#t=E)),this._writeUpdate(this.#t,O),this}addTo(E,O){if(typeof O=="number"||typeof O=="bigint")this.#s===MW?this.set(E,(+this.getProperty(E)||0)+O):(this.#s||this.update(),this.set(E,new YE(O)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,O){if(typeof O=="number")return this.addTo(E,-O);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#r}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(E){this.#t=E}setRecord(E){this.#e=E}invalidate(){this._writeInvalidate()}_writeInvalidate(E){let O=this.getContext(),R=this.getId();Ir(R),mt(this.getContext()).addWrite({key:R,store:i,invalidated:!0,entry:this.#r,before:Ie.invalidate?.bind(this,O,R),beforeIntermediate:pe.invalidate?.bind(this,O,R),commit:a((b,C)=>{if(Yi(b,C,E?.nodeId)<=0)return;let I=null;for(let L in r)I||(I={}),I[L]=this.getProperty(L);xe.default.trace?.(`Invalidating entry id: ${R}, timestamp: ${new Date(b).toISOString()}`),A(R,I,this.#r,b,as,g,{user:O?.user,residencyId:E?.residencyId,nodeId:E?.nodeId},"invalidate")},"commit")})}_writeRelocate(E){let O=this.getContext(),R=this.getId();Ir(R),mt(this.getContext()).addWrite({key:R,store:i,invalidated:!0,entry:this.#r,before:Ie.relocate?.bind(this,O,R),beforeIntermediate:pe.relocate?.bind(this,O,R),commit:a((b,C)=>{if(Yi(b,C,E?.nodeId)<=0)return;let I=Le.getResidencyRecord(E.residencyId),L=0,x=null,N=C?.value;if(I&&!I.includes(server.hostname)){for(let v in r)x||(x={}),x[v]=N(v);L=as}else x=N;xe.default.trace?.(`Relocating entry id: ${R}, timestamp: ${new Date(b).toISOString()}`),A(R,x,this.#r,b,L,g,{user:O.user,residencyId:E.residencyId,nodeId:E.nodeId,expiresAt:E.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,O){let R={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},y=this.getResidency(O.value,R),b;if(y){if(!Array.isArray(y))throw new Error("Residency must be an array, but was: "+y);if(!y.includes(server.hostname))return;b=Yo(y)}let I=A(E.key,O.value,E,E.version,0,!0,{residencyId:b,expiresAt:O.expiresAt},"relocate",!1,null)}static evict(E,O,R){let y=this.Source,b;if(!((M||g)&&(!O||(b=i.getEntry(E),!b||!O)||b.version!==R))){if(M){if(i.hasLock(E,b.version))return;let C;for(let I in r)C||(C={}),C[I]=O[I];if(C)return A(E,C,b,R,ea,null,null,null,!0)}if(i.ifVersion(E,R,()=>{Ki(E,O,null)}),g)return A(E,null,b,R,ea,null,null,null,!0);fc(i,b??i.getEntry(E),R)}}lock(){throw new Error("Not yet implemented")}static operation(E,O){return E.table||=s,E.schema||=c,GW.operation(E,O)}put(E){this.update(E,!0)}patch(E){this.update(E,!1)}_writeUpdate(E,O,R){let y=this.getContext(),b=mt(y),C=this.getId();Ir(C);let I=this.#r;this.#s=O?MW:Xme;let L={key:C,store:i,entry:I,nodeName:y?.nodeName,validate:a(x=>{E||(E=this.#t),O||E&&VE(this.#t===E?this:E)?y?.source||(b.checkOverloaded(),this.validate(E,!O),ee&&(E[ee.name]=ee.type==="Date"?new Date(x):ee.type==="String"?new Date(x).toISOString():x),O&&(t&&E[t]!==C&&(E[t]=C),K&&(I?.value?E[K.name]=I?.value[K.name]:E[K.name]=K.type==="Date"?new Date(x):K.type==="String"?new Date(x).toISOString():x),E=Dc(E))):b.removeWrite(L)},"validate"),before:O?Ie.put?()=>Ie.put(y,C,E):null:Ie.patch?()=>Ie.patch(y,C,E):Ie.put?()=>Ie.put(y,C,Dc(this)):null,beforeIntermediate:O?pe.put?()=>pe.put(y,C,E):null:pe.patch?()=>pe.patch(y,C,E):pe.put?()=>pe.put(y,C,Dc(this)):null,commit:a((x,N,v)=>{if(v){if(y&&N?.version>(y.lastModified||0)&&(y.lastModified=N.version),this.#r=N,N?.value&&N.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");O||(this.#e=N?.value??null)}this.#t=void 0,this.#n=x;let $=N?.value,Y=E;this.#s=0;let ne=Yi(x,N,R?.nodeId),k;if(ne<=0)if(g){let Q=N.localTime,fe=N.version;xe.default.trace?.("Applying CRDT update to record with id: ",C,"applying later update:",fe);let Ee=[];for(;Q>x||fe>=x&&Q>0;){let ye=l.get(Q);if(!ye)break;let Me=bt(ye);if(fe=Me.version,fe>=x){if(fe===x){if(ne=Yi(x,{version:fe,localTime:Q},R?.nodeId),ne===0)return;if(ne>0)continue}if(Me.type==="patch")Ee.push(Me),k=E;else if(Me.type==="put"||Me.type==="delete")return}Q=Me.previousLocalTime}Ee.sort((ye,Me)=>ye.version-Me.version);for(let ye of Ee){let Me=ye.getValue(i);if(Y=qE(Y,Me,O),xe.default.debug?.("Rebuilding update with future patch:",Y),!Y)return}}else{if(O)return;Y=qE(Y,$,O),xe.default.debug?.("Rebuilding update without audit:",Y)}let ve;if(O?ve=Y:(this.#e=$,ve=Dc(this,Y)),this.#e=ve,ve&&ve.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let oe;if(R?.residencyId!=null)oe=R.residencyId;else{I?.residencyId&&(y.previousResidency=Le.getResidencyRecord(I.residencyId));let Q=Le.getResidency(ve,y);if(Q){if(!Array.isArray(Q))throw new Error("Residency must be an array, got: "+Q);Q.includes(server.hostname)||Q.push(server.hostname)}oe=Yo(Q)}O||(k=E);let le=y?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${C}, timestamp: ${new Date(x).toISOString()}${le?", expires at: "+new Date(le).toISOString():""}${N?", replaces entry from: "+new Date(N.version).toISOString():", new entry"}`,ve),Ki(C,$,ve);let se=O?"put":"patch";A(C,ve,N,x,0,g,{user:y?.user,residencyId:oe,expiresAt:le,nodeId:R?.nodeId,originatingOperation:y?.originatingOperation},se,!1,k),y.expiresAt&&Ko()},"commit")};b.addWrite(L)}async delete(E){if(typeof E=="string")return this.deleteProperty(E);if(this.isCollection){for await(let O of this.search(E))(await Le.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(E);return}return this.#e?this._writeDelete(E):!1}_writeDelete(E){let O=mt(this.getContext()),R=this.getId();Ir(R);let y=this.getContext();return O.addWrite({key:R,store:i,entry:this.#r,nodeName:y?.nodeName,before:Ie.delete?.bind(this,y,R),beforeIntermediate:pe.delete?.bind(this,y,R),commit:a((b,C,I)=>{let L=C?.value;I&&(y&&C?.version>(y.lastModified||0)&&(y.lastModified=C.version),Le._updateResource(this,C)),!(Yi(b,C,E?.nodeId)<=0)&&(Ki(this.getId(),L),xe.default.trace?.(`Deleting record with id: ${R}, txn timestamp: ${new Date(b).toISOString()}`),g||T?(A(R,null,this.#r,b,0,g,{user:y?.user,nodeId:E?.nodeId},"delete"),g||Ko()):fc(i,C))},"commit")}),!0}search(E){let O=this.getContext(),R=mt(O);if(!E)throw new Error("No query provided");let y=E.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[],this.getId()&&(y=[{attribute:null,comparator:Array.isArray(this.getId())?"prefix":"starts_with",value:this.getId()}].concat(y));let b,C={};function I(Q,fe){let Ee;switch(fe){case"and":case void 0:if(Q.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(Q.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+fe)}for(let ye of Q){if(ye.conditions){ye.conditions=I(ye.conditions,ye.operator);continue}let Me=ye[0]??ye.attribute,et=Me==null?F:hi(m,Me);if(et)(et.type||eA[ye.comparator])&&(ye[1]===void 0?ye.value=x(ye.value,et):ye[1]=x(ye[1],et));else if(Me!=null)throw(0,Nr.handleHDBError)(new Error,`${Me} is not a defined attribute`,404);if(ye.chainedConditions)if(ye.chainedConditions.length===1&&(!ye.operator||ye.operator=="and")){let Fr=ye.chainedConditions[0],Cr,Ms;if(Fr.comparator==="gt"||Fr.comparator==="greater_than"||Fr.comparator==="ge"||Fr.comparator==="greater_than_equal"?(Cr=ye,Ms=Fr):(Cr=Fr,Ms=ye),Cr.comparator!=="lt"&&Cr.comparator!=="less_than"&&Cr.comparator!=="le"&&Cr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Ae=Ms.comparator==="ge"||Ms.comparator==="greater_than_equal",Rt=Cr.comparator==="le"||Cr.comparator==="less_than_equal";ye.comparator=(Ae?"ge":"gt")+(Rt?"le":"lt"),ye.value=[Ms.value,Cr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return Q}a(I,"prepareConditions");function L(Q,fe){if(E.enforceExecutionOrder)return Q;for(let Ee of Q)Ee.conditions&&(Ee.conditions=L(Ee.conditions,Ee.operator));return Q.length>1&&fe!=="or"?(0,kW.sortBy)(Q,Cp(Le)):Q}a(L,"orderConditions");function x(Q,fe){return Array.isArray(Q)?Q.map(Ee=>rT(Ee,fe)):rT(Q,fe)}a(x,"coerceTypedValues");let N=E.operator;(y.length>0||N)&&(y=I(y,N));let v=typeof E.sort=="object"&&E.sort,$;if(v&&N!=="or"){let Q=v.attribute;if(Q==null)throw new Nr.ClientError("Sort requires an attribute");if(b=y.find(fe=>kl(fe.attribute)===kl(Q)),!b){let fe=hi(m,Q);if(!fe)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not a defined attribute`,404);if(fe.indexed)b={attribute:Q,comparator:"sort"},y.push(b);else if(y.length===0&&!E.allowFullScan)throw(0,Nr.handleHDBError)(new Error,`${Array.isArray(Q)?Q.join("."):Q} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!v.descending)}y=L(y,N),v&&(b&&y[0]===b?v.next&&($={dbOrderedAttribute:v.attribute,attribute:v.next.attribute,descending:v.next.descending,next:v.next.next}):(b&&y.splice(y.indexOf(b),1),$=v));let Y=E.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:y,operator:N,postOrdering:$,selectApplied:!!Y};let ne=R.useReadTxn(),k=tA(y,N,Le,ne,E,O,(Q,fe)=>Hd(Q,Y,O,ne,fe),C),ve=E.ensureLoaded!==!1;$||(k=se(k));let oe=Le.transformEntryForSelect(Y,O,ne,C,ve,!0),le=Le.transformToOrderedSelect(k,Y,$,ne,O,oe);function se(Q){return E.offset||E.limit!==void 0?Q.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0):Q}return a(se,"applyOffset"),$&&(le=se(le)),le.onDone=()=>{le.onDone=null,R.doneReadTxn()},le.selectApplied=!0,le.getColumns=()=>{if(Y){let Q=[];for(let fe of Y)fe==="*"?Q.push(...m.map(Ee=>Ee.name)):Q.push(fe.name||fe);return Q}return m.filter(Q=>!Q.computed&&!Q.relationship).map(Q=>Q.name)},le}static transformToOrderedSelect(E,O,R,y,b,C){let I=new NT;if(R){E=Hd(E,O,y,b,null);let L;I.iterate=function(){let N,v=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),$,Y=R.dbOrderedAttribute,ne,k,ve=!0;function oe(se){let Q=se.next&&oe(se.next),fe=se.descending;return(Ee,ye)=>{let Me=Ll(Ee,se.attribute,y),et=Ll(ye,se.attribute,y),Fr=fe?(0,Ol.compareKeys)(et,Me):(0,Ol.compareKeys)(Me,et);return Fr===0?Q?.(Ee,ye)||0:Fr}}a(oe,"createComparator");let le=oe(R);return{async next(){let se;if(N)if(se=N.next(),se.done){if($)return I.onDone&&I.onDone(),se}else return{value:await C.call(this,se.value)};L=[],ne&&L.push(ne);do if(se=await v.next(),se.done){if($=!0,L.length)break;return I.onDone&&I.onDone(),se}else{let Q=se.value;if(Q?.then&&(Q=await Q),Y){let fe=Ll(Q,Y,y);if(ve)ve=!1,k=fe;else if(fe!==k){k=fe,ne=Q;break}}L.push(Q)}while(!0);return R.isGrouped,L.sort(le),N=L[Symbol.iterator](),se=N.next(),se.done?(I.onDone&&I.onDone(),se):{value:await C.call(this,se.value)}},return(){I.onDone&&I.onDone(),v.return()},throw(){I.onDone&&I.onDone(),v.throw()}}};let x=a(N=>{if(typeof O=="object"&&Array.isArray(N.attribute))for(let v=0;v<O.length;v++){let $=O[v],Y;if($.name===N.attribute[0]){for(Y=$.sort||($.sort={});Y.next;)Y=Y.next;Y.attribute=N.attribute.slice(1),Y.descending=N.descending}else $===N.attribute[0]&&(O[v]=Y={name:$,sort:{attribute:N.attribute.slice(1),descending:N.descending}})}N.next&&x(N.next)},"applySortingOnSelect");x(R)}else I.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),I=I.map(function(L){try{let x=C.call(this,L);return typeof x?.catch=="function"?x.catch(N=>{throw N.partialObject={[t]:L.key},N}):x}catch(x){throw x.partialObject={[t]:L.key},x}});return I}static transformEntryForSelect(E,O,R,y,b,C){if(E&&(E===t||E?.length===1&&E[0]===t&&Array.isArray(E))){let N=a(v=>(O?.transaction?.stale&&(O.transaction.stale=!1),v?.key??v),"transform");return E===t?N:E.asArray?v=>[N(v)]:v=>({[t]:N(v)})}let I;b&&M&&!(typeof E=="string"?[E]:E)?.every(N=>{let v;return typeof N=="object"?v=N.name:v=N,r[v]||v===t})&&(I=!0);let L,x=a(function(N){let v;if(O?.transaction?.stale&&(O.transaction.stale=!1),N!=null){if(v=N.value||N.deref?.()?.value,!v&&(N.key===void 0||N.deref)||N.metadataFlags&as){if(N.metadataFlags&as&&O.replicateFrom===!1&&C&&N.residencyId)return Ya.SKIP;if(N=Dn(N.key??N,O,{transaction:R,lazy:E?.length<4,ensureLoaded:b},this?.isSync,$=>$),N?.then)return N.then(x.bind(this));v=N?.value}if(I&&N?.metadataFlags&(as|ea)||N?.expiresAt!=null&&N?.expiresAt<Date.now()){if(O.onlyIfCached&&O.noCacheStore)return{[t]:N.key,message:"This entry has expired"};let $=np(N.key??N,N,O);if($?.then)return $.then(x)}}if(v==null)return C?Ya.SKIP:v;if(E&&!(E[0]==="*"&&E.length===1)){let $,Y=a((k,ve)=>{let oe;typeof k=="object"?oe=k.name:oe=k;let le=fr?.[oe],se;if(le){let Q=y?.[oe];if(Q)if(Q.hasMappings){let Ee=le.from?v[le.from]:kl(N.key);se=Q.get(Ee),se||(se=[])}else se=Q.fromRecord?.(v);else se=le(v,O,N);let fe=a(Ee=>{if(Ee&&typeof Ee=="object"){let ye=le.definition?.tableClass||Le;L||(L={});let Me=L[oe]||(L[oe]=ye.transformEntryForSelect(oe===k?null:k.select||(Array.isArray(k)?k:null),O,R,Q,b));if(Array.isArray(Ee)){let et=[],Fr=ye.transformToOrderedSelect(Ee,k.select,typeof k.sort=="object"&&k.sort,O,R,Me)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Cr=a(Ae=>{for(;!Ae.done;){if(Ae?.then)return Ae.then(Cr);et.push(Ae.value),Ae=Fr.next()}ve(et,oe)},"nextValue"),Ms=Cr(Fr.next());Ms&&($||($=[]),$.push(Ms));return}else if(Ee=Me.call(this,Ee),Ee?.then){$||($=[]),$.push(Ee.then(et=>ve(et,oe)));return}}ve(Ee,oe)},"handleResolvedValue");se?.then?($||($=[]),$.push(se.then(fe))):fe(se);return}else se=v[oe],se&&typeof se=="object"&&oe!==k&&(se=Le.transformEntryForSelect(k.select||k,O,R,null)({value:se}));ve(se,oe)},"selectAttribute"),ne;if(typeof E=="string")Y(E,k=>{ne=k});else if(Array.isArray(E))if(E.asArray)ne=[],E.forEach((k,ve)=>{k==="*"?E[ve]=v:Y(k,oe=>ne[ve]=oe)});else{ne={};let k=E.forceNulls;for(let ve of E)if(ve==="*")for(let oe in v)ne[oe]=v[oe];else Y(ve,(oe,le)=>{oe===void 0&&k&&(oe=null),ne[le]=oe})}else throw new Nr.ClientError("Invalid select"+E);return $?Promise.all($).then(()=>ne):ne}return v},"transform");return x}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||ot({table:s,database:c,schemaDefined:u,attributes:m,audit:!0}),E||(E={});let O=!E.rawEvents,R=[],y=this,b=iC(Le,this.getId()??null,function(I,L,x,N){try{let v=L.getValue?.(i,O),$=L.type;if(!v&&$==="patch"&&O){let ne=i.getEntry(I);ne?.version===L.version?v=ne.value:v=L.getValue?.(i,!0,x),$="put"}let Y={id:I,localTime:x,value:v,version:L.version,type:$,beginTxn:N};R?R.push(Y):this.send(Y)}catch(v){xe.default.error?.(v)}},E.startTime||0,E),C=(async()=>{this.isCollection&&(b.includeDescendants=!0,E.onlyChildren&&(b.onlyChildren=!0)),E.supportsTransactions&&(b.supportsTransactions=!0);let I=this.getId(),L=E.previousCount;L>1e3&&(L=1e3);let x=E.startTime;if(this.isCollection){if(x){if(L)throw new Nr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:N,value:v}of l.getRange({start:x,exclusiveStart:!0,snapshot:!1})){let $=bt(v);if($.tableId!==n)continue;let Y=$.recordId;if(I==null||BW(I,Y)){let ne=$.getValue(i,O,N);if(b.send({id:Y,localTime:N,value:ne,version:$.version,type:$.type}),b.queue?.length>UW&&await b.waitForDrain()===!1)return}b.startTime=N}}else if(L){let N=[];for(let{key:v,value:$}of l.getRange({start:"z",end:!1,reverse:!0}))try{let Y=bt($);if(Y.tableId!==n)continue;let ne=Y.recordId;if(I==null||BW(I,ne)){let k=Y.getValue(i,O,v);if(N.push({id:ne,localTime:v,value:k,version:Y.version,type:Y.type}),--L<=0)break}}catch(Y){xe.default.error("Error getting history entry",v,Y)}for(let v=N.length;v>0;)b.send(N[--v]);N[0]&&(b.startTime=N[0].localTime)}else if(!E.omitCurrent){for(let{key:N,value:v,version:$,localTime:Y}of i.getRange({start:I??!1,end:I==null?void 0:[I,Ol.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(v&&(b.send({id:N,localTime:Y,value:v,version:$,type:"put"}),b.queue?.length>UW&&await b.waitForDrain()===!1))return}}else{L&&!x&&(x=0);let N=this.#r?.localTime;if(N===HA&&(i.cache?.delete(I),this.#r=i.getEntry(I),xe.default.trace?.("re-retrieved record",N,this.#r?.localTime),N=this.#r?.localTime),xe.default.trace?.("Subscription from",x,"from",I,N),x<N){let v=[],$=N;do{let Y=l.get($);if(Y){E.omitCurrent=!0;let ne=bt(Y),k=ne.getValue(i,O,$);O&&(ne.type="put"),v.push({id:I,value:k,localTime:$,...ne}),$=ne.previousLocalTime}else break;L&&L--}while($>x&&L!==0);for(let Y=v.length;Y>0;)b.send(v[--Y]);b.startTime=N}!E.omitCurrent&&this.doesExist()&&b.send({id:I,localTime:N,value:this.#e,version:this.#n,type:"put"})}for(let N of R)b.send(N);R=null})();return E.listener&&b.on("data",E.listener),b}static subscribeOnThisThread(E,O){return E===0||O?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,O){this._writePublish(E,O)}_writePublish(E,O){let R=mt(this.getContext()),y=this.getId()||null;y!=null&&Ir(y);let b=this.getContext();R.addWrite({key:y,store:i,entry:this.#r,nodeName:b?.nodeName,validate:a(()=>{b?.source||(R.checkOverloaded(),this.validate(E))},"validate"),before:Ie.publish?.bind(this,b,y,E),beforeIntermediate:pe.publish?.bind(this,b,y,E),commit:a((C,I,L)=>{I===void 0&&T&&!g&&Ko(),xe.default.trace?.(`Publishing message to id: ${y}, timestamp: ${new Date(C).toISOString()}`),A(y,I?.value??null,I,I?.version||C,0,!0,{user:b?.user,residencyId:O?.residencyId,expiresAt:b?.expiresAt,nodeId:O?.nodeId},"message",!1,E)},"commit")})}validate(E,O){let R,y=a((b,C,I)=>{if(C.type&&b!=null)if(O&&b.__op__&&(b=b.value),C.properties){typeof b!="object"&&(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be an object${C.type?" ("+C.type+")":""}`);let L=C.properties;for(let x=0,N=L.length;x<N;x++){let v=L[x],$=y(b[v.name],v,I+"."+v.name);$&&(b[v.name]=$)}if(C.sealed&&b!=null&&typeof b=="object")for(let x in b)L.find(N=>N.name===x)||(R||(R=[])).push(`Property ${x} is not allowed within object in property ${I}`)}else switch(C.type){case"Int":(typeof b!="number"||b>>0!==b)&&(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(L=>typeof L=="string")||(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof Ei)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(C.elements)for(let L=0,x=b.length;L<x;L++){let N=b[L],v=y(N,C.elements,I+"[*]");v&&(b[L]=v)}}else(R||(R=[])).push(`Value ${Ls(b)} in property ${I} must be an Array`);break}C.nullable===!1&&b==null&&(R||(R=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,C=m.length;b<C;b++){let I=m[b];if(!(I.relationship||I.computed)&&(!O||I.name in E)){let L=y(E[I.name],I,I.name);L&&(E[I.name]=L)}}if(d)for(let b in E)m.find(C=>C.name===b)||(R||(R=[])).push(`Property ${b} is not allowed`);if(R)throw new Nr.ClientError(R.join(". "))}getUpdatedTime(){return this.#n}wasLoadedFromSource(){return M?!!this.#i:void 0}static async addAttributes(E){let O=m.slice(0);for(let R of E){if(!R.name)throw new Nr.ClientError("Attribute name is required");if(R.name.match(/[`/]/))throw new Nr.ClientError("Attribute names cannot include backticks or forward slashes");(0,FW.validateAttribute)(R.name),O.push(R)}return ot({table:s,database:c,schemaDefined:u,attributes:O}),Le.indexingOperation}static async removeAttributes(E){let O=m.filter(R=>!E.includes(R.name));return ot({table:s,database:c,schemaDefined:u,attributes:O}),Le.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,O=tT.default.statfsSync(E);return{available:O.bavail*O.bsize,free:O.bfree*O.bsize,size:O.blocks*O.bsize}}static getRecordCount(E){let O=i.getStats().entryCount,R=1e3/2,y=performance.now(),b=Math.floor(O/2),C=E?.exactCount,I=0,L=0,x;for(let{value:N}of i.getRange({start:!0,lazy:!0}))if(N!=null&&I++,L++,!C&&L<b&&performance.now()-y>R){x=L;break}if(x){let N=I;I=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:x}))se!=null&&I++;let v=x*2,$=(I+N)/v,Y=Math.pow((I-N+1)/x/2,2)+$*(1-$)/v,ne=Math.max(Math.sqrt(Y)*O,1),k=Math.round($*O),ve=Math.max(k-1.96*ne,I+N),oe=Math.min(k+1.96*ne,O),le=Math.pow(10,Math.round(Math.log10(ne)));return le>k&&(le=le/10),I=Math.round(k/le)*le,{recordCount:I,estimatedRange:[Math.round(ve),Math.round(oe)]}}return{recordCount:I}}static updatedAttributes(){fr=this.propertyResolvers={$id:a((E,O,R)=>({value:R.key}),"$id"),$updatedtime:a((E,O,R)=>R.version,"$updatedtime"),$record:a((E,O,R)=>R?{value:E}:E,"$record")};for(let E of this.attributes){E.resolve=null;let O=E.relationship,R=E.computed;if(O)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),R&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Md=!0,O.to)E.elements?.definition?(fr[E.name]=E.resolve=(y,b,C)=>{let I=y[O.from?O.from:t],L=E.elements.definition.tableClass;return C?Hl({attribute:O.to,value:I},mt(b).getReadTxn(),!1,L,!1).asArray:L.search([{attribute:O.to,value:I}],b).asArray},E.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},E.resolve.definition=E.elements.definition,O.from&&(E.resolve.from=O.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(O.from){let y=E.definition||E.elements?.definition;y?(fr[E.name]=E.resolve=(b,C,I)=>{let L=b[O.from];if(L!==void 0){if(E.elements){let x,N=L?.map(v=>{let $=I?y.tableClass.primaryStore.getEntry(v,{transaction:mt(C).getReadTxn()}):y.tableClass.get(v,C);return $?.then&&(x=!0),$});return O.filterMissing?x?Promise.all(N).then(v=>v.filter(HW)):N.filter(HW):x?Promise.all(N):N}return I?y.tableClass.primaryStore.getEntry(L,{transaction:mt(C).getReadTxn()}):y.tableClass.get(L,C)}},E.set=(b,C)=>{if(Array.isArray(C)){let I=C.map(L=>L.getId?.()||L[y.tableClass.primaryKey]);b[O.from]=I}else{let I=C.getId?.()||C[y.tableClass.primaryKey];b[O.from]=I}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=O.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else R&&(typeof R.from=="function"&&this.setComputedAttribute(E.name,R.from),fr[E.name]=E.resolve=(y,b,C)=>{let I=typeof R.from=="string"?y[R.from]:y,L=this.userResolvers[E.name];if(L)return L(I,b,C);xe.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}})}WE(this,this)}static setComputedAttribute(E,O){let R=hi(m,E);if(!R){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!R.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=O}static async deleteHistory(E=0,O=!1){let R;for(let{key:y,value:b}of l.getRange({start:0,end:E}))await bd(),bt(b).tableId===n&&(R=ZS(l,y,b));if(O)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:C,localTime:I}=y;await bd(),C===null&&I<E&&(R=fc(i,y))}await R}static async*getHistory(E=0,O=1/0){for(let{key:R,value:y}of l.getRange({start:E||1,end:O})){await bd();let b=bt(y);b.tableId===n&&(yield{id:b.recordId,localTime:R,version:b.version,type:b.type,value:b.getValue(i,!0,R),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(E){let O=[];if(E==null)throw new Error("An id is required");let R=i.getEntry(E);if(!R)return O;let y=R.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await bd();let C=l.get(y);if(C){let I=bt(C);O.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return O.reverse()}static cleanup(){X?.remove()}}Le.updatedAttributes();let Bd=Le.prototype;return p&&Le.setTTLExpiration(p/1e3),ie&&sp(),Le;function Ki(W,E,O){let R;for(let y in r){let b=r[y],C=b.isIndexing,I=fr[y],L=O&&(I?I(O):O[y]),x=E&&(I?I(E):E[y]);if(L===x&&!C)continue;R=!0;let N=b.indexNulls,v=(0,Fh.getIndexedValues)(L,N),$=(0,Fh.getIndexedValues)(x,N);if($?.length>0){let Y=new Set($);if(v=v?v.filter(ne=>{if(Y.has(ne))Y.delete(ne);else return!0}):[],$=Array.from(Y),($.length>0||v.length>0)&&LW){let ne=$.concat(v).map(k=>({key:k,value:W}));b.prefetch(ne,xW)}for(let ne=0,k=$.length;ne<k;ne++)b.remove($[ne],W)}else v?.length>0&&LW&&b.prefetch(v.map(Y=>({key:Y,value:W})),xW);if(v)for(let Y=0,ne=v.length;Y<ne;Y++)b.put(v[Y],W)}return R}a(Ki,"updateIndices");function Ir(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>vW)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)throw new Error("Invalid primary key of null");break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Ol.writeKey)(W,Zme,0)>vW)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ir,"checkValidId");function Dn(W,E,O,R,y){if(Le.getResidencyById&&O.ensureLoaded&&E?.replicateFrom!==!1){let C=Le.getResidencyById(W);if(C&&!C.includes(server.hostname)&&w)return w({key:W,residency:C}).then(y)}let b=a(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),O.transaction?.isDone)return y(null,W);let C=i.getEntry(W,O);return C?.residencyId&&C.metadataFlags&as&&w&&O.ensureLoaded&&E?.replicateFrom!==!1?w(C).then(I=>y(I,W),I=>(xe.default.error?.("Error loading remote record",W,C,O,I),y(null,W))):(C&&E&&(C?.version>(E.lastModified||0)&&(E.lastModified=C.version),C?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=C.localTime)),y(C,W))},"whenPrefetched");return R?b():he>0?(he--,b()):new Promise((C,I)=>{he===0?(he--,i.prefetch([W],()=>{L(),x()})):(re.push(W),z.push(x),re.length>xd&&(he--,L()));function L(){if(re.length>0){let N=z;i.prefetch(re,()=>{he===-1?L():he++;for(let v of N)v()}),re=[],z=[],Te>2&&Te--}else he=Te,Te<rp&&Te++}a(L,"prefetch");function x(){try{C(b())}catch(N){I(N)}}a(x,"load")})}a(Dn,"loadLocalRecord");function Qa(W){if(!W?.role)return;let E=W.role.permission;if(E.super_user)return ege;let O=E[c],R,y=O?.tables;if(y)return y[s];if(c==="data"&&(R=E[s])&&!R.tables)return R}a(Qa,"getTablePermissions");function np(W,E,O,R){if(M){let y=!1;if(O.noCache?y=!0:(E?(!E.value||E.metadataFlags&(as|ea)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(y=!0):y=!0,Wn(!y,"cache-hit",s)),y){let b=kd(W,E,O).then(C=>(C?.value&&C?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),O&&(C?.version>(O.lastModified||0)&&(O.lastModified=C.version),O.lastRefreshed=Date.now()),C));if(O?.onlyIfCached||E?.value&&R?.allowStaleWhileRevalidate?.(E,W)){if(b.catch(C=>xe.default.warn?.(C)),O?.onlyIfCached&&!R.doesExist())throw new Nr.ServerError("Entry is not cached",504);return}else return b}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Le.evict(E.key,E.value,E.version),E.value=null,{then(y){return y(E)}}}a(np,"ensureLoadedFromSource");function mt(W){let E=W?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let O=E.next;if(!O)return E=E.next=new tc,E.lmdbDb=i,E;E=O}while(!0)}else return new Np}a(mt,"txnForContext");function Ll(W,E,O){if(!W)return;let R=W.value||i.getEntry(W.key)?.value;if(typeof E=="object"){let b=fr,C=R;for(let I=0,L=E.length;I<L;I++){let x=E[I],N=b?.[x];C=N&&C?N(C,O,!0)?.value:C?.[x],b=N?.definition?.tableClass?.propertyResolvers}return C}let y=fr[E];return y?y(R,O):R[E]}a(Ll,"getAttributeValue");function Hd(W,E,O,R,y){let b=y?.length,C={transaction:R,lazy:b>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},I;function L(x,N){let v=x?.value;if(!v)return Ya.SKIP;for(let $=0;$<b;$++)if(!I?.includes($)&&!y[$](v,x))return Ya.SKIP;return N!==void 0&&(x.key=N),x}if(a(L,"processEntry"),b>0||!W.hasEntries){let x=W.map(N=>{if(I=null,typeof N=="object"&&N?.key!==void 0)return b>0?L(N):N;if(N==null)return Ya.SKIP;for(let v=0;v<b;v++){let Y=y[v].idFilter;if(Y){if(!Y(N))return Ya.SKIP;I||(I=[]),I.push(v)}}return Dn(N,O,C,!1,L)});return Array.isArray(W)&&(x=x.filter(N=>N!==Ya.SKIP)),x.hasEntries=!0,x}return W}a(Hd,"transformToEntries");function Yi(W,E,O=server.replication?.getThisNodeId(l)){if(W<=E?.version){if(E?.version===W&&O!==void 0){let R=server.replication?.exportIdMapping(l),y=E.localTime,b=y&&l.get(y);if(b){let C,I,L=bt(b);for(let x in R)R[x]===O&&(C=x),R[x]===L.nodeId&&(I=x);if(C>I)return 1;if(C===I)return 0}}return-1}return 1}a(Yi,"precedesExistingVersion");async function kd(W,E,O){let R=E?.metadataFlags,y=E?.version,b,C;if(!i.attemptLock(W,y,()=>{clearTimeout(C);let N=i.getEntry(W);!N||!N.value||N.metadataFlags&(as|ea)?b(kd(W,i.getEntry(W),O)):b(N)}))return new Promise(N=>{b=N,C=setTimeout(()=>{i.unlock(W,y)},Jme)});let I=E?.value,L={requestContext:O,replacingRecord:I,replacingEntry:E,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:O?.resourceCache},x=O?.responseHeaders;return new Promise((N,v)=>{let $;aC(yt(L,async Y=>{let ne=performance.now(),k,ve,oe;try{for(let fe of Le.sources)if(fe.get&&(!fe.get.reliesOnPrototype||fe.prototype.get)){if(fe.available?.(E)===!1)continue;if(L.source=fe,k=await fe.get(W,L),k)break}oe=R&as;let se=L.lastModified||oe&&y;ve=oe||se>y||!I,se||(se=(0,Fh.getNextMonotonicTime)());let Q=performance.now()-ne;if(sr(Q,"cache-resolution",s,null,"success"),x&&om(x,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),Y.timestamp=se,p&&L.expiresAt==null&&(L.expiresAt=Date.now()+p),k){if(typeof k!="object")throw new Error("Only objects can be cached and stored in tables");if(k.status>0&&k.headers)if(k.status>=300)if(k.status===304)k=I,se=y;else throw new Nr.ServerError(k.body||"Error from source",k.status);else k=k.body;typeof k.toJSON=="function"&&(k=k.toJSON()),t&&k[t]!==W&&(k[t]=W)}$=!0,N({key:W,version:se,value:k})}catch(se){se.message+=` while resolving record ${W} for ${s}`,I&&((se.code==="ECONNRESET"||se.code==="ECONNREFUSED"||se.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&(se.statusCode===500||se.statusCode===502||se.statusCode===503||se.statusCode===504))?(N({key:W,version:y,value:I}),xe.default.trace?.(se.message,"(returned stale record)")):v(se);let Q=performance.now()-ne;sr(Q,"cache-resolution",s,null,"fail"),x&&om(x,"Server-Timing",`cache-resolve;dur=${Q.toFixed(2)}`,!0),L.transaction.abort();return}if(O?.noCacheStore||L.noCacheStore){L.transaction.abort();return}mt(L).addWrite({key:W,store:i,entry:E,nodeName:"source",commit:a((se,Q)=>{if(Q?.version!==y)return;let fe=Ki(W,I,k);k?(pe.put?.(L,W,k),xe.default.trace?.(`Writing resolved record from source with id: ${W}, timestamp: ${new Date(se).toISOString()}`),A(W,k,Q,se,0,g&&ve||null,{user:L?.user,expiresAt:L.expiresAt},"put",!!oe)):Q&&(pe.delete?.(L,W),xe.default.trace?.(`Deleting resolved record from source with id: ${W}, timestamp: ${new Date(se).toISOString()}`),g||T?A(W,null,Q,se,0,g&&ve||null,{user:L?.user},"delete",!!oe):fc(i,Q,y))},"commit")})}),()=>{i.unlock(W,y)},Y=>{i.unlock(W,y),$&&xe.default.error?.("Error committing cache update",Y)})})}a(kd,"getFromSource");function Ml(W){if(!W||W.user?.role?.permission?.super_user)return!0;if(W.replicateTo)throw new Nr.ClientError("Can not specify replication parameters without super user permissions",403);if(W.replicatedConfirmation)throw new Nr.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Ml,"checkContextPermissions");function Ko(){if(Ft!==Gt&&(Gt=Ft,(0,bl.getWorkerIndex)()===(0,bl.getWorkerCount)()-1)){if(Jt&&clearTimeout(Jt),!Ft)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let E=Math.ceil((Date.now()-W.getTime())/Ft)*Ft+W.getTime(),O=a(R=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(R)}ms`),Jt=setTimeout(()=>G=G.then(async()=>{if(O(Math.max(R+Ft,Date.now())),i.rootStore.status!=="open"){clearTimeout(Jt);return}let y=50,b=new Array(y),C=0;xe.default.info?.(`Starting cleanup scan for ${s}`);try{let I=0;for(let L of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:x,value:N,version:v,expiresAt:$}=L,Y;N===null&&!g&&v+jme<Date.now()?Y=fc(i,L,v):$!=null&&$+S<Date.now()&&(Y=Le.evict(x,N,v),I++),Y&&(await b[C],b[C]=Y.catch(ne=>{xe.default.error?.("Cleanup error",ne)}),++C>=y&&(C=0)),await bd()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${I} entries`)}catch(I){xe.default.warn?.(`Error in cleanup scan for ${s}:`,I)}}),Math.min(R-Date.now(),2147483647)).unref()},"startNextTimer");O(E)}}a(Ko,"scheduleCleanup");function Fd(){X=l?.addDeleteRemovalCallback(n,i,(W,E)=>{i.remove(W,E)})}a(Fd,"addDeleteRemoval");function sp(){(0,bl.getWorkerIndex)()===0&&setInterval(async()=>{if(!za){za=!0;try{let W=ie.name,E=r[W];if(!E)throw new Error(`expiresAt attribute ${ie} must be indexed`);for(let O of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let R of E.getValues(O)){let y=i.getEntry(R);y?.value?y.value[W]<Date.now()&&Le.evict(R,y.value,y.version):i.ifVersion(R,y?.version,()=>E.remove(O,R))}await bd()}}catch(W){xe.default.error?.("Error in evicting old records",W)}finally{za=!1}}},Qme).unref()}a(sp,"runRecordExpirationEviction");function Yo(W){if(W){let E=W.join(","),O=f.get([Symbol.for("residency_by_set"),E]);return O||(f.put([Symbol.for("residency_by_set"),E],O=Math.floor(Math.random()*2147483647)),f.put([Symbol.for("residency_by_id"),O],W),O)}}a(Yo,"getResidencyId")}function oC(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 xW(){}function tge(e){GW=e}function rT(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return eT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return eT(+e);case"Float":return e==="null"?null:eT(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;rge.test(e)||(e+="Z");let n=new Date(e);return eT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,nT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function eT(e){if(isNaN(e))throw new SyntaxError;return e}function BW(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);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 aC(e,t,r){return e?.then?e.then(t,r):t(e)}function HW(e){return e!=null}function Ls(e){try{return JSON.stringify(e)}catch{return e}}function nge(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ya,Fh,kW,FW,Od,Nr,Gh,qh,xe,Ol,bl,nT,tT,zme,GW,Qme,jme,LW,Jme,MW,Xme,as,ea,Zme,vW,UW,ege,LMe,rge,bd,of=be(()=>{H();Ya=require("lmdb"),Fh=U(an()),kW=require("lodash"),FW=U(Zd());ta();wp();Od=U(ce());jb();Nr=U(_e()),Gh=U(fo()),qh=U(Ys());De();sf();xe=U(Qi());My();rc();Ol=require("ordered-binary"),bl=U(rt());no();nT=U(ae());Wl();Ci();$E();d_();tT=U(require("node:fs"));cs();zme=new Uint8Array(9);zme[8]=192;Qme=6e4,jme=864e5;Od.initSync();LW=Od.get(B.STORAGE_PREFETCHWRITES),Jme=1e4,MW=1,Xme=2,as=1,ea=8,Zme=Buffer.allocUnsafeSlow(8192),vW=1978,UW=100,ege={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},LMe=(0,nT.convertToMS)(Od.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(sT,"makeTable");a(oC,"attributesAsObject");a(xW,"noop");a(tge,"setServerUtilities");rge=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(rT,"coerceType");a(eT,"rejectNaN");a(BW,"isDescendantId");bd=a(()=>new Promise(setImmediate),"rest");a(aC,"when");a(HW,"exists");a(Ls,"stringify");a(nge,"hasOtherProcesses")});var nt={};Be(nt,{database:()=>cu,database_envs:()=>$o,databases:()=>$e,dropDatabase:()=>Hy,dropTableMeta:()=>cge,getDatabases:()=>Je,getDefaultCompression:()=>Sg,getTables:()=>sge,onRemovedDB:()=>O_,onUpdatedTable:()=>$c,readMetaDb:()=>$h,resetDatabases:()=>Ku,table:()=>ot,tables:()=>Yn});function sge(){return cT||Je(),Yn||{}}function Je(){if(cT)return $e;cT=!0,Id=new Map;let e=(0,jt.getHdbBasePath)()&&(0,Pt.join)((0,jt.getHdbBasePath)(),Za),t=(0,jt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,jt.get)(B.STORAGE_PATH)||e&&((0,ns.existsSync)(e)?e:(0,Pt.join)((0,jt.getHdbBasePath)(),up)),!e)return;if((0,ns.existsSync)(e))for(let n of(0,ns.readdirSync)(e,{withFileTypes:!0})){let s=(0,Pt.basename)(n.name,".mdb");n.isFile()&&(0,Pt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&$h((0,Pt.join)(e,n.name),null,s)}if((0,ns.existsSync)((0,wd.getBaseSchemaPath)())){for(let n of(0,ns.readdirSync)((0,wd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Pt.join)((0,wd.getBaseSchemaPath)(),n.name),i=(0,Pt.join)((0,wd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,ns.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Pt.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Pt.join)(i,o.name);$h((0,Pt.join)(s,o.name),(0,Pt.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ns.existsSync)(i))for(let c of(0,ns.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Pt.extname)(c.name).toLowerCase()===".mdb"&&$h((0,Pt.join)(i,c.name),(0,Pt.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Pt.join)(l.path,(0,Pt.basename)(c+".mdb"));(0,ns.existsSync)(u)&&$h(u,c,n,null,!0)}}for(let n in $e){let s=Id.get(n);if(s){let i=$e[n];n.includes("delete")&&kt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(kt.trace(`delete table class ${o}`),delete i[o])}else if(delete $e[n],n==="data"){for(let i in Yn)delete Yn[i];delete Yn[lT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if($e.system)for(let n of r)$e.system[n]&&($e.system[n].replicate=!1);return Id=null,$e}function Ku(){cT=!1;for(let[,e]of $o)e.needsDeletion=!0;Je();for(let[e,t]of $o)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),$o.delete(e),delete $e[t.databaseName],Kh.forEach(r=>r(t.databaseName)));return $e}function $h(e,t,r=uC,n,s){let i=new cC.default(e,!1);try{let o=$o.get(e);o?o.needsDeletion=!1:(o=(0,Cd.open)(i),$o.set(e,o));let c=new Nl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(iT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,ns.existsSync)(n)&&(i.path=n,u=(0,Cd.open)(i),u.isLegacy=!0):u=XS(o));let f=KW(r),d=f[lT],h=new Map;for(let{key:_,value:p}of l.getRange({start:!1})){let[S,g]=_.toString().split("/");g===""?g=p.name:g||(g=S,S=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),d?.add(S);let T=h.get(S);T||h.set(S,T={attributes:[]}),(g==null||p.is_hash_attribute)&&(T.primary=p),g!=null&&T.attributes.push(p),Object.defineProperty(p,"key",{value:_,configurable:!0})}for(let[_,p]of h){let{attributes:S,primary:g}=p;if(!g){for(let z of S)if(z.is_hash_attribute||z.isPrimaryKey){g=z;break}if(!g){kt.warn(`Unable to find a primary key attribute on table ${_}, with attributes: ${JSON.stringify(S)}`);continue}}let T=f[_],m={},A=[],w,M,F=typeof g.audit=="boolean"?g.audit:(0,jt.get)(B.LOGGING_AUDITLOG),G=g.trackDeletes,K=g.expiration,ee=g.eviction,ie=g.sealed,X=g.splitSegments,re=g.replicate;if(T)m=T.indices,A=T.attributes,T.schemaVersion++;else{w=g.tableId,w?w>=(l.get(Nd)||0)&&(l.putSync(Nd,w+1),kt.info(`Updating next table id (it was out of sync) to ${w+1} for ${_}`)):(g.tableId=w=l.get(Nd),w||(w=1),kt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Nd,w+1),l.putSync(g.key,g));let z=new Nl.default(!g.is_hash_attribute,g.is_hash_attribute);if(z.compression=g.compression,z.compression){let he=(0,jt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||VW;z.compression.threshold=he}M=rE(o.openDB(g.key,z),o),o.databaseName=r,M.tableId=w}for(let z of S){z.attribute=z.name;try{if(!z.is_hash_attribute&&(z.indexed||z.attribute&&!z.name)){if(!m[z.name]){let Te=new Nl.default(!z.is_hash_attribute,z.is_hash_attribute);m[z.name]=o.openDB(z.key,Te),m[z.name].indexNulls=z.indexNulls}let he=A.find(Te=>Te.name===z.name);he?A.splice(A.indexOf(he),1,z):A.push(z)}}catch(he){kt.error("Error trying to update attribute",z,A,m,he)}}if(!T){T=YW(f,_,sT({primaryStore:M,auditStore:u,audit:F,sealed:ie,splitSegments:X,replicate:re,expirationMS:K&&K*1e3,evictionMS:ee&&ee*1e3,trackDeletes:G,tableName:_,tableId:w,primaryKey:g.name,databasePath:s?r+"/"+_:r,databaseName:r,indices:m,attributes:S,schemaDefined:g.schemaDefined,dbisDB:l})),T.schemaVersion=1;for(let z of Vh)z(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function KW(e){let t=$e[e];if(t||(e==="data"?t=$e[e]=Yn:e==="system"?Object.defineProperty($e,"system",{value:t=Object.create(null),configurable:!0}):t=$e[e]=Object.create(null)),Id&&!Id.has(e)){let r=new Set;t[lT]=r,Id.set(e,r)}return t}function YW(e,t,r){return e[t]=r,r}function cu({database:e,table:t}){e||(e=uC),Je();let r=KW(e),n=(0,Pt.join)((0,jt.getHdbBasePath)(),Za),s=(0,jt.get)(B.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)(B.STORAGE_PATH)||((0,ns.existsSync)(n)?n:(0,Pt.join)((0,jt.getHdbBasePath)(),up));let o=(0,Pt.join)(n,(i?t:e)+".mdb"),c=$o.get(o);if(!c||c.status==="closed"){let l=new cC.default(o,!1);c=(0,Cd.open)(l),$o.set(o,c)}return c.auditStore||(c.auditStore=XS(c)),c}async function Hy(e){if(!$e[e])throw new Error("Schema does not exist");let t=$e[e],r;for(let n in t)r=t[n].primaryStore.rootStore,$o.delete(r.path),r.status==="open"&&(await r.close(),await Yh.remove(r.path));if(r||(r=cu({database:e,table:null}),r.status==="open"&&(await r.close(),await Yh.remove(r.path))),e==="data"){for(let n in Yn)delete Yn[n];delete Yn[lT]}delete $e[e],Kh.forEach(n=>n(e)),await pA(r)}function ot(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,schemaDefined:h,origin:_}=e;r||(r=uC);let p=cu({database:r,table:t}),S=$e[r];kt.trace(`Defining ${t} in ${r}`);let g=S?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let T,m,A;h==null&&(h=!0);let w=new Nl.default(!1);for(let X of o)X.attribute&&!X.name?(X.name=X.attribute,X.indexed=!0):X.attribute=X.name,X.expiresAt&&(X.indexed=!0);let M,F;if(g){if(T=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let X=p.auditStore;m=o.find(Te=>Te.isPrimaryKey)||{},T=m.name,m.is_hash_attribute=m.isPrimaryKey=!0,m.schemaDefined=h,m.compression=Sg(),d&&(m.trackDeletes=!0),c=m.audit=typeof c=="boolean"?c:(0,jt.get)(B.LOGGING_AUDITLOG),n&&(m.expiration=n),s&&(m.eviction=s),m.splitSegments=!1,typeof l=="boolean"&&(m.sealed=l),typeof f=="boolean"&&(m.replicate=f),_&&(m.origins?m.origins.includes(_)||m.origins.push(_):m.origins=[_]),kt.trace(`${t} table loading, opening primary store`);let re=new Nl.default(!1,!0);re.compression=m.compression;let z=t+"/";if(A=p.dbisDb=p.openDB(iT.INTERNAL_DBIS_NAME,w),ie(),A.get(z))return F&&F(),Ku(),ot(e);let he=rE(p.openDB(z,re),p);p.databaseName=r,he.tableId=A.get(Nd),kt.trace(`Assigning new table id ${he.tableId} for ${t}`),he.tableId||(he.tableId=1),A.put(Nd,he.tableId+1),m.tableId=he.tableId,g=YW(S,t,sT({primaryStore:he,auditStore:X,audit:c,sealed:l,splitSegments:u,replicate:f,trackDeletes:d,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:T,tableName:t,tableId:he.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:h,dbisDB:A})),g.schemaVersion=1,M=!0,A.put(z,m)}let G=g.indices;A=A||(p.dbisDb=p.openDB(iT.INTERNAL_DBIS_NAME,w)),g.dbisDB=A;let K=[];for(let{key:X,value:re}of A.getRange({start:!0})){let[z,he]=X.toString().split("/");if(he===""&&(he=re.name),he){if(z!==t)continue}else continue;let Te=o.find(pe=>pe.name===he),Ie=!Te?.indexed&&re.indexed&&!re.isPrimaryKey;if((!Te||Ie)&&(ie(),M=!0,Te||A.remove(X),Ie)){let pe=g.indices[z];pe&&K.push(pe)}}let ee=[];try{for(let X of o||[]){if((X.relationship||X.computed)&&(M=!0,X.relationship))continue;let re=t+"/"+(X.name||"");Object.defineProperty(X,"key",{value:re,configurable:!0});let z=A.get(re);if(X.isPrimaryKey){if(z=z||A.get(re=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||f!==void 0&&f!==g.replicate||(+n||void 0)!==(+z.expiration||void 0)||(+s||void 0)!==(+z.eviction||void 0)){let Te={...z};typeof c=="boolean"&&(c&&g.enableAuditing(c),Te.audit=c),n&&(Te.expiration=+n),s&&(Te.eviction=+s),l!==void 0&&(Te.sealed=l),f!==void 0&&(Te.replicate=f),M=!0,ie(),A.put(re,Te)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let he=!z||z.type!==X.type||z.indexed!==X.indexed||z.nullable!==X.nullable||z.version!==X.version||JSON.stringify(z.properties)!==JSON.stringify(X.properties)||JSON.stringify(z.elements)!==JSON.stringify(X.elements);if(X.indexed){let Te=new Nl.default(!0,!1),Ie=p.openDB(re,Te);(he||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Wh.workerData?.restartNumber)&&(M=!0,ie(),z=A.get(re),(he||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<Wh.workerData?.restartNumber)&&(M=!0,X.indexNulls===void 0&&(X.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(X.lastIndexedKey=z?.lastIndexedKey??void 0,X.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(X,"dbi",{value:Ie}),ee.push(X))),A.put(re,X)),z?.indexNulls&&X.indexNulls===void 0&&(X.indexNulls=!0),Ie.indexNulls=X.indexNulls,G[X.name]=Ie}else he&&(M=!0,ie(),A.put(re,X))}}finally{F&&F()}if(M&&(g.schemaVersion++,g.updatedAttributes()),kt.trace(`${t} table loading, running index`),ee.length>0||K.length>0?g.indexingOperation=age(g,ee,K):M&&oT.signalSchemaChange(new aT.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=_,M)for(let X of Vh)X(g,_!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),kt.trace(`${t} table loaded`),g;function ie(){F||p.transactionSync(()=>({then(X){F=X}}))}a(ie,"startTxn")}async function age(e,t,r){try{kt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await oT.signalSchemaChange(new aT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let d of t)(0,Cd.compareKeys)(d.lastIndexedKey,u)<0&&(u=d.lastIndexedKey),d.lastIndexedKey==null&&d.dbi.clearAsync();let f=0;for(let{key:d,value:h,version:_}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(h){if(f++,s=e.primaryStore.ifVersion(d,_,()=>{for(let p=0;p<l;p++){let S=t[p],g=S.name;try{let T=S.resolve,m=h&&(T?T(h):h[g]),A=(0,qW.getIndexedValues)(m);if(A)for(let w=0,M=A.length;w<M;w++)S.dbi.put(A[w],d)}catch(T){o[g]||(o[g]=!0,kt.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>f--,p=>{f--,kt.error(p)}),Wh.workerData&&Wh.workerData.restartNumber!==$W.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=d,e.dbisDB.put(p.key,p);if(i)return}f>ige?await s:f>oge&&await new Promise(p=>setImmediate(p))}for(let d of t)delete d.lastIndexedKey,delete d.indexingPID,d.dbi.isIndexing=!1,s=e.dbisDB.put(d.key,d)}await s,await oT.signalSchemaChange(new aT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),kt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){kt.error("Error in indexing",n)}}function cge({table:e,database:t}){let r=cu({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 $c(e){return Vh.push(e),{remove(){let t=Vh.indexOf(e);t>-1&&Vh.splice(t,1)}}}function O_(e){return Kh.push(e),{remove(){let t=Kh.indexOf(e);t>-1&&Kh.splice(t,1)}}}function Sg(){let e=(0,jt.get)(B.STORAGE_COMPRESSION),t=(0,jt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,jt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||VW,n={startingOffset:32};return t&&(n.dictionary=Yh.readFileSync(t)),r&&(n.threshold=r),e&&n}var jt,iT,Cd,Pt,ns,wd,Nl,cC,Yh,lC,qW,oT,aT,Wh,kt,$W,uC,lT,VW,Yn,$e,Nd,Vh,Kh,cT,$o,Id,ige,oge,De=be(()=>{jt=U(ce()),iT=U(Mt()),Cd=require("lmdb"),Pt=require("path"),ns=require("fs"),wd=U(ht());of();Nl=U(Tf()),cC=U(Af());H();Yh=U(require("fs-extra")),lC=U(ui()),qW=U(an()),oT=U(fo()),aT=U(Ys()),Wh=require("worker_threads"),kt=U(j()),$W=U(rt());no();Wl();cs();uC="data",lT=Symbol("defined-tables"),VW=((0,jt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,jt.initSync)();Yn=Object.create(null),$e=Object.create(null);(0,lC._assignPackageExport)("databases",$e);(0,lC._assignPackageExport)("tables",Yn);Nd=Symbol.for("next-table-id"),Vh=[],Kh=[],$o=new Map;a(sge,"getTables");a(Je,"getDatabases");a(Ku,"resetDatabases");a($h,"readMetaDb");a(KW,"ensureDB");a(YW,"setTable");a(cu,"database");a(Hy,"dropDatabase");a(ot,"table");ige=1e3,oge=10;a(age,"runIndexing");a(cge,"dropTableMeta");a($c,"onUpdatedTable");a(O_,"onRemovedDB");a(Sg,"getDefaultCompression")});var ae=P(($Me,oz)=>{"use strict";var Wa=require("path"),JW=require("fs-extra"),Pn=j(),WW=require("fs-extra"),uT=require("os"),lge=require("net"),uge=require("recursive-iterator"),yr=(H(),D(q)),{PACKAGE_ROOT:dge}=_t(),fge=KT(),zW=require("papaparse"),dT=require("moment"),{inspect:_ge}=require("util"),QW=require("is-number"),qMe=require("lodash"),hge=require("minimist"),pge=require("https"),Ege=require("http"),{hdb_errors:fT}=_e(),mge=/^((\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)))$/,XW=require("util").promisify(setTimeout),gge=100,Sge=5,Tge="",Age=4,jW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};oz.exports={isEmpty:ss,isEmptyOrZeroLength:$i,arrayHasEmptyValues:bge,arrayHasEmptyOrZeroLengthValues:Oge,buildFolderPath:Nge,isBoolean:ZW,errorizeMessage:Rge,stripFileExtension:Ige,autoCast:Cge,autoCastJSON:ez,autoCastJSONDeep:fC,removeDir:Pge,compareVersions:Dge,isCompatibleDataVersion:Lge,escapeRawValue:Mge,unescapeValue:vge,stringifyProps:Uge,timeoutPromise:Bge,isClusterOperation:kge,getClusterUser:Gge,checkGlobalSchemaTable:Fge,getHomeDir:rz,getPropsFilePath:xge,promisifyPapaParse:qge,removeBOM:nz,createEventPromise:$ge,checkProcessRunning:Vge,checkSchemaTableExist:Kge,checkSchemaExists:sz,checkTableExists:iz,getStartOfTomorrowInSeconds:Yge,getLimitKey:Wge,isObject:wge,isNotEmptyAndHasValue:yge,autoCasterIsNumberCheck:tz,backtickASTSchemaItems:zge,isPortTaken:Hge,createForkArgs:Qge,autoCastBoolean:jge,async_set_timeout:XW,getTableHashAttribute:Jge,doesSchemaExist:Xge,doesTableExist:Zge,stringifyObj:eSe,ms_to_time:tSe,changeExtension:rSe,getEnvCliRootPath:_C,noBootFile:nSe,httpRequest:sSe,transformReq:iSe,convertToMS:oSe,PACKAGE_ROOT:dge};function Rge(e){return e instanceof Error?e:new Error(e)}a(Rge,"errorizeMessage");function ss(e){return e==null}a(ss,"isEmpty");function yge(e){return!ss(e)&&(e||e===0||e===""||ZW(e))}a(yge,"isNotEmptyAndHasValue");function $i(e){return ss(e)||e.length===0||e.size===0}a($i,"isEmptyOrZeroLength");function bge(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}a(bge,"arrayHasEmptyValues");function Oge(e){if($i(e))return!0;for(let t=0;t<e.length;t++)if($i(e[t]))return!0;return!1}a(Oge,"arrayHasEmptyOrZeroLengthValues");function Nge(...e){try{return e.join(Wa.sep)}catch{console.error(e)}}a(Nge,"buildFolderPath");function ZW(e){return ss(e)?!1:e===!0||e===!1}a(ZW,"isBoolean");function wge(e){return ss(e)?!1:typeof e=="object"}a(wge,"isObject");function Ige(e){return $i(e)?Tge:e.slice(0,-Age)}a(Ige,"stripFileExtension");function Cge(e){return ss(e)||e===""||typeof e!="string"?e:jW[e]!==void 0?jW[e]:tz(e)===!0?Number(e):mge.test(e)?new Date(e):e}a(Cge,"autoCast");function ez(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(ez,"autoCastJSON");function fC(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=fC(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=fC(r);n!==r&&(e[t]=n)}return e}else return ez(e)}a(fC,"autoCastJSONDeep");function tz(e){if(e.startsWith("0.")&&QW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&QW(e))}a(tz,"autoCasterIsNumberCheck");async function Pge(e){if($i(e))throw new Error(`Directory path: ${e} does not exist`);try{await WW.emptyDir(e),await WW.remove(e)}catch(t){throw Pn.error(`Error removing files in ${e} -- ${t}`),t}}a(Pge,"removeDir");function Dge(e,t){if($i(e)){Pn.info("Invalid current version sent as parameter.");return}if($i(t)){Pn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(Dge,"compareVersions");function Lge(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Lge,"isCompatibleDataVersion");function Mge(e){if(ss(e))return e;let t=String(e);return t==="."?yr.UNICODE_PERIOD:t===".."?yr.UNICODE_PERIOD+yr.UNICODE_PERIOD:t.replace(yr.FORWARD_SLASH_REGEX,yr.UNICODE_FORWARD_SLASH)}a(Mge,"escapeRawValue");function vge(e){if(ss(e))return e;let t=String(e);return t===yr.UNICODE_PERIOD?".":t===yr.UNICODE_PERIOD+yr.UNICODE_PERIOD?"..":String(e).replace(yr.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(vge,"unescapeValue");function Uge(e,t){if(ss(e))return Pn.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+uT.EOL}!$i(n)&&n[0]===";"?r+=" "+n+s+uT.EOL:$i(n)||(r+=n+"="+s+uT.EOL)}catch{Pn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Uge,"stringifyProps");function rz(){let e;try{e=uT.homedir()}catch{e=process.env.HOME}return e}a(rz,"getHomeDir");function xge(){let e=Wa.join(rz(),yr.HDB_HOME_DIR_NAME,yr.BOOT_PROPS_FILE_NAME);return JW.existsSync(e)||(e=Wa.join(__dirname,"../","hdb_boot_properties.file")),e}a(xge,"getPropsFilePath");function Bge(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(Bge,"timeoutPromise");async function Hge(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=lge.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(Hge,"isPortTaken");function kge(e){try{return yr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kge,"isClusterOperation");function Fge(e,t){let r=(De(),D(nt)).getDatabases();if(!r[e])return fT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return fT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Fge,"checkGlobalSchemaTable");function Gge(e,t){if(ss(t)){Pn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ss(e)||$i(e)){Pn.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){Pn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Pn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Gge,"getClusterUser");function qge(){zW.parsePromise=function(e,t,r){return new Promise(function(n,s){zW.parse(e,{header:!0,transformHeader:nz,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(qge,"promisifyPapaParse");function nz(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(nz,"removeBOM");function $ge(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Pn.info(`Got cluster status event response: ${_ge(s)}`);try{i.cancel()}catch{Pn.error("Error trying to cancel timeout.")}n(s)})})}a($ge,"createEventPromise");async function Vge(e){let t=!0,r=0;do await XW(gge*r++),(await fge.findPs(e)).length>0&&(t=!1);while(t&&r<Sge);if(t)throw new Error(`process ${e} was not started`)}a(Vge,"checkProcessRunning");function Kge(e,t){let r=sz(e);if(r)return r;let n=iz(e,t);if(n)return n}a(Kge,"checkSchemaTableExist");function sz(e){let{getDatabases:t}=(De(),D(nt));if(!t()[e])return fT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(sz,"checkSchemaExists");function iz(e,t){let{getDatabases:r}=(De(),D(nt));if(!r()[e][t])return fT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iz,"checkTableExists");function Yge(){let e=dT().utc().add(1,"d").startOf("d").unix(),t=dT().utc().unix();return e-t}a(Yge,"getStartOfTomorrowInSeconds");function Wge(){return dT().utc().format("DD-MM-YYYY")}a(Wge,"getLimitKey");function zge(e){try{let t=new uge(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){Pn.error("Got an error back ticking items."),Pn.error(t)}}a(zge,"backtickASTSchemaItems");function Qge(e){return[e]}a(Qge,"createForkArgs");function jge(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jge,"autoCastBoolean");function Jge(e,t){let{getDatabases:r}=(De(),D(nt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Jge,"getTableHashAttribute");function Xge(e){let{getDatabases:t}=(De(),D(nt));return t()[e]!==void 0}a(Xge,"doesSchemaExist");function Zge(e,t){let{getDatabases:r}=(De(),D(nt));return r()[e]?.[t]!==void 0}a(Zge,"doesTableExist");function eSe(e){try{return JSON.stringify(e)}catch{return e}}a(eSe,"stringifyObj");function tSe(e){let t=dT.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(tSe,"ms_to_time");function rSe(e,t){let r=Wa.basename(e,Wa.extname(e));return Wa.join(Wa.dirname(e),r+t)}a(rSe,"changeExtension");function _C(){if(process.env[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=hge(process.argv);if(e[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[yr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(_C,"getEnvCliRootPath");var dC;function nSe(){if(dC)return dC;let e=_C();if(_C()&&JW.pathExistsSync(Wa.join(e,yr.HDB_CONFIG_FILE)))return dC=!0,!0}a(nSe,"noBootFile");function sSe(e,t){let r;return e.protocol==="http:"?r=Ege:r=pge,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(sSe,"httpRequest");function iSe(e){if(!e.schema&&!e.database){e.schema=yr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(iSe,"transformReq");function oSe(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(oSe,"convertToMS")});var ce=P((dz,fz)=>{"use strict";var hC=require("fs-extra"),wl=require("path"),az=require("os"),aSe=require("properties-reader"),Qh=j(),zh=ae(),Pe=(H(),D(q)),_T=wt(),cSe="Error initializing environment manager",hT="BOOT_PROPS_FILE_PATH",cz=!1,lSe={[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Vo={};Object.assign(dz,fz.exports={BOOT_PROPS_FILE_PATH:hT,getHdbBasePath:uSe,setHdbBasePath:dSe,get:lz,initSync:_Se,setProperty:Ke,initTestEnvironment:pSe,setCloneVar:hSe});function uSe(){return Vo[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(uSe,"getHdbBasePath");function dSe(e){Vo[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(dSe,"setHdbBasePath");function lz(e){let t=_T.getConfigValue(e);return t===void 0?Vo[e]:t}a(lz,"get");function Ke(e,t){lSe[e]&&(Vo[e]=t),_T.updateConfigObject(e,t)}a(Ke,"setProperty");function fSe(){let e;try{e=zh.getPropsFilePath(),hC.accessSync(e,hC.constants.F_OK|hC.constants.R_OK),cz=!0;let t=aSe(e);return Vo[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Pe.HDB_SETTINGS_NAMES.INSTALL_USER),Vo[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vo[hT]=e,!0}catch{return Qh.trace(`Environment manager found no properties file at ${e}`),!1}}a(fSe,"doesPropFileExist");function _Se(e=!1){try{((cz||fSe()||zh.noBootFile())&&!uz||e)&&(_T.initConfig(e),Vo[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=_T.getConfigValue(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qh.error(cSe),Qh.error(t),console.error(t),process.exit(1)}}a(_Se,"initSync");var uz=!1;function hSe(e){uz=e}a(hSe,"setCloneVar");function pSe(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=wl.join(__dirname,"../../","unitTests");Vo[hT]=wl.join(l,"hdb_boot_properties.file"),Ke(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,wl.join(l,"settings.test")),Ke(Pe.HDB_SETTINGS_NAMES.INSTALL_USER,az.userInfo()?az.userInfo().username:void 0),Ke(Pe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ke(Pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,wl.join(l,"envDir","log")),Ke(Pe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ke(Pe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ke(Pe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ke(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,wl.join(l,"envDir")),Ke(Pe.CONFIG_PARAMS.STORAGE_PATH,wl.join(l,"envDir")),s&&(Ke(Pe.CONFIG_PARAMS.HTTP_SECUREPORT,lz(Pe.CONFIG_PARAMS.HTTP_PORT)),Ke(Pe.CONFIG_PARAMS.HTTP_PORT,null)),Ke(Pe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ke(Pe.CONFIG_PARAMS.HTTP_PORT,9926),Ke(Pe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ke(Pe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ke(Pe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,zh.isEmpty(i)?!1:i),Ke(Pe.CONFIG_PARAMS.HTTP_CORS,zh.isEmpty(i)?!1:i),Ke(Pe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ke(Pe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ke(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ke(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ke(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,wl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ke(Pe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,zh.isEmpty(c)?!1:c),o&&(Ke("CORS_ACCESSLIST",o),Ke(Pe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Ke(Pe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ke(Pe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ke(Pe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ke(Pe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ke(Pe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ke(Pe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${hT}. Please check your boot props and settings files`;Qh.fatal(r),Qh.error(t)}}a(pSe,"initTestEnvironment")});var Sr=P((JMe,Cz)=>{"use strict";var wr=ce();wr.initSync();var ESe=require("fs-extra"),mSe=require("semver"),Xh=require("path"),{monotonicFactory:gSe}=require("ulidx"),hz=gSe(),SSe=require("util"),pz=require("child_process"),TSe=SSe.promisify(pz.exec),ASe=pz.spawn,kr=Ot(),Ye=(H(),D(q)),{packageJson:RSe,PACKAGE_ROOT:ySe}=_t(),pT=ae(),ci=j(),ET=co(),bSe=hm(),jh=wt(),{broadcast:OSe,onMessageByType:NSe,getWorkerIndex:wSe}=rt(),{isMainThread:Ez}=require("worker_threads"),{Encoder:ISe,decode:gC}=require("msgpackr"),mz=new ISe,{isEmpty:Dl}=pT,gz=qn(),YMe=48*36e11;Ez&&NSe(Ye.ITC_EVENT_TYPES.RESTART,()=>{rn=void 0,Pl=void 0});var{connect:CSe,StorageType:PSe,RetentionPolicy:DSe,AckPolicy:SC,DeliverPolicy:TC,DiscardPolicy:LSe,NatsConnection:WMe,JetStreamManager:zMe,JetStreamClient:QMe,StringCodec:jMe,JSONCodec:MSe,createInbox:AC,headers:vSe,ErrorCode:_z}=require("nats"),{recordAction:USe}=(Ci(),D(u_)),{encodeBlobsAsBuffers:xSe}=(cs(),D(Yp)),Sz=MSe(),BSe="clustering",HSe=RSe.engines[kr.NATS_SERVER_NAME],kSe=Xh.join(ySe,"dependencies"),mC=Xh.join(kSe,`${process.platform}-${process.arch}`,kr.NATS_BINARY_NAME),pC,EC,Jh,Il,Cl;Cz.exports={runCommand:Tz,checkNATSServerInstalled:FSe,createConnection:RC,getConnection:Zh,getJetStreamManager:ep,getJetStream:Rz,getNATSReferences:Vi,getServerList:qSe,createLocalStream:yC,listStreams:yz,deleteLocalStream:$Se,getServerConfig:Pd,listRemoteStreams:VSe,viewStream:KSe,viewStreamIterator:YSe,publishToStream:WSe,request:jSe,reloadNATS:bC,reloadNATSHub:JSe,reloadNATSLeaf:XSe,extractServerName:QSe,requestErrorHandler:ZSe,createLocalTableStream:wz,createTableStreams:rTe,purgeTableStream:Iz,purgeSchemaTableStreams:nTe,getStreamInfo:sTe,updateLocalStreams:oTe,closeConnection:GSe,getJsmServerName:mT,addNatsMsgHeader:bz,clearClientCache:Az,updateRemoteConsumer:eTe,createConsumer:Oz,updateConsumerIterator:tTe};async function Tz(e,t=void 0){let{stdout:r,stderr:n}=await TSe(e,{cwd:t});if(n)throw new Error(n.replace(`
132
132
  `,""));return r.replace(`
133
- `,"")}a(Rz,"runCommand");async function QSe(){try{await NSe.access(mC)}catch{return!1}let e=await Rz(`${mC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return wSe.eq(t,zSe)}a(QSe,"checkNATSServerInstalled");async function TC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await Tz.getClusterUser();if(Pl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}li.trace("create nats connection called");let i=await xSe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),li.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&li.error("Error with Nats client connection, connection closed",o),i===tn&&yz()}),i}a(TC,"createConnection");function yz(){tn=void 0,wl=void 0,Il=void 0,Cl=void 0}a(yz,"clearClientCache");async function JSe(){tn&&(await tn.drain(),tn=void 0,wl=void 0,Il=void 0,Cl=void 0)}a(JSe,"closeConnection");var tn,Cl;async function cm(){return Cl||(Cl=TC(Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),tn=await Cl),tn||Cl}a(cm,"getConnection");async function lm(){if(wl)return wl;Pl(tn)&&await cm();let{domain:e}=Ld(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wl=await tn.jetstreamManager({domain:e,timeout:6e4}),wl}a(lm,"getJetStreamManager");async function bz(){if(Il)return Il;Pl(tn)&&await cm();let{domain:e}=Ld(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Pl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Il=tn.jetstream({domain:e,timeout:6e4}),Il}a(bz,"getJetStream");async function Ki(){let e=tn||await cm(),t=wl||await lm(),r=Il||await bz();return{connection:e,jsm:t,js:r}}a(Ki,"getNATSReferences");async function XSe(e){let t=Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await Tz.getClusterUser(),s=await TC(t,r,n),i=SC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=Az.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await RT.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(XSe,"getServerList");async function AC(e,t){let{jsm:r}=await Ki(),n=Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:HSe.File,retention:kSe.Limits,subjects:t,discard:FSe.Old,max_msgs:s,max_bytes:i,max_age:n})}a(AC,"createLocalStream");async function Oz(){let{jsm:e}=await Ki(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(Oz,"listStreams");async function ZSe(e){let{jsm:t}=await Ki();await t.streams.delete(e)}a(ZSe,"deleteLocalStream");async function eTe(e){let{connection:t}=await Ki(),r=[],n=SC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(Az.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(eTe,"listRemoteStreams");async function tTe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ki(),i=pz(),o={durable_name:i,ack_policy:EC.Explicit};t&&(o.deliver_policy=gC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=pC(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(Hr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(tTe,"viewStream");async function*rTe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ki(),i=pz(),o={durable_name:i,ack_policy:EC.Explicit};t&&(o.deliver_policy=gC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=pC(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(Hr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(rTe,"viewStreamIterator");async function nTe(e,t,r,n){li.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=Nz(n,r);let{js:s}=await Ki(),i=await bT(),o=`${e}.${i}`,c=await YSe(()=>n instanceof Uint8Array?n:Sz.encode(n));try{li.trace(`publishToStream publishing to subject: ${o}`),KSe(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return Iz(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){li.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await AC(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(nTe,"publishToStream");function Nz(e,t){t===void 0&&(t=GSe());let r=Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Hr.MSG_HEADERS.ORIGIN)&&r&&t.append(Hr.MSG_HEADERS.ORIGIN,r),t}a(Nz,"addNatsMsgHeader");function Ld(e){e=e.toLowerCase();let t=am.join(Nr.get(Ke.CONFIG_PARAMS.ROOTPATH),WSe);if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Pl(hC)&&(hC={port:im.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:im.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Hr.SERVER_SUFFIX.HUB,config_file:Hr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:am.join(t,Hr.PID_FILES.HUB),hdb_nats_path:t}),hC;if(e===Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Pl(_C)&&(_C={port:im.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:im.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Hr.SERVER_SUFFIX.LEAF,config_file:Hr.NATS_CONFIG_FILES.LEAF_SERVER,domain:im.getConfigFromFile(Ke.CONFIG_PARAMS.CLUSTERING_NODENAME)+Hr.SERVER_SUFFIX.LEAF,pid_file_path:am.join(t,Hr.PID_FILES.LEAF),hdb_nats_path:t}),_C;li.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ld,"getServerConfig");async function wz(e,t,r,n){try{await e.consumers.add(t,{ack_policy:EC.Explicit,durable_name:r,deliver_policy:gC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(wz,"createConsumer");async function sTe(e,t,r){await e.consumers.delete(t,r)}a(sTe,"removeConsumer");function iTe(e){return e.split(".")[1]}a(iTe,"extractServerName");async function oTe(e,t,r=6e4,n=SC()){if(!RT.isObject(t))throw new Error("data param must be an object");let s=Sz.encode(t),{connection:i}=await Ki(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return pC(c.data)}a(oTe,"request");function RC(e){return new Promise(async(t,r)=>{let n=DSe(mC,["--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(RC,"reloadNATS");async function aTe(){let{pid_file_path:e}=Ld(Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await RC(e)}a(aTe,"reloadNATSHub");async function cTe(){let{pid_file_path:e}=Ld(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await RC(e)}a(cTe,"reloadNATSLeaf");function lTe(e,t,r){let n;switch(e.code){case mz.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case mz.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(lTe,"requestErrorHandler");async function uTe(e,t){let r=t+Hr.SERVER_SUFFIX.LEAF,{connection:n}=await Ki(),{jsm:s}=await gTe(r),{schema:i,table:o}=e,c=yT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await Iz(async()=>{if(e.subscribe===!0)await wz(s,c,n.info.server_name,l);else try{await sTe(s,c,n.info.server_name)}catch(u){li.trace(u)}})}a(uTe,"updateRemoteConsumer");async function dTe(e,t,r,n){let s=yT.createNatsTableStreamName(e,t),i=r+Hr.SERVER_SUFFIX.LEAF,o={type:Ke.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!gz&&USe()<Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=$S();await c(o)}await MSe(o),n==="stop"&&await RT.async_set_timeout(1e3)}a(dTe,"updateConsumerIterator");function Iz(e){return LSe.writeTransaction(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(Iz,"exclusiveLock");async function Cz(e,t){let r=yT.createNatsTableStreamName(e,t),n=await bT(),s=mTe(e,t,n);await AC(r,[s])}a(Cz,"createLocalTableStream");async function fTe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await Cz(n,s)}}a(fTe,"createTableStreams");async function Pz(e,t,r=void 0){if(Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=yT.createNatsTableStreamName(e,t),{domain:s}=Ld(Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await cm()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")li.warn(n);else throw n}}a(Pz,"purgeTableStream");async function _Te(e,t){if(Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await Pz(e,t[r])}a(_Te,"purgeSchemaTableStreams");async function hTe(e){return(await lm()).streams.info(e)}a(hTe,"getStreamInfo");function mTe(e,t,r){return`${Hr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(mTe,"createSubjectName");async function bT(){if(om)return om;if(om=(await lm())?.nc?.info?.server_name,om===void 0)throw new Error("Unable to get jetstream manager server name");return om}a(bT,"getJsmServerName");async function pTe(){let e=await lm(),t=await bT(),r=await Oz();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=ETe(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");li.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(pTe,"updateLocalStreams");function ETe(e){let{config:t}=e,r=!1,n=Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Nr.get(Ke.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(ETe,"updateStreamLimits");async function gTe(e){let t,r;try{t=await tn.jetstream({domain:e}),r=await tn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw li.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(gTe,"connectToRemoteJS")});var $S=P((lve,$z)=>{"use strict";var{decode:STe}=require("msgpackr"),{isMainThread:ove,parentPort:ave,threadId:cve}=require("worker_threads"),wT=Er(),Md=yt(),OC=v(),rn=j(),bC=ne(),TTe=v(),{onMessageByType:ATe}=tt(),Uz=no(),{recordAction:Lz,recordActionBinary:RTe}=(Ci(),se(S_)),{publishToStream:yTe}=wT,{ConsumerEvents:Mz}=require("nats"),bTe=$r(),{promisify:OTe}=require("util"),{decodeBlobsWithWrites:NTe}=(ls(),se(Qm)),Bz=OTe(setTimeout),IT=1e4,CT,NT,wTe,ITe,xz,um=new Map,vd=new Map;$z.exports={initialize:Hz,ingestConsumer:NC,setSubscription:CTe,setIgnoreOrigin:LTe,getDatabaseSubscriptions:DTe,updateConsumer:kz};async function Hz(){ATe(OC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await kz(n)}),xz=!0,rn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await wT.getNATSReferences();CT=e,NT=e.info.server_name,wTe=t,ITe=r}a(Hz,"initialize");async function kz(e){if(e.status==="start"){let{js:t,jsm:r}=await Fz(e.node_domain_name);NC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=um.get(e.stream_name+e.node_domain_name);t&&(rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),um.set(e.stream_name+e.node_domain_name,"close")),vd.get(e.node_domain_name)==="failed"&&vd.set(e.node_domain_name,"close")}}a(kz,"updateConsumer");var PT=new Map;function CTe(e,t,r){let n=PT.get(e);n||PT.set(e,n=new Map),n.set(t,r),xz||Hz().then(PTe)}a(CTe,"setSubscription");async function PTe(){let e=await bTe.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Md.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await Fz(r),!n))break;let{schema:o,table:c}=i,l=Uz.createNatsTableStreamName(o,c);NC(l,n,s,r)}}}a(PTe,"accessConsumers");async function Fz(e){let t,r,n=1;for(;!r;)try{t=await CT.jetstream({domain:e}),r=await CT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(vd.get(e)==="close")break;vd.set(e,"failed"),n%10===1&&rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<IT?n++*100:IT;await Bz(i)}return{js:t,jsm:r}}a(Fz,"connectToRemoteJS");function DTe(){return PT}a(DTe,"getDatabaseSubscriptions");var qz;function LTe(e){qz=e}a(LTe,"setIgnoreOrigin");var Gz=100,vz=new Array(Gz),OT=0;async function NC(e,t,r,n){let{connection:s}=await wT.getNATSReferences();CT=s,NT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,NT),rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(vd.get(n)==="close")break;o%10===1&&rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await wT.createConsumer(r,e,NT,new Date(Date.now()).toISOString()));let f=o++*100<IT?o++*100:IT;await Bz(f)}let c=!1,l;for(;!c;){if(um.get(e+n)==="close"||vd.get(n)==="close"){um.delete(e+n),c=!0;continue}l=await i.consume({max_messages:bC.get(OC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),um.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===Mz.ConsumerDeleted&&(await l.close(),c=!0),f.type===Mz.HeartbeatsMissed){let d=f.data;rn.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(rn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await vz[OT],vz[OT]=MTe(f).catch(d=>{rn.error(d)}),++OT>=Gz&&(OT=0)}catch(f){f.message==="consumer deleted"?(rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):rn.error("Error consuming clustering ingest, restarting consumer",f)}}}a(NC,"ingestConsumer");async function MTe(e){let t;await NTe(()=>{t=STe(e.data)}),Lz(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=bC.get(OC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Md.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Md.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Md.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!qz),RTe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Md.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;rn.trace("processing message:",o,c,u,(f?"records: "+f.map(M=>M?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),rn.trace(`messageProcessor nats msg id: ${e.headers.get(Md.MSG_HEADERS.NATS_MSG_ID)}`);let m;f||(f=d);let S=new Promise(M=>m=M),{timestamp:g,user:T,node_name:E}=h||{},A=PT.get(c)?.get(u);if(!A)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=m,A.send(t);else if(f.length===1&&!l)A.send({type:yC(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:m,user:T,nodeName:E});else{let M=f.map((H,k)=>({type:yC(o),value:H,expiresAt:_,id:d?.[k],table:u}));for(;l;)M.push({type:yC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:M,table:u,timestamp:g,onCommit:m,user:T,nodeName:E})}bC.get(TTe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&yTe(e.subject.split(".").slice(0,-1).join("."),Uz.createNatsTableStreamName(c,u),e.headers,e.data),await S;let w=Date.now()-g;g&&Lz(w,"replication-latency",e.subject,o,"ingest")}catch(o){rn.error(o)}e.ack()}a(MTe,"messageProcessor");function yC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(yC,"convertOperation")});var vTe=$S();(async()=>{try{await vTe.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
133
+ `,"")}a(Tz,"runCommand");async function FSe(){try{await ESe.access(mC)}catch{return!1}let e=await Tz(`${mC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return mSe.eq(t,HSe)}a(FSe,"checkNATSServerInstalled");async function RC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await gz.getClusterUser();if(Dl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}ci.trace("create nats connection called");let i=await CSe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:wr.get(Ye.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:wr.get(Ye.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:wr.get(Ye.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),ci.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&ci.error("Error with Nats client connection, connection closed",o),i===rn&&Az()}),i}a(RC,"createConnection");function Az(){rn=void 0,Il=void 0,Cl=void 0,Pl=void 0}a(Az,"clearClientCache");async function GSe(){rn&&(await rn.drain(),rn=void 0,Il=void 0,Cl=void 0,Pl=void 0)}a(GSe,"closeConnection");var rn,Pl;async function Zh(){return Pl||(Pl=RC(wr.get(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),rn=await Pl),rn||Pl}a(Zh,"getConnection");async function ep(){if(Il)return Il;Dl(rn)&&await Zh();let{domain:e}=Pd(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Il=await rn.jetstreamManager({domain:e,timeout:6e4}),Il}a(ep,"getJetStreamManager");async function Rz(){if(Cl)return Cl;Dl(rn)&&await Zh();let{domain:e}=Pd(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Cl=rn.jetstream({domain:e,timeout:6e4}),Cl}a(Rz,"getJetStream");async function Vi(){let e=rn||await Zh(),t=Il||await ep(),r=Cl||await Rz();return{connection:e,jsm:t,js:r}}a(Vi,"getNATSReferences");async function qSe(e){let t=wr.get(Ye.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await gz.getClusterUser(),s=await RC(t,r,n),i=AC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let f of o){let d=Sz.decode(f.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await pT.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(qSe,"getServerList");async function yC(e,t){let{jsm:r}=await Vi(),n=wr.get(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=wr.get(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=wr.get(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:PSe.File,retention:DSe.Limits,subjects:t,discard:LSe.Old,max_msgs:s,max_bytes:i,max_age:n})}a(yC,"createLocalStream");async function yz(){let{jsm:e}=await Vi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(yz,"listStreams");async function $Se(e){let{jsm:t}=await Vi();await t.streams.delete(e)}a($Se,"deleteLocalStream");async function VSe(e){let{connection:t}=await Vi(),r=[],n=AC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(Sz.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(VSe,"listRemoteStreams");async function KSe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Vi(),i=hz(),o={durable_name:i,ack_policy:SC.Explicit};t&&(o.deliver_policy=TC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let f of l){let d=gC(f.data),h={nats_timestamp:f.info.timestampNanos,nats_sequence:f.info.streamSequence,entry:d};if(f.headers&&(h.origin=f.headers.get(kr.MSG_HEADERS.ORIGIN)),u.push(h),f.ack(),f.info.pending===0)break}return await c.delete(),u}a(KSe,"viewStream");async function*YSe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Vi(),i=hz(),o={durable_name:i,ack_policy:SC.Explicit};t&&(o.deliver_policy=TC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let f=gC(u.data);f[0]||(f=[f]);for(let d of f){let h={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};u.headers&&(h.origin=u.headers.get(kr.MSG_HEADERS.ORIGIN)),yield h}if(u.ack(),u.info.pending===0)break}await c.delete()}a(YSe,"viewStreamIterator");async function WSe(e,t,r,n){ci.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=bz(n,r);let{js:s}=await Vi(),i=await mT(),o=`${e}.${i}`,c=await xSe(()=>n instanceof Uint8Array?n:mz.encode(n));try{ci.trace(`publishToStream publishing to subject: ${o}`),USe(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return Nz(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){ci.trace(`publishToStream creating stream: ${t}`);let f=o.split(".");f[2]="*",await yC(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(WSe,"publishToStream");function bz(e,t){t===void 0&&(t=vSe());let r=wr.get(Ye.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(kr.MSG_HEADERS.ORIGIN)&&r&&t.append(kr.MSG_HEADERS.ORIGIN,r),t}a(bz,"addNatsMsgHeader");function Pd(e){e=e.toLowerCase();let t=Xh.join(wr.get(Ye.CONFIG_PARAMS.ROOTPATH),BSe);if(e===Ye.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(EC)&&(EC={port:jh.getConfigFromFile(Ye.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:jh.getConfigFromFile(Ye.CONFIG_PARAMS.CLUSTERING_NODENAME)+kr.SERVER_SUFFIX.HUB,config_file:kr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Xh.join(t,kr.PID_FILES.HUB),hdb_nats_path:t}),EC;if(e===Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(pC)&&(pC={port:jh.getConfigFromFile(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:jh.getConfigFromFile(Ye.CONFIG_PARAMS.CLUSTERING_NODENAME)+kr.SERVER_SUFFIX.LEAF,config_file:kr.NATS_CONFIG_FILES.LEAF_SERVER,domain:jh.getConfigFromFile(Ye.CONFIG_PARAMS.CLUSTERING_NODENAME)+kr.SERVER_SUFFIX.LEAF,pid_file_path:Xh.join(t,kr.PID_FILES.LEAF),hdb_nats_path:t}),pC;ci.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Pd,"getServerConfig");async function Oz(e,t,r,n){try{await e.consumers.add(t,{ack_policy:SC.Explicit,durable_name:r,deliver_policy:TC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(Oz,"createConsumer");async function zSe(e,t,r){await e.consumers.delete(t,r)}a(zSe,"removeConsumer");function QSe(e){return e.split(".")[1]}a(QSe,"extractServerName");async function jSe(e,t,r=6e4,n=AC()){if(!pT.isObject(t))throw new Error("data param must be an object");let s=mz.encode(t),{connection:i}=await Vi(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return gC(c.data)}a(jSe,"request");function bC(e){return new Promise(async(t,r)=>{let n=ASe(mC,["--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(bC,"reloadNATS");async function JSe(){let{pid_file_path:e}=Pd(Ye.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await bC(e)}a(JSe,"reloadNATSHub");async function XSe(){let{pid_file_path:e}=Pd(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await bC(e)}a(XSe,"reloadNATSLeaf");function ZSe(e,t,r){let n;switch(e.code){case _z.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case _z.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(ZSe,"requestErrorHandler");async function eTe(e,t){let r=t+kr.SERVER_SUFFIX.LEAF,{connection:n}=await Vi(),{jsm:s}=await cTe(r),{schema:i,table:o}=e,c=ET.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await Nz(async()=>{if(e.subscribe===!0)await Oz(s,c,n.info.server_name,l);else try{await zSe(s,c,n.info.server_name)}catch(u){ci.trace(u)}})}a(eTe,"updateRemoteConsumer");async function tTe(e,t,r,n){let s=ET.createNatsTableStreamName(e,t),i=r+kr.SERVER_SUFFIX.LEAF,o={type:Ye.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!Ez&&wSe()<wr.get(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=xS();await c(o)}await OSe(o),n==="stop"&&await pT.async_set_timeout(1e3)}a(tTe,"updateConsumerIterator");function Nz(e){return bSe.writeTransaction(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(Nz,"exclusiveLock");async function wz(e,t){let r=ET.createNatsTableStreamName(e,t),n=await mT(),s=iTe(e,t,n);await yC(r,[s])}a(wz,"createLocalTableStream");async function rTe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await wz(n,s)}}a(rTe,"createTableStreams");async function Iz(e,t,r=void 0){if(wr.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=ET.createNatsTableStreamName(e,t),{domain:s}=Pd(Ye.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Zh()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")ci.warn(n);else throw n}}a(Iz,"purgeTableStream");async function nTe(e,t){if(wr.get(Ye.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await Iz(e,t[r])}a(nTe,"purgeSchemaTableStreams");async function sTe(e){return(await ep()).streams.info(e)}a(sTe,"getStreamInfo");function iTe(e,t,r){return`${kr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(iTe,"createSubjectName");async function mT(){if(Jh)return Jh;if(Jh=(await ep())?.nc?.info?.server_name,Jh===void 0)throw new Error("Unable to get jetstream manager server name");return Jh}a(mT,"getJsmServerName");async function oTe(){let e=await ep(),t=await mT(),r=await yz();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=aTe(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let f=u.join(".");ci.trace(`Updating stream subject name from: ${i} to: ${f}`),s.subjects[0]=f,await e.streams.update(s.name,s)}}a(oTe,"updateLocalStreams");function aTe(e){let{config:t}=e,r=!1,n=wr.get(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=wr.get(Ye.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=wr.get(Ye.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(aTe,"updateStreamLimits");async function cTe(e){let t,r;try{t=await rn.jetstream({domain:e}),r=await rn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw ci.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(cTe,"connectToRemoteJS")});var xS=P((rve,Gz)=>{"use strict";var{decode:lTe}=require("msgpackr"),{isMainThread:ZMe,parentPort:eve,threadId:tve}=require("worker_threads"),TT=Sr(),Dd=Ot(),wC=(H(),D(q)),nn=j(),NC=ce(),uTe=(H(),D(q)),{onMessageByType:dTe}=rt(),Mz=co(),{recordAction:Pz,recordActionBinary:fTe}=(Ci(),D(u_)),{publishToStream:_Te}=TT,{ConsumerEvents:Dz}=require("nats"),hTe=Kr(),{promisify:pTe}=require("util"),{decodeBlobsWithWrites:ETe}=(cs(),D(Yp)),vz=pTe(setTimeout),AT=1e4,RT,ST,mTe,gTe,Uz,tp=new Map,Ld=new Map;Gz.exports={initialize:xz,ingestConsumer:IC,setSubscription:STe,setIgnoreOrigin:RTe,getDatabaseSubscriptions:ATe,updateConsumer:Bz};async function xz(){dTe(wC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await Bz(n)}),Uz=!0,nn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await TT.getNATSReferences();RT=e,ST=e.info.server_name,mTe=t,gTe=r}a(xz,"initialize");async function Bz(e){if(e.status==="start"){let{js:t,jsm:r}=await Hz(e.node_domain_name);IC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=tp.get(e.stream_name+e.node_domain_name);t&&(nn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),tp.set(e.stream_name+e.node_domain_name,"close")),Ld.get(e.node_domain_name)==="failed"&&Ld.set(e.node_domain_name,"close")}}a(Bz,"updateConsumer");var yT=new Map;function STe(e,t,r){let n=yT.get(e);n||yT.set(e,n=new Map),n.set(t,r),Uz||xz().then(TTe)}a(STe,"setSubscription");async function TTe(){let e=await hTe.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Dd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await Hz(r),!n))break;let{schema:o,table:c}=i,l=Mz.createNatsTableStreamName(o,c);IC(l,n,s,r)}}}a(TTe,"accessConsumers");async function Hz(e){let t,r,n=1;for(;!r;)try{t=await RT.jetstream({domain:e}),r=await RT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Ld.get(e)==="close")break;Ld.set(e,"failed"),n%10===1&&nn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<AT?n++*100:AT;await vz(i)}return{js:t,jsm:r}}a(Hz,"connectToRemoteJS");function ATe(){return yT}a(ATe,"getDatabaseSubscriptions");var kz;function RTe(e){kz=e}a(RTe,"setIgnoreOrigin");var Fz=100,Lz=new Array(Fz),gT=0;async function IC(e,t,r,n){let{connection:s}=await TT.getNATSReferences();RT=s,ST=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,ST),nn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Ld.get(n)==="close")break;o%10===1&&nn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(nn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await TT.createConsumer(r,e,ST,new Date(Date.now()).toISOString()));let f=o++*100<AT?o++*100:AT;await vz(f)}let c=!1,l;for(;!c;){if(tp.get(e+n)==="close"||Ld.get(n)==="close"){tp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:NC.get(wC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),tp.set(e+n,l);let u=!1;(async()=>{for await(let f of await l.status())if(f.type===Dz.ConsumerDeleted&&(await l.close(),c=!0),f.type===Dz.HeartbeatsMissed){let d=f.data;nn.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(nn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let f of l)await Lz[gT],Lz[gT]=yTe(f).catch(d=>{nn.error(d)}),++gT>=Fz&&(gT=0)}catch(f){f.message==="consumer deleted"?(nn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):nn.error("Error consuming clustering ingest, restarting consumer",f)}}}a(IC,"ingestConsumer");async function yTe(e){let t;await ETe(()=>{t=lTe(e.data)}),Pz(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),nn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=NC.get(wC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Dd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Dd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Dd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!kz),fTe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Dd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:f,hash_values:d,__origin:h,expiresAt:_}=t;nn.trace("processing message:",o,c,u,(f?"records: "+f.map(M=>M?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),nn.trace(`messageProcessor nats msg id: ${e.headers.get(Dd.MSG_HEADERS.NATS_MSG_ID)}`);let p;f||(f=d);let S=new Promise(M=>p=M),{timestamp:g,user:T,node_name:m}=h||{},A=yT.get(c)?.get(u);if(!A)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=p,A.send(t);else if(f.length===1&&!l)A.send({type:OC(o),value:f[0],id:d?.[0],expiresAt:_,timestamp:g,table:u,onCommit:p,user:T,nodeName:m});else{let M=f.map((F,G)=>({type:OC(o),value:F,expiresAt:_,id:d?.[G],table:u}));for(;l;)M.push({type:OC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;A.send({type:"transaction",writes:M,table:u,timestamp:g,onCommit:p,user:T,nodeName:m})}NC.get(uTe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&_Te(e.subject.split(".").slice(0,-1).join("."),Mz.createNatsTableStreamName(c,u),e.headers,e.data),await S;let w=Date.now()-g;g&&Pz(w,"replication-latency",e.subject,o,"ingest")}catch(o){nn.error(o)}e.ack()}a(yTe,"messageProcessor");function OC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(OC,"convertOperation")});var bTe=xS();(async()=>{try{await bTe.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();