harperdb 4.3.28 → 4.3.29

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 (55) hide show
  1. package/README.md +1 -1
  2. package/bin/harperdb.js +22 -22
  3. package/bin/lite.js +14 -14
  4. package/launchServiceScripts/launchInstallNATSServer.js +1 -1
  5. package/launchServiceScripts/launchNatsIngestService.js +14 -14
  6. package/launchServiceScripts/launchNatsReplyService.js +14 -14
  7. package/launchServiceScripts/launchUpdateNodes4-0-0.js +14 -14
  8. package/npm-shrinkwrap.json +34 -34
  9. package/package.json +1 -1
  10. package/server/jobs/jobProcess.js +14 -14
  11. package/server/threads/threadServer.js +13 -13
  12. package/studio/build-local/asset-manifest.json +28 -28
  13. package/studio/build-local/index.html +1 -1
  14. package/studio/build-local/static/css/{main.e1f8b48c.css → main.fee3019a.css} +1 -1
  15. package/studio/build-local/static/js/{311.3d832d8b.chunk.js → 311.9e648b13.chunk.js} +2 -2
  16. package/studio/build-local/static/js/452.d771b05a.chunk.js +2 -0
  17. package/studio/build-local/static/js/{452.03944f0d.chunk.js.LICENSE.txt → 452.d771b05a.chunk.js.LICENSE.txt} +1 -1
  18. package/studio/build-local/static/js/545.be2e36f9.chunk.js +1 -0
  19. package/studio/build-local/static/js/759.7c5150cd.chunk.js +2 -0
  20. package/studio/build-local/static/js/{806.adb20036.chunk.js → 806.afb99f70.chunk.js} +1 -1
  21. package/studio/build-local/static/js/851.4c6536d6.chunk.js +1 -0
  22. package/studio/build-local/static/js/browse-datatable.0e20a171.chunk.js +1 -0
  23. package/studio/build-local/static/js/browse-jsonviewer.b690b1bb.chunk.js +1 -0
  24. package/studio/build-local/static/js/{custom-functions.01f632d1.chunk.js → custom-functions.04b93135.chunk.js} +1 -1
  25. package/studio/build-local/static/js/{instance-cluster.7f6df625.chunk.js → instance-cluster.0ba07710.chunk.js} +1 -1
  26. package/studio/build-local/static/js/{instance-config.59b29ef6.chunk.js → instance-config.2274de0a.chunk.js} +1 -1
  27. package/studio/build-local/static/js/instance-query.fdc5f922.chunk.js +1 -0
  28. package/studio/build-local/static/js/instance-status.d09551b0.chunk.js +1 -0
  29. package/studio/build-local/static/js/{instance-users-datatable.d61ab3ef.chunk.js → instance-users-datatable.9b5617bc.chunk.js} +1 -1
  30. package/studio/build-local/static/js/{instance-users-edit.ff5bfa06.chunk.js → instance-users-edit.6ea9cc6f.chunk.js} +1 -1
  31. package/studio/build-local/static/js/{instance-users.c71b71f2.chunk.js → instance-users.876f6070.chunk.js} +1 -1
  32. package/studio/build-local/static/js/instance.ad30f892.chunk.js +1 -0
  33. package/studio/build-local/static/js/instances.f4fec0cb.chunk.js +1 -0
  34. package/studio/build-local/static/js/{main.688e0bbd.js → main.2bfc8c33.js} +2 -2
  35. package/studio/build-local/static/js/{offline-app.31c18661.chunk.js → offline-app.31ad36fc.chunk.js} +1 -1
  36. package/studio/build-local/static/js/{online-app.0d8194e1.chunk.js → online-app.91033fd0.chunk.js} +1 -1
  37. package/studio/build-local/static/js/{organization-users.532711dd.chunk.js → organization-users.6f50ca02.chunk.js} +1 -1
  38. package/studio/build-local/static/js/{organization.99a1e759.chunk.js → organization.89b902c4.chunk.js} +1 -1
  39. package/studio/build-local/static/js/{profile.e4e06bdf.chunk.js → profile.c05c7042.chunk.js} +1 -1
  40. package/studio/build-local/static/js/signIn.996cf7ee.chunk.js +1 -0
  41. package/utility/scripts/restartHdb.js +14 -14
  42. package/studio/build-local/static/js/452.03944f0d.chunk.js +0 -2
  43. package/studio/build-local/static/js/545.e12f8571.chunk.js +0 -1
  44. package/studio/build-local/static/js/591.7498da00.chunk.js +0 -2
  45. package/studio/build-local/static/js/851.e7004b75.chunk.js +0 -1
  46. package/studio/build-local/static/js/browse-datatable.c2eb203f.chunk.js +0 -1
  47. package/studio/build-local/static/js/browse-jsonviewer.90814e97.chunk.js +0 -1
  48. package/studio/build-local/static/js/instance-query.44ba3d7b.chunk.js +0 -1
  49. package/studio/build-local/static/js/instance-status.694a7846.chunk.js +0 -1
  50. package/studio/build-local/static/js/instance.47c8b74b.chunk.js +0 -1
  51. package/studio/build-local/static/js/instances.1ec58722.chunk.js +0 -1
  52. package/studio/build-local/static/js/signIn.0134746e.chunk.js +0 -1
  53. /package/studio/build-local/static/js/{311.3d832d8b.chunk.js.LICENSE.txt → 311.9e648b13.chunk.js.LICENSE.txt} +0 -0
  54. /package/studio/build-local/static/js/{591.7498da00.chunk.js.LICENSE.txt → 759.7c5150cd.chunk.js.LICENSE.txt} +0 -0
  55. /package/studio/build-local/static/js/{main.688e0bbd.js.LICENSE.txt → main.2bfc8c33.js.LICENSE.txt} +0 -0
package/bin/harperdb.js CHANGED
@@ -1,38 +1,38 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var fY=Object.create;var Fl=Object.defineProperty;var EY=Object.getOwnPropertyDescriptor;var hY=Object.getOwnPropertyNames;var pY=Object.getPrototypeOf,mY=Object.prototype.hasOwnProperty;var a=(e,t)=>Fl(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ve=(e,t)=>{for(var r in t)Fl(e,r,{get:t[r],enumerable:!0})},hy=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of hY(t))!mY.call(e,s)&&s!==r&&Fl(e,s,{get:()=>t[s],enumerable:!(n=EY(t,s))||n.enumerable});return e};var G=(e,t,r)=>(r=e!=null?fY(pY(e)):{},hy(t||!e||!e.__esModule?Fl(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>hy(Fl({},"__esModule",{value:!0}),e);var Sy=R((Fhe,my)=>{var SY=require("fast-glob"),{statSync:tS,existsSync:rS,readFileSync:TY,writeFileSync:gY}=require("fs"),{spawnSync:RY,spawn:AY,execFileSync:qhe}=require("child_process"),{isMainThread:OY}=require("worker_threads"),{join:Zi,relative:py}=require("path"),{PACKAGE_ROOT:es}=L(),{tmpdir:bY,platform:NY}=require("os");require("source-map-support").install();var yY=["resources","server","dataLayer","components"],kl="ts-build",nS,IY=__filename.endsWith("tsBuild.js");if(IY){if(OY){let r;try{tS(Zi(es,kl)),r=!0}catch{}if(r)for(let n of SY.sync(yY.map(s=>s+"/**/*.ts"),{cwd:es})){let s=0,i=0;try{s=tS(Zi(es,n)).mtimeMs-5e3,i=tS(Zi(es,kl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),nS=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),nS=!0;if(nS){let n=Zi(es,"node_modules/.bin/tsc");NY()==="win32"&&(n+=".cmd");let s=RY(n,{cwd:es});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=Zi(bY(),"harperdb-tsc.pid"),o;if(rS(i))try{process.kill(+TY(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=AY(n,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});gY(i,c.pid.toString()),c.unref()}}}}let e=my.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(es)&&!n[0].includes("node_modules")){let i=py(es,n[0]),o;i.startsWith(kl)?o=Zi(es,py(kl,i)):o=Zi(es,kl,i);let c=Zi(o,r),l=c+".js";if(rS(l))return l;if(c.includes(".")&&rS(c))return c}return t(r,n,s)}}});var L=R(($he,Py)=>{"use strict";var Pn=require("path"),wY=require("fs"),{relative:khe,join:Vhe}=Pn,{existsSync:CY}=wY;function DY(){let e=__dirname;for(;!CY(Pn.join(e,"package.json"));){let t=Pn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(DY,"getHDBPackageRoot");var eo=DY(),Ty="js",Zd=Ty,LY="harperdb-config.yaml",PY="defaultConfig.yaml",MY="hdb",gy=`harperdb.${Zd}`,Ry=`customFunctionsServer.${Zd}`,UY=`restartHdb.${Zd}`,iS="HarperDB",Xd="Custom Functions",ef="Clustering Hub",tf="Clustering Leaf",vY="Clustering Ingest Service",BY="Clustering Reply Service",HY="foreground.pid",GY="hdb.pid",xY="data",qY={HDB:iS,CLUSTERING_HUB:ef,CLUSTERING_LEAF:tf,CLUSTERING_INGEST_SERVICE:vY,CLUSTERING_REPLY_SERVICE:BY,CUSTOM_FUNCTIONS:Xd,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"},FY={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},kY={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},VY={harperdb:iS,"clustering hub":ef,"clustering leaf":tf,"custom functions":Xd,custom_functions:Xd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},$Y={CLUSTERING_HUB_PROC_DESCRIPTOR:ef,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf},sS={HDB:Pn.join(eo,"server/harperdb"),CUSTOM_FUNCTIONS:Pn.join(eo,"server/customFunctions"),CLUSTERING_HUB:Pn.join(eo,"server/nats"),CLUSTERING_LEAF:Pn.join(eo,"server/nats")},YY={HDB:Pn.join(sS.HDB,gy),CUSTOM_FUNCTIONS:Pn.join(sS.CUSTOM_FUNCTIONS,Ry)},KY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pn.join(eo,"launchServiceScripts/launchUpdateNodes4-0-0.js")},WY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ay="support@harperdb.io",QY="customer-success@harperdb.io",Oy=1,jY=4141,by="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zY="https://www.harperdb.io/product",JY=`For support, please submit a request at ${by} or contact ${Ay}`,Ny=`For license support, please contact ${QY}`,XY="None of the specified records were found.",ZY="hash attribute not found",e1=`Your current license only supports ${Oy} role. ${Ny}`,t1="Your current license only supports 3 connections to a node.",r1="127.0.0.1",n1=1,s1=/^\.$/,i1=/^\.\.$/,o1="U+002E",a1=/\//g,c1="U+002F",l1=/U\+002F/g,u1=/^U\+002E$/,_1=/^U\+002EU\+002E$/,d1="d",f1=999999,E1="*",h1="--max-old-space-size=",p1="system",m1="__hdb_hash",S1=".harperdb",T1=".hdb",g1="keys",R1="hdb_boot_properties.file",A1=".updateConfig.json",O1="SIGTSTP",b1=24,N1=6e4,y1=448,I1="blob",w1="trash",C1="database",D1="schema",L1="transactions",P1=".count",M1="id",U1="PROCESS_NAME",yy={SETTINGS_PATH_KEY:"settings_path"},Iy=require("lodash"),v1={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},B1={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},H1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},G1={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"},x1={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},tn="hdb_internal:",q1={CREATE_SCHEMA:tn+"create_schema",CREATE_TABLE:tn+"create_table",CREATE_ATTRIBUTE:tn+"create_attribute",ADD_USER:tn+"add_user",ALTER_USER:tn+"alter_user",DROP_USER:tn+"drop_user",HDB_NODES:tn+"hdb_nodes",HDB_USERS:tn+"hdb_users",HDB_WORKERS:tn+"hdb_workers",CATCHUP:tn+"catchup",SCHEMA_CATCHUP:tn+"schema_catchup",WORKER_ROOM:tn+"cluster_workers"},F1={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"},k1="060493.ks",V1=".license",$1={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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"},Y1={CSV:".csv",JSON:".json"},K1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},W1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Vl={};Vl[te.INSERT]=te.INSERT;Vl[te.UPDATE]=te.UPDATE;Vl[te.UPSERT]=te.UPSERT;Vl[te.DELETE]=te.DELETE;var Fe=Object.create(null);Fe[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Fe[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Fe[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Fe[te.READ_LOG]=te.READ_LOG;Fe[te.ADD_NODE]=te.ADD_NODE;Fe[te.LIST_USERS]=te.LIST_USERS;Fe[te.LIST_ROLES]=te.LIST_ROLES;Fe[te.USER_INFO]=te.USER_INFO;Fe[te.SQL]=te.SQL;Fe[te.GET_JOB]=te.GET_JOB;Fe[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Fe[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Fe[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Fe[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Fe[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Fe[te.REMOVE_NODE]=te.REMOVE_NODE;Fe[te.RESTART]=te.RESTART;Fe[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Fe[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Fe[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Fe[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Fe[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Fe[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Fe[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Fe[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Fe[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Q1={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"},j1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wy={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"},z1=Iy.invert(wy),J1={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS:"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",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_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"},Cy={settings_path:yy.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];Cy[t.toLowerCase()]=t}var X1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Z1={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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"},eK={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"},tK={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},rK={VERSION_DEFAULT:"2.2.0"},nK={DEVELOPMENT:8192,DEFAULT:512},sK={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},iK={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},oK={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Dy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},aK=Symbol("metadata"),cK="__clustering__",lK=Object.values(Dy),uK=15984864e5,Ly={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},_K=Iy.invert(Ly),dK={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},fK=111,EK=`\r
3
- `,hK={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pK=["*","%"],mK="unauthorized_access",SK="func_val",TK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},gK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},RK={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"},AK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},OK={HTTP:"http"},bK={STOPPED:"stopped",ONLINE:"online"},NK="3.x.x",yK={SUCCESS:"success",FAILURE:"failure"},IK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Py.exports={LOCAL_HARPERDB_OPERATIONS:Fe,HDB_SUPPORT_ADDRESS:Ay,HDB_SUPPORT_URL:by,HDB_PRICING_URL:zY,SUPPORT_HELP_MSG:JY,LICENSE_HELP_MSG:Ny,HDB_PROC_NAME:gy,HDB_PROC_DESCRIPTOR:iS,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf,CLUSTERING_HUB_PROC_DESCRIPTOR:ef,SYSTEM_SCHEMA_NAME:p1,HASH_FOLDER_NAME:m1,HDB_HOME_DIR_NAME:S1,UPDATE_FILE_NAME:A1,LICENSE_KEY_DIR_NAME:g1,BOOT_PROPS_FILE_NAME:R1,JOB_TYPE_ENUM:Z1,JOB_STATUS_ENUM:$1,SYSTEM_TABLE_NAMES:G1,SYSTEM_TABLE_HASH_ATTRIBUTES:x1,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:Y1,S3_BUCKET_AUTH_KEYS:K1,VALID_SQL_OPS_ENUM:W1,GEO_CONVERSION_ENUM:j1,HDB_SETTINGS_NAMES:wy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:z1,SERVICE_ACTIONS_ENUM:Q1,CLUSTER_MESSAGE_TYPE_ENUM:eK,CLUSTER_CONNECTION_DIRECTION_ENUM:tK,CLUSTER_EVENTS_DEFS_ENUM:sK,PERIOD_REGEX:s1,DOUBLE_PERIOD_REGEX:i1,UNICODE_PERIOD:o1,FORWARD_SLASH_REGEX:a1,UNICODE_FORWARD_SLASH:c1,ESCAPED_FORWARD_SLASH_REGEX:l1,ESCAPED_PERIOD_REGEX:u1,ESCAPED_DOUBLE_PERIOD_REGEX:_1,REG_KEY_FILE_NAME:k1,RESTART_TIMEOUT_MS:N1,HDB_FILE_PERMISSIONS:y1,DATABASES_DIR_NAME:C1,LEGACY_DATABASES_DIR_NAME:D1,TRANSACTIONS_DIR_NAME:L1,LIMIT_COUNT_NAME:P1,ID_ATTRIBUTE_STRING:M1,INSERT_MODULE_ENUM:B1,UPGRADE_JSON_FIELD_NAMES_ENUM:H1,RESTART_CODE:O1,RESTART_CODE_NUM:b1,CLUSTER_OPERATIONS:Vl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:F1,HDB_INTERNAL_SC_CHANNEL_PREFIX:tn,INTERNAL_SC_CHANNELS:q1,CLUSTERING_MESSAGE_TYPES:dK,HDB_FILE_SUFFIX:T1,BLOB_FOLDER_NAME:I1,HDB_TRASH_DIR:w1,ORIGINATOR_SET_VALUE:fK,LICENSE_VALUES:rK,RAM_ALLOCATION_ENUM:nK,TIME_STAMP_NAMES_ENUM:Dy,TIME_STAMP_NAMES:lK,PERMS_UPDATE_RELEASE_TIMESTAMP:uK,SEARCH_NOT_FOUND_MESSAGE:XY,SEARCH_ATTRIBUTE_NOT_FOUND:ZY,LICENSE_ROLE_DENIED_RESPONSE:e1,LICENSE_MAX_CONNS_REACHED:t1,BASIC_LICENSE_MAX_NON_CU_ROLES:Oy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jY,VALUE_SEARCH_COMPARATORS:Ly,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:_K,LICENSE_FILE_NAME:V1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:iK,NEW_LINE:EK,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:n1,MOMENT_DAYS_TAG:d1,API_TURNOVER_SEC:f1,LOOPBACK:r1,CODE_EXTENSION:Zd,WILDCARD_SEARCH_VALUE:E1,NODE_ERROR_CODES:oK,JAVASCRIPT_EXTENSION:Ty,PERMS_CRUD_ENUM:hK,UNAUTHORIZED_PERMISSION_NAME:mK,SEARCH_WILDCARDS:pK,FUNC_VAL:SK,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:TK,JWT_ENUM:gK,CLUSTERING_FLAG:cK,ITC_EVENT_TYPES:RK,CUSTOM_FUNCTION_PROC_NAME:Ry,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Xd,SERVICES:AK,THREAD_TYPES:OK,MEM_SETTING_KEY:h1,HDB_RESTART_SCRIPT:UY,PROCESS_DESCRIPTORS:qY,SERVICE_SERVERS:YY,SERVICE_SERVERS_CWD:sS,PROCESS_DESCRIPTORS_VALIDATE:VY,LAUNCH_SERVICE_SCRIPTS:KY,LOG_LEVELS:kY,PROCESS_NAME_ENV_PROP:U1,LOG_NAMES:FY,PM2_PROCESS_STATUSES:bK,CONFIG_PARAM_MAP:Cy,CONFIG_PARAMS:w,HDB_CONFIG_FILE:LY,HDB_DEFAULT_CONFIG_FILE:PY,ROLE_TYPES_ENUM:WY,BOOT_PROP_PARAMS:yy,INSTALL_PROMPTS:v1,HDB_ROOT_DIR_NAME:MY,CLUSTERING_PROCESSES:$Y,FOREGROUND_PID_FILE:HY,PACKAGE_ROOT:eo,PRE_4_0_0_VERSION:NK,DATABASES_PARAM_CONFIG:X1,METADATA_PROPERTY:aK,AUTH_AUDIT_STATUS:yK,AUTH_AUDIT_TYPES:IK,HDB_PID_FILE:GY,DEFAULT_DATABASE_NAME:xY,LEGACY_CONFIG_PARAMS:J1};Sy()});var to=R((Khe,vy)=>{"use strict";var My=require("minimist");vy.exports=wK;function wK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Uy(process.env),n=Uy(My(process.argv))):(r=process.env,n=My(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(wK,"assignCMDENVVariables");function Uy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Uy,"objKeysToLowerCase")});var k=R((Qhe,dS)=>{"use strict";var Qo=require("fs-extra"),{workerData:CK,threadId:DK}=require("worker_threads"),ci=require("path"),Gy=require("yaml"),xy=require("properties-reader"),Nt=L(),By=to(),LK=require("os"),{PACKAGE_ROOT:aS}=L(),{_assignPackageExport:PK}=require("../index"),Yl={};for(let e in console)Yl[e]||(Yl[e]=console[e]);var Or={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},qy={STDOUT:"stdOut",STDERR:"stdErr"},MK=ci.join(aS,"logs"),UK=ci.join(aS,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),vK=1e4,ai,ws,Ar,rf,nf,Kl,lc,$l;$l===void 0&&Fy();dS.exports={notify:$y,fatal:Yy,error:Wl,warn:_S,info:sf,debug:uS,trace:lS,setLogLevel:kK,log_level:Ar,loggerWithTag:BK,suppressLogging:HK,initLogSettings:Fy,setupConsoleLogging:ky,logCustomLevel:qK,closeLogFile:cS,getLogFilePath:()=>Kl,OUTPUTS:qy,AuthAuditLog:YK};PK("logger",dS.exports);function Fy(e=!1){try{if($l===void 0||e){cS();let t=FK(),r=By(["ROOTPATH"]);try{$l=xy(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Qo.pathExistsSync(ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw n}({level:Ar,config_log_path:nf,to_file:ai,to_stream:ws}=VK(r.ROOTPATH?ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):$l.get("settings_path"))),rf=Nt.LOG_NAMES.HDB,Kl=ci.join(nf,rf)}}catch(t){if($l=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT||t.code===Nt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=By(Object.keys(Nt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Nt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Nt.CONFIG_PARAMS.LOGGING_LEVEL){Ar=l;continue}if(c===Nt.CONFIG_PARAMS.LOGGING_STDSTREAMS){ws=l;continue}c===Nt.CONFIG_PARAMS.LOGGING_FILE&&(ai=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=$K();ai=ai===void 0?s:ai,ai=Hy(ai),ws=ws===void 0?i:ws,ws=Hy(ws),Ar=Ar===void 0?n:Ar,nf=MK,rf=Nt.LOG_NAMES.INSTALL,Kl=ci.join(nf,rf);return}throw Wl("Error initializing log settings"),Wl(t),t}process.env.DEV_MODE&&(ws=!0),ky()}a(Fy,"initLogSettings");var oS=!0;function ky(){cc("error",Wl),cc("warn",_S),cc("log",sf),cc("info",sf),cc("debug",uS),cc("trace",lS)}a(ky,"setupConsoleLogging");function cc(e,t){console[e]=function(...r){if(oS&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Yl[e](...r)}}a(cc,"logConsole");function BK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r($y),fatal:r(Yy),error:r(Wl),warn:r(_S),info:r(sf),debug:r(uS),trace:r(lS)};function r(n){return function(...s){return n(t,...s)}}}a(BK,"loggerWithTag");function HK(e){try{oS=!1,e()}finally{oS=!0}}a(HK,"suppressLogging");var GK=CK?.name?.replace(/ /g,"-")||"main";function li(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||GK+"/"+DK);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?(n+=_.stack,Object.keys(_).length>0&&(n+=`
2
+ "use strict";var fY=Object.create;var Fl=Object.defineProperty;var EY=Object.getOwnPropertyDescriptor;var hY=Object.getOwnPropertyNames;var pY=Object.getPrototypeOf,mY=Object.prototype.hasOwnProperty;var a=(e,t)=>Fl(e,"name",{value:t,configurable:!0});var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$e=(e,t)=>{for(var r in t)Fl(e,r,{get:t[r],enumerable:!0})},hy=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of hY(t))!mY.call(e,s)&&s!==r&&Fl(e,s,{get:()=>t[s],enumerable:!(n=EY(t,s))||n.enumerable});return e};var G=(e,t,r)=>(r=e!=null?fY(pY(e)):{},hy(t||!e||!e.__esModule?Fl(r,"default",{value:e,enumerable:!0}):r,e)),ae=e=>hy(Fl({},"__esModule",{value:!0}),e);var Sy=R((Fhe,my)=>{var SY=require("fast-glob"),{statSync:tS,existsSync:rS,readFileSync:TY,writeFileSync:gY}=require("fs"),{spawnSync:RY,spawn:AY,execFileSync:qhe}=require("child_process"),{isMainThread:OY}=require("worker_threads"),{join:Zi,relative:py}=require("path"),{PACKAGE_ROOT:es}=L(),{tmpdir:bY,platform:NY}=require("os");require("source-map-support").install();var yY=["resources","server","dataLayer","components"],kl="ts-build",nS,IY=__filename.endsWith("tsBuild.js");if(IY){if(OY){let r;try{tS(Zi(es,kl)),r=!0}catch{}if(r)for(let n of SY.sync(yY.map(s=>s+"/**/*.ts"),{cwd:es})){let s=0,i=0;try{s=tS(Zi(es,n)).mtimeMs-5e3,i=tS(Zi(es,kl,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),nS=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),nS=!0;if(nS){let n=Zi(es,"node_modules/.bin/tsc");NY()==="win32"&&(n+=".cmd");let s=RY(n,{cwd:es});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=Zi(bY(),"harperdb-tsc.pid"),o;if(rS(i))try{process.kill(+TY(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=AY(n,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});gY(i,c.pid.toString()),c.unref()}}}}let e=my.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(es)&&!n[0].includes("node_modules")){let i=py(es,n[0]),o;i.startsWith(kl)?o=Zi(es,py(kl,i)):o=Zi(es,kl,i);let c=Zi(o,r),l=c+".js";if(rS(l))return l;if(c.includes(".")&&rS(c))return c}return t(r,n,s)}}});var L=R((Vhe,Py)=>{"use strict";var Pn=require("path"),wY=require("fs"),{relative:khe,join:$he}=Pn,{existsSync:CY}=wY;function DY(){let e=__dirname;for(;!CY(Pn.join(e,"package.json"));){let t=Pn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(DY,"getHDBPackageRoot");var eo=DY(),Ty="js",Zd=Ty,LY="harperdb-config.yaml",PY="defaultConfig.yaml",MY="hdb",gy=`harperdb.${Zd}`,Ry=`customFunctionsServer.${Zd}`,UY=`restartHdb.${Zd}`,iS="HarperDB",Xd="Custom Functions",ef="Clustering Hub",tf="Clustering Leaf",vY="Clustering Ingest Service",BY="Clustering Reply Service",HY="foreground.pid",GY="hdb.pid",xY="data",qY={HDB:iS,CLUSTERING_HUB:ef,CLUSTERING_LEAF:tf,CLUSTERING_INGEST_SERVICE:vY,CLUSTERING_REPLY_SERVICE:BY,CUSTOM_FUNCTIONS:Xd,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"},FY={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},kY={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},$Y={harperdb:iS,"clustering hub":ef,"clustering leaf":tf,"custom functions":Xd,custom_functions:Xd,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},VY={CLUSTERING_HUB_PROC_DESCRIPTOR:ef,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf},sS={HDB:Pn.join(eo,"server/harperdb"),CUSTOM_FUNCTIONS:Pn.join(eo,"server/customFunctions"),CLUSTERING_HUB:Pn.join(eo,"server/nats"),CLUSTERING_LEAF:Pn.join(eo,"server/nats")},YY={HDB:Pn.join(sS.HDB,gy),CUSTOM_FUNCTIONS:Pn.join(sS.CUSTOM_FUNCTIONS,Ry)},KY={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pn.join(eo,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pn.join(eo,"launchServiceScripts/launchUpdateNodes4-0-0.js")},WY={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ay="support@harperdb.io",QY="customer-success@harperdb.io",Oy=1,jY=4141,by="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zY="https://www.harperdb.io/product",JY=`For support, please submit a request at ${by} or contact ${Ay}`,Ny=`For license support, please contact ${QY}`,XY="None of the specified records were found.",ZY="hash attribute not found",e1=`Your current license only supports ${Oy} role. ${Ny}`,t1="Your current license only supports 3 connections to a node.",r1="127.0.0.1",n1=1,s1=/^\.$/,i1=/^\.\.$/,o1="U+002E",a1=/\//g,c1="U+002F",l1=/U\+002F/g,u1=/^U\+002E$/,_1=/^U\+002EU\+002E$/,d1="d",f1=999999,E1="*",h1="--max-old-space-size=",p1="system",m1="__hdb_hash",S1=".harperdb",T1=".hdb",g1="keys",R1="hdb_boot_properties.file",A1=".updateConfig.json",O1="SIGTSTP",b1=24,N1=6e4,y1=448,I1="blob",w1="trash",C1="database",D1="schema",L1="transactions",P1=".count",M1="id",U1="PROCESS_NAME",yy={SETTINGS_PATH_KEY:"settings_path"},Iy=require("lodash"),v1={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},B1={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},H1={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},G1={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"},x1={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},rn="hdb_internal:",q1={CREATE_SCHEMA:rn+"create_schema",CREATE_TABLE:rn+"create_table",CREATE_ATTRIBUTE:rn+"create_attribute",ADD_USER:rn+"add_user",ALTER_USER:rn+"alter_user",DROP_USER:rn+"drop_user",HDB_NODES:rn+"hdb_nodes",HDB_USERS:rn+"hdb_users",HDB_WORKERS:rn+"hdb_workers",CATCHUP:rn+"catchup",SCHEMA_CATCHUP:rn+"schema_catchup",WORKER_ROOM:rn+"cluster_workers"},F1={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"},k1="060493.ks",$1=".license",V1={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={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"},Y1={CSV:".csv",JSON:".json"},K1={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},W1={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},$l={};$l[te.INSERT]=te.INSERT;$l[te.UPDATE]=te.UPDATE;$l[te.UPSERT]=te.UPSERT;$l[te.DELETE]=te.DELETE;var Fe=Object.create(null);Fe[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Fe[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Fe[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Fe[te.READ_LOG]=te.READ_LOG;Fe[te.ADD_NODE]=te.ADD_NODE;Fe[te.LIST_USERS]=te.LIST_USERS;Fe[te.LIST_ROLES]=te.LIST_ROLES;Fe[te.USER_INFO]=te.USER_INFO;Fe[te.SQL]=te.SQL;Fe[te.GET_JOB]=te.GET_JOB;Fe[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Fe[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Fe[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Fe[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Fe[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Fe[te.REMOVE_NODE]=te.REMOVE_NODE;Fe[te.RESTART]=te.RESTART;Fe[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Fe[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Fe[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Fe[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Fe[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Fe[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Fe[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Fe[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Fe[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Q1={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"},j1={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wy={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"},z1=Iy.invert(wy),J1={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS:"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",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_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"},Cy={settings_path:yy.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];Cy[t.toLowerCase()]=t}var X1={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Z1={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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"},eK={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"},tK={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},rK={VERSION_DEFAULT:"2.2.0"},nK={DEVELOPMENT:8192,DEFAULT:512},sK={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},iK={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},oK={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Dy={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},aK=Symbol("metadata"),cK="__clustering__",lK=Object.values(Dy),uK=15984864e5,Ly={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},_K=Iy.invert(Ly),dK={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},fK=111,EK=`\r
3
+ `,hK={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pK=["*","%"],mK="unauthorized_access",SK="func_val",TK={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},gK={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},RK={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"},AK={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},OK={HTTP:"http"},bK={STOPPED:"stopped",ONLINE:"online"},NK="3.x.x",yK={SUCCESS:"success",FAILURE:"failure"},IK={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Py.exports={LOCAL_HARPERDB_OPERATIONS:Fe,HDB_SUPPORT_ADDRESS:Ay,HDB_SUPPORT_URL:by,HDB_PRICING_URL:zY,SUPPORT_HELP_MSG:JY,LICENSE_HELP_MSG:Ny,HDB_PROC_NAME:gy,HDB_PROC_DESCRIPTOR:iS,CLUSTERING_LEAF_PROC_DESCRIPTOR:tf,CLUSTERING_HUB_PROC_DESCRIPTOR:ef,SYSTEM_SCHEMA_NAME:p1,HASH_FOLDER_NAME:m1,HDB_HOME_DIR_NAME:S1,UPDATE_FILE_NAME:A1,LICENSE_KEY_DIR_NAME:g1,BOOT_PROPS_FILE_NAME:R1,JOB_TYPE_ENUM:Z1,JOB_STATUS_ENUM:V1,SYSTEM_TABLE_NAMES:G1,SYSTEM_TABLE_HASH_ATTRIBUTES:x1,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:Y1,S3_BUCKET_AUTH_KEYS:K1,VALID_SQL_OPS_ENUM:W1,GEO_CONVERSION_ENUM:j1,HDB_SETTINGS_NAMES:wy,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:z1,SERVICE_ACTIONS_ENUM:Q1,CLUSTER_MESSAGE_TYPE_ENUM:eK,CLUSTER_CONNECTION_DIRECTION_ENUM:tK,CLUSTER_EVENTS_DEFS_ENUM:sK,PERIOD_REGEX:s1,DOUBLE_PERIOD_REGEX:i1,UNICODE_PERIOD:o1,FORWARD_SLASH_REGEX:a1,UNICODE_FORWARD_SLASH:c1,ESCAPED_FORWARD_SLASH_REGEX:l1,ESCAPED_PERIOD_REGEX:u1,ESCAPED_DOUBLE_PERIOD_REGEX:_1,REG_KEY_FILE_NAME:k1,RESTART_TIMEOUT_MS:N1,HDB_FILE_PERMISSIONS:y1,DATABASES_DIR_NAME:C1,LEGACY_DATABASES_DIR_NAME:D1,TRANSACTIONS_DIR_NAME:L1,LIMIT_COUNT_NAME:P1,ID_ATTRIBUTE_STRING:M1,INSERT_MODULE_ENUM:B1,UPGRADE_JSON_FIELD_NAMES_ENUM:H1,RESTART_CODE:O1,RESTART_CODE_NUM:b1,CLUSTER_OPERATIONS:$l,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:F1,HDB_INTERNAL_SC_CHANNEL_PREFIX:rn,INTERNAL_SC_CHANNELS:q1,CLUSTERING_MESSAGE_TYPES:dK,HDB_FILE_SUFFIX:T1,BLOB_FOLDER_NAME:I1,HDB_TRASH_DIR:w1,ORIGINATOR_SET_VALUE:fK,LICENSE_VALUES:rK,RAM_ALLOCATION_ENUM:nK,TIME_STAMP_NAMES_ENUM:Dy,TIME_STAMP_NAMES:lK,PERMS_UPDATE_RELEASE_TIMESTAMP:uK,SEARCH_NOT_FOUND_MESSAGE:XY,SEARCH_ATTRIBUTE_NOT_FOUND:ZY,LICENSE_ROLE_DENIED_RESPONSE:e1,LICENSE_MAX_CONNS_REACHED:t1,BASIC_LICENSE_MAX_NON_CU_ROLES:Oy,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:jY,VALUE_SEARCH_COMPARATORS:Ly,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:_K,LICENSE_FILE_NAME:$1,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:iK,NEW_LINE:EK,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:n1,MOMENT_DAYS_TAG:d1,API_TURNOVER_SEC:f1,LOOPBACK:r1,CODE_EXTENSION:Zd,WILDCARD_SEARCH_VALUE:E1,NODE_ERROR_CODES:oK,JAVASCRIPT_EXTENSION:Ty,PERMS_CRUD_ENUM:hK,UNAUTHORIZED_PERMISSION_NAME:mK,SEARCH_WILDCARDS:pK,FUNC_VAL:SK,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:TK,JWT_ENUM:gK,CLUSTERING_FLAG:cK,ITC_EVENT_TYPES:RK,CUSTOM_FUNCTION_PROC_NAME:Ry,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Xd,SERVICES:AK,THREAD_TYPES:OK,MEM_SETTING_KEY:h1,HDB_RESTART_SCRIPT:UY,PROCESS_DESCRIPTORS:qY,SERVICE_SERVERS:YY,SERVICE_SERVERS_CWD:sS,PROCESS_DESCRIPTORS_VALIDATE:$Y,LAUNCH_SERVICE_SCRIPTS:KY,LOG_LEVELS:kY,PROCESS_NAME_ENV_PROP:U1,LOG_NAMES:FY,PM2_PROCESS_STATUSES:bK,CONFIG_PARAM_MAP:Cy,CONFIG_PARAMS:w,HDB_CONFIG_FILE:LY,HDB_DEFAULT_CONFIG_FILE:PY,ROLE_TYPES_ENUM:WY,BOOT_PROP_PARAMS:yy,INSTALL_PROMPTS:v1,HDB_ROOT_DIR_NAME:MY,CLUSTERING_PROCESSES:VY,FOREGROUND_PID_FILE:HY,PACKAGE_ROOT:eo,PRE_4_0_0_VERSION:NK,DATABASES_PARAM_CONFIG:X1,METADATA_PROPERTY:aK,AUTH_AUDIT_STATUS:yK,AUTH_AUDIT_TYPES:IK,HDB_PID_FILE:GY,DEFAULT_DATABASE_NAME:xY,LEGACY_CONFIG_PARAMS:J1};Sy()});var to=R((Khe,vy)=>{"use strict";var My=require("minimist");vy.exports=wK;function wK(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Uy(process.env),n=Uy(My(process.argv))):(r=process.env,n=My(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(wK,"assignCMDENVVariables");function Uy(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Uy,"objKeysToLowerCase")});var k=R((Qhe,dS)=>{"use strict";var Qo=require("fs-extra"),{workerData:CK,threadId:DK}=require("worker_threads"),ci=require("path"),Gy=require("yaml"),xy=require("properties-reader"),Nt=L(),By=to(),LK=require("os"),{PACKAGE_ROOT:aS}=L(),{_assignPackageExport:PK}=require("../index"),Yl={};for(let e in console)Yl[e]||(Yl[e]=console[e]);var Or={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},qy={STDOUT:"stdOut",STDERR:"stdErr"},MK=ci.join(aS,"logs"),UK=ci.join(aS,"config/yaml/",Nt.HDB_DEFAULT_CONFIG_FILE),vK=1e4,ai,ws,Ar,rf,nf,Kl,lc,Vl;Vl===void 0&&Fy();dS.exports={notify:Vy,fatal:Yy,error:Wl,warn:_S,info:sf,debug:uS,trace:lS,setLogLevel:kK,log_level:Ar,loggerWithTag:BK,suppressLogging:HK,initLogSettings:Fy,setupConsoleLogging:ky,logCustomLevel:qK,closeLogFile:cS,getLogFilePath:()=>Kl,OUTPUTS:qy,AuthAuditLog:YK};PK("logger",dS.exports);function Fy(e=!1){try{if(Vl===void 0||e){cS();let t=FK(),r=By(["ROOTPATH"]);try{Vl=xy(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Qo.pathExistsSync(ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE)))throw n}({level:Ar,config_log_path:nf,to_file:ai,to_stream:ws}=$K(r.ROOTPATH?ci.join(r.ROOTPATH,Nt.HDB_CONFIG_FILE):Vl.get("settings_path"))),rf=Nt.LOG_NAMES.HDB,Kl=ci.join(nf,rf)}}catch(t){if(Vl=void 0,t.code===Nt.NODE_ERROR_CODES.ENOENT||t.code===Nt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=By(Object.keys(Nt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Nt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Nt.CONFIG_PARAMS.LOGGING_LEVEL){Ar=l;continue}if(c===Nt.CONFIG_PARAMS.LOGGING_STDSTREAMS){ws=l;continue}c===Nt.CONFIG_PARAMS.LOGGING_FILE&&(ai=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=VK();ai=ai===void 0?s:ai,ai=Hy(ai),ws=ws===void 0?i:ws,ws=Hy(ws),Ar=Ar===void 0?n:Ar,nf=MK,rf=Nt.LOG_NAMES.INSTALL,Kl=ci.join(nf,rf);return}throw Wl("Error initializing log settings"),Wl(t),t}process.env.DEV_MODE&&(ws=!0),ky()}a(Fy,"initLogSettings");var oS=!0;function ky(){cc("error",Wl),cc("warn",_S),cc("log",sf),cc("info",sf),cc("debug",uS),cc("trace",lS)}a(ky,"setupConsoleLogging");function cc(e,t){console[e]=function(...r){if(oS&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Yl[e](...r)}}a(cc,"logConsole");function BK(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Vy),fatal:r(Yy),error:r(Wl),warn:r(_S),info:r(sf),debug:r(uS),trace:r(lS)};function r(n){return function(...s){return n(t,...s)}}}a(BK,"loggerWithTag");function HK(e){try{oS=!1,e()}finally{oS=!0}}a(HK,"suppressLogging");var GK=CK?.name?.replace(/ /g,"-")||"main";function li(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||GK+"/"+DK);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?(n+=_.stack,Object.keys(_).length>0&&(n+=`
4
4
  `+JSON.stringify(_)),_.cause&&(t[c--]=_.cause,_&&(n+=`
5
5
  Caused by:`))):typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
6
- `}a(li,"createLogRecord");function Ql(e){ai&&Vy(e),ws&&process.stdout.write(e)}a(Ql,"logStdOut");function of(e){ai&&Vy(e),ws&&process.stderr.write(e)}a(of,"logStdErr");function Vy(e){xK(),lc?Qo.appendFileSync(lc,e):Yl.log(e)}a(Vy,"logToFile");function cS(){try{Qo.closeSync(lc)}catch{}lc=null}a(cS,"closeLogFile");function xK(){if(!lc){try{if(!Kl)debugger;lc=Qo.openSync(Kl,"a")}catch(e){Yl.error(e)}setTimeout(()=>{cS()},vK).unref()}}a(xK,"openLogFile");function sf(...e){Or[Ar]<=Or.info&&Ql(li("info",e))}a(sf,"info");function lS(...e){Or[Ar]<=Or.trace&&Ql(li("trace",e))}a(lS,"trace");function Wl(...e){Or[Ar]<=Or.error&&of(li("error",e))}a(Wl,"error");function uS(...e){Or[Ar]<=Or.debug&&Ql(li("debug",e))}a(uS,"debug");function $y(...e){Or[Ar]<=Or.notify&&Ql(li("notify",e))}a($y,"notify");function Yy(...e){Or[Ar]<=Or.fatal&&of(li("fatal",e))}a(Yy,"fatal");function _S(...e){Or[Ar]<=Or.warn&&of(li("warn",e))}a(_S,"warn");function qK(e,t,...r){t===qy.STDERR?of(li(e,r)):Ql(li(e,r))}a(qK,"logCustomLevel");function FK(){let e;try{e=LK.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ci.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return Qo.existsSync(t)||(t=ci.join(aS,"utility/hdb_boot_properties.file")),t}a(FK,"getPropsFilePath");function kK(e){Ar=e}a(kK,"setLogLevel");function Hy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Hy,"autoCastBoolean");function VK(e){try{if(e.includes("config/settings.js")){let o=xy(e);return{level:o.get(Nt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ci.dirname(o.get(Nt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Gy.parseDocument(Qo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Nt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(VK,"getLogConfig");function $K(){try{let e=Gy.parseDocument(Qo.readFileSync(UK,"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($K,"getDefaultConfig");function YK(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(YK,"AuthAuditLog")});var fS=R((zhe,Ky)=>{"use strict";var KK=require("util"),WK=require("path"),QK=require("child_process"),jK=KK.promisify(QK.execFile),zK=1e3*1e3*10;Ky.exports={findPs:JK};async function JK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await jK("ps",["wwxo",`pid,${r}`],{maxBuffer:zK});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:WK.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(JK,"findPs")});var _t=R((Xhe,Qy)=>{"use strict";var XK="__dbis__",ZK="__txns__",eW="__environment_name__",tW="__dbi_defintion__",rW={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"},nW=["__createdtime__","__updatedtime__"],sW="\uFFFF",Wy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},iW=Object.values(Wy);Qy.exports={AUDIT_STORE_NAME:ZK,INTERNAL_DBIS_NAME:XK,DBI_DEFINITION_NAME:tW,SEARCH_TYPES:rW,TIMESTAMP_NAMES:nW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:eW,TRANSACTIONS_DBI_NAMES_ENUM:Wy,TRANSACTIONS_DBIS:iW,OVERFLOW_MARKER:sW}});var rn=R((Zhe,nI)=>{"use strict";var jy=L(),zy=_t(),Jy={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},Xy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Zy={500:Xy("There was an error processing your request."),400:"Invalid request"},oW=Zy[Jy.INTERNAL_SERVER_ERROR],aW={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},cW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lW={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},uW={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 ${zy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${zy.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"},_W={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${jy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${jy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},eI={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"},dW={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},fW={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},EW={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},hW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},pW={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},tI={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},rI={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},mW={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."},SW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},TW={...eI,...lW,...aW,...dW,...fW,...EW,...hW,...pW,..._W,...tI,...rI,...mW,...SW,...cW};nI.exports={CHECK_LOGS_WRAPPER:Xy,HDB_ERROR_MSGS:TW,DEFAULT_ERROR_MSGS:Zy,DEFAULT_ERROR_RESP:oW,HTTP_STATUS_CODES:Jy,LMDB_ERRORS_ENUM:uW,AUTHENTICATION_ERROR_MSGS:eI,VALIDATION_ERROR_MSGS:tI,ITC_ERRORS:rI}});var ie=R((tpe,oI)=>{"use strict";var uc=rn(),gW=k(),RW=L(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sI),this.statusCode=n||uc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(uc.DEFAULT_ERROR_MSGS[n]?uc.DEFAULT_ERROR_MSGS[n]:uc.DEFAULT_ERROR_MSGS[uc.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&&gW[s](i)}},ES=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}},hS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sI(e,t,r,n=RW.LOG_LEVELS.ERROR,s=null,i=!1){if(iI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(sI,"handleHDBError");function iI(e){return e.__proto__.constructor.name===af.name}a(iI,"isHDBError");oI.exports={isHDBError:iI,handleHDBError:sI,ClientError:ES,ServerError:hS,hdb_errors:uc}});var Je=R((npe,fI)=>{"use strict";var Zl=L(),AW=Y(),br=X(),eu=require("path"),OW=require("minimist"),aI=require("fs-extra"),cI=require("lodash");br.initSync();var{CONFIG_PARAMS:ro,DATABASES_PARAM_CONFIG:jl,SYSTEM_SCHEMA_NAME:cf}=Zl,zl,Jl,Xl;function lI(){if(zl!==void 0)return zl;if(br.getHdbBasePath()!==void 0)return zl=br.get(ro.STORAGE_PATH)||eu.join(br.getHdbBasePath(),Zl.DATABASES_DIR_NAME),zl}a(lI,"getBaseSchemaPath");function uI(){if(Jl!==void 0)return Jl;if(br.getHdbBasePath()!==void 0)return Jl=dI(cf),Jl}a(uI,"getSystemSchemaPath");function _I(){if(Xl!==void 0)return Xl;if(br.getHdbBasePath()!==void 0)return Xl=br.get(Zl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||eu.join(br.getHdbBasePath(),Zl.TRANSACTIONS_DIR_NAME),Xl}a(_I,"getTransactionAuditStoreBasePath");function bW(e,t){let r=br.get(ro.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||eu.join(_I(),e.toString())}a(bW,"getTransactionAuditStorePath");function dI(e,t){e=e.toString(),t=t&&t.toString();let r=br.get(Zl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||eu.join(lI(),e)}a(dI,"getSchemaPath");function NW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OW(process.argv));let n=r[ro.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!AW.isObject(n))throw o;i=n}for(let o of i){let c=o[cf];if(!c)continue;let l=br.get(ro.DATABASES);l=l??{};let _=c?.tables?.[t]?.[jl.PATH];if(_)return cI.set(l,[cf,jl.TABLES,t,jl.PATH],_),br.setProperty(ro.DATABASES,l),_;let u=c?.[jl.PATH];if(u)return cI.set(l,[cf,jl.PATH],u),br.setProperty(ro.DATABASES,l),u}}let s=r[ro.STORAGE_PATH.toUpperCase()];if(s){if(!aI.pathExistsSync(s))throw new Error(s+" does not exist");let i=eu.join(s,e);return aI.mkdirsSync(i),br.setProperty(ro.STORAGE_PATH,s),i}return uI()}a(NW,"initSystemSchemaPaths");function yW(){zl=void 0,Jl=void 0,Xl=void 0}a(yW,"resetPaths");fI.exports={getBaseSchemaPath:lI,getSystemSchemaPath:uI,getTransactionAuditStorePath:bW,getTransactionAuditStoreBasePath:_I,getSchemaPath:dI,initSystemSchemaPaths:NW,resetPaths:yW}});var Nr=R((ape,SI)=>{"use strict";var IW=rn().LMDB_ERRORS_ENUM,ipe=require("lmdb"),wW=_t(),ope=require("buffer").Buffer,{OVERFLOW_MARKER:EI,MAX_SEARCH_KEY_LENGTH:lf}=wW,hI=["number","string","symbol","boolean","bigint"];function CW(e){if(e=e?.primaryStore||e,!e)throw new Error(IW.ENV_REQUIRED)}a(CW,"validateEnv");function DW(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(DW,"stringifyData");function LW(e){return e instanceof Date?e.valueOf():e}a(LW,"convertKeyValueToWrite");function PW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+EI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+EI):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(PW,"getIndexedValues");var uf=0,pI=0;function mI(){pI=Date.now()-performance.now()}a(mI,"adjustStartTime");mI();var MW=6e4;setInterval(mI,MW).unref();function UW(){let e=performance.now()+pI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(UW,"getNextMonotonicTime");SI.exports={validateEnv:CW,stringifyData:DW,convertKeyValueToWrite:LW,getNextMonotonicTime:UW,getIndexedValues:PW}});var tu=R((lpe,TI)=>{"use strict";var vW=L().OPERATIONS_ENUM,pS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=vW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};TI.exports=pS});var ru=R((dpe,OI)=>{"use strict";var _pe=tu(),_f=L(),mS=Y(),gI=k(),BW=require("uuid"),{handleHDBError:df,hdb_errors:HW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=HW;OI.exports=RI;function RI(e,t,r){for(let s=0;s<t.length;s++)AI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];GW(i,r,e.operation)}}a(RI,"processRows");RI.validateAttribute=AI;function AI(e){if(Buffer.byteLength(String(e))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw df(new Error,ff.ATTR_NAME_LENGTH_ERR(e),Ef.BAD_REQUEST,void 0,void 0,!0);if(mS.isEmptyOrZeroLength(e)||mS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(AI,"validateAttribute");function GW(e,t,r){if(!e.hasOwnProperty(t)||mS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=BW.v4();return}throw gI.error("Update transaction aborted due to record with no hash value:",e),df(new Error,ff.RECORD_MISSING_HASH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(GW,"validateHash")});var bI,ts,SS,nu=be(()=>{bI=require("events"),ts=class extends bI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new SS;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)}},SS=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var jo={};Ve(jo,{server:()=>dt});var NI,dt,yr=be(()=>{NI=require("../index"),dt={};(0,NI._assignPackageExport)("server",dt)});var RS={};Ve(RS,{loadGQLSchema:()=>FW,start:()=>gS,startOnMainThread:()=>qW});function gS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let W=U(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let M={type:v.name?.value};return Object.defineProperty(M,"location",{value:v.loc.startToken}),M};a(U,"getProperty");let g=S.name.value,T=[],b={table:null,database:null,properties:T};E.set(g,b);for(let v of S.directives){if(v.name.value==="table"){for(let q of v.arguments)b[q.name.value]=q.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(v.name.value==="sealed"&&(b.sealed=!0),v.name.value==="export"){b.export=!0;for(let q of v.arguments)q.name.value==="name"&&(b.export={name:q.value.value})}}let N=!1;for(let v of S.fields){let q=U(v.type);q.name=v.name.value,T.push(q);for(let M of v.directives)if(M.name.value==="primaryKey")N?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,N=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let W={};for(let z of M.arguments)W[z.name.value]=z.value.value;q.relationship=W}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let W=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&W.push(z.value.value)}}b.type=g,g==="Query"&&(h=b)}function m(S){let g=E.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):xW.includes(S.type)||(0,yI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of E.values())for(let g of S.properties)m(g);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,TS.dirname)(n),S.tableClass):i.set((0,TS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var TS,yI,xW,qW,FW,II=be(()=>{TS=require("path");Re();yI=G(rt()),xW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(gS,"start");qW=gS,FW=gS({ensureTable:St}).handleFile});async function hf(e){let t=(0,DI.pathToFileURL)(e).toString();return kW?(su||(su=VW(YW)),(await(await su).import(t)).namespace):import(t)}async function VW(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),su=new Compartment({console,Math,Date,fetch:$W,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,CI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:er,tables:nn,databases:ft})}};let n=await(0,wI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),su}function $W(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 YW(){return{Resource:er,tables:nn}}var wI,CI,DI,kW,su,AS=be(()=>{Mn();Re();wI=require("fs/promises"),CI=require("path"),DI=require("url"),kW=!1;a(hf,"secureImport");a(VW,"getCompartment");a($W,"secureOnlyFetch");a(YW,"getGlobalVars")});var bS={};Ve(bS,{handleFile:()=>KW});async function KW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,OS.dirname)(t),i.default),o(i,(0,OS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var OS,LI=be(()=>{AS();OS=require("path");a(KW,"handleFile")});var yS={};Ve(yS,{start:()=>WW});function WW({resources:e}){e.set("login",NS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var NS,PI=be(()=>{Mn();a(WW,"start");NS=class extends er{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 xI={};Ve(xI,{parse:()=>wS,streamAsJSON:()=>iu,stringify:()=>zo});function iu(e){return new IS({value:e})}function MI(e){return console.error(e),JSON.stringify(e.toString())}function UI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function zo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===HI)return GI(e);if(t.resolution)return t.resolution.then(()=>zo(e));throw t}}function GI(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+=GI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+zo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function wS(e){return zW.test(e)?QW.parse(e):JSON.parse(e)}var vI,BI,QW,jW,HI,IS,zW,CS=be(()=>{vI=require("stream"),BI=G(require("json-bigint-fixes")),QW=(0,BI.default)({useNativeBigInt:!0}),jW=1e4,HI={};BigInt.prototype.toJSON=function(){throw HI};a(iu,"streamAsJSON");IS=class extends vI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),MI)}catch(s){yield MI(s)}else yield zo(t)}else yield zo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);UI(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>jW?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 UI(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(MI,"handleError");a(UI,"when");a(zo,"stringify");a(GI,"jsStringify");zW=/[[,:]\s*-?\d{16,}/;a(wS,"parse")});var XI=R((wpe,JI)=>{"use strict";var DS=require("recursive-iterator"),JW=require("alasql"),LS=require("clone"),qI=Y(),{handleHDBError:FI,hdb_errors:XW}=ie(),{HDB_ERROR_MSGS:kI,HTTP_STATUS_CODES:VI}=XW,{getDatabases:ZW}=(Re(),ae($e)),eQ=["DISTINCT_ARRAY"],$I=Symbol("validateTables"),PS=Symbol("validateTable"),Ipe=Symbol("getAllColumns"),YI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),KI=Symbol("validateOrderBy"),ou=Symbol("validateSegment"),MS=Symbol("validateColumn"),WI=Symbol("setColumnsForTable"),QI=Symbol("checkColumnsForAsterisk"),jI=Symbol("validateGroupBy"),zI=Symbol("hasColumns"),US=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$I](),this[QI](),this[YI]()}[$I](){if(this[zI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[PS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[PS](t.table)})}}[zI](){let t=!1,r=new DS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[PS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ZW();if(!r[t.databaseid])throw FI(new Error,kI.SCHEMA_NOT_FOUND(t.databaseid),VI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FI(new Error,kI.TABLE_NOT_FOUND(t.databaseid,t.tableid),VI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=LS(s);i.table=LS(t),this.attributes.push(i)})}[pf](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)}[QI](){let t=new DS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[WI](r.tableid)}[WI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new JW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[YI](){this[ou](this.statement.columns,!1),this[ou](this.statement.joins,!1),this[ou](this.statement.where,!1),this[jI](this.statement.group,!1),this[ou](this.statement.order,!0)}[ou](t,r){if(!t)return;let n=new DS(t),s=[];for(let{node:i,path:o}of n)!qI.isEmpty(i)&&!qI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KI](i):s.push(this[MS](i)));return s}[jI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&eQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=LS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[pf](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[pf](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`}[KI](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[MS](t)}[MS](t){let r=this[pf](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]}};JI.exports=US});var ew=R((Dpe,ZI)=>{"use strict";var vS=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")}};ZI.exports=vS});var rw=R((Ppe,tw)=>{"use strict";var BS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};tw.exports=BS});var ow={};Ve(ow,{HAS_EXPIRATION:()=>VS,LAST_TIMESTAMP_PLACEHOLDER:()=>lu,LOCAL_TIMESTAMP:()=>tQ,METADATA:()=>au,NO_TIMESTAMP:()=>GS,PENDING_LOCAL_TIME:()=>$S,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kS,RecordEncoder:()=>FS,TIMESTAMP_ASSIGN_LAST:()=>nQ,TIMESTAMP_ASSIGN_NEW:()=>sw,TIMESTAMP_ASSIGN_PREVIOUS:()=>iw,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>xS,getUpdateRecord:()=>YS,handleLocalTimeForGets:()=>Rf});function iQ(){return cu[0]=cu[0]^64,rQ.getFloat64(0)}function Rf(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[au]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Jo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Jo.length;l++){let _=Jo[l].deref();(!_||_.isDone||_.isCommitted)&&Jo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function YS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?_c=i?.localTime?xS|iw:GS:_c=l?i?.localTime?xS|16384:sw|16384:GS,u>0&&(c|=VS),Tf=c,qS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:_c>0},m;try{E&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let g=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let T=i?.localTime,b=r.get(T);if(b){let N=Yt(b).previousLocalTime;return r.put(T,gf(o,t,n,N,g,d,Sf),{ifVersion:m}),S}}r.put(lu,gf(o,t,n,i?.localTime?1:0,g,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var nw,HS,mf,lu,kS,tQ,au,cu,rQ,GS,sw,nQ,iw,xS,VS,$S,sQ,Sf,_c,Tf,qS,FS,Jo,uu=be(()=>{nw=require("msgpackr");no();HS=G(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),lu=new Uint8Array([1,1,1,1,1,0,0,0]),kS=new Uint8Array([1,1,1,1,3,64,0,0]),tQ=Symbol("local-timestamp"),au=Symbol("metadata"),cu=new Uint8Array(8),rQ=new DataView(cu.buffer,0,8),GS=0,sw=0,nQ=1,iw=3,xS=4,VS=16,$S=1,_c=0,Tf=-1,qS=0,FS=class extends nw.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(_c||Tf>=0){let i=0,o=_c;o&&(i+=8,_c=0);let c=Tf,l=qS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,qS=0));let _=sQ=r.call(this,n,s|2048|i);Sf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(mf[4]=o,mf[5]=o>>8,_.set(mf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(cu,0,c),c+=8;else for(let d=0;d<8;d++)cu[d]=t[c++];l=iQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&VS&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[au]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(iQ,"getTimestamp");a(Rf,"handleLocalTimeForGets");Jo=[];setInterval(()=>{for(let e=0;e<Jo.length;e++){let t=Jo[e].deref();!t||t.isDone||t.isCommitted?Jo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(HS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):HS.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(YS,"getUpdateRecord")});var _u=R((Hpe,cw)=>{"use strict";var aw=X(),oQ=L(),{RecordEncoder:aQ}=(uu(),ae(ow)),Bpe=require("fs");aw.initSync();var cQ=aw.get(oQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,KS=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=cQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:aQ})}};cw.exports=KS});var du=R((xpe,lw)=>{"use strict";var sn=X(),Un=L();sn.initSync();var Af=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=sn.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||sn.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||sn.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",sn.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=sn.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),sn.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=sn.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),sn.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=sn.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),sn.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=sn.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=sn.get(Un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};lw.exports=Af;Af.MAX_DBS=1e4});var Ye=R((Fpe,Tw)=>{"use strict";var QS=require("lmdb"),rs=require("fs-extra"),on=require("path"),Of=Nr(),dw=k(),Ir=rn().LMDB_ERRORS_ENUM,bf=rw(),jS=_u(),fw=du(),so=_t(),uw=L(),{table:lQ,resetDatabases:uQ}=(Re(),ae($e)),_w=X(),ns=so.INTERNAL_DBIS_NAME,Ew=so.DBI_DEFINITION_NAME,_Q="data.mdb",dQ="lock.mdb",fu=".mdb",fQ="-lock",WS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vn(t,r),this.key_type=this.dbi[so.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[so.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new QS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Nf(e,t){if(e===void 0)throw new Error(Ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ir.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function zS(e,t,r=!0){try{await rs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Ir.INVALID_BASE_PATH):n}try{let n=on.join(e,t+fu);return await rs.access(n,rs.constants.R_OK|rs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await rs.access(on.join(e,t,_Q),rs.constants.R_OK|rs.constants.F_OK),on.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Ir.INVALID_ENVIRONMENT)}else throw new Error(Ir.INVALID_ENVIRONMENT);throw n}}a(zS,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Ir.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function EQ(e,t,r=!1,n=!1){Nf(e,t);let s=on.basename(e);t=t.toString();let i=_w.get(uw.CONFIG_PARAMS.DATABASES);i||_w.setProperty(uw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await zS(e,t,n),hw(e,t,r)}catch(o){if(o.message===Ir.INVALID_ENVIRONMENT){let c=on.join(e,t);await rs.mkdirp(n?c:e);let l=new fw(n?c:c+fu,!1),_=QS.open(l);_.dbis=Object.create(null);let u=new jS(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=JS(e,t,r);return _[so.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(EQ,"createEnvironment");async function hQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=on.join(e,t);return lQ({table:t,database:on.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(hQ,"copyEnvironment");async function hw(e,t,r=!1){Nf(e,t),t=t.toString();let n=JS(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 zS(e,t),i=on.join(e,t+fu),o=s!=i,c=new fw(s,o),l=QS.open(c);l.dbis=Object.create(null);let _=mw(l);for(let u=0;u<_.length;u++)vn(l,_[u]);return l[so.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(hw,"openEnvironment");async function pQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=on.join(e,t+fu),s=await zS(e,t);if(global.lmdb_map!==void 0){let i=JS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await pw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+fQ:on.join(on.dirname(s),dQ))}a(pQ,"deleteEnvironment");async function pw(e){Of.validateEnv(e);let t=e[so.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(pw,"closeEnvironment");function JS(e,t,r=!1){let s=`${on.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(JS,"getCachedEnvironmentName");function mQ(e){Of.validateEnv(e);let t=Object.create(null),r=vn(e,ns);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ns)try{t[n]=Object.assign(new bf,s)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(mQ,"listDBIDefinitions");function mw(e){Of.validateEnv(e);let t=[],r=vn(e,ns);for(let{key:n}of r.getRange({start:!1}))n!==ns&&t.push(n);return t}a(mw,"listDBIs");function SQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(SQ,"getDBIDefinition");function Sw(e,t,r,n=!r){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vn(e,t)}catch(s){if(s.message===Ir.DBI_DOES_NOT_EXIST){let i=new jS(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[Ew]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sw,"createDBI");function vn(e,t){if(yf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=SQ(e,t):r=new bf,r===void 0)throw new Error(Ir.DBI_DOES_NOT_EXIST);let n;try{let s=new jS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Ir.DBI_DOES_NOT_EXIST):s}return n[Ew]=r,e.dbis[t]=n,n}a(vn,"openDBI");function TQ(e,t){yf(e,t),t=t.toString();let r=vn(e,t),n=r.getStats();return r[so.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(TQ,"statDBI");async function gQ(e,t){try{let r=on.join(e,t+fu);return(await rs.stat(r)).size}catch{throw new Error(Ir.INVALID_ENVIRONMENT)}}a(gQ,"environmentDataSize");function RQ(e,t){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Ir.CANNOT_DROP_INTERNAL_DBIS_NAME);vn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vn(e,ns).removeSync(t)}a(RQ,"dropDBI");function AQ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vn(e,i)}catch(o){if(o.message===Ir.DBI_DOES_NOT_EXIST)Sw(e,i,i!==t,i===t),n=!0;else throw o}}n&&uQ()}a(AQ,"initializeDBIs");Tw.exports={openDBI:vn,openEnvironment:hw,createEnvironment:EQ,listDBIs:mw,listDBIDefinitions:mQ,createDBI:Sw,dropDBI:RQ,statDBI:TQ,deleteEnvironment:pQ,initializeDBIs:AQ,TransactionCursor:WS,environmentDataSize:gQ,copyEnvironment:hQ,closeEnvironment:pw}});var Rw=R((Vpe,gw)=>{"use strict";var XS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gw.exports=XS});var Ow=R((Ype,Aw)=>{"use strict";var ZS=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}};Aw.exports=ZS});var Nw=R((Wpe,bw)=>{"use strict";var eT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};bw.exports=eT});var Zo=R((Xpe,ww)=>{"use strict";var OQ=Ye(),bQ=Rw(),NQ=Ow(),yQ=Nw(),Cs=Nr(),Eu=rn().LMDB_ERRORS_ENUM,IQ=_t(),ui=L(),wQ=Y(),CQ=require("uuid"),jpe=require("lmdb"),{handleHDBError:DQ,hdb_errors:LQ}=ie(),{OVERFLOW_MARKER:zpe,MAX_SEARCH_KEY_LENGTH:Jpe}=IQ,yw=X();yw.initSync();var If=yw.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function PQ(e,t,r,n,s=Cs.getNextMonotonicTime()){iT(e,t,r,n),rT(e,t,r);let i=new bQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Iw(_,!0,s);let u=MQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return nT(o,c,n,i,s)}a(PQ,"insertRecords");function MQ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ui.FUNC_VAL],n[o]=c)}let l=Cs.getIndexedValues(c),_=e.dbis[o];if(l){If&&_.prefetch(l.map(u=>({key:u,value:s})),wf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}If&&e.dbis[t].prefetch([s],wf),e.dbis[t].put(s,n,n[Xo])})}a(MQ,"insertRecord");function UQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(UQ,"removeSkippedRecords");function Iw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Xo]))&&(e[Xo]=r||(r=Cs.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[tT]))&&(e[tT]=r||Cs.getNextMonotonicTime()):delete e[tT]}a(Iw,"setTimestamps");function rT(e,t,r){r.indexOf(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),OQ.initializeDBIs(e,t,r)}a(rT,"initializeTransaction");async function vQ(e,t,r,n,s=Cs.getNextMonotonicTime()){iT(e,t,r,n),rT(e,t,r);let i=new NQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=sT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return nT(c,l,n,i,s,o)}a(vQ,"updateRecords");async function BQ(e,t,r,n,s=Cs.getNextMonotonicTime()){try{iT(e,t,r,n)}catch(l){throw DQ(l,l.message,LQ.HTTP_STATUS_CODES.BAD_REQUEST)}rT(e,t,r);let i=new yQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;wQ.isEmpty(_[t])?(u=CQ.v4(),_[t]=u):u=_[t];let d=sT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return nT(o,c,n,i,s)}a(BQ,"upsertRecords");async function nT(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||Cs.getNextMonotonicTime(),UQ(r,i),n}a(nT,"finalizeWrite");function sT(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Iw(r,!u,o),Number.isInteger(r[Xo])&&_[Xo]>r[Xo])return!1;u&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof m=="function"){let b=m([[_]]);Array.isArray(b)&&(m=b[0][ui.FUNC_VAL],r[h]=m)}if(m===g)continue;let T=Cs.getIndexedValues(g);if(T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.remove(T[b],n)}if(T=Cs.getIndexedValues(m),T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.put(T[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Xo])},"do_put");return l?d=c.ifVersion(n,l.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:sT(e,t,r,n,s,i,o))}a(sT,"updateUpsertRecord");function HQ(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(Eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Eu.WRITE_ATTRIBUTES_REQUIRED):new Error(Eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(HQ,"validateBasic");function iT(e,t,r,n){if(HQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Eu.RECORDS_REQUIRED):new Error(Eu.RECORDS_MUST_BE_ARRAY)}a(iT,"validateWrite");function wf(){}a(wf,"noop");ww.exports={insertRecords:PQ,updateRecords:vQ,upsertRecords:BQ}});var _i=R((eme,GQ)=>{GQ.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{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 Ls=R((tme,Lw)=>{"use strict";var Dw=Y(),Cw=L(),dc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ds=require("joi"),io={schema_format:{pattern:dc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},xQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number(),Ds.array()).required(),qQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()),FQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()).required();function kQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>io.schema_length.maximum?`'${e}' maximum of 250 characters`:dc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(kQ,"checkValidTable");function VQ(e,t){return Dw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(VQ,"validateSchemaExists");function $Q(e,t){let r=t.state.ancestors[0].schema;return Dw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a($Q,"validateTableExists");function YQ(e,t){return e.toLowerCase()===Cw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(YQ,"validateSchemaName");Lw.exports={common_validators:io,schema_regex:dc,hdb_schema_table:xQ,validateSchemaExists:VQ,validateTableExists:$Q,validateSchemaName:YQ,checkValidTable:kQ,hdb_database:qQ,hdb_table:FQ}});var nt=R((nme,Pw)=>{"use strict";var wr=require("validate.js");wr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||wr.validators.type.checks[t](e)?null:` must be a '${t}' value`};wr.validators.type.checks={Object:function(e){return wr.isObject(e)&&!wr.isArray(e)},Array:wr.isArray,Integer:wr.isInteger,Number:wr.isNumber,String:wr.isString,Date:wr.isDate,Boolean:function(e){return typeof e=="boolean"}};wr.validators.hasValidFileExt=function(e,t){return wr.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};Pw.exports={validateObject:KQ,validateObjectAsync:WQ,validateBySchema:QQ};function KQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=wr(e,t,{format:"flat"});return r?new Error(r):null}a(KQ,"validateObject");async function WQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await wr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(WQ,"validateObjectAsync");function QQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(QQ,"validateBySchema")});var Cf=R((ime,Mw)=>{var{common_validators:Ps}=Ls(),pu=nt(),hu="is required",yt={database:{presence:!1,format:Ps.schema_format,length:Ps.schema_length},schema:{presence:!1,format:Ps.schema_format,length:Ps.schema_length},table:{presence:!0,format:Ps.schema_format,length:Ps.schema_length},attribute:{presence:!0,format:Ps.schema_format,length:Ps.schema_length},hash_attribute:{presence:!0,format:Ps.schema_format,length:Ps.schema_length}};function mu(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(mu,"makeAttributesStrings");function jQ(e){return e=mu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(jQ,"schema_object");function zQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(zQ,"table_object");function JQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,pu.validateObject(e,yt)}a(JQ,"create_table_object");function XQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence={message:hu},yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(XQ,"attribute_object");function ZQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(ZQ,"describe_table");function ej(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(ej,"validateTableResidence");Mw.exports={schema_object:jQ,create_table_object:JQ,table_object:zQ,attribute_object:XQ,describe_table:ZQ,validateTableResidence:ej}});var vw=R((ame,Uw)=>{"use strict";var tj=require("uuid"),oT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||tj.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uw.exports=oT});var Df=R((lme,Bw)=>{"use strict";var rj=vw(),aT=class extends rj{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}};Bw.exports=aT});var Gw=R((_me,Hw)=>{"use strict";Hw.exports=sj;var nj="inserted";function sj(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===nj?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(sj,"returnObject")});var Lf=R((fme,Vw)=>{"use strict";var ij=L(),cT=Ye(),oj=Zo(),{getSystemSchemaPath:aj,getSchemaPath:cj}=Je(),lj=_i(),uj=Cf(),_j=Df(),dj=Gw(),{handleHDBError:xw,hdb_errors:Fw}=ie(),qw=Y(),{HTTP_STATUS_CODES:fj}=Fw,lT=lj.hdb_attribute,kw=[];for(let e=0;e<lT.attributes.length;e++)kw.push(lT.attributes[e].attribute);var Ej="inserted";Vw.exports=hj;async function hj(e){let t=uj.attribute_object(e);if(t)throw xw(new Error,t.message,Fw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw xw(new Error,r,fj.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qw.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 _j(e.schema,e.table,e.attribute,e.id);try{let i=await cT.openEnvironment(cj(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}`);cT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await cT.openEnvironment(aj(),ij.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await oj.insertRecords(o,lT.hash_attribute,kw,[s]);return dj(Ej,c,{records:[s]},l)}catch(i){throw i}}a(hj,"lmdbCreateAttribute")});var _T=R((hme,Yw)=>{var{hdb_table:pj,hdb_database:$w}=Ls(),mj=nt(),uT=require("joi"),Sj={undefined:"undefined",null:"null"},Tj=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||Sj[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"),gj=uT.object({database:$w,schema:$w,table:pj,records:uT.array().items(uT.object().custom(Tj)).required()});Yw.exports=function(e){return mj.validateBySchema(e,gj)}});var Su=R((Sme,Ww)=>{"use strict";var di=Y(),Kw=k(),mme=_T(),{getDatabases:Rj}=(Re(),ae($e)),{ClientError:ea}=ie();Ww.exports=Aj;function Aj(e){if(di.isEmpty(e))throw new ea("invalid update parameters defined.");if(di.isEmptyOrZeroLength(e.schema))throw new ea("invalid schema specified.");if(di.isEmptyOrZeroLength(e.table))throw new ea("invalid table specified.");if(!Array.isArray(e.records))throw new ea("records must be an array");let t=Rj()[e.schema]?.[e.table];if(di.isEmpty(t))throw new ea(`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&&di.isEmptyOrZeroLength(o[r]))throw Kw.error("a valid hash attribute must be provided with update record:",o),new ea("a valid hash attribute must be provided with update record, check log for more info");if(!di.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Kw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ea(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!di.isEmpty(o[r])&&o[r]!==""&&n.has(di.autoCast(o[r]))&&(o.skip=!0),n.add(di.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(Aj,"insertUpdateValidate")});var jw=R((gme,Qw)=>{"use strict";var dT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qw.exports=dT});var Xw=R((Ame,Jw)=>{"use strict";var fT=Ye(),Oj=k(),zw=rn().LMDB_ERRORS_ENUM;Jw.exports=bj;async function bj(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 fT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==zw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await fT.closeEnvironment(global.lmdb_map[n]),await fT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==zw.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){Oj.error(t)}}a(bj,"cleanLMDBMap")});var fi=R((bme,rC)=>{"use strict";var Tu=require("crypto"),Nj=X(),{CONFIG_PARAMS:yj}=L(),eC="aes-256-cbc",Ij=32,wj=16,ET=64,tC=32,Cj=ET+tC,Zw=new Map;rC.exports={encrypt:Dj,decrypt:Lj,createNatsTableStreamName:Pj};function Dj(e){let t=Tu.randomBytes(Ij),r=Tu.randomBytes(wj),n=Tu.createCipheriv(eC,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(Dj,"encrypt");function Lj(e){let t=e.substr(0,ET),r=e.substr(ET,tC),n=e.substr(Cj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Tu.createDecipheriv(eC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Lj,"decrypt");function Pj(e,t){let r=Nj.get(yj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zw.get(r);return n||(n=Tu.createHash("md5").update(r).digest("hex"),Zw.set(r,n)),n}a(Pj,"createNatsTableStreamName")});var Ei=R((Ime,sC)=>{"use strict";var yme=ur(),gu=k(),nC=Cf(),Mj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:Uj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:hT}=Uj,vj=X();vj.initSync();var{getDatabases:pT}=(Re(),ae($e)),Bj=require("fs-extra");sC.exports={describeAll:Hj,describeTable:vf,describeSchema:Gj};async function Hj(e={}){try{let t=Pf.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=pT(),o={},c={},l=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await vf({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let m=n[d].tables[f].attribute_permissions;h=await vf({schema:d,table:f,exact_count:_},m)}h&&l.push(h)}catch(h){gu.error(h)}}let u={};for(let d in l)t||s||r?(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(u[l[d].schema]==null&&(u[l[d].schema]={}),u[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?u[d]={}:c[d]&&(u[d]={});return u}catch(t){return gu.error("Got an error in describeAll"),gu.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(Hj,"describeAll");async function vf(e,t){Pf.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=nC.describe_table(e);if(i)throw i;let c=pT()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),hT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),hT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&_(h)})}else l.attributes?.forEach(f=>_(f));let d;try{d=(await Bj.stat(l.primaryStore.env.path)).size}catch(f){gu.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u,db_size:d};E.clustering_stream_name=Mj.createNatsTableStreamName(E.schema,E.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let m of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=m[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let m of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=m}catch(f){gu.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function Gj(e){Pf.transformReq(e);let t=nC.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=pT()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),hT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Pf.isEmpty(l)||l.describe){let _=await vf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Gj,"describeSchema")});var Bn=R((Lme,lC)=>{var xj=_i(),{callbackify:oC,promisify:qj}=require("util"),{getDatabases:aC}=(Re(),ae($e));lC.exports={setSchemaDataToGlobal:iC,getTableSchema:Fj,getSystemSchema:kj,setSchemaDataToGlobalAsync:qj(iC)};var cC=Ei(),Cme=oC(cC.describeAll),Dme=oC(cC.describeTable);function iC(e){global.hdb_schema=aC(),e&&e()}a(iC,"setSchemaDataToGlobal");function Fj(e,t,r){let n=aC()[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(Fj,"getTableSchema");function kj(){return xj}a(kj,"getSystemSchema")});var Cr=R((Mme,fC)=>{"use strict";var Hf=_T(),tr=Y(),Vj=require("util"),Gf=Hn(),$j=Bn(),uC=k(),{handleHDBError:ta,hdb_errors:Yj}=ie(),{HTTP_STATUS_CODES:ra}=Yj,Kj=Vj.promisify($j.getTableSchema),Wj="updated",_C="inserted",dC="upserted";fC.exports={insert:jj,update:zj,upsert:Jj,validation:Qj,flush:Xj};async function Qj(e){if(tr.isEmpty(e))throw new Error("invalid update parameters defined.");if(tr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(tr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Kj(e.schema,e.table),r=Hf(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&&tr.isEmptyOrZeroLength(c[n]))throw uC.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(!tr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw uC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!tr.isEmpty(c[n])&&c[n]!==""&&s.has(tr.autoCast(c[n]))&&(c.skip=!0),s.add(tr.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(Qj,"validation");async function jj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.createRecords(e);return Bf(_C,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(jj,"insertData");async function zj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.updateRecords(e);return tr.isEmpty(n.existing_rows)?Bf(Wj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Bf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(zj,"updateData");async function Jj(e){if(e.operation!=="upsert")throw ta(new Error,"invalid operation, must be upsert",ra.INTERNAL_SERVER_ERROR);let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.upsertRecords(e);return Bf(dC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Jj,"upsertData");function Bf(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===_C?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function Xj(e){return tr.transformReq(e),Gf.flush(e.schema,e.table)}a(Xj,"flush")});var ST=R((vme,pC)=>{var Zj=nt(),mT=require("joi"),{hdb_table:ez,hdb_database:EC}=Ls(),hC={schema:EC,database:EC,table:ez},tz={date:mT.date().iso().required()},rz={timestamp:mT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};pC.exports=function(e,t){let r=t==="timestamp"?{...hC,...rz}:{...hC,...tz},n=mT.object(r);return Zj.validateBySchema(e,n)}});var TC=R((Bme,SC)=>{var nz=nt(),TT=require("joi"),{hdb_table:sz,hdb_database:mC}=Ls(),iz=TT.object({schema:mC,database:mC,table:sz,hash_values:TT.array().required(),ids:TT.array()});SC.exports=function(e){return nz.validateBySchema(e,iz)}});var OT=R((Hme,gC)=>{"use strict";var gT=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}},RT=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}},AT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gC.exports={InsertObject:gT,NoSQLSeachObject:RT,DeleteResponseObject:AT}});var ia=R((xme,NC)=>{"use strict";var AC=ST(),oz=TC(),na=Y(),RC=require("moment"),OC=k(),{promisify:az,callbackify:cz}=require("util"),sa=L(),lz=Bn(),bT=az(lz.getTableSchema),NT=Hn(),{DeleteResponseObject:uz}=OT(),{handleHDBError:oo,hdb_errors:_z}=ie(),{HDB_ERROR_MSGS:xf,HTTP_STATUS_CODES:ao}=_z,dz="records successfully deleted",fz=cz(bC);NC.exports={delete:fz,deleteRecord:bC,deleteFilesBefore:Ez,deleteAuditLogsBefore:hz};async function Ez(e){let t=AC(e,"date");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),!RC(e.date,RC.ISO_8601).isValid())throw oo(new Error,xf.INVALID_DATE,ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,xf.INVALID_DATE,!0);let n=na.checkSchemaTableExist(e.schema,e.table);if(n)throw oo(new Error,n,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let s=await NT.deleteRecordsBefore(e);if(await bT(e.schema,e.table),OC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Ez,"deleteFilesBefore");async function hz(e){let t=AC(e,"timestamp");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),isNaN(e.timestamp))throw oo(new Error,xf.INVALID_VALUE("Timestamp"),ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,xf.INVALID_VALUE("Timestamp"),!0);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);let n=await NT.deleteAuditLogsBefore(e);return await bT(e.schema,e.table),OC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(hz,"deleteAuditLogsBefore");async function bC(e){e.ids&&(e.hash_values=e.ids);let t=oz(e);if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);na.transformReq(e);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);try{await bT(e.schema,e.table);let n=await NT.deleteRecords(e);return na.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${dz}`),n}catch(n){if(n.message===sa.SEARCH_NOT_FOUND_MESSAGE){let s=new uz;return s.message=sa.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(bC,"deleteRecord")});var qf=R((Fme,wC)=>{var pz=require("crypto"),yC=9;function mz(e){let t=Tz(yC),r=IC(e+t);return t+r}a(mz,"createHash");function Sz(e,t){let r=e?.substr(0,yC),n=r+IC(t+r);return e===n}a(Sz,"validateHash");function Tz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(Tz,"generateSalt");function IC(e){return pz.createHash("md5").update(e).digest("hex")}a(IC,"md5");wC.exports={hash:mz,validate:Sz}});var DC=R((Vme,CC)=>{var yT=nt(),_r={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function gz(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,yT.validateObject(e,_r)}a(gz,"addUserValidation");function Rz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,yT.validateObject(e,_r)}a(Rz,"alterUserValidation");function Az(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,yT.validateObject(e,_r)}a(Az,"dropUserValidation");CC.exports={addUserValidation:gz,alterUserValidation:Rz,dropUserValidation:Az}});var Ze=R((Kme,PC)=>{"use strict";var{platform:Yme}=require("os"),Oz="nats-server.zip",IT="nats-server",bz=process.platform==="win32"?`${IT}.exe`:IT,Nz=/^[^\s.,*>]+$/,LC="__request__",yz=a(e=>`${e}.${LC}`,"REQUEST_SUBJECT"),Iz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},wz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Cz={HUB:"hub.pid",LEAF:"leaf.pid"},Dz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Lz={SUCCESS:"success",ERROR:"error"},Pz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Mz={TXN:"txn",MSGID:"msgid"},fc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Uz={[fc.ERR]:1,[fc.WRN]:2,[fc.INF]:3,[fc.DBG]:4,[fc.TRC]:5},vz={debug:"-D",trace:"-DVV"};PC.exports={NATS_SERVER_ZIP:Oz,NATS_SERVER_NAME:IT,NATS_BINARY_NAME:bz,PID_FILES:Cz,NATS_CONFIG_FILES:wz,SERVER_SUFFIX:Dz,NATS_TERM_CONSTRAINTS_RX:Nz,REQUEST_SUFFIX:LC,UPDATE_REMOTE_RESPONSE_STATUSES:Lz,CLUSTER_STATUS_STATUSES:Pz,REQUEST_SUBJECT:yz,SUBJECT_PREFIXES:Mz,MSG_HEADERS:Iz,LOG_LEVELS:fc,LOG_LEVEL_FLAGS:vz,LOG_LEVEL_HIERARCHY:Uz}});var wT=R((Qme,MC)=>{"use strict";var Bz={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
6
+ `}a(li,"createLogRecord");function Ql(e){ai&&$y(e),ws&&process.stdout.write(e)}a(Ql,"logStdOut");function of(e){ai&&$y(e),ws&&process.stderr.write(e)}a(of,"logStdErr");function $y(e){xK(),lc?Qo.appendFileSync(lc,e):Yl.log(e)}a($y,"logToFile");function cS(){try{Qo.closeSync(lc)}catch{}lc=null}a(cS,"closeLogFile");function xK(){if(!lc){try{if(!Kl)debugger;lc=Qo.openSync(Kl,"a")}catch(e){Yl.error(e)}setTimeout(()=>{cS()},vK).unref()}}a(xK,"openLogFile");function sf(...e){Or[Ar]<=Or.info&&Ql(li("info",e))}a(sf,"info");function lS(...e){Or[Ar]<=Or.trace&&Ql(li("trace",e))}a(lS,"trace");function Wl(...e){Or[Ar]<=Or.error&&of(li("error",e))}a(Wl,"error");function uS(...e){Or[Ar]<=Or.debug&&Ql(li("debug",e))}a(uS,"debug");function Vy(...e){Or[Ar]<=Or.notify&&Ql(li("notify",e))}a(Vy,"notify");function Yy(...e){Or[Ar]<=Or.fatal&&of(li("fatal",e))}a(Yy,"fatal");function _S(...e){Or[Ar]<=Or.warn&&of(li("warn",e))}a(_S,"warn");function qK(e,t,...r){t===qy.STDERR?of(li(e,r)):Ql(li(e,r))}a(qK,"logCustomLevel");function FK(){let e;try{e=LK.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ci.join(e,Nt.HDB_HOME_DIR_NAME,Nt.BOOT_PROPS_FILE_NAME);return Qo.existsSync(t)||(t=ci.join(aS,"utility/hdb_boot_properties.file")),t}a(FK,"getPropsFilePath");function kK(e){Ar=e}a(kK,"setLogLevel");function Hy(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Hy,"autoCastBoolean");function $K(e){try{if(e.includes("config/settings.js")){let o=xy(e);return{level:o.get(Nt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ci.dirname(o.get(Nt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Nt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Gy.parseDocument(Qo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Nt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a($K,"getLogConfig");function VK(){try{let e=Gy.parseDocument(Qo.readFileSync(UK,"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(VK,"getDefaultConfig");function YK(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(YK,"AuthAuditLog")});var fS=R((zhe,Ky)=>{"use strict";var KK=require("util"),WK=require("path"),QK=require("child_process"),jK=KK.promisify(QK.execFile),zK=1e3*1e3*10;Ky.exports={findPs:JK};async function JK(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await jK("ps",["wwxo",`pid,${r}`],{maxBuffer:zK});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:WK.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(JK,"findPs")});var _t=R((Xhe,Qy)=>{"use strict";var XK="__dbis__",ZK="__txns__",eW="__environment_name__",tW="__dbi_defintion__",rW={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"},nW=["__createdtime__","__updatedtime__"],sW="\uFFFF",Wy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},iW=Object.values(Wy);Qy.exports={AUDIT_STORE_NAME:ZK,INTERNAL_DBIS_NAME:XK,DBI_DEFINITION_NAME:tW,SEARCH_TYPES:rW,TIMESTAMP_NAMES:nW,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:eW,TRANSACTIONS_DBI_NAMES_ENUM:Wy,TRANSACTIONS_DBIS:iW,OVERFLOW_MARKER:sW}});var nn=R((Zhe,nI)=>{"use strict";var jy=L(),zy=_t(),Jy={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},Xy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Zy={500:Xy("There was an error processing your request."),400:"Invalid request"},oW=Zy[Jy.INTERNAL_SERVER_ERROR],aW={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},cW={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lW={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},uW={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 ${zy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${zy.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"},_W={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${jy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${jy.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},eI={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"},dW={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},fW={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},EW={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},hW={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},pW={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},tI={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},rI={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},mW={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."},SW={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},TW={...eI,...lW,...aW,...dW,...fW,...EW,...hW,...pW,..._W,...tI,...rI,...mW,...SW,...cW};nI.exports={CHECK_LOGS_WRAPPER:Xy,HDB_ERROR_MSGS:TW,DEFAULT_ERROR_MSGS:Zy,DEFAULT_ERROR_RESP:oW,HTTP_STATUS_CODES:Jy,LMDB_ERRORS_ENUM:uW,AUTHENTICATION_ERROR_MSGS:eI,VALIDATION_ERROR_MSGS:tI,ITC_ERRORS:rI}});var ie=R((tpe,oI)=>{"use strict";var uc=nn(),gW=k(),RW=L(),af=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sI),this.statusCode=n||uc.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(uc.DEFAULT_ERROR_MSGS[n]?uc.DEFAULT_ERROR_MSGS[n]:uc.DEFAULT_ERROR_MSGS[uc.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&&gW[s](i)}},ES=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}},hS=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sI(e,t,r,n=RW.LOG_LEVELS.ERROR,s=null,i=!1){if(iI(e))return e;let o=new af(e,t,r,n,s);return i&&delete o.stack,o}a(sI,"handleHDBError");function iI(e){return e.__proto__.constructor.name===af.name}a(iI,"isHDBError");oI.exports={isHDBError:iI,handleHDBError:sI,ClientError:ES,ServerError:hS,hdb_errors:uc}});var Je=R((npe,fI)=>{"use strict";var Zl=L(),AW=Y(),br=J(),eu=require("path"),OW=require("minimist"),aI=require("fs-extra"),cI=require("lodash");br.initSync();var{CONFIG_PARAMS:ro,DATABASES_PARAM_CONFIG:jl,SYSTEM_SCHEMA_NAME:cf}=Zl,zl,Jl,Xl;function lI(){if(zl!==void 0)return zl;if(br.getHdbBasePath()!==void 0)return zl=br.get(ro.STORAGE_PATH)||eu.join(br.getHdbBasePath(),Zl.DATABASES_DIR_NAME),zl}a(lI,"getBaseSchemaPath");function uI(){if(Jl!==void 0)return Jl;if(br.getHdbBasePath()!==void 0)return Jl=dI(cf),Jl}a(uI,"getSystemSchemaPath");function _I(){if(Xl!==void 0)return Xl;if(br.getHdbBasePath()!==void 0)return Xl=br.get(Zl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||eu.join(br.getHdbBasePath(),Zl.TRANSACTIONS_DIR_NAME),Xl}a(_I,"getTransactionAuditStoreBasePath");function bW(e,t){let r=br.get(ro.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||eu.join(_I(),e.toString())}a(bW,"getTransactionAuditStorePath");function dI(e,t){e=e.toString(),t=t&&t.toString();let r=br.get(Zl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||eu.join(lI(),e)}a(dI,"getSchemaPath");function NW(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,OW(process.argv));let n=r[ro.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!AW.isObject(n))throw o;i=n}for(let o of i){let c=o[cf];if(!c)continue;let l=br.get(ro.DATABASES);l=l??{};let _=c?.tables?.[t]?.[jl.PATH];if(_)return cI.set(l,[cf,jl.TABLES,t,jl.PATH],_),br.setProperty(ro.DATABASES,l),_;let u=c?.[jl.PATH];if(u)return cI.set(l,[cf,jl.PATH],u),br.setProperty(ro.DATABASES,l),u}}let s=r[ro.STORAGE_PATH.toUpperCase()];if(s){if(!aI.pathExistsSync(s))throw new Error(s+" does not exist");let i=eu.join(s,e);return aI.mkdirsSync(i),br.setProperty(ro.STORAGE_PATH,s),i}return uI()}a(NW,"initSystemSchemaPaths");function yW(){zl=void 0,Jl=void 0,Xl=void 0}a(yW,"resetPaths");fI.exports={getBaseSchemaPath:lI,getSystemSchemaPath:uI,getTransactionAuditStorePath:bW,getTransactionAuditStoreBasePath:_I,getSchemaPath:dI,initSystemSchemaPaths:NW,resetPaths:yW}});var Nr=R((ape,SI)=>{"use strict";var IW=nn().LMDB_ERRORS_ENUM,ipe=require("lmdb"),wW=_t(),ope=require("buffer").Buffer,{OVERFLOW_MARKER:EI,MAX_SEARCH_KEY_LENGTH:lf}=wW,hI=["number","string","symbol","boolean","bigint"];function CW(e){if(e=e?.primaryStore||e,!e)throw new Error(IW.ENV_REQUIRED)}a(CW,"validateEnv");function DW(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(DW,"stringifyData");function LW(e){return e instanceof Date?e.valueOf():e}a(LW,"convertKeyValueToWrite");function PW(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hI.includes(typeof e))return e.length>lf?[e.slice(0,lf)+EI]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hI.includes(typeof i))i.length>lf?r.push(i.slice(0,lf)+EI):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(PW,"getIndexedValues");var uf=0,pI=0;function mI(){pI=Date.now()-performance.now()}a(mI,"adjustStartTime");mI();var MW=6e4;setInterval(mI,MW).unref();function UW(){let e=performance.now()+pI;return e>uf?(uf=e,e):(uf+=488e-6,uf)}a(UW,"getNextMonotonicTime");SI.exports={validateEnv:CW,stringifyData:DW,convertKeyValueToWrite:LW,getNextMonotonicTime:UW,getIndexedValues:PW}});var tu=R((lpe,TI)=>{"use strict";var vW=L().OPERATIONS_ENUM,pS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=vW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};TI.exports=pS});var ru=R((dpe,OI)=>{"use strict";var _pe=tu(),_f=L(),mS=Y(),gI=k(),BW=require("uuid"),{handleHDBError:df,hdb_errors:HW}=ie(),{HDB_ERROR_MSGS:ff,HTTP_STATUS_CODES:Ef}=HW;OI.exports=RI;function RI(e,t,r){for(let s=0;s<t.length;s++)AI(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];GW(i,r,e.operation)}}a(RI,"processRows");RI.validateAttribute=AI;function AI(e){if(Buffer.byteLength(String(e))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw df(new Error,ff.ATTR_NAME_LENGTH_ERR(e),Ef.BAD_REQUEST,void 0,void 0,!0);if(mS.isEmptyOrZeroLength(e)||mS.isEmpty(e.trim()))throw df(new Error,ff.ATTR_NAME_NULLISH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(AI,"validateAttribute");function GW(e,t,r){if(!e.hasOwnProperty(t)||mS.isEmptyOrZeroLength(e[t])){if(r===_f.OPERATIONS_ENUM.INSERT||r===_f.OPERATIONS_ENUM.UPSERT){e[t]=BW.v4();return}throw gI.error("Update transaction aborted due to record with no hash value:",e),df(new Error,ff.RECORD_MISSING_HASH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_f.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gI.error(e),df(new Error,ff.HASH_VAL_LENGTH_ERR,Ef.BAD_REQUEST,void 0,void 0,!0)}a(GW,"validateHash")});var bI,ts,SS,nu=be(()=>{bI=require("events"),ts=class extends bI.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new SS;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)}},SS=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var jo={};$e(jo,{server:()=>dt});var NI,dt,yr=be(()=>{NI=require("../index"),dt={};(0,NI._assignPackageExport)("server",dt)});var RS={};$e(RS,{loadGQLSchema:()=>FW,start:()=>gS,startOnMainThread:()=>qW});function gS({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let U=function(v){if(v.kind==="NonNullType"){let W=U(v.type);return W.nullable=!1,W}if(v.kind==="ListType")return{type:"array",elements:U(v.type)};let M={type:v.name?.value};return Object.defineProperty(M,"location",{value:v.loc.startToken}),M};a(U,"getProperty");let g=S.name.value,T=[],b={table:null,database:null,properties:T};E.set(g,b);for(let v of S.directives){if(v.name.value==="table"){for(let q of v.arguments)b[q.name.value]=q.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(v.name.value==="sealed"&&(b.sealed=!0),v.name.value==="export"){b.export=!0;for(let q of v.arguments)q.name.value==="name"&&(b.export={name:q.value.value})}}let N=!1;for(let v of S.fields){let q=U(v.type);q.name=v.name.value,T.push(q);for(let M of v.directives)if(M.name.value==="primaryKey")N?console.warn("Can not define two attributes as a primary key"):(q.isPrimaryKey=!0,N=!0);else if(M.name.value==="indexed")q.indexed=!0;else if(M.name.value==="relationship"){let W={};for(let z of M.arguments)W[z.name.value]=z.value.value;q.relationship=W}else if(M.name.value==="createdTime")q.assignCreatedTime=!0;else if(M.name.value==="updatedTime")q.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")q.expiresAt=!0;else if(M.name.value==="allow"){let W=q.authorizedRoles=[];for(let z of M.arguments)z.name.value==="role"&&W.push(z.value.value)}}b.type=g,g==="Query"&&(h=b)}function m(S){let g=E.get(S.type);g?(Object.defineProperty(S,"properties",{value:g.properties}),Object.defineProperty(S,"definition",{value:g})):S.type==="array"?m(S.elements):xW.includes(S.type)||(0,yI.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(m,"connectPropertyType");for(let S of E.values())for(let g of S.properties)m(g);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,TS.dirname)(n),S.tableClass):i.set((0,TS.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var TS,yI,xW,qW,FW,II=be(()=>{TS=require("path");Re();yI=G(rt()),xW=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(gS,"start");qW=gS,FW=gS({ensureTable:St}).handleFile});async function hf(e){let t=(0,DI.pathToFileURL)(e).toString();return kW?(su||(su=$W(YW)),(await(await su).import(t)).namespace):import(t)}async function $W(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),su=new Compartment({console,Math,Date,fetch:VW,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,CI.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:er,tables:sn,databases:ft})}};let n=await(0,wI.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),su}function VW(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 YW(){return{Resource:er,tables:sn}}var wI,CI,DI,kW,su,AS=be(()=>{Mn();Re();wI=require("fs/promises"),CI=require("path"),DI=require("url"),kW=!1;a(hf,"secureImport");a($W,"getCompartment");a(VW,"secureOnlyFetch");a(YW,"getGlobalVars")});var bS={};$e(bS,{handleFile:()=>KW});async function KW(e,t,r,n){let s=new Map,i=await hf(r);c(i.default)&&n.set((0,OS.dirname)(t),i.default),o(i,(0,OS.dirname)(t));function o(l,_){for(let u in l){let d=l[u];c(d)?n.set(_+"/"+u,d):typeof d=="object"&&o(d,_+"/"+u)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var OS,LI=be(()=>{AS();OS=require("path");a(KW,"handleFile")});var yS={};$e(yS,{start:()=>WW});function WW({resources:e}){e.set("login",NS),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var NS,PI=be(()=>{Mn();a(WW,"start");NS=class extends er{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 xI={};$e(xI,{parse:()=>wS,streamAsJSON:()=>iu,stringify:()=>zo});function iu(e){return new IS({value:e})}function MI(e){return console.error(e),JSON.stringify(e.toString())}function UI(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function zo(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===HI)return GI(e);if(t.resolution)return t.resolution.then(()=>zo(e));throw t}}function GI(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+=GI(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+zo(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function wS(e){return zW.test(e)?QW.parse(e):JSON.parse(e)}var vI,BI,QW,jW,HI,IS,zW,CS=be(()=>{vI=require("stream"),BI=G(require("json-bigint-fixes")),QW=(0,BI.default)({useNativeBigInt:!0}),jW=1e4,HI={};BigInt.prototype.toJSON=function(){throw HI};a(iu,"streamAsJSON");IS=class extends vI.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),MI)}catch(s){yield MI(s)}else yield zo(t)}else yield zo(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);UI(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>jW?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 UI(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(MI,"handleError");a(UI,"when");a(zo,"stringify");a(GI,"jsStringify");zW=/[[,:]\s*-?\d{16,}/;a(wS,"parse")});var XI=R((wpe,JI)=>{"use strict";var DS=require("recursive-iterator"),JW=require("alasql"),LS=require("clone"),qI=Y(),{handleHDBError:FI,hdb_errors:XW}=ie(),{HDB_ERROR_MSGS:kI,HTTP_STATUS_CODES:$I}=XW,{getDatabases:ZW}=(Re(),ae(Ve)),eQ=["DISTINCT_ARRAY"],VI=Symbol("validateTables"),PS=Symbol("validateTable"),Ipe=Symbol("getAllColumns"),YI=Symbol("validateAllColumns"),pf=Symbol("findColumn"),KI=Symbol("validateOrderBy"),ou=Symbol("validateSegment"),MS=Symbol("validateColumn"),WI=Symbol("setColumnsForTable"),QI=Symbol("checkColumnsForAsterisk"),jI=Symbol("validateGroupBy"),zI=Symbol("hasColumns"),US=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[VI](),this[QI](),this[YI]()}[VI](){if(this[zI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[PS](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[PS](t.table)})}}[zI](){let t=!1,r=new DS(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[PS](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ZW();if(!r[t.databaseid])throw FI(new Error,kI.SCHEMA_NOT_FOUND(t.databaseid),$I.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw FI(new Error,kI.TABLE_NOT_FOUND(t.databaseid,t.tableid),$I.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=LS(s);i.table=LS(t),this.attributes.push(i)})}[pf](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)}[QI](){let t=new DS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[WI](r.tableid)}[WI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new JW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[YI](){this[ou](this.statement.columns,!1),this[ou](this.statement.joins,!1),this[ou](this.statement.where,!1),this[jI](this.statement.group,!1),this[ou](this.statement.order,!0)}[ou](t,r){if(!t)return;let n=new DS(t),s=[];for(let{node:i,path:o}of n)!qI.isEmpty(i)&&!qI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KI](i):s.push(this[MS](i)));return s}[jI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&eQ.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=LS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[pf](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[pf](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`}[KI](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[MS](t)}[MS](t){let r=this[pf](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]}};JI.exports=US});var ew=R((Dpe,ZI)=>{"use strict";var vS=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")}};ZI.exports=vS});var rw=R((Ppe,tw)=>{"use strict";var BS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};tw.exports=BS});var ow={};$e(ow,{HAS_EXPIRATION:()=>$S,LAST_TIMESTAMP_PLACEHOLDER:()=>lu,LOCAL_TIMESTAMP:()=>tQ,METADATA:()=>au,NO_TIMESTAMP:()=>GS,PENDING_LOCAL_TIME:()=>VS,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kS,RecordEncoder:()=>FS,TIMESTAMP_ASSIGN_LAST:()=>nQ,TIMESTAMP_ASSIGN_NEW:()=>sw,TIMESTAMP_ASSIGN_PREVIOUS:()=>iw,TIMESTAMP_PLACEHOLDER:()=>mf,TIMESTAMP_RECORD_PREVIOUS:()=>xS,getUpdateRecord:()=>YS,handleLocalTimeForGets:()=>Rf});function iQ(){return cu[0]=cu[0]^64,rQ.getFloat64(0)}function Rf(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[au]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,_=l[au];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Jo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Jo.length;l++){let _=Jo[l].deref();(!_||_.isDone||_.isCommitted)&&Jo.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function YS(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",E,f){if(E||l==null?_c=i?.localTime?xS|iw:GS:_c=l?i?.localTime?xS|16384:sw|16384:GS,u>0&&(c|=$S),Tf=c,qS=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:_c>0},m;try{E&&(h.ifVersion=m=i?.version??null);let S=e.put(n,s,h);if(l){let g=_?.user?.username;if(f&&(Sf=e.encoder.encode(f)),E&&i?.localTime){let T=i?.localTime,b=r.get(T);if(b){let N=Yt(b).previousLocalTime;return r.put(T,gf(o,t,n,N,g,d,Sf),{ifVersion:m}),S}}r.put(lu,gf(o,t,n,i?.localTime?1:0,g,d,Sf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var nw,HS,mf,lu,kS,tQ,au,cu,rQ,GS,sw,nQ,iw,xS,$S,VS,sQ,Sf,_c,Tf,qS,FS,Jo,uu=be(()=>{nw=require("msgpackr");no();HS=G(k()),mf=new Uint8Array([1,1,1,1,4,64,0,0]),lu=new Uint8Array([1,1,1,1,1,0,0,0]),kS=new Uint8Array([1,1,1,1,3,64,0,0]),tQ=Symbol("local-timestamp"),au=Symbol("metadata"),cu=new Uint8Array(8),rQ=new DataView(cu.buffer,0,8),GS=0,sw=0,nQ=1,iw=3,xS=4,$S=16,VS=1,_c=0,Tf=-1,qS=0,FS=class extends nw.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(_c||Tf>=0){let i=0,o=_c;o&&(i+=8,_c=0);let c=Tf,l=qS;c>=0&&(i+=2,Tf=-1,l&&(i+=8,qS=0));let _=sQ=r.call(this,n,s|2048|i);Sf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(mf[4]=o,mf[5]=o>>8,_.set(mf,u),u+=8),c>=0&&(_[u++]=c,_[u++]=0,l&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(u,l)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(cu,0,c),c+=8;else for(let d=0;d<8;d++)cu[d]=t[c++];l=iQ(),i=t[c]}let _;i<32&&(o=i,c+=2,o&$S&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let u=super.decode(t.subarray(c,s),s-c);return{localTime:l,value:u,[au]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(iQ,"getTimestamp");a(Rf,"handleLocalTimeForGets");Jo=[];setInterval(()=>{for(let e=0;e<Jo.length;e++){let t=Jo[e].deref();!t||t.isDone||t.isCommitted?Jo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(HS.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):HS.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(YS,"getUpdateRecord")});var _u=R((Hpe,cw)=>{"use strict";var aw=J(),oQ=L(),{RecordEncoder:aQ}=(uu(),ae(ow)),Bpe=require("fs");aw.initSync();var cQ=aw.get(oQ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,KS=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=cQ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:aQ})}};cw.exports=KS});var du=R((xpe,lw)=>{"use strict";var on=J(),Un=L();on.initSync();var Af=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=on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||on.get(Un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=on.get(Un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=on.get(Un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=on.get(Un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=on.get(Un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};lw.exports=Af;Af.MAX_DBS=1e4});var Ye=R((Fpe,Tw)=>{"use strict";var QS=require("lmdb"),rs=require("fs-extra"),an=require("path"),Of=Nr(),dw=k(),Ir=nn().LMDB_ERRORS_ENUM,bf=rw(),jS=_u(),fw=du(),so=_t(),uw=L(),{table:lQ,resetDatabases:uQ}=(Re(),ae(Ve)),_w=J(),ns=so.INTERNAL_DBIS_NAME,Ew=so.DBI_DEFINITION_NAME,_Q="data.mdb",dQ="lock.mdb",fu=".mdb",fQ="-lock",WS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vn(t,r),this.key_type=this.dbi[so.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[so.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new QS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Nf(e,t){if(e===void 0)throw new Error(Ir.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ir.ENV_NAME_REQUIRED)}a(Nf,"pathEnvNameValidation");async function zS(e,t,r=!0){try{await rs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Ir.INVALID_BASE_PATH):n}try{let n=an.join(e,t+fu);return await rs.access(n,rs.constants.R_OK|rs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await rs.access(an.join(e,t,_Q),rs.constants.R_OK|rs.constants.F_OK),an.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Ir.INVALID_ENVIRONMENT)}else throw new Error(Ir.INVALID_ENVIRONMENT);throw n}}a(zS,"validateEnvironmentPath");function yf(e,t){if(Of.validateEnv(e),t===void 0)throw new Error(Ir.DBI_NAME_REQUIRED)}a(yf,"validateEnvDBIName");async function EQ(e,t,r=!1,n=!1){Nf(e,t);let s=an.basename(e);t=t.toString();let i=_w.get(uw.CONFIG_PARAMS.DATABASES);i||_w.setProperty(uw.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await zS(e,t,n),hw(e,t,r)}catch(o){if(o.message===Ir.INVALID_ENVIRONMENT){let c=an.join(e,t);await rs.mkdirp(n?c:e);let l=new fw(n?c:c+fu,!1),_=QS.open(l);_.dbis=Object.create(null);let u=new jS(!1);_.openDB(ns,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=JS(e,t,r);return _[so.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(EQ,"createEnvironment");async function hQ(e,t,r,n=!0){Nf(e,t),t=t.toString();let s=an.join(e,t);return lQ({table:t,database:an.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(hQ,"copyEnvironment");async function hw(e,t,r=!1){Nf(e,t),t=t.toString();let n=JS(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 zS(e,t),i=an.join(e,t+fu),o=s!=i,c=new fw(s,o),l=QS.open(c);l.dbis=Object.create(null);let _=mw(l);for(let u=0;u<_.length;u++)vn(l,_[u]);return l[so.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(hw,"openEnvironment");async function pQ(e,t,r=!1){Nf(e,t),t=t.toString();let n=an.join(e,t+fu),s=await zS(e,t);if(global.lmdb_map!==void 0){let i=JS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await pw(o),delete global.lmdb_map[i]}}await rs.remove(s),await rs.remove(s===n?s+fQ:an.join(an.dirname(s),dQ))}a(pQ,"deleteEnvironment");async function pw(e){Of.validateEnv(e);let t=e[so.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(pw,"closeEnvironment");function JS(e,t,r=!1){let s=`${an.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(JS,"getCachedEnvironmentName");function mQ(e){Of.validateEnv(e);let t=Object.create(null),r=vn(e,ns);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ns)try{t[n]=Object.assign(new bf,s)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(mQ,"listDBIDefinitions");function mw(e){Of.validateEnv(e);let t=[],r=vn(e,ns);for(let{key:n}of r.getRange({start:!1}))n!==ns&&t.push(n);return t}a(mw,"listDBIs");function SQ(e,t){let n=vn(e,ns).getEntry(t),s=new bf;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dw.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(SQ,"getDBIDefinition");function Sw(e,t,r,n=!r){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Ir.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vn(e,t)}catch(s){if(s.message===Ir.DBI_DOES_NOT_EXIST){let i=new jS(r,n===!0),o=e.openDB(t,i),c=new bf(r===!0,n);return o[Ew]=c,vn(e,ns).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sw,"createDBI");function vn(e,t){if(yf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=SQ(e,t):r=new bf,r===void 0)throw new Error(Ir.DBI_DOES_NOT_EXIST);let n;try{let s=new jS(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(Ir.DBI_DOES_NOT_EXIST):s}return n[Ew]=r,e.dbis[t]=n,n}a(vn,"openDBI");function TQ(e,t){yf(e,t),t=t.toString();let r=vn(e,t),n=r.getStats();return r[so.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(TQ,"statDBI");async function gQ(e,t){try{let r=an.join(e,t+fu);return(await rs.stat(r)).size}catch{throw new Error(Ir.INVALID_ENVIRONMENT)}}a(gQ,"environmentDataSize");function RQ(e,t){if(yf(e,t),t=t.toString(),t===ns)throw new Error(Ir.CANNOT_DROP_INTERNAL_DBIS_NAME);vn(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vn(e,ns).removeSync(t)}a(RQ,"dropDBI");function AQ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vn(e,i)}catch(o){if(o.message===Ir.DBI_DOES_NOT_EXIST)Sw(e,i,i!==t,i===t),n=!0;else throw o}}n&&uQ()}a(AQ,"initializeDBIs");Tw.exports={openDBI:vn,openEnvironment:hw,createEnvironment:EQ,listDBIs:mw,listDBIDefinitions:mQ,createDBI:Sw,dropDBI:RQ,statDBI:TQ,deleteEnvironment:pQ,initializeDBIs:AQ,TransactionCursor:WS,environmentDataSize:gQ,copyEnvironment:hQ,closeEnvironment:pw}});var Rw=R(($pe,gw)=>{"use strict";var XS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gw.exports=XS});var Ow=R((Ype,Aw)=>{"use strict";var ZS=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}};Aw.exports=ZS});var Nw=R((Wpe,bw)=>{"use strict";var eT=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};bw.exports=eT});var Zo=R((Xpe,ww)=>{"use strict";var OQ=Ye(),bQ=Rw(),NQ=Ow(),yQ=Nw(),Cs=Nr(),Eu=nn().LMDB_ERRORS_ENUM,IQ=_t(),ui=L(),wQ=Y(),CQ=require("uuid"),jpe=require("lmdb"),{handleHDBError:DQ,hdb_errors:LQ}=ie(),{OVERFLOW_MARKER:zpe,MAX_SEARCH_KEY_LENGTH:Jpe}=IQ,yw=J();yw.initSync();var If=yw.get(ui.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tT=ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xo=ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function PQ(e,t,r,n,s=Cs.getNextMonotonicTime()){iT(e,t,r,n),rT(e,t,r);let i=new bQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];Iw(_,!0,s);let u=MQ(e,t,r,_),d=_[t];o.push(u),c.push(d)}return nT(o,c,n,i,s)}a(PQ,"insertRecords");function MQ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][ui.FUNC_VAL],n[o]=c)}let l=Cs.getIndexedValues(c),_=e.dbis[o];if(l){If&&_.prefetch(l.map(u=>({key:u,value:s})),wf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}If&&e.dbis[t].prefetch([s],wf),e.dbis[t].put(s,n,n[Xo])})}a(MQ,"insertRecord");function UQ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(UQ,"removeSkippedRecords");function Iw(e,t,r){let n=r>0;(n||!Number.isInteger(e[Xo]))&&(e[Xo]=r||(r=Cs.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[tT]))&&(e[tT]=r||Cs.getNextMonotonicTime()):delete e[tT]}a(Iw,"setTimestamps");function rT(e,t,r){r.indexOf(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),OQ.initializeDBIs(e,t,r)}a(rT,"initializeTransaction");async function vQ(e,t,r,n,s=Cs.getNextMonotonicTime()){iT(e,t,r,n),rT(e,t,r);let i=new NQ,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],E;try{E=sT(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),l.push(d)}return nT(c,l,n,i,s,o)}a(vQ,"updateRecords");async function BQ(e,t,r,n,s=Cs.getNextMonotonicTime()){try{iT(e,t,r,n)}catch(l){throw DQ(l,l.message,LQ.HTTP_STATUS_CODES.BAD_REQUEST)}rT(e,t,r);let i=new yQ,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;wQ.isEmpty(_[t])?(u=CQ.v4(),_[t]=u):u=_[t];let d=sT(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return nT(o,c,n,i,s)}a(BQ,"upsertRecords");async function nT(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||Cs.getNextMonotonicTime(),UQ(r,i),n}a(nT,"finalizeWrite");function sT(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),_=l?.value,u=_;if(!_){if(i)return!1;_={}}if(Iw(r,!u,o),Number.isInteger(r[Xo])&&_[Xo]>r[Xo])return!1;u&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let g=_[h];if(typeof m=="function"){let b=m([[_]]);Array.isArray(b)&&(m=b[0][ui.FUNC_VAL],r[h]=m)}if(m===g)continue;let T=Cs.getIndexedValues(g);if(T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.remove(T[b],n)}if(T=Cs.getIndexedValues(m),T){If&&S.prefetch(T.map(b=>({key:b,value:n})),wf);for(let b=0,N=T.length;b<N;b++)S.put(T[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[Xo])},"do_put");return l?d=c.ifVersion(n,l.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:sT(e,t,r,n,s,i,o))}a(sT,"updateUpsertRecord");function HQ(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error(Eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Eu.WRITE_ATTRIBUTES_REQUIRED):new Error(Eu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(HQ,"validateBasic");function iT(e,t,r,n){if(HQ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Eu.RECORDS_REQUIRED):new Error(Eu.RECORDS_MUST_BE_ARRAY)}a(iT,"validateWrite");function wf(){}a(wf,"noop");ww.exports={insertRecords:PQ,updateRecords:vQ,upsertRecords:BQ}});var _i=R((eme,GQ)=>{GQ.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{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 Ls=R((tme,Lw)=>{"use strict";var Dw=Y(),Cw=L(),dc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ds=require("joi"),io={schema_format:{pattern:dc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},xQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number(),Ds.array()).required(),qQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()),FQ=Ds.alternatives(Ds.string().min(1).max(io.schema_length.maximum).pattern(dc).messages({"string.pattern.base":"{:#label} "+io.schema_format.message}),Ds.number()).required();function kQ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>io.schema_length.maximum?`'${e}' maximum of 250 characters`:dc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(kQ,"checkValidTable");function $Q(e,t){return Dw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a($Q,"validateSchemaExists");function VQ(e,t){let r=t.state.ancestors[0].schema;return Dw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(VQ,"validateTableExists");function YQ(e,t){return e.toLowerCase()===Cw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(YQ,"validateSchemaName");Lw.exports={common_validators:io,schema_regex:dc,hdb_schema_table:xQ,validateSchemaExists:$Q,validateTableExists:VQ,validateSchemaName:YQ,checkValidTable:kQ,hdb_database:qQ,hdb_table:FQ}});var nt=R((nme,Pw)=>{"use strict";var wr=require("validate.js");wr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||wr.validators.type.checks[t](e)?null:` must be a '${t}' value`};wr.validators.type.checks={Object:function(e){return wr.isObject(e)&&!wr.isArray(e)},Array:wr.isArray,Integer:wr.isInteger,Number:wr.isNumber,String:wr.isString,Date:wr.isDate,Boolean:function(e){return typeof e=="boolean"}};wr.validators.hasValidFileExt=function(e,t){return wr.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};Pw.exports={validateObject:KQ,validateObjectAsync:WQ,validateBySchema:QQ};function KQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=wr(e,t,{format:"flat"});return r?new Error(r):null}a(KQ,"validateObject");async function WQ(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await wr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(WQ,"validateObjectAsync");function QQ(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(QQ,"validateBySchema")});var Cf=R((ime,Mw)=>{var{common_validators:Ps}=Ls(),pu=nt(),hu="is required",yt={database:{presence:!1,format:Ps.schema_format,length:Ps.schema_length},schema:{presence:!1,format:Ps.schema_format,length:Ps.schema_length},table:{presence:!0,format:Ps.schema_format,length:Ps.schema_length},attribute:{presence:!0,format:Ps.schema_format,length:Ps.schema_length},hash_attribute:{presence:!0,format:Ps.schema_format,length:Ps.schema_length}};function mu(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(mu,"makeAttributesStrings");function jQ(e){return e=mu(e),yt.table.presence=!1,yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(jQ,"schema_object");function zQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(zQ,"table_object");function JQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,pu.validateObject(e,yt)}a(JQ,"create_table_object");function XQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence={message:hu},yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(XQ,"attribute_object");function ZQ(e){return e=mu(e),yt.table.presence={message:hu},yt.attribute.presence=!1,yt.hash_attribute.presence=!1,pu.validateObject(e,yt)}a(ZQ,"describe_table");function ej(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(ej,"validateTableResidence");Mw.exports={schema_object:jQ,create_table_object:JQ,table_object:zQ,attribute_object:XQ,describe_table:ZQ,validateTableResidence:ej}});var vw=R((ame,Uw)=>{"use strict";var tj=require("uuid"),oT=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||tj.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uw.exports=oT});var Df=R((lme,Bw)=>{"use strict";var rj=vw(),aT=class extends rj{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}};Bw.exports=aT});var Gw=R((_me,Hw)=>{"use strict";Hw.exports=sj;var nj="inserted";function sj(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===nj?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(sj,"returnObject")});var Lf=R((fme,$w)=>{"use strict";var ij=L(),cT=Ye(),oj=Zo(),{getSystemSchemaPath:aj,getSchemaPath:cj}=Je(),lj=_i(),uj=Cf(),_j=Df(),dj=Gw(),{handleHDBError:xw,hdb_errors:Fw}=ie(),qw=Y(),{HTTP_STATUS_CODES:fj}=Fw,lT=lj.hdb_attribute,kw=[];for(let e=0;e<lT.attributes.length;e++)kw.push(lT.attributes[e].attribute);var Ej="inserted";$w.exports=hj;async function hj(e){let t=uj.attribute_object(e);if(t)throw xw(new Error,t.message,Fw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw xw(new Error,r,fj.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qw.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 _j(e.schema,e.table,e.attribute,e.id);try{let i=await cT.openEnvironment(cj(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}`);cT.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await cT.openEnvironment(aj(),ij.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await oj.insertRecords(o,lT.hash_attribute,kw,[s]);return dj(Ej,c,{records:[s]},l)}catch(i){throw i}}a(hj,"lmdbCreateAttribute")});var _T=R((hme,Yw)=>{var{hdb_table:pj,hdb_database:Vw}=Ls(),mj=nt(),uT=require("joi"),Sj={undefined:"undefined",null:"null"},Tj=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||Sj[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"),gj=uT.object({database:Vw,schema:Vw,table:pj,records:uT.array().items(uT.object().custom(Tj)).required()});Yw.exports=function(e){return mj.validateBySchema(e,gj)}});var Su=R((Sme,Ww)=>{"use strict";var di=Y(),Kw=k(),mme=_T(),{getDatabases:Rj}=(Re(),ae(Ve)),{ClientError:ea}=ie();Ww.exports=Aj;function Aj(e){if(di.isEmpty(e))throw new ea("invalid update parameters defined.");if(di.isEmptyOrZeroLength(e.schema))throw new ea("invalid schema specified.");if(di.isEmptyOrZeroLength(e.table))throw new ea("invalid table specified.");if(!Array.isArray(e.records))throw new ea("records must be an array");let t=Rj()[e.schema]?.[e.table];if(di.isEmpty(t))throw new ea(`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&&di.isEmptyOrZeroLength(o[r]))throw Kw.error("a valid hash attribute must be provided with update record:",o),new ea("a valid hash attribute must be provided with update record, check log for more info");if(!di.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Kw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ea(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!di.isEmpty(o[r])&&o[r]!==""&&n.has(di.autoCast(o[r]))&&(o.skip=!0),n.add(di.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(Aj,"insertUpdateValidate")});var jw=R((gme,Qw)=>{"use strict";var dT=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qw.exports=dT});var Xw=R((Ame,Jw)=>{"use strict";var fT=Ye(),Oj=k(),zw=nn().LMDB_ERRORS_ENUM;Jw.exports=bj;async function bj(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 fT.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==zw.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await fT.closeEnvironment(global.lmdb_map[n]),await fT.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==zw.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){Oj.error(t)}}a(bj,"cleanLMDBMap")});var fi=R((bme,rC)=>{"use strict";var Tu=require("crypto"),Nj=J(),{CONFIG_PARAMS:yj}=L(),eC="aes-256-cbc",Ij=32,wj=16,ET=64,tC=32,Cj=ET+tC,Zw=new Map;rC.exports={encrypt:Dj,decrypt:Lj,createNatsTableStreamName:Pj};function Dj(e){let t=Tu.randomBytes(Ij),r=Tu.randomBytes(wj),n=Tu.createCipheriv(eC,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(Dj,"encrypt");function Lj(e){let t=e.substr(0,ET),r=e.substr(ET,tC),n=e.substr(Cj,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Tu.createDecipheriv(eC,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Lj,"decrypt");function Pj(e,t){let r=Nj.get(yj.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zw.get(r);return n||(n=Tu.createHash("md5").update(r).digest("hex"),Zw.set(r,n)),n}a(Pj,"createNatsTableStreamName")});var Ei=R((Ime,sC)=>{"use strict";var yme=ur(),gu=k(),nC=Cf(),Mj=fi(),Pf=Y(),{handleHDBError:Mf,hdb_errors:Uj}=ie(),{HDB_ERROR_MSGS:Uf,HTTP_STATUS_CODES:hT}=Uj,vj=J();vj.initSync();var{getDatabases:pT}=(Re(),ae(Ve)),Bj=require("fs-extra");sC.exports={describeAll:Hj,describeTable:vf,describeSchema:Gj};async function Hj(e={}){try{let t=Pf.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=pT(),o={},c={},l=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await vf({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let m=n[d].tables[f].attribute_permissions;h=await vf({schema:d,table:f,exact_count:_},m)}h&&l.push(h)}catch(h){gu.error(h)}}let u={};for(let d in l)t||s||r?(u[l[d].schema]==null&&(u[l[d].schema]={}),u[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(u[l[d].schema]==null&&(u[l[d].schema]={}),u[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?u[d]={}:c[d]&&(u[d]={});return u}catch(t){return gu.error("Got an error in describeAll"),gu.error(t),Mf(new Error,Uf.DESCRIBE_ALL_ERR)}}a(Hj,"describeAll");async function vf(e,t){Pf.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=nC.describe_table(e);if(i)throw i;let c=pT()[r];if(!c)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),hT.NOT_FOUND);let l=c[n];if(!l)throw Mf(new Error,Uf.TABLE_NOT_FOUND(e.schema,e.table),hT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&_(h)})}else l.attributes?.forEach(f=>_(f));let d;try{d=(await Bj.stat(l.primaryStore.env.path)).size}catch(f){gu.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u,db_size:d};E.clustering_stream_name=Mj.createNatsTableStreamName(E.schema,E.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let m of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=m[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let m of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=m}catch(f){gu.warn(`unable to stat table dbi due to ${f}`)}return E}a(vf,"descTable");async function Gj(e){Pf.transformReq(e);let t=nC.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=pT()[n];if(!i)throw Mf(new Error,Uf.SCHEMA_NOT_FOUND(e.schema),hT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Pf.isEmpty(l)||l.describe){let _=await vf({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(Gj,"describeSchema")});var Bn=R((Lme,lC)=>{var xj=_i(),{callbackify:oC,promisify:qj}=require("util"),{getDatabases:aC}=(Re(),ae(Ve));lC.exports={setSchemaDataToGlobal:iC,getTableSchema:Fj,getSystemSchema:kj,setSchemaDataToGlobalAsync:qj(iC)};var cC=Ei(),Cme=oC(cC.describeAll),Dme=oC(cC.describeTable);function iC(e){global.hdb_schema=aC(),e&&e()}a(iC,"setSchemaDataToGlobal");function Fj(e,t,r){let n=aC()[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(Fj,"getTableSchema");function kj(){return xj}a(kj,"getSystemSchema")});var Cr=R((Mme,fC)=>{"use strict";var Hf=_T(),tr=Y(),$j=require("util"),Gf=Hn(),Vj=Bn(),uC=k(),{handleHDBError:ta,hdb_errors:Yj}=ie(),{HTTP_STATUS_CODES:ra}=Yj,Kj=$j.promisify(Vj.getTableSchema),Wj="updated",_C="inserted",dC="upserted";fC.exports={insert:jj,update:zj,upsert:Jj,validation:Qj,flush:Xj};async function Qj(e){if(tr.isEmpty(e))throw new Error("invalid update parameters defined.");if(tr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(tr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Kj(e.schema,e.table),r=Hf(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&&tr.isEmptyOrZeroLength(c[n]))throw uC.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(!tr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw uC.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!tr.isEmpty(c[n])&&c[n]!==""&&s.has(tr.autoCast(c[n]))&&(c.skip=!0),s.add(tr.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(Qj,"validation");async function jj(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.createRecords(e);return Bf(_C,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(jj,"insertData");async function zj(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.updateRecords(e);return tr.isEmpty(n.existing_rows)?Bf(Wj,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Bf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(zj,"updateData");async function Jj(e){if(e.operation!=="upsert")throw ta(new Error,"invalid operation, must be upsert",ra.INTERNAL_SERVER_ERROR);let t=Hf(e);if(t)throw ta(new Error,t.message,ra.BAD_REQUEST);tr.transformReq(e);let r=tr.checkSchemaTableExist(e.schema,e.table);if(r)throw ta(new Error,r,ra.BAD_REQUEST);let n=await Gf.upsertRecords(e);return Bf(dC,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(Jj,"upsertData");function Bf(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===_C?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dC?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Bf,"returnObject");function Xj(e){return tr.transformReq(e),Gf.flush(e.schema,e.table)}a(Xj,"flush")});var ST=R((vme,pC)=>{var Zj=nt(),mT=require("joi"),{hdb_table:ez,hdb_database:EC}=Ls(),hC={schema:EC,database:EC,table:ez},tz={date:mT.date().iso().required()},rz={timestamp:mT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};pC.exports=function(e,t){let r=t==="timestamp"?{...hC,...rz}:{...hC,...tz},n=mT.object(r);return Zj.validateBySchema(e,n)}});var TC=R((Bme,SC)=>{var nz=nt(),TT=require("joi"),{hdb_table:sz,hdb_database:mC}=Ls(),iz=TT.object({schema:mC,database:mC,table:sz,hash_values:TT.array().required(),ids:TT.array()});SC.exports=function(e){return nz.validateBySchema(e,iz)}});var OT=R((Hme,gC)=>{"use strict";var gT=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}},RT=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}},AT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gC.exports={InsertObject:gT,NoSQLSeachObject:RT,DeleteResponseObject:AT}});var ia=R((xme,NC)=>{"use strict";var AC=ST(),oz=TC(),na=Y(),RC=require("moment"),OC=k(),{promisify:az,callbackify:cz}=require("util"),sa=L(),lz=Bn(),bT=az(lz.getTableSchema),NT=Hn(),{DeleteResponseObject:uz}=OT(),{handleHDBError:oo,hdb_errors:_z}=ie(),{HDB_ERROR_MSGS:xf,HTTP_STATUS_CODES:ao}=_z,dz="records successfully deleted",fz=cz(bC);NC.exports={delete:fz,deleteRecord:bC,deleteFilesBefore:Ez,deleteAuditLogsBefore:hz};async function Ez(e){let t=AC(e,"date");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),!RC(e.date,RC.ISO_8601).isValid())throw oo(new Error,xf.INVALID_DATE,ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,xf.INVALID_DATE,!0);let n=na.checkSchemaTableExist(e.schema,e.table);if(n)throw oo(new Error,n,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,n,!0);let s=await NT.deleteRecordsBefore(e);if(await bT(e.schema,e.table),OC.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(Ez,"deleteFilesBefore");async function hz(e){let t=AC(e,"timestamp");if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);if(na.transformReq(e),isNaN(e.timestamp))throw oo(new Error,xf.INVALID_VALUE("Timestamp"),ao.BAD_REQUEST,sa.LOG_LEVELS.ERROR,xf.INVALID_VALUE("Timestamp"),!0);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);let n=await NT.deleteAuditLogsBefore(e);return await bT(e.schema,e.table),OC.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(hz,"deleteAuditLogsBefore");async function bC(e){e.ids&&(e.hash_values=e.ids);let t=oz(e);if(t)throw oo(t,t.message,ao.BAD_REQUEST,void 0,void 0,!0);na.transformReq(e);let r=na.checkSchemaTableExist(e.schema,e.table);if(r)throw oo(new Error,r,ao.NOT_FOUND,sa.LOG_LEVELS.ERROR,r,!0);try{await bT(e.schema,e.table);let n=await NT.deleteRecords(e);return na.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${dz}`),n}catch(n){if(n.message===sa.SEARCH_NOT_FOUND_MESSAGE){let s=new uz;return s.message=sa.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(bC,"deleteRecord")});var qf=R((Fme,wC)=>{var pz=require("crypto"),yC=9;function mz(e){let t=Tz(yC),r=IC(e+t);return t+r}a(mz,"createHash");function Sz(e,t){let r=e?.substr(0,yC),n=r+IC(t+r);return e===n}a(Sz,"validateHash");function Tz(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(Tz,"generateSalt");function IC(e){return pz.createHash("md5").update(e).digest("hex")}a(IC,"md5");wC.exports={hash:mz,validate:Sz}});var DC=R(($me,CC)=>{var yT=nt(),_r={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function gz(e){return _r.password.presence=!0,_r.username.presence=!0,_r.role.presence=!0,_r.active.presence=!0,yT.validateObject(e,_r)}a(gz,"addUserValidation");function Rz(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,yT.validateObject(e,_r)}a(Rz,"alterUserValidation");function Az(e){return _r.password.presence=!1,_r.username.presence=!0,_r.role.presence=!1,_r.active.presence=!1,yT.validateObject(e,_r)}a(Az,"dropUserValidation");CC.exports={addUserValidation:gz,alterUserValidation:Rz,dropUserValidation:Az}});var Ze=R((Kme,PC)=>{"use strict";var{platform:Yme}=require("os"),Oz="nats-server.zip",IT="nats-server",bz=process.platform==="win32"?`${IT}.exe`:IT,Nz=/^[^\s.,*>]+$/,LC="__request__",yz=a(e=>`${e}.${LC}`,"REQUEST_SUBJECT"),Iz={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},wz={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Cz={HUB:"hub.pid",LEAF:"leaf.pid"},Dz={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Lz={SUCCESS:"success",ERROR:"error"},Pz={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Mz={TXN:"txn",MSGID:"msgid"},fc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Uz={[fc.ERR]:1,[fc.WRN]:2,[fc.INF]:3,[fc.DBG]:4,[fc.TRC]:5},vz={debug:"-D",trace:"-DVV"};PC.exports={NATS_SERVER_ZIP:Oz,NATS_SERVER_NAME:IT,NATS_BINARY_NAME:bz,PID_FILES:Cz,NATS_CONFIG_FILES:wz,SERVER_SUFFIX:Dz,NATS_TERM_CONSTRAINTS_RX:Nz,REQUEST_SUFFIX:LC,UPDATE_REMOTE_RESPONSE_STATUSES:Lz,CLUSTER_STATUS_STATUSES:Pz,REQUEST_SUBJECT:yz,SUBJECT_PREFIXES:Mz,MSG_HEADERS:Iz,LOG_LEVELS:fc,LOG_LEVEL_FLAGS:vz,LOG_LEVEL_HIERARCHY:Uz}});var wT=R((Qme,MC)=>{"use strict";var Bz={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
8
8
  `),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
9
- `)},Hz="certificate.pem",Gz="privateKey.pem",xz="ca.pem";MC.exports={CERTIFICATE_VALUES:Bz,CERTIFICATE_PEM_NAME:Hz,PRIVATEKEY_PEM_NAME:Gz,CA_PEM_NAME:xz}});var CT=R((zme,xC)=>{"use strict";var HC=require("fs-extra"),le=require("joi"),qz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:UC}=require("os"),oa=require("path"),Fz=k(),kf=Y(),jme=wT(),vC=L(),kz=nt(),BC="log",Vz="components",$z="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Yz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Kz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Wz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Qz="rootPath config parameter is undefined",jz="clustering.enabled config parameter is undefined",aa=st.min(0).required(),Vf=Ff.items({host:dr.required(),port:aa}).empty(null),Ms,GC=!1;xC.exports={configValidator:zz,routesValidator:rJ,route_constraints:Vf};function zz(e,t=!1){if(GC=t,Ms=e.rootPath,kf.isEmpty(Ms))throw Qz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(tJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ru),i=dr.optional().empty(null),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=le.string().empty(null).default(Ru),l=le.custom(Xz).empty(null).default(Ru),_=e.clustering?.enabled;if(kf.isEmpty(_))throw jz;let u=le.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=le.object({enabled:r,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:aa,routes:Vf}).required()}).required(),leafNodes:le.object({network:le.object({port:aa}).required()}).required(),network:le.object({port:aa}).required()}).required(),leafServer:le.object({network:le.object({port:aa,routes:Vf}).required(),streams:le.object({maxAge:st.min(120).allow(null).optional(),maxBytes:st.min(1).allow(null).optional(),maxMsgs:st.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:dr.optional().empty(null)}).required():d=le.object({enabled:r,tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),le.object({authentication:le.object({authorizeLocal:ye,cacheTTL:st.required(),enableSessions:ye}),analytics:le.object({aggregatePeriod:st}),componentsRoot:s.optional(),clustering:d,localStudio:le.object({enabled:r}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:ye.optional(),compress:ye.optional(),interval:dr.custom(eJ).optional().empty(null),maxSize:dr.custom(Zz).optional().empty(null),path:dr.optional().empty(null).default(Ru)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:le.object({network:le.object({cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),keepAliveTimeout:st.min(1).optional(),port:st.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Ru),securePort:st.optional().empty(null),timeout:st.min(1).optional()}).optional(),tls:le.alternatives([le.array().items(u),u])}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:aa,securePort:aa,mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:le.object({compressionThreshold:st.optional(),cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),port:st.min(0).optional().empty(null),securePort:st.min(0).optional().empty(null),maxHeaderSize:st.optional(),mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:le.alternatives([Ff.optional(),dr.optional()])}).required(),threads:le.alternatives(n.optional(),le.object({count:n.optional(),debug:le.alternatives(ye.optional(),le.object({startingPort:st.min(1).optional(),host:dr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:st.min(0).optional()})),storage:le.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:le.alternatives([ye.optional(),le.object({dictionary:dr.optional(),threshold:st.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:st.optional(),maxFreeSpaceToRetain:st.optional()}).required(),ignoreScripts:ye.optional(),tls:le.alternatives([le.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(zz,"configValidator");function Jz(e){return GC||HC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Jz,"doesPathExist");function Xz(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Jz(e);if(r)return t.message(r)}a(Xz,"validatePath");function Zz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message($z);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Kz):e}a(Zz,"validateRotationMaxSize");function eJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Wz):e}a(eJ,"validateRotationInterval");function tJ(e,t){let r=t.state.path.join("."),n=qz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||UC();return i=Math.round(Math.min(i,UC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Fz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(tJ,"setDefaultThreads");function Ru(e,t){let r=t.state.path.join(".");if(!kf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(kf.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return oa.join(Ms,Vz);case"logging.root":return oa.join(Ms,BC);case"clustering.leafServer.streams.path":return oa.join(Ms,"clustering","leaf");case"storage.path":let n=oa.join(Ms,vC.LEGACY_DATABASES_DIR_NAME);return HC.existsSync(n)?n:oa.join(Ms,vC.DATABASES_DIR_NAME);case"logging.rotation.path":return oa.join(Ms,BC);case"operationsApi.network.domainSocket":return r==null?null:oa.join(Ms,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ru,"setDefaultRoot");function rJ(e){let t=le.object({routes:Vf});return kz.validateBySchema({routes:e},t)}a(rJ,"routesValidator")});var Et=R((Zme,QC)=>{"use strict";var cn=L(),Kt=Y(),Bt=k(),{configValidator:nJ,routesValidator:qC}=CT(),Dr=require("fs-extra"),sJ=require("yaml"),ss=require("path"),iJ=require("is-number"),kC=require("properties-reader"),oJ=require("lodash"),{handleHDBError:aJ}=ie(),{HTTP_STATUS_CODES:cJ,HDB_ERROR_MSGS:$f}=rn(),Xme=require("minimist"),{server:lJ}=(yr(),ae(jo)),{DATABASES_PARAM_CONFIG:Au,CONFIG_PARAMS:an,CONFIG_PARAM_MAP:is}=cn,uJ="Unable to get config value because config is uninitialized",_J="Config successfully initialized",dJ="Error backing up config file",fJ="Empty parameter sent to getConfigValue",VC=ss.join(cn.PACKAGE_ROOT,"config","yaml",cn.HDB_DEFAULT_CONFIG_FILE),EJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",FC={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"},Yf,Ht,Kf;QC.exports={createConfigFile:hJ,getDefaultConfig:pJ,getConfigValue:YC,initConfig:LT,flattenConfig:Ec,updateConfigValue:KC,updateConfigObject:SJ,getConfiguration:RJ,setConfiguration:AJ,readConfigFile:MT,getClusteringRoutes:OJ,initOldConfig:WC,getConfigFromFile:bJ,getConfigFilePath:ca,addConfig:NJ,deleteConfigFromFile:yJ,getConfigObj:IJ};function hJ(e,t=!1){let r=co(VC);Yf=Ec(r.toJSON());let n;for(let c in e){let l=is[c.toLowerCase()];if(l===an.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=DT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&$C(r,n),PT(r,t);let s=r.toJSON();Ht=Ec(s);let i=r.getIn(["rootPath"]),o=ss.join(i,cn.HDB_CONFIG_FILE);Dr.createFileSync(o),Dr.writeFileSync(o,String(r)),Bt.trace(`Config file written to ${o}`)}a(hJ,"createConfigFile");function $C(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Kt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Au.TABLES))for(let i in n[s][Au.TABLES])for(let o in n[s][Au.TABLES][i]){let c=n[s][Au.TABLES][i][o],l=[an.DATABASES,s,Au.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=[an.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Bt.error("Error parsing schemas CLI/env config arguments",n)}}a($C,"setSchemasConfig");function pJ(e){if(Yf===void 0){let r=co(VC);Yf=Ec(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(pJ,"getDefaultConfig");function YC(e){if(e==null){Bt.error(fJ);return}if(Ht===void 0){Bt.trace(uJ);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(YC,"getConfigValue");function ca(e=Kt.getPropsFilePath()){let t=Kt.getEnvCliRootPath();return t?ss.join(t,cn.HDB_CONFIG_FILE):kC(e).get(cn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ca,"getConfigFilePath");function LT(e=!1){if(Ht===void 0||e){let t;if(!Kt.noBootFile()){t=Kt.getPropsFilePath();try{Dr.accessSync(t,Dr.constants.F_OK|Dr.constants.R_OK)}catch(i){throw Bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ca(t),n;if(r.includes("config/settings.js"))try{WC(r);return}catch(i){if(i.code!==cn.NODE_ERROR_CODES.ENOENT)throw i}try{n=co(r)}catch(i){if(i.code===cn.NODE_ERROR_CODES.ENOENT){Bt.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 Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}mJ(n,r),PT(n);let s=n.toJSON();if(lJ.config=s,Ht=Ec(s),Ht.logging_rotation_rotate)for(let i in FC)Ht[i]&&Bt.error(`Config ${FC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(_J)}}a(LT,"initConfig");function mJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),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&&(Bt.trace("Updating config file with missing config params"),Dr.writeFileSync(t,String(e)))}a(mJ,"checkForUpdatedConfig");function PT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=nJ(r,t);if(n.error)throw $f.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(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(PT,"validateConfig");function SJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(SJ,"updateConfigObject");function KC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&LT();let o=YC(is.hdb_root),c=ss.join(o,cn.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===an.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=DT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===an.HTTP_SECUREPORT&&r[E]===Ht[an.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===an.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[an.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===an.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),m=cn.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=DT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&$C(l,_),PT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,cn.HDB_CONFIG_FILE);n===!0&&TJ(c,u),Dr.writeFileSync(d,String(l)),s&&(Ht=Ec(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KC,"updateConfigValue");function TJ(e,t){try{let r=ss.join(t,"backup",`${cn.HDB_CONFIG_FILE}.bak`);Dr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(dJ),Bt.error(r)}}a(TJ,"backupConfigFile");var gJ=["databases"];function Ec(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Kf=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])&&!gJ.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;!an[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ec,"flattenConfig");function DT(e,t){if(e===an.CLUSTERING_NODENAME||e===an.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(iJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Kt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Kt.autoCast(t)}a(DT,"castConfigValue");function RJ(){let e=Kt.getPropsFilePath(),t=ca(e);return co(t).toJSON()}a(RJ,"getConfiguration");async function AJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KC(void 0,void 0,s,!0),EJ}catch(i){throw typeof i=="string"||i instanceof String?aJ(i,i,cJ.BAD_REQUEST,void 0,void 0,!0):i}}a(AJ,"setConfiguration");function MT(){let e=Kt.getPropsFilePath();try{Dr.accessSync(e,Dr.constants.F_OK|Dr.constants.R_OK)}catch(n){if(!Kt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ca(e);return co(t).toJSON()}a(MT,"readConfigFile");function co(e){return sJ.parseDocument(Dr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function OJ(){let e=MT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Kt.isEmptyOrZeroLength(t)?[]:t;let r=qC(t);if(r)throw $f.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Kt.isEmptyOrZeroLength(n)?[]:n;let s=qC(n);if(s)throw $f.CONFIG_VALIDATION(s.message);if(!Kt.isEmptyOrZeroLength(n)&&!Kt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Kt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw $f.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(OJ,"getClusteringRoutes");function WC(e){let t=kC(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===an.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(WC,"initOldConfig");function bJ(e){let t=MT();return oJ.get(t,e.replaceAll("_","."))}a(bJ,"getConfigFromFile");async function NJ(e,t){let r=co(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Dr.writeFile(ca(),String(r))}a(NJ,"addConfig");function yJ(e){let t=ca(Kt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,cn.HDB_CONFIG_FILE);Dr.writeFileSync(s,String(r))}a(yJ,"deleteConfigFromFile");function IJ(){return Kf||(LT(),Kf)}a(IJ,"getConfigObj")});var zC=R((tSe,jC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},UT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jC.exports={BaseLicense:Qf,ExtendedLicense:UT}});var la=R((nSe,rD)=>{"use strict";var pc=require("fs-extra"),XC=qf(),ZC=require("crypto"),wJ=require("moment"),CJ=require("uuid").v4,fr=k(),BT=require("path"),DJ=Y(),lo=L(),{totalmem:JC}=require("os"),LJ=zC().ExtendedLicense,hc="invalid license key format",PJ="061183",MJ="mofi25",UJ="aes-256-cbc",vJ=16,BJ=32,eD=X();eD.initSync();var vT;rD.exports={validateLicense:tD,generateFingerPrint:GJ,licenseSearch:xT,getLicense:FJ,checkMemoryLimit:kJ};function HT(){return BT.join(eD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(HT,"getLicenseDirPath");function HJ(){let e=HT();return BT.join(e,lo.LICENSE_FILE_NAME)}a(HJ,"getLicenseFilePath");function GT(){let e=HT();return BT.join(e,lo.REG_KEY_FILE_NAME)}a(GT,"getFingerPrintFilePath");async function GJ(){let e=GT();try{return await pc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await xJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(GJ,"generateFingerPrint");async function xJ(){let e=CJ(),t=XC.hash(e),r=GT();try{await pc.mkdirp(HT()),await pc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(xJ,"writeFingerprint");function tD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=GT(),s=!1;try{s=pc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=pc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(MJ),c=o[1];c=Buffer.concat([Buffer.from(c)],vJ);let l=Buffer.concat([Buffer.from(i)],BJ),_=ZC.createDecipheriv(UJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=qJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(hc),fr.error(hc),new Error(hc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(hc),fr.error(hc),new Error(hc)}else r.exp_date=u;r.exp_date<wJ().valueOf()&&(r.valid_date=!1),XC.validate(o[1],`${PJ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||fr.error("Invalid licence"),r}a(tD,"validateLicense");function qJ(e,t){try{let r=ZC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(qJ,"checkOldLicense");function xT(){let e=new LJ,t=[];try{t=pc.readFileSync(HJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(DJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=tD(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){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return vT=e,e}a(xT,"licenseSearch");async function FJ(){return vT||await xT(),vT}a(FJ,"getLicense");function kJ(){let e=xT().ram_allocation,t=process.constrainedMemory?.()||JC();if(t=Math.round(Math.min(t,JC())/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(kJ,"checkMemoryLimit")});var Lr=R((cSe,SD)=>{"use strict";var oD="username is required",aD="nothing to update, must supply active, role or password to update",cD="password cannot be an empty string",lD="If role is specified, it cannot be empty.",uD="active must be true or false";SD.exports={addUser:JJ,alterUser:XJ,dropUser:e2,getSuperUser:s2,userInfo:t2,listUsers:zf,listUsersExternal:r2,setUsersToGlobal:Sc,findAndValidateUser:pD,getClusterUser:i2,USERNAME_REQUIRED:oD,ALTERUSER_NOTHING_TO_UPDATE:aD,EMPTY_PASSWORD:cD,EMPTY_ROLE:lD,ACTIVE_BOOLEAN:uD};var _D=Cr(),VJ=ia(),kT=qf(),dD=DC(),fD=ur(),VT=hi(),ln=Y(),ED=require("validate.js"),Ne=k(),{promisify:$J}=require("util"),$T=fi(),nD=L(),sD=Ze(),YJ=Et(),iSe=X(),oSe=la(),KJ=_i(),{table:aSe}=(Re(),ae($e)),{handleHDBError:Us,hdb_errors:WJ}=ie(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:qT,HDB_ERROR_MSGS:mc}=WJ,{UserEventMsg:YT}=os(),FT=require("lodash"),{server:KT}=(yr(),ae(jo)),QJ=k();KT.getUser=(e,t)=>pD(e,t,t!=null);var hD={username:!0,active:!0,role:!0,password:!0},iD=new Map,jf=fD.searchByValue,jJ=fD.searchByHash,zJ=$J(VJ.delete);async function JJ(e){let t=ED.cleanAttributes(e,hD),r=dD.addUserValidation(t);if(r)throw Us(new Error,r.message,vs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw Us(new Error,mc.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Us(new Error,mc.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=$T.encrypt(t.password)),t.password=kT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _D.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Sc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw Us(new Error,mc.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],VT.signalUserChange(new YT(process.pid)),`${c.username} successfully added`}a(JJ,"addUser");async function XJ(e){let t=ED.cleanAttributes(e,hD);if(ln.isEmptyOrZeroLength(t.username))throw new Error(oD);if(ln.isEmptyOrZeroLength(t.password)&&ln.isEmptyOrZeroLength(t.role)&&ln.isEmptyOrZeroLength(t.active))throw new Error(aD);if(!ln.isEmpty(t.password)&&ln.isEmptyOrZeroLength(t.password.trim()))throw new Error(cD);if(!ln.isEmpty(t.active)&&!ln.isBoolean(t.active))throw new Error(uD);let r=ZJ(t.username);if(!ln.isEmpty(t.password)&&!ln.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=$T.encrypt(t.password)),t.password=kT.hash(t.password)),t.role==="")throw new Error(lD);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=mc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),Us(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),Us(new Error,c,vs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await _D.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Sc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return VT.signalUserChange(new YT(process.pid)),s}a(XJ,"alterUser");function ZJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZJ,"isClusterUser");async function e2(e){try{let t=dD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ln.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,mc.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await zJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Sc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return VT.signalUserChange(new YT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(e2,"dropUser");async function t2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=FT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await jJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(t2,"userInfo");async function r2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(r2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=FT.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=FT.cloneDeep(o),o.role=r[o.role],n2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),ln.errorizeMessage(e)}return null}a(zf,"listUsers");function n2(e){try{if(!e){Ne.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(KJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(n2,"appendSystemTablesToRole");async function Sc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Sc,"setUsersToGlobal");async function pD(e,t,r=!0){global.hdb_users||await Sc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Us(new Error,qT.USER_INACTIVE,vs.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(iD.get(t)===n.password)return s;if(kT.validate(n.password,t))iD.set(t,n.password);else throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(pD,"findAndValidateUser");async function s2(){global.hdb_users||await Sc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(s2,"getSuperUser");async function i2(){let e=await zf(),t=YJ.getConfigFromFile(nD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ln.isEmpty(r)&&r?.role?.role===nD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=$T.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sD.SERVER_SUFFIX.ADMIN,r}a(i2,"getClusterUser");var mD=[];KT.invalidateUser=function(e){for(let t of mD)try{t(e)}catch(r){QJ.error("Error invalidating user",r)}};KT.onInvalidatedUser=function(e){mD.push(e)}});var bu=R((dSe,AD)=>{"use strict";var ua=k(),un=L(),o2=Xw(),uSe=Bn(),_Se=Ei(),a2=Lr(),{validateEvent:TD}=os(),Ou=Hn(),c2=require("process"),{resetDatabases:l2}=(Re(),ae($e)),u2={[un.ITC_EVENT_TYPES.SCHEMA]:_2,[un.ITC_EVENT_TYPES.USER]:RD};async function _2(e){let t=TD(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await o2(e.message),await d2(e.message)}a(_2,"schemaHandler");async function d2(e){try{Ou.resetReadTxn(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ou.resetReadTxn(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ou.resetReadTxn(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=l2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(d2,"syncSchemaMetadata");var gD=[];async function RD(e){try{try{Ou.resetReadTxn(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ou.resetReadTxn(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=TD(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${un.HDB_ITC_CLIENT_PREFIX}${c2.pid} received user event:`,e),await a2.setUsersToGlobal();for(let r of gD)r()}catch(t){ua.error(t)}}a(RD,"userHandler");RD.addListener=function(e){gD.push(e)};AD.exports=u2});var os=R((SSe,bD)=>{"use strict";var ESe=k(),WT=Y(),f2=L(),{ITC_ERRORS:Nu}=rn(),{parentPort:hSe,threadId:E2,isMainThread:h2,workerData:pSe}=require("worker_threads"),{onMessageFromWorkers:p2,broadcast:mSe,broadcastWithAcknowledgement:m2}=rt();bD.exports={sendItcEvent:S2,validateEvent:OD,SchemaEventMsg:T2,UserEventMsg:g2};var Jf;p2(async(e,t)=>{Jf=Jf||bu(),OD(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S2(e){return!h2&&e.message&&(e.message.originator=E2),m2(e)}a(S2,"sendItcEvent");function OD(e){if(typeof e!="object")return Nu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||WT.isEmpty(e.type))return Nu.MISSING_TYPE;if(!e.hasOwnProperty("message")||WT.isEmpty(e.message))return Nu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||WT.isEmpty(e.message.originator))return Nu.MISSING_ORIGIN;if(f2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nu.INVALID_EVENT(e.type)}a(OD,"validateEvent");function T2(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(T2,"SchemaEventMsg");function g2(e){this.originator=e}a(g2,"UserEventMsg")});var hi=R((RSe,wD)=>{"use strict";var ND=L(),gSe=Y(),Xf=k(),yD=jw(),Tc,{sendItcEvent:ID}=os();function R2(e){try{Xf.trace("signalSchemaChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.SCHEMA,e);return Tc.schema(t),ID(t)}catch(t){Xf.error(t)}}a(R2,"signalSchemaChange");function A2(e){try{Xf.trace("signalUserChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.USER,e);return Tc.user(t),ID(t)}catch(t){Xf.error(t)}}a(A2,"signalUserChange");wD.exports={signalSchemaChange:R2,signalUserChange:A2}});var Zf=R((OSe,DD)=>{"use strict";var CD=Y(),O2=L(),b2=k(),N2=Lf(),y2=Df(),I2=hi(),{SchemaEventMsg:w2}=os(),C2="already exists in";DD.exports=D2;async function D2(e,t,r){if(CD.isEmptyOrZeroLength(r))return r;let n=[];CD.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 L2(e,t.schema,t.name,i)})),s}a(D2,"lmdbCheckForNewAttributes");async function L2(e,t,r,n){let s=new y2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await P2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(C2))b2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(L2,"createNewAttribute");async function P2(e){let t;return t=await N2(e),I2.signalSchemaChange(new w2(process.pid,O2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(P2,"createAttribute")});var gc=R((NSe,LD)=>{"use strict";var QT=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}};LD.exports=QT});var MD=R((ISe,PD)=>{"use strict";var M2=gc(),U2=L().OPERATIONS_ENUM,jT=class extends M2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(U2.INSERT,r,n,s,i),this.records=t}};PD.exports=jT});var vD=R((CSe,UD)=>{"use strict";var v2=gc(),B2=L().OPERATIONS_ENUM,zT=class extends v2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(B2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};UD.exports=zT});var HD=R((LSe,BD)=>{"use strict";var H2=gc(),G2=L().OPERATIONS_ENUM,JT=class extends H2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(G2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};BD.exports=JT});var xD=R((MSe,GD)=>{"use strict";var x2=gc(),q2=L().OPERATIONS_ENUM,XT=class extends x2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(q2.DELETE,n,s,t,i),this.original_records=r}};GD.exports=XT});var yu=R((BSe,VD)=>{"use strict";var vSe=require("path"),qD=Ye(),F2=MD(),k2=vD(),V2=HD(),$2=xD(),Rc=_t(),FD=Y(),{CONFIG_PARAMS:Y2}=L(),kD=X();kD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:K2}=Je();VD.exports=W2;async function W2(e,t){if(kD.get(Y2.LOGGING_AUDITLOG)===!1)return;let r=K2(e.schema,e.table),n=await qD.openEnvironment(r,e.table,!0),s=Q2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){qD.initializeDBIs(n,Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FD.isEmpty(s.user_name)||n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(W2,"writeTransaction");function Q2(e,t){let r=FD.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new F2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new k2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new V2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new $2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Q2,"createTransactionObject")});var ZT=R((xSe,$D)=>{"use strict";var j2=Su(),GSe=tu(),Iu=L(),z2=ru(),J2=Zo().insertRecords,X2=Ye(),Z2=k(),e4=Zf(),{getSchemaPath:t4}=Je(),r4=yu();$D.exports=n4;async function n4(e){try{let{schema_table:t,attributes:r}=j2(e);z2(e,r,t.hash_attribute),e.schema!==Iu.SYSTEM_SCHEMA_NAME&&(r.includes(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await e4(e.hdb_auth_header,t,r),s=t4(e.schema,e.table),i=await X2.openEnvironment(s,e.table),o=await J2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await r4(e,o)}catch(c){Z2.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(n4,"lmdbCreateRecords")});var WD=R((FSe,KD)=>{"use strict";var YD=L(),s4=ZT(),i4=tu(),o4=require("fs-extra"),{getSchemaPath:a4}=Je();KD.exports=c4;async function c4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new i4(YD.SYSTEM_SCHEMA_NAME,YD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await s4(r),await o4.mkdirp(a4(e.schema))}a(c4,"lmdbCreateSchema")});var jD=R((VSe,QD)=>{"use strict";var eg=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}};QD.exports=eg});var ZD=R((QSe,XD)=>{"use strict";var zD=Ye(),tg=Nr(),rg=rn().LMDB_ERRORS_ENUM,l4=_t(),JD=k(),YSe=Y(),u4=require("lmdb"),_4=jD(),d4=L(),{OVERFLOW_MARKER:KSe,MAX_SEARCH_KEY_LENGTH:WSe}=l4,f4=d4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E4(e,t,r,n){if(tg.validateEnv(e),t===void 0)throw new Error(rg.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rg.IDS_REQUIRED):new Error(rg.IDS_MUST_BE_ITERABLE);try{let s=zD.listDBIs(e);zD.initializeDBIs(e,t,s);let i=new _4,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[f4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,u4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],b=h[g];if(b!=null)try{let N=tg.getIndexedValues(b);if(N)for(let U=0,v=N.length;U<v;U++)T.remove(N[U],o)}catch{JD.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){JD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=tg.getNextMonotonicTime(),i}catch(s){throw s}}a(E4,"deleteRecords");XD.exports={deleteRecords:E4}});var wu=R((zSe,tL)=>{"use strict";var Ac=Y(),h4=ZD(),p4=Ye(),{getSchemaPath:m4}=Je(),S4=yu(),T4=k();tL.exports=g4;async function g4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ac.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ac.isEmptyOrZeroLength(e.hash_values)&&!Ac.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ac.isEmpty(l)||e.hash_values.push(l)}}if(Ac.isEmptyOrZeroLength(e.hash_values))return eL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ac.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=m4(e.schema,e.table),i=await p4.openEnvironment(s,e.table),o=await h4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await S4(e,o)}catch(c){T4.error(`unable to write transaction due to ${c.message}`)}return eL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(g4,"lmdbDeleteRecords");function eL(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(eL,"createDeleteResponse")});var sg=R((ZSe,rL)=>{"use strict";var R4=L(),XSe=Nr();function ng(e,t){let r=Object.create(null);if(t.length===1&&R4.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(ng,"parseRow");function A4(e,t,r,n){let s=ng(r,e);n.push(s)}a(A4,"searchAll");function O4(e,t,r,n){let s=ng(r,e);n[t]=s}a(O4,"searchAllToMap");function b4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(b4,"iterateDBI");function _a(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(_a,"pushResults");function N4(e,t,r,n,s,i){t.toString().endsWith(e)&&_a(t,r,n,s,i)}a(N4,"endsWith");function y4(e,t,r,n,s,i){t.toString().includes(e)&&_a(t,r,n,s,i)}a(y4,"contains");function I4(e,t,r,n,s,i){t>e&&_a(t,r,n,s,i)}a(I4,"greaterThanCompare");function w4(e,t,r,n,s,i){t>=e&&_a(t,r,n,s,i)}a(w4,"greaterThanEqualCompare");function C4(e,t,r,n,s,i){t<e&&_a(t,r,n,s,i)}a(C4,"lessThanCompare");function D4(e,t,r,n,s,i){t<=e&&_a(t,r,n,s,i)}a(D4,"lessThanEqualCompare");rL.exports={parseRow:ng,searchAll:A4,searchAllToMap:O4,iterateDBI:b4,endsWith:N4,contains:y4,greaterThanCompare:I4,greaterThanEqualCompare:w4,lessThanCompare:C4,lessThanEqualCompare:D4,pushResults:_a}});var Oc=R((sTe,lL)=>{"use strict";var uo=Ye(),tTe=k(),_n=Nr(),tE=_t(),Tt=rn().LMDB_ERRORS_ENUM,rTe=Y(),L4=L(),rE=sg(),{parseRow:P4}=rE,nTe=require("lmdb"),{OVERFLOW_MARKER:nL,MAX_SEARCH_KEY_LENGTH:M4}=tE;function sL(e,t,r,n=!1,s=void 0,i=void 0){return da(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(sL,"iterateFullIndex");function Cu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return da(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(b=>({value:b}))):d.getRange(T)})}a(Cu,"iterateRangeBetween");function da(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.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(da,"setupTransaction");function iL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(nL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(iL,"getOverflowCheck");function U4(e,t,r,n=!1,s=void 0,i=void 0){if(_n.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return da(e,t,t,(o,c,l)=>(nE(r),r=Du(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>P4(_.value,r))))}a(U4,"searchAll");function v4(e,t,r,n=!1,s=void 0,i=void 0){if(_n.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Du(e.database||e,r);let o=new Map;for(let{key:c,value:l}of sL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(v4,"searchAllToMap");function B4(e,t,r=!1,n=void 0,s=void 0){if(_n.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sL(e,void 0,t,r,n,s),c=o.transaction,l=iL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(B4,"iterateDBI");function H4(e,t){if(_n.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(H4,"countAll");function G4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,t,r,(c,l,_,u)=>(n=_n.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(G4,"equals");function x4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(x4,"count");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,null,r,(c,l)=>{n=_n.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(q4,"startsWith");function F4(e,t,r,n,s=!1,i=void 0,o=void 0){return oL(e,t,r,n,s,i,o,!0)}a(F4,"endsWith");function oL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),da(e,null,r,(l,_,u,d)=>{let E=iL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(nL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(oL,"contains");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!0,!1)}a(k4,"greaterThan");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!1,!1)}a(V4,"greaterThanEqual");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!0)}a($4,"lessThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!1)}a(Y4,"lessThanEqual");function K4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(_n.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=_n.convertKeyValueToWrite(n),s=_n.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Cu(e,t,r,n,s,i,o,c)}a(K4,"between");function W4(e,t,r,n){_n.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Du(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(W4,"searchByHash");function Q4(e,t,r){_n.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Q4,"checkHashExists");function j4(e,t,r,n,s=[]){return cL(e,t,r,n,s),aL(e,t,r,n,s).map(i=>i[1])}a(j4,"batchSearchByHash");function z4(e,t,r,n,s=[]){cL(e,t,r,n,s);let i=new Map;for(let[o,c]of aL(e,t,r,n,s))i.set(o,c);return i}a(z4,"batchSearchByHashToMap");function aL(e,t,r,n,s=[]){return da(e,t,t,(i,o,c)=>{r=Du(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(aL,"batchHashSearch");function cL(e,t,r,n,s){if(_n.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(cL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(_n.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>M4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Du(e,t){return t.length===1&&L4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Du,"setGetWholeRowAttributes");lL.exports={searchAll:U4,searchAllToMap:v4,count:x4,countAll:H4,equals:G4,startsWith:q4,endsWith:F4,contains:oL,searchByHash:W4,setGetWholeRowAttributes:Du,batchSearchByHash:j4,batchSearchByHashToMap:z4,checkHashExists:Q4,iterateDBI:B4,greaterThan:k4,greaterThanEqual:V4,lessThan:$4,lessThanEqual:Y4,between:K4}});var bc=R((oTe,EL)=>{var uL=require("lodash"),_L=nt(),me=require("joi"),J4=Y(),{hdb_schema_table:Lu,checkValidTable:dL,hdb_table:fL,hdb_database:sE}=Ls(),{handleHDBError:X4,hdb_errors:Z4}=ie(),{getDatabases:e3}=(Re(),ae($e)),{HTTP_STATUS_CODES:t3}=Z4,r3=me.object({database:sE,schema:sE,table:fL,search_attribute:Lu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),n3=me.object({database:sE,schema:sE,table:fL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Lu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Lu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});EL.exports=function(e,t){let r=null;switch(t){case"value":r=_L.validateBySchema(e,r3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(dL("database",e.schema)),i(dL("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=_L.validateBySchema(e,n3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=J4.checkGlobalSchemaTable(e.schema,e.table);if(s)return X4(new Error,s,t3.NOT_FOUND);let o=e3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=uL.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!uL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var ig=R((cTe,hL)=>{"use strict";var s3=Ye(),i3=bc(),{getSchemaPath:o3}=Je();hL.exports=a3;function a3(e){let t=i3(e,"hashes");if(t)throw t;let r=o3(e.schema,e.table);return s3.openEnvironment(r,e.table)}a(a3,"initialize")});var og=R((uTe,pL)=>{"use strict";var c3=Oc(),l3=ig();pL.exports=u3;async function u3(e){let t=await l3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return c3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(u3,"lmdbGetDataByHash")});var Nc=R((dTe,mL)=>{"use strict";var ag=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mL.exports=ag});var TL=R((hTe,SL)=>{"use strict";var ETe=Nc(),_3=Oc(),d3=ig();SL.exports=f3;async function f3(e){let t=await d3(e),r=global.hdb_schema[e.schema][e.table];return _3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(f3,"lmdbSearchByHash")});var as=R((mTe,gL)=>{"use strict";var cg=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};gL.exports=cg});var iE=R((TTe,yL)=>{"use strict";var Er=Oc(),E3=Ye(),h3=Y(),Se=_t(),fa=L(),p3=_i(),RL=rn().LMDB_ERRORS_ENUM,{getSchemaPath:m3}=Je(),pi=fa.SEARCH_WILDCARDS;async function S3(e,t,r){let n;e.schema===fa.SYSTEM_SCHEMA_NAME?n=p3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=NL(e,n.hash_attribute,r,t);return OL(e,s,n.hash_attribute,r)}a(S3,"prepSearch");async function OL(e,t,r,n){let s=m3(e.schema,e.table),i=await E3.openEnvironment(s,e.table),o=bL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(T3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?AL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?AL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(OL,"executeSearch");function bL(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 Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(bL,"searchByType");function AL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(AL,"createMapFromIterable");function T3(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(T3,"checkToFetchMore");function NL(e,t,r,n){if(h3.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),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(RL.UNKNOWN_SEARCH_TYPE)}else switch(n){case fa.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case fa.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case fa.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case fa.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case fa.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RL.UNKNOWN_SEARCH_TYPE)}}a(NL,"createSearchTypeFromSearchObject");yL.exports={executeSearch:OL,createSearchTypeFromSearchObject:NL,prepSearch:S3,searchByType:bL}});var wL=R((ATe,IL)=>{"use strict";var RTe=as(),g3=bc(),R3=Y(),A3=L(),O3=iE();IL.exports=b3;function b3(e,t){if(!R3.isEmpty(t)&&A3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=g3(e,"value");if(n)throw n;return O3.prepSearch(e,t,!0)}a(b3,"lmdbGetDataByValue")});var Pu=R((NTe,CL)=>{"use strict";var bTe=as(),N3=bc(),y3=Y(),I3=L(),w3=iE();CL.exports=C3;async function C3(e,t){if(!y3.isEmpty(t)&&I3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N3(e,"value");if(n)throw n;return w3.prepSearch(e,t,!1)}a(C3,"lmdbSearchByValue")});var LL=R((wTe,DL)=>{"use strict";var ITe=_t(),lg=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}},ug=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},_g=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};DL.exports={SearchByConditionsObject:lg,SearchCondition:ug,SortAttribute:_g}});var BL=R((PTe,vL)=>{"use strict";var DTe=LL().SearchByConditionsObject,D3=as(),L3=bc(),dg=Oc(),oE=_t(),{Resource:LTe}=(Mn(),ae(fg)),UL=iE(),P3=sg(),M3=require("lodash"),{getSchemaPath:U3}=Je(),PL=Ye(),{handleHDBError:v3,hdb_errors:B3}=ie(),{HTTP_STATUS_CODES:H3}=B3,G3=1e8;vL.exports=x3;async function x3(e){let t=L3(e,"conditions");if(t)throw v3(t,t.message,H3.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=U3(e.schema,e.table),n=await PL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)PL.openDBI(n,_.search_attribute);let i=M3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=dg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=G3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ML(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(UL.filterByType),d=u.length,E=dg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[h](f))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(f=>P3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await ML(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=dg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(x3,"lmdbSearchByConditions");async function ML(e,t,r,n){let s=new D3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,UL.searchByType(e,s,i,n).map(o=>o.value)}a(ML,"executeConditionSearch")});var Mu=R((UTe,HL)=>{"use strict";var q3=L().OPERATIONS_ENUM,Eg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};HL.exports=Eg});var hg=R((BTe,YL)=>{"use strict";var FL=as(),kL=Mu(),VL=Pu(),$L=wu(),Pr=L(),GL=Y(),xL=Ye(),{getTransactionAuditStorePath:F3,getSchemaPath:k3}=Je(),qL=k();YL.exports=V3;async function V3(e){try{if(GL.isEmpty(global.hdb_schema[e.schema])||GL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await $3(e),await Y3(e);let t=k3(e.schema,e.table);try{await xL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=F3(e.schema,e.table);await xL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V3,"lmdbDropTable");async function $3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await VL(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await $L(s)}a($3,"deleteAttributesFromSystem");async function Y3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await VL(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await $L(s)}catch(i){throw i}}a(Y3,"dropTableFromSystem")});var WL=R((GTe,KL)=>{"use strict";var K3=require("fs-extra"),W3=as(),Q3=Nc(),j3=Mu(),z3=hg(),J3=wu(),X3=og(),Z3=Pu(),mi=L(),{getSchemaPath:eX}=Je(),{handleHDBError:tX,hdb_errors:rX}=ie(),{HDB_ERROR_MSGS:nX,HTTP_STATUS_CODES:sX}=rX;KL.exports=iX;async function iX(e){let t;try{t=await oX(e.schema);let r=new W3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Z3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await z3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await J3(s);let i=eX(t);await K3.remove(i)}catch(r){throw r}}a(iX,"lmdbDropSchema");async function oX(e){let t=new Q3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await X3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw tX(new Error,nX.SCHEMA_NOT_FOUND(e),sX.NOT_FOUND,void 0,void 0,!0);return n}a(oX,"validateDropSchema")});var Uu=R((qTe,QL)=>{"use strict";var pg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};QL.exports=pg});var Sg=R((VTe,jL)=>{"use strict";var aX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:cX}=Je(),mg=_t(),kTe=Uu();jL.exports=lX;async function lX(e){let t;try{let r=cX(e.schema,e.table);await aX.mkdirp(r),t=await aE.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{aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,mg.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(lX,"createTransactionsAuditEnvironment")});var ZL=R((YTe,XL)=>{"use strict";var Tg=L(),zL=Ye(),uX=Zo(),{getSystemSchemaPath:_X,getSchemaPath:dX}=Je(),fX=_i(),EX=Lf(),gg=Df(),hX=k(),pX=Sg(),Ag=fX.hdb_table,JL=[];for(let e=0;e<Ag.attributes.length;e++)JL.push(Ag.attributes[e].attribute);XL.exports=mX;async function mX(e,t){let r=dX(t.schema,t.table),n=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new gg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zL.createEnvironment(r,t.table),e!==void 0){let o=await zL.openEnvironment(_X(),Tg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await uX.insertRecords(o,Ag.hash_attribute,JL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Rg(n),await Rg(s),await Rg(i)}await pX(t)}catch(o){throw o}}a(mX,"lmdbCreateTable");async function Rg(e){try{await EX(e)}catch(t){hX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Rg,"createAttribute")});var tP=R((WTe,eP)=>{"use strict";var SX=Su(),TX=ru(),gX=Zf(),vu=L(),RX=Zo().updateRecords,AX=Ye(),{getSchemaPath:OX}=Je(),bX=yu(),NX=k();eP.exports=yX;async function yX(e){try{let{schema_table:t,attributes:r}=SX(e);TX(e,r,t.hash_attribute),e.schema!==vu.SYSTEM_SCHEMA_NAME&&(r.includes(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await gX(e.hdb_auth_header,t,r),s=OX(e.schema,e.table),i=await AX.openEnvironment(s,e.table),o=await RX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await bX(e,o)}catch(c){NX.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(yX,"lmdbUpdateRecords")});var nP=R((jTe,rP)=>{"use strict";var IX=L().OPERATIONS_ENUM,Og=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=IX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rP.exports=Og});var iP=R((XTe,sP)=>{"use strict";var JTe=nP(),wX=Su(),CX=ru(),DX=Zf(),Bu=L(),LX=Zo().upsertRecords,PX=Ye(),{getSchemaPath:MX}=Je(),UX=yu(),vX=k(),{handleHDBError:BX,hdb_errors:HX}=ie();sP.exports=GX;async function GX(e){let t;try{t=wX(e)}catch(l){throw BX(l,l.message,HX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;CX(e,n,r.hash_attribute),e.schema!==Bu.SYSTEM_SCHEMA_NAME&&(n.includes(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await DX(e.hdb_auth_header,r,n),i=MX(e.schema,e.table),o=await PX.openEnvironment(i,e.table),c=await LX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await UX(e,c)}catch(l){vX.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(GX,"lmdbUpsertRecords")});var aP=R((ege,oP)=>{"use strict";var bg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};oP.exports=bg});var lP=R((rge,cP)=>{"use strict";var Ng=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}};cP.exports=Ng});var dP=R((ige,_P)=>{"use strict";var yg=Ye(),{getTransactionAuditStorePath:xX}=Je(),sge=aP(),Hu=_t(),qX=Y(),uP=lP(),FX=require("util").promisify,kX=FX(setTimeout),VX=1e4,$X=100;_P.exports=YX;async function YX(e){let t=xX(e.schema,e.table),r=await yg.openEnvironment(t,e.table,!0),n=yg.listDBIs(r);yg.initializeDBIs(r,Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new uP;do s=await KX(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 kX($X);while(s.transactions_deleted>0);return i}a(YX,"deleteAuditLogsBefore");async function KX(e,t){let r=new uP;try{let n=e.dbis[Hu.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[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];qX.isEmpty(c)||(s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>VX)break}return await s,r}catch(n){throw n}}a(KX,"deleteTransactions")});var EP=R((age,fP)=>{"use strict";var Ig=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};fP.exports=Ig});var pP=R((uge,hP)=>{"use strict";var WX=as(),QX=Mu(),lge=EP(),Bs=L(),jX=Y(),wg=Ye(),zX=_i(),JX=Pu(),XX=wu(),{getSchemaPath:ZX}=Je();hP.exports=eZ;async function eZ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=zX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await rZ(e),s=ZX(e.schema,e.table),i=await wg.openEnvironment(s,e.table);return t===!0&&await tZ(e,i,r.hash_attribute),wg.dropDBI(i,e.attribute),n}a(eZ,"lmdbDropAttribute");async function tZ(e,t,r){let n=wg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(tZ,"removeAttributeFromAllObjects");async function rZ(e){let t=new WX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await JX(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new QX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return XX(i)}a(rZ,"dropAttributeFromSystem")});var AP=R((fge,RP)=>{"use strict";var Cg=Ye(),yc=_t(),dge=Nr(),Dg=L(),mP=Y(),{getTransactionAuditStorePath:nZ}=Je(),sZ=Oc(),cE=gc(),iZ=k();RP.exports=oZ;async function oZ(e){let t=nZ(e.schema,e.table),r=await Cg.openEnvironment(t,e.table,!0),n=Cg.listDBIs(r);Cg.initializeDBIs(r,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return SP(r,e.search_values);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,cZ(r,e.search_values,s);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return aZ(r,e.search_values);default:return SP(r)}}a(oZ,"readAuditLog");function SP(e,t=[0,Date.now()]){mP.isEmpty(t[0])&&(t[0]=0),mP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yc.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 cE,s))}a(SP,"searchTransactionsByTimestamp");function aZ(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[yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,gP(e,i))}return Object.fromEntries(r)}a(aZ,"searchTransactionsByUsername");function cZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=sZ.equals(e,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=gP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);TP(l,"records",r,u,o),TP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(cZ,"searchTransactionsByHashValues");function TP(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(TP,"loopRecords");function gP(e,t){let r=[];try{let n=e.dbis[yc.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 cE,i);r.push(o)}}catch(i){iZ.warn(i)}return r}catch(n){throw n}}a(gP,"batchSearchTransactions")});var bP=R((mge,OP)=>{"use strict";var{getSchemaPath:hge}=Je(),pge=Ye(),{database:lZ}=(Re(),ae($e));OP.exports={writeTransaction:uZ};async function uZ(e,t,r){return lZ({database:e,table:t}).transaction(r)}a(uZ,"writeTransaction")});var wP=R((Tge,IP)=>{"use strict";var{getSchemaPath:NP}=Je(),yP=Ye();IP.exports={flush:_Z,resetReadTxn:dZ};async function _Z(e,t){return(await yP.openEnvironment(NP(e,t),t.toString())).flushed}a(_Z,"flush");async function dZ(e,t){try{(await yP.openEnvironment(NP(e,t),t.toString())).resetReadTxn()}catch{}}a(dZ,"resetReadTxn")});var PP=R((Rge,LP)=>{"use strict";var{Readable:fZ}=require("stream"),{getDatabases:EZ}=(Re(),ae($e)),{readSync:hZ,openSync:pZ,createReadStream:CP}=require("fs"),{open:mZ}=require("lmdb"),DP=_u(),SZ=du(),{AUDIT_STORE_OPTIONS:TZ}=(no(),ae(MP)),{INTERNAL_DBIS_NAME:gZ,AUDIT_STORE_NAME:RZ}=_t();LP.exports=OZ;var Lg=32768,AZ=100;async function OZ(e){let t=e.database||e.schema||"data",r=EZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=mZ({noSync:!0,maxDbs:SZ.MAX_DBS}),E,f=d.openDB(gZ,new DP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,b){b.encoding="binary",b.encoder=void 0;let N=d.openDB(T,b),U=u.openDB(T,b);for(let{key:v,version:q,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=N.put(v,M,q),m++%AZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:b}of u.getRange({transaction:h,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){f.put(T,b);let[,N]=T.split("/"),U=!N,v=new DP(!U,U);await S(T,v)}e.include_audit&&await S(RZ,Object.assign({},TZ)),await E;let g=CP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=pZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Lg);hZ(c,_,0,Lg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=CP(null,{fd:c,start:Lg}),E=new fZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(OZ,"getBackup")});var BP=R((Oge,vP)=>{"use strict";var bZ=k(),{handleHDBError:NZ}=ie(),yZ=ew(),IZ=Lf(),wZ=ZT(),CZ=WD(),DZ=wu(),LZ=og(),PZ=TL(),MZ=wL(),UZ=Pu(),vZ=BL(),BZ=WL(),HZ=ZL(),GZ=tP(),xZ=iP(),qZ=dP(),FZ=hg(),kZ=pP(),VZ=AP(),$Z=bP(),UP=wP(),YZ=PP(),Pg=class extends yZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return vZ(t)}async getDataByHash(t){return await LZ(t)}async searchByHash(t){return await PZ(t)}async getDataByValue(t,r){return await MZ(t,r)}async searchByValue(t){return await UZ(t)}async createSchema(t){return await CZ(t)}async dropSchema(t){return await BZ(t)}async createTable(t,r){return await HZ(t,r)}async dropTable(t){return await FZ(t)}async createAttribute(t){return await IZ(t)}async createRecords(t){return await wZ(t)}async updateRecords(t){return await GZ(t)}async upsertRecords(t){try{return await xZ(t)}catch(r){throw NZ(r,null,null,bZ.ERR,r)}}async deleteRecords(t){return await DZ(t)}async dropAttribute(t){return await kZ(t)}async deleteAuditLogsBefore(t){return await qZ(t)}async readAuditLog(t){return await VZ(t)}writeTransaction(t,r,n){return $Z.writeTransaction(t,r,n)}flush(t,r){return UP.flush(t,r)}resetReadTxn(t,r){return UP.resetReadTxn(t,r)}getBackup(t){return YZ(t)}};vP.exports=Pg});function jZ(){QZ=setInterval(function(){for(let e of Mg)if(e.stale){let t=e[Ie]?.url;qP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var Ug,xP,qP,FP,kP,VP,HP,Mg,KZ,Gu,GP,Ea,lE,WZ,QZ,vg=be(()=>{Ug=G(Nr()),xP=G(ie()),qP=G(k());Mn();FP=G(X()),kP=G(L()),VP=G(Y()),HP=100,Mg=new Set,KZ=(0,VP.convertToMS)(FP.get(kP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ea=class e{static{a(this,"DatabaseTransaction")}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),Mg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Mg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Gu&&!this.overloadChecked&&performance.now()-GP>KZ)throw new xP.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=t.timestamp||(0,Ug.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}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 E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.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 Gu||(Gu=s,GP=performance.now(),Gu.then(()=>{Gu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+HP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends Ea{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Ug.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;a(jZ,"startMonitoringTxns");jZ()});function it(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 Ea;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=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 $P,ha=be(()=>{$P=require("../index");Mn();vg();a(it,"transaction");(0,$P._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var XP={};Ve(XP,{ResourceBridge:()=>Gg});function xg({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 KP(e,t){let r=Hs(e),n=xg(e,r);if(!r)throw new cs.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u=await r.get({id:_,lazy:s,select:n},i);return u=u&&_E(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||JZ,r=Mr()[t];if(!r)throw(0,cs.handleHDBError)(new Error,zZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WP(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*QP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var jP,uE,cs,zP,ls,Bg,Hg,JP,zZ,JZ,XZ,ZZ,YP,Gg,ZP=be(()=>{"use strict";jP=G(BP()),uE=G(bc()),cs=G(ie());Re();zP=G(Su()),ls=G(L()),Bg=G(hi()),Hg=G(os()),JP=G(Y());ha();dE();({HDB_ERROR_MSGS:zZ}=cs.hdb_errors),JZ="data",XZ=1e4,ZZ=10,Gg=class extends jP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YP=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,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Hs(t);if(!n)throw new cs.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:xg(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new cs.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}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return Ic({database:t.schema,table:null}),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qg(t.schema),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.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,YP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,zP.default)(t),s,i=Mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Mr()[t.schema][t.table],n={user:t.hdb_user};return it(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 WP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.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:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,JP.async_set_timeout)(ZZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%XZ===0&&await _();return l.length>0&&await _(),s?WP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return KP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of KP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.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,uE.default)(t,"value");if(n)throw n;let s=Hs(t);if(!s)throw new cs.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===ls.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:xg(t,s)})}async getDataByValue(t,r){let n=new Map,s=Hs(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){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),n={};switch(t.search_type){case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of QP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return QP(r,t.search_values?.[0],t.search_values?.[1])}}};a(xg,"getSelect");a(KP,"getRecords");a(Hs,"getTable");a(WP,"createDeleteResponse");a(QP,"groupRecordsInHistory")});var Hn=R((Gge,eM)=>{"use strict";var{ResourceBridge:e5}=(ZP(),ae(XP)),t5=X();t5.initSync();var fE;function r5(){return fE||(fE=new e5,fE)}a(r5,"getBridge");eM.exports=r5()});var sM=R((qge,nM)=>{"use strict";var tM=require("lodash"),xu=require("mathjs"),n5=require("jsonata"),rM=Y();nM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tM.uniqWith(e,tM.isEqual):e,searchJSON:s5,mad:qu.bind(null,xu.mad),mean:qu.bind(null,xu.mean),mode:qu.bind(null,xu.mode),prod:qu.bind(null,xu.prod),median:qu.bind(null,xu.median)};function qu(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(qu,"aggregateFunction");function s5(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(rM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rM.isEmpty(this.__ala__.res[r])){let n=n5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s5,"searchJSON")});var oM=R((kge,iM)=>{"use strict";var It=require("moment"),Fg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;iM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format(Fg),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format(Fg),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format(Fg)}});var uM=R((Vge,lM)=>{"use strict";var i5=require("@turf/area"),o5=require("@turf/length"),a5=require("@turf/circle"),c5=require("@turf/difference"),l5=require("@turf/distance"),u5=require("@turf/boolean-contains"),_5=require("@turf/boolean-equal"),d5=require("@turf/boolean-disjoint"),f5=require("@turf/helpers"),aM=L(),Ae=Y(),Si=k();lM.exports={geoArea:E5,geoLength:h5,geoCircle:p5,geoDifference:m5,geoDistance:cM,geoNear:S5,geoContains:T5,geoEqual:g5,geoCrosses:R5,geoConvert:A5};function E5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return i5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(E5,"geoArea");function h5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return o5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(h5,"geoLength");function p5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(p5,"geoCircle");function m5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return c5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(m5,"geoDifference");function cM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return l5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(cM,"geoDistance");function S5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(S5,"geoNear");function T5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(T5,"geoContains");function g5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(g5,"geoEqual");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoCrosses");function A5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(aM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),f5[t](e,r)}a(A5,"geoConvert")});var EE=R((Yge,_M)=>{var pa=sM(),dn=oM(),Gs=uM();_M.exports=e=>{e.aggr.mad=e.aggr.MAD=pa.mad,e.aggr.mean=e.aggr.MEAN=pa.mean,e.aggr.mode=e.aggr.MODE=pa.mode,e.aggr.prod=e.aggr.PROD=pa.prod,e.aggr.median=e.aggr.MEDIAN=pa.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=pa.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=pa.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=dn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=dn.current_time,e.fn.extract=e.fn.EXTRACT=dn.extract,e.fn.date=e.fn.DATE=dn.date,e.fn.date_format=e.fn.DATE_FORMAT=dn.date_format,e.fn.date_add=e.fn.DATE_ADD=dn.date_add,e.fn.date_sub=e.fn.DATE_SUB=dn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=dn.date_diff,e.fn.now=e.fn.NOW=dn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=dn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=dn.get_server_time,e.fn.getdate=e.fn.GETDATE=dn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=dn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var hM=R((Kge,EM)=>{"use strict";var Fu=require("lodash"),Ur=require("alasql");Ur.options.cache=!1;var O5=EE(),dM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),wc=Hn(),b5=L(),{hdb_errors:N5}=ie(),{getDatabases:fM}=(Re(),ae($e)),y5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";O5(Ur);var kg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.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(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(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(dM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Fu.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=fM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Ur.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Ur.yy.LogicValue({value:i}):n instanceof Ur.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ur.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(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(!Me.isEmpty(b5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.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(Me.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"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.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&&Fu.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(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.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(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ur.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.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(dM(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(Me.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(y5)>-1&&this.tables.forEach(s=>{let i={columnid:fM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Fu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await wc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await wc.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await wc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await wc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),new Error(us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Ur.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(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 Ur.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ur.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Ur.yy.FuncValue:new Ur.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${m}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await Ur.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=Fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(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=Fu.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 he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await wc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.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();he.trace(`Final SQL: ${s}`),n=await Ur.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.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 he.error(N5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await wc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EM.exports=kg});var ur=R((Qge,pM)=>{"use strict";var I5=XI();pM.exports={searchByConditions:C5,searchByHash:D5,searchByValue:L5,search:P5};var Vg=Hn(),{transformReq:$g}=Y(),w5=hM();async function C5(e){return $g(e),Vg.searchByConditions(e)}a(C5,"searchByConditions");async function D5(e){$g(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Vg.searchByHash(e))r&&t.push(r);return t}a(D5,"searchByHash");async function L5(e){$g(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Vg.searchByValue(e))t.push(r);return t}a(L5,"searchByValue");function P5(e,t){try{let r=new I5(e);r.validate(),new w5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(P5,"search")});var pE=R((zge,mM)=>{"use strict";var M5=Hn();mM.exports={writeTransaction:U5};function U5(e,t,r){return M5.writeTransaction(e,t,r)}a(U5,"writeTransaction")});var RM=R((Zge,gM)=>{"use strict";var v5=ur(),B5=Bn(),SM=k(),H5=Cr(),Xge=pE(),G5=require("clone"),Kg=require("alasql"),x5=EE(),TM=require("util"),q5=TM.promisify(B5.getTableSchema),F5=TM.promisify(v5.search),k5=L(),Yg=Y();x5(Kg);gM.exports={update:$5};var V5="There was a problem performing this update. Please check the logs and try again.";async function $5({statement:e,hdb_user:t}){let r=await q5(e.table.databaseid,e.table.tableid),n=Y5(e.columns);Yg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=G5(s),c=Yg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Kg.parse(l).statements[0],u=await F5(_),d=K5(n,u);return W5(o,d,t)}a($5,"update");function Y5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Kg.compile(`SELECT ${r.expression.toString()} AS [${k5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw SM.error(t),new Error(V5)}}a(Y5,"createUpdateRecord");function K5(e,t){return Yg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(K5,"buildUpdateRecords");async function W5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){SM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W5,"updateRecords")});var OM=R((nRe,AM)=>{var Q5=require("alasql"),j5=ur(),z5=k(),J5=Hn(),Qg=require("util"),Wg=Y(),X5=L(),Z5=Bn(),tRe=pE(),rRe=Cr(),e8="record",t8="successfully deleted",r8=Qg.callbackify(o8),n8=Qg.promisify(j5.search),s8=Qg.promisify(Z5.getTableSchema);AM.exports={convertDelete:r8};function i8(e){return`${e.deleted_hashes.length} ${e8}${e.deleted_hashes.length===1?"":"s"} ${t8}`}a(i8,"generateReturnMessage");async function o8({statement:e,hdb_user:t}){let r=await s8(e.table.databaseid,e.table.tableid);Wg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Wg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Q5.parse(o).statements[0],l={operation:X5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await n8(c);let _=await J5.deleteRecords(l);return Wg.isEmptyOrZeroLength(_.message)&&(_.message=i8(_)),delete _.txn_time,_}catch(_){throw z5.error(_),_.hdb_code?_.message:_}}a(o8,"convertDelete")});var wM=R((iRe,IM)=>{"use strict";var a8=Ei(),{hdb_errors:bM}=ie(),{getDatabases:NM}=(Re(),ae($e));IM.exports={checkSchemaExists:yM,checkSchemaTableExists:c8,schema_describe:a8};async function yM(e){if(!NM()[e])return bM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yM,"checkSchemaExists");async function c8(e,t){let r=await yM(e);if(r)return r;if(!NM()[e][t])return bM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(c8,"checkSchemaTableExists")});var ma=R((aRe,l8)=>{l8.exports={name:"harperdb",version:"4.3.28",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",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.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.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ku={};Ve(Ku,{addAnalyticsListener:()=>Yu,recordAction:()=>vr,recordActionBinary:()=>fn,setAnalyticsEnabled:()=>u8});function u8(e){HM=e}function vr(e,t,r,n,s){if(!HM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},TE.set(i,o)}mE||_8()}function fn(e,t,r,n,s){vr(!!e,t,r,n,s)}function Yu(e){qM.push(e)}function _8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Sa.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of FM){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await kM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sa.threadId,byThread:!0,...n});for(let s of qM)s(t);TE=new Map,Sa.parentPort?Sa.parentPort.postMessage({type:xM,report:r}):YM({report:r})},GM).unref()}async function d8(e,t=6e4){let r=Jg(),n=VM(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let b of g||[]){let{path:N,method:U,type:v,metric:q,count:M,total:W,distribution:z,threads:J,...ce}=b;M||(M=1);let _e=q+(N?"-"+N:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let Ge=de.count;for(let we in ce){let xe=ce[we];typeof xe=="number"&&(de[we]=(de[we]*Ge+xe*M)/(Ge+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},b),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let Ge=l.get(_e);Ge?Ge.push(...z):l.set(_e,z)}}await kM()}for(let m of _){let{path:S,method:g,type:T,metric:b,count:N,total:U,distribution:v,threads:q,...M}=m;q=q.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let J of q){let ce=J[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,xe)=>we.value>xe.value?1:-1);let T=g.count-1,b=[],N=0,U=0,v;for(let we of FM){let xe=T*we;for(;N<xe;)v=S[U++],N+=v.count,U===1&&N--;let Wd=S[U>1?U-2:0];v||(v=S[0]),b.push(v.value-(v.value-Wd.value)*(N-xe)/v.count)}let[q,M,W,z,J,ce,_e,de,Ge]=b;Object.assign(g,{p1:q,p10:M,p25:W,median:z,p75:J,p90:ce,p95:_e,p99:de,p999:Ge})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-CM,active:h-DM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}CM=f,DM=h}async function LM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Jg(){return PM||(PM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function VM(){return MM||(MM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function h8(){$M=!0;let e=(0,$u.get)(zg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await d8(GM,e),await LM(Jg(),f8),await LM(VM(),E8)},Math.min(e/2,2147483647)).unref()}function YM(e,t){let r=e.report;r.threadId=t?.threadId||Sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(UM+=n.mean*n.count);r.totalBytesProcessed=UM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vM.get(t))}),vM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Jg().primaryStore.put(r.id,r),$M||h8(),p8&&(KM=S8(r))}async function S8(e){if(await KM,!fo){let r=(0,Vu.dirname)((0,ku.getLogFilePath)());try{fo=await(0,jg.open)((0,Vu.join)(r,"analytics.log"),"r+")}catch{fo=await(0,jg.open)((0,Vu.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>m8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
11
- `,t)}var Sa,BM,ku,Vu,jg,SE,$u,zg,TE,HM,mE,GM,xM,qM,FM,CM,DM,kM,f8,E8,PM,MM,$M,UM,vM,p8,KM,fo,m8,Ti=be(()=>{Sa=require("worker_threads"),BM=G(rt());Re();ku=G(k()),Vu=require("path"),jg=require("fs/promises"),SE=G(Nr()),$u=G(X()),zg=G(L());yr();(0,$u.initSync)();TE=new Map,HM=(0,$u.get)(zg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(u8,"setAnalyticsEnabled");a(vr,"recordAction");dt.recordAnalytics=vr;a(fn,"recordActionBinary");mE=0,GM=1e3,xM="analytics-report",qM=[];a(Yu,"addAnalyticsListener");FM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(_8,"sendAnalytics");a(d8,"aggregation");CM=0,DM=0,kM=a(()=>new Promise(setImmediate),"rest");a(LM,"cleanup");f8=36e5,E8=31536e6;a(Jg,"getRawAnalyticsTable");a(VM,"getAnalyticsTable");(0,BM.setChildListenerByType)(xM,YM);a(h8,"startScheduledTasks");UM=0,vM=new Map,p8=!1;a(YM,"recordAnalytics");m8=1e6;a(S8,"logAnalytics")});var rR=R((gRe,sU)=>{"use strict";var{decode:T8}=require("msgpackr"),{isMainThread:mRe,parentPort:SRe,threadId:TRe}=require("worker_threads"),AE=gt(),Cc=Ze(),eR=L(),hr=k(),Zg=X(),g8=L(),{onMessageByType:R8}=rt(),zM=fi(),{recordAction:WM,recordActionBinary:A8}=(Ti(),ae(Ku)),{publishToStream:O8}=AE,{ConsumerEvents:QM}=require("nats"),b8=ur(),{promisify:N8}=require("util"),JM=N8(setTimeout),OE=1e4,bE,RE,y8,I8,XM,Wu=new Map,Dc=new Map;sU.exports={initialize:ZM,ingestConsumer:tR,setSubscription:w8,setIgnoreOrigin:L8,getDatabaseSubscriptions:D8,updateConsumer:eU};async function ZM(){R8(eR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await eU(n)}),XM=!0,hr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,y8=t,I8=r}a(ZM,"initialize");async function eU(e){if(e.status==="start"){let{js:t,jsm:r}=await tU(e.node_domain_name);tR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Wu.get(e.stream_name+e.node_domain_name);t&&(hr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Wu.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(eU,"updateConsumer");var NE=new Map;function w8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),XM||ZM().then(C8)}a(w8,"setSubscription");async function C8(){let e=await b8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Cc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await tU(r),!n))break;let{schema:o,table:c}=i,l=zM.createNatsTableStreamName(o,c);tR(l,n,s,r)}}}a(C8,"accessConsumers");async function tU(e){let t,r,n=1;for(;!r;)try{t=await bE.jetstream({domain:e}),r=await bE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&hr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<OE?n++*100:OE;await JM(i)}return{js:t,jsm:r}}a(tU,"connectToRemoteJS");function D8(){return NE}a(D8,"getDatabaseSubscriptions");var rU;function L8(e){rU=e}a(L8,"setIgnoreOrigin");var nU=100,jM=new Array(nU),gE=0;async function tR(e,t,r,n){let{connection:s}=await AE.getNATSReferences();bE=s,RE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,RE),hr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&hr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(hr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await AE.createConsumer(r,e,RE,new Date(Date.now()).toISOString()));let u=o++*100<OE?o++*100:OE;await JM(u)}let c=!1,l;for(;!c;){if(Wu.get(e+n)==="close"||Dc.get(n)==="close"){Wu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Zg.get(eR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Wu.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===QM.ConsumerDeleted&&(await l.close(),c=!0),u.type===QM.HeartbeatsMissed){let d=u.data;hr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(hr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await jM[gE],jM[gE]=P8(u).catch(d=>{hr.error(d)}),++gE>=nU&&(gE=0)}catch(u){u.message==="consumer deleted"?(hr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(tR,"ingestConsumer");async function P8(e){let t=T8(e.data);WM(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Zg.get(eR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!rU),A8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;hr.trace("processing message:",o,c,_,(u?"records: "+u.map(U=>U?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),hr.trace(`messageProcessor nats msg id: ${e.headers.get(Cc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(U=>h=U),{timestamp:S,user:g,node_name:T}=E||{},b=NE.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(u.length===1&&!l)b.send({type:Xg(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:g,nodeName:T});else{let U=u.map((v,q)=>({type:Xg(o),value:v,expiresAt:f,id:d?.[q],table:_}));for(;l;)U.push({type:Xg(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;b.send({type:"transaction",writes:U,table:_,timestamp:S,onCommit:h,user:g,nodeName:T})}Zg.get(g8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&O8(e.subject.split(".").slice(0,-1).join("."),zM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let N=Date.now()-S;S&&WM(N,"replication-latency",e.subject,o,"ingest")}catch(o){hr.error(o)}e.ack()}a(P8,"messageProcessor");function Xg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Xg,"convertOperation")});var gt=R((IRe,RU)=>{"use strict";var Wt=X();Wt.initSync();var M8=require("fs-extra"),U8=require("semver"),zu=require("path"),{monotonicFactory:v8}=require("ulidx"),oU=v8(),B8=require("util"),aU=require("child_process"),H8=B8.promisify(aU.exec),G8=aU.spawn,rr=Ze(),Ce=L(),yE=Y(),_s=k(),IE=fi(),x8=pE(),Qu=Et(),{broadcast:q8,onMessageByType:F8,getWorkerIndex:k8}=rt(),{isMainThread:cU}=require("worker_threads"),{Encoder:V8,decode:oR}=require("msgpackr"),lU=new V8,{isEmpty:Aa}=yE,uU=Lr(),ARe=48*36e11;cU&&F8(Ce.ITC_EVENT_TYPES.RESTART,()=>{Br=void 0,Ra=void 0});var{connect:$8,StorageType:Y8,RetentionPolicy:K8,AckPolicy:aR,DeliverPolicy:cR,DiscardPolicy:W8,NatsConnection:ORe,JetStreamManager:bRe,JetStreamClient:NRe,StringCodec:yRe,JSONCodec:Q8,createInbox:lR,headers:j8,ErrorCode:iU}=require("nats"),{PACKAGE_ROOT:z8}=L(),J8=ma(),{recordAction:X8}=(Ti(),ae(Ku)),_U=Q8(),Z8="clustering",e6=J8.engines[rr.NATS_SERVER_NAME],t6=zu.join(z8,"dependencies"),iR=zu.join(t6,`${process.platform}-${process.arch}`,rr.NATS_BINARY_NAME),nR,sR,ju,Ta,ga;RU.exports={runCommand:dU,checkNATSServerInstalled:r6,createConnection:uR,getConnection:Ju,getJetStreamManager:Xu,getJetStream:EU,getNATSReferences:xs,getServerList:s6,createLocalStream:_R,listStreams:hU,deleteLocalStream:i6,getServerConfig:Lc,listRemoteStreams:o6,viewStream:a6,viewStreamIterator:c6,publishToStream:l6,request:d6,reloadNATS:dR,reloadNATSHub:f6,reloadNATSLeaf:E6,extractServerName:_6,requestErrorHandler:h6,createLocalTableStream:TU,createTableStreams:S6,purgeTableStream:gU,purgeSchemaTableStreams:T6,getStreamInfo:g6,updateLocalStreams:A6,closeConnection:n6,getJsmServerName:wE,addNatsMsgHeader:pU,clearClientCache:fU,updateRemoteConsumer:p6,createConsumer:mU,updateConsumerIterator:m6};async function dU(e,t=void 0){let{stdout:r,stderr:n}=await H8(e,{cwd:t});if(n)throw new Error(n.replace(`
9
+ `)},Hz="certificate.pem",Gz="privateKey.pem",xz="ca.pem";MC.exports={CERTIFICATE_VALUES:Bz,CERTIFICATE_PEM_NAME:Hz,PRIVATEKEY_PEM_NAME:Gz,CA_PEM_NAME:xz}});var CT=R((zme,xC)=>{"use strict";var HC=require("fs-extra"),le=require("joi"),qz=require("os"),{boolean:ye,string:dr,number:st,array:Ff}=le.types(),{totalmem:UC}=require("os"),oa=require("path"),Fz=k(),kf=Y(),jme=wT(),vC=L(),kz=nt(),BC="log",$z="components",Vz="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Yz="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Kz="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Wz="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Qz="rootPath config parameter is undefined",jz="clustering.enabled config parameter is undefined",aa=st.min(0).required(),$f=Ff.items({host:dr.required(),port:aa}).empty(null),Ms,GC=!1;xC.exports={configValidator:zz,routesValidator:rJ,route_constraints:$f};function zz(e,t=!1){if(GC=t,Ms=e.rootPath,kf.isEmpty(Ms))throw Qz;let r=ye.required(),n=st.min(0).max(1e3).empty(null).default(tJ),s=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ru),i=dr.optional().empty(null),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=le.string().empty(null).default(Ru),l=le.custom(Xz).empty(null).default(Ru),_=e.clustering?.enabled;if(kf.isEmpty(_))throw jz;let u=le.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=le.object({enabled:r,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:aa,routes:$f}).required()}).required(),leafNodes:le.object({network:le.object({port:aa}).required()}).required(),network:le.object({port:aa}).required()}).required(),leafServer:le.object({network:le.object({port:aa,routes:$f}).required(),streams:le.object({maxAge:st.min(120).allow(null).optional(),maxBytes:st.min(1).allow(null).optional(),maxMsgs:st.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ye.optional(),databaseLevel:ye.optional(),tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required(),verify:ye.optional()}),user:dr.optional().empty(null)}).required():d=le.object({enabled:r,tls:le.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),le.object({authentication:le.object({authorizeLocal:ye,cacheTTL:st.required(),enableSessions:ye}),analytics:le.object({aggregatePeriod:st}),componentsRoot:s.optional(),clustering:d,localStudio:le.object({enabled:r}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:ye,logSuccessful:ye}),file:ye.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:ye.optional(),compress:ye.optional(),interval:dr.custom(eJ).optional().empty(null),maxSize:dr.custom(Zz).optional().empty(null),path:dr.optional().empty(null).default(Ru)}).required(),root:s,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:le.object({network:le.object({cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),keepAliveTimeout:st.min(1).optional(),port:st.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Ru),securePort:st.optional().empty(null),timeout:st.min(1).optional()}).optional(),tls:le.alternatives([le.array().items(u),u])}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:aa,securePort:aa,mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})])}).required(),webSocket:ye.optional(),requireAuthentication:ye.optional()}),http:le.object({compressionThreshold:st.optional(),cors:ye.optional(),corsAccessList:Ff.optional(),headersTimeout:st.min(1).optional(),port:st.min(0).optional().empty(null),securePort:st.min(0).optional().empty(null),maxHeaderSize:st.optional(),mtls:le.alternatives([ye.optional(),le.object({user:dr.optional(),certificateAuthority:i,required:ye.optional()})]),threadRange:le.alternatives([Ff.optional(),dr.optional()])}).required(),threads:le.alternatives(n.optional(),le.object({count:n.optional(),debug:le.alternatives(ye.optional(),le.object({startingPort:st.min(1).optional(),host:dr.optional(),waitForDebugger:ye.optional()})),maxHeapMemory:st.min(0).optional()})),storage:le.object({writeAsync:ye.required(),overlappingSync:ye.optional(),caching:ye.optional(),compression:le.alternatives([ye.optional(),le.object({dictionary:dr.optional(),threshold:st.optional()})]),compactOnStart:ye.optional(),compactOnStartKeepBackup:ye.optional(),noReadAhead:ye.optional(),path:l,prefetchWrites:ye.optional(),maxFreeSpaceToLoad:st.optional(),maxFreeSpaceToRetain:st.optional()}).required(),ignoreScripts:ye.optional(),tls:le.alternatives([le.array().items(u),u])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(zz,"configValidator");function Jz(e){return GC||HC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Jz,"doesPathExist");function Xz(e,t){le.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Jz(e);if(r)return t.message(r)}a(Xz,"validatePath");function Zz(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Vz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Kz):e}a(Zz,"validateRotationMaxSize");function eJ(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Yz);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(Wz):e}a(eJ,"validateRotationInterval");function tJ(e,t){let r=t.state.path.join("."),n=qz.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||UC();return i=Math.round(Math.min(i,UC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Fz.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(tJ,"setDefaultThreads");function Ru(e,t){let r=t.state.path.join(".");if(!kf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(kf.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return oa.join(Ms,$z);case"logging.root":return oa.join(Ms,BC);case"clustering.leafServer.streams.path":return oa.join(Ms,"clustering","leaf");case"storage.path":let n=oa.join(Ms,vC.LEGACY_DATABASES_DIR_NAME);return HC.existsSync(n)?n:oa.join(Ms,vC.DATABASES_DIR_NAME);case"logging.rotation.path":return oa.join(Ms,BC);case"operationsApi.network.domainSocket":return r==null?null:oa.join(Ms,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ru,"setDefaultRoot");function rJ(e){let t=le.object({routes:$f});return kz.validateBySchema({routes:e},t)}a(rJ,"routesValidator")});var Et=R((Zme,QC)=>{"use strict";var ln=L(),Kt=Y(),Bt=k(),{configValidator:nJ,routesValidator:qC}=CT(),Dr=require("fs-extra"),sJ=require("yaml"),ss=require("path"),iJ=require("is-number"),kC=require("properties-reader"),oJ=require("lodash"),{handleHDBError:aJ}=ie(),{HTTP_STATUS_CODES:cJ,HDB_ERROR_MSGS:Vf}=nn(),Xme=require("minimist"),{server:lJ}=(yr(),ae(jo)),{DATABASES_PARAM_CONFIG:Au,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:is}=ln,uJ="Unable to get config value because config is uninitialized",_J="Config successfully initialized",dJ="Error backing up config file",fJ="Empty parameter sent to getConfigValue",$C=ss.join(ln.PACKAGE_ROOT,"config","yaml",ln.HDB_DEFAULT_CONFIG_FILE),EJ="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",FC={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"},Yf,Ht,Kf;QC.exports={createConfigFile:hJ,getDefaultConfig:pJ,getConfigValue:YC,initConfig:LT,flattenConfig:Ec,updateConfigValue:KC,updateConfigObject:SJ,getConfiguration:RJ,setConfiguration:AJ,readConfigFile:MT,getClusteringRoutes:OJ,initOldConfig:WC,getConfigFromFile:bJ,getConfigFilePath:ca,addConfig:NJ,deleteConfigFromFile:yJ,getConfigObj:IJ};function hJ(e,t=!1){let r=co($C);Yf=Ec(r.toJSON());let n;for(let c in e){let l=is[c.toLowerCase()];if(l===cn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let _=l.split("_"),u=DT(l,e[c]);l==="rootPath"&&u?.endsWith("/")&&(u=u.slice(0,-1));try{r.setIn([..._],u)}catch(d){Bt.error(d)}}}n&&VC(r,n),PT(r,t);let s=r.toJSON();Ht=Ec(s);let i=r.getIn(["rootPath"]),o=ss.join(i,ln.HDB_CONFIG_FILE);Dr.createFileSync(o),Dr.writeFileSync(o,String(r)),Bt.trace(`Config file written to ${o}`)}a(hJ,"createConfigFile");function VC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Kt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Au.TABLES))for(let i in n[s][Au.TABLES])for(let o in n[s][Au.TABLES][i]){let c=n[s][Au.TABLES][i][o],l=[cn.DATABASES,s,Au.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=[cn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Bt.error("Error parsing schemas CLI/env config arguments",n)}}a(VC,"setSchemasConfig");function pJ(e){if(Yf===void 0){let r=co($C);Yf=Ec(r.toJSON())}let t=is[e.toLowerCase()];if(t!==void 0)return Yf[t.toLowerCase()]}a(pJ,"getDefaultConfig");function YC(e){if(e==null){Bt.error(fJ);return}if(Ht===void 0){Bt.trace(uJ);return}let t=is[e.toLowerCase()];if(t!==void 0)return Ht[t.toLowerCase()]}a(YC,"getConfigValue");function ca(e=Kt.getPropsFilePath()){let t=Kt.getEnvCliRootPath();return t?ss.join(t,ln.HDB_CONFIG_FILE):kC(e).get(ln.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ca,"getConfigFilePath");function LT(e=!1){if(Ht===void 0||e){let t;if(!Kt.noBootFile()){t=Kt.getPropsFilePath();try{Dr.accessSync(t,Dr.constants.F_OK|Dr.constants.R_OK)}catch(i){throw Bt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ca(t),n;if(r.includes("config/settings.js"))try{WC(r);return}catch(i){if(i.code!==ln.NODE_ERROR_CODES.ENOENT)throw i}try{n=co(r)}catch(i){if(i.code===ln.NODE_ERROR_CODES.ENOENT){Bt.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 Bt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}mJ(n,r),PT(n);let s=n.toJSON();if(lJ.config=s,Ht=Ec(s),Ht.logging_rotation_rotate)for(let i in FC)Ht[i]&&Bt.error(`Config ${FC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Bt.trace(_J)}}a(LT,"initConfig");function mJ(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ss.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ss.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ss.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),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&&(Bt.trace("Updating config file with missing config params"),Dr.writeFileSync(t,String(e)))}a(mJ,"checkForUpdatedConfig");function PT(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=nJ(r,t);if(n.error)throw Vf.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(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(PT,"validateConfig");function SJ(e,t){Ht===void 0&&(Ht={});let r=is[e.toLowerCase()];if(r===void 0){Bt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ht[r.toLowerCase()]=t}a(SJ,"updateConfigObject");function KC(e,t,r=void 0,n=!1,s=!1,i=!1){Ht===void 0&&LT();let o=YC(is.hdb_root),c=ss.join(o,ln.HDB_CONFIG_FILE),l=co(c),_;if(r===void 0&&e.toLowerCase()===cn.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=is[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=DT(E,t);l.setIn([...f],h)}else for(let E in r){let f=is[E.toLowerCase()];if(f===cn.HTTP_SECUREPORT&&r[E]===Ht[cn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===cn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===Ht[cn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===cn.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),m=ln.LEGACY_CONFIG_PARAMS[E.toUpperCase()];m&&m.startsWith("customFunctions")&&l.hasIn(m.split("_"))&&(f=m,h=m.split("_"));let S=DT(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(g){Bt.error(g)}}}_&&VC(l,_),PT(l);let u=l.getIn(["rootPath"]),d=ss.join(u,ln.HDB_CONFIG_FILE);n===!0&&TJ(c,u),Dr.writeFileSync(d,String(l)),s&&(Ht=Ec(l.toJSON())),Bt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(KC,"updateConfigValue");function TJ(e,t){try{let r=ss.join(t,"backup",`${ln.HDB_CONFIG_FILE}.bak`);Dr.copySync(e,r),Bt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Bt.error(dJ),Bt.error(r)}}a(TJ,"backupConfigFile");var gJ=["databases"];function Ec(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),Kf=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])&&!gJ.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;!cn[l.toUpperCase()]&&is[l]&&(s[is[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Ec,"flattenConfig");function DT(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(iJ(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Kt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Kt.autoCast(t)}a(DT,"castConfigValue");function RJ(){let e=Kt.getPropsFilePath(),t=ca(e);return co(t).toJSON()}a(RJ,"getConfiguration");async function AJ(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return KC(void 0,void 0,s,!0),EJ}catch(i){throw typeof i=="string"||i instanceof String?aJ(i,i,cJ.BAD_REQUEST,void 0,void 0,!0):i}}a(AJ,"setConfiguration");function MT(){let e=Kt.getPropsFilePath();try{Dr.accessSync(e,Dr.constants.F_OK|Dr.constants.R_OK)}catch(n){if(!Kt.noBootFile())throw Bt.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ca(e);return co(t).toJSON()}a(MT,"readConfigFile");function co(e){return sJ.parseDocument(Dr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(co,"parseYamlDoc");function OJ(){let e=MT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Kt.isEmptyOrZeroLength(t)?[]:t;let r=qC(t);if(r)throw Vf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Kt.isEmptyOrZeroLength(n)?[]:n;let s=qC(n);if(s)throw Vf.CONFIG_VALIDATION(s.message);if(!Kt.isEmptyOrZeroLength(n)&&!Kt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Kt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Vf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(OJ,"getClusteringRoutes");function WC(e){let t=kC(e);Ht={};for(let r in is){let n=t.get(r.toUpperCase());if(Kt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=is[r].toLowerCase();s===cn.LOGGING_ROOT?Ht[s]=ss.dirname(n):Ht[s]=n}return Ht}a(WC,"initOldConfig");function bJ(e){let t=MT();return oJ.get(t,e.replaceAll("_","."))}a(bJ,"getConfigFromFile");async function NJ(e,t){let r=co(ca());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Dr.writeFile(ca(),String(r))}a(NJ,"addConfig");function yJ(e){let t=ca(Kt.getPropsFilePath()),r=co(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=ss.join(n,ln.HDB_CONFIG_FILE);Dr.writeFileSync(s,String(r))}a(yJ,"deleteConfigFromFile");function IJ(){return Kf||(LT(),Kf)}a(IJ,"getConfigObj")});var zC=R((tSe,jC)=>{"use strict";var Wf=L(),Qf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},UT=class extends Qf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Wf.RAM_ALLOCATION_ENUM.DEFAULT,n=Wf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jC.exports={BaseLicense:Qf,ExtendedLicense:UT}});var la=R((nSe,rD)=>{"use strict";var pc=require("fs-extra"),XC=qf(),ZC=require("crypto"),wJ=require("moment"),CJ=require("uuid").v4,fr=k(),BT=require("path"),DJ=Y(),lo=L(),{totalmem:JC}=require("os"),LJ=zC().ExtendedLicense,hc="invalid license key format",PJ="061183",MJ="mofi25",UJ="aes-256-cbc",vJ=16,BJ=32,eD=J();eD.initSync();var vT;rD.exports={validateLicense:tD,generateFingerPrint:GJ,licenseSearch:xT,getLicense:FJ,checkMemoryLimit:kJ};function HT(){return BT.join(eD.getHdbBasePath(),lo.LICENSE_KEY_DIR_NAME,lo.LICENSE_FILE_NAME)}a(HT,"getLicenseDirPath");function HJ(){let e=HT();return BT.join(e,lo.LICENSE_FILE_NAME)}a(HJ,"getLicenseFilePath");function GT(){let e=HT();return BT.join(e,lo.REG_KEY_FILE_NAME)}a(GT,"getFingerPrintFilePath");async function GJ(){let e=GT();try{return await pc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await xJ();throw fr.error(`Error writing fingerprint file to ${e}`),fr.error(t),new Error("There was an error generating the fingerprint")}}a(GJ,"generateFingerPrint");async function xJ(){let e=CJ(),t=XC.hash(e),r=GT();try{await pc.mkdirp(HT()),await pc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fr.error(`Error writing fingerprint file to ${r}`),fr.error(n),new Error("There was an error generating the fingerprint")}return t}a(xJ,"writeFingerprint");function tD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:lo.RAM_ALLOCATION_ENUM.DEFAULT,version:lo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fr.error("empty license key passed to validate."),r;let n=GT(),s=!1;try{s=pc.statSync(n)}catch(i){fr.error(i)}if(s){let i;try{i=pc.readFileSync(n,"utf8")}catch{fr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(MJ),c=o[1];c=Buffer.concat([Buffer.from(c)],vJ);let l=Buffer.concat([Buffer.from(i)],BJ),_=ZC.createDecipheriv(UJ,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let f=qJ(o[0],i);if(f)u=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(hc),fr.error(hc),new Error(hc)}let d;if(isNaN(u))try{d=JSON.parse(u),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(hc),fr.error(hc),new Error(hc)}else r.exp_date=u;r.exp_date<wJ().valueOf()&&(r.valid_date=!1),XC.validate(o[1],`${PJ}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||fr.error("Invalid licence"),r}a(tD,"validateLicense");function qJ(e,t){try{let r=ZC.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fr.warn("Check old license failed")}}a(qJ,"checkOldLicense");function xT(){let e=new LJ,t=[];try{t=pc.readFileSync(HJ(),"utf-8").split(lo.NEW_LINE)}catch(r){r.code==="ENOENT"?fr.info("no license file found"):fr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(DJ.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=tD(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){fr.error("There was an error parsing the license string."),fr.error(s),e.ram_allocation=lo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return vT=e,e}a(xT,"licenseSearch");async function FJ(){return vT||await xT(),vT}a(FJ,"getLicense");function kJ(){let e=xT().ram_allocation,t=process.constrainedMemory?.()||JC();if(t=Math.round(Math.min(t,JC())/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(kJ,"checkMemoryLimit")});var Lr=R((cSe,SD)=>{"use strict";var oD="username is required",aD="nothing to update, must supply active, role or password to update",cD="password cannot be an empty string",lD="If role is specified, it cannot be empty.",uD="active must be true or false";SD.exports={addUser:JJ,alterUser:XJ,dropUser:e2,getSuperUser:s2,userInfo:t2,listUsers:zf,listUsersExternal:r2,setUsersToGlobal:Sc,findAndValidateUser:pD,getClusterUser:i2,USERNAME_REQUIRED:oD,ALTERUSER_NOTHING_TO_UPDATE:aD,EMPTY_PASSWORD:cD,EMPTY_ROLE:lD,ACTIVE_BOOLEAN:uD};var _D=Cr(),$J=ia(),kT=qf(),dD=DC(),fD=ur(),$T=hi(),un=Y(),ED=require("validate.js"),Ne=k(),{promisify:VJ}=require("util"),VT=fi(),nD=L(),sD=Ze(),YJ=Et(),iSe=J(),oSe=la(),KJ=_i(),{table:aSe}=(Re(),ae(Ve)),{handleHDBError:Us,hdb_errors:WJ}=ie(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:qT,HDB_ERROR_MSGS:mc}=WJ,{UserEventMsg:YT}=os(),FT=require("lodash"),{server:KT}=(yr(),ae(jo)),QJ=k();KT.getUser=(e,t)=>pD(e,t,t!=null);var hD={username:!0,active:!0,role:!0,password:!0},iD=new Map,jf=fD.searchByValue,jJ=fD.searchByHash,zJ=VJ($J.delete);async function JJ(e){let t=ED.cleanAttributes(e,hD),r=dD.addUserValidation(t);if(r)throw Us(new Error,r.message,vs.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jf(n),s=s&&Array.from(s)}catch(l){throw Ne.error("There was an error searching for a role in add user"),Ne.error(l),l}if(!s||s.length<1)throw Us(new Error,mc.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Us(new Error,mc.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=VT.encrypt(t.password)),t.password=kT.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await _D.insert(i)}catch(l){throw Ne.error("There was an error searching for a user."),Ne.error(l),l}Ne.debug(o);try{await Sc()}catch(l){throw Ne.error("Got an error setting users to global"),Ne.error(l),l}if(o.skipped_hashes.length===1)throw Us(new Error,mc.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],$T.signalUserChange(new YT(process.pid)),`${c.username} successfully added`}a(JJ,"addUser");async function XJ(e){let t=ED.cleanAttributes(e,hD);if(un.isEmptyOrZeroLength(t.username))throw new Error(oD);if(un.isEmptyOrZeroLength(t.password)&&un.isEmptyOrZeroLength(t.role)&&un.isEmptyOrZeroLength(t.active))throw new Error(aD);if(!un.isEmpty(t.password)&&un.isEmptyOrZeroLength(t.password.trim()))throw new Error(cD);if(!un.isEmpty(t.active)&&!un.isBoolean(t.active))throw new Error(uD);let r=ZJ(t.username);if(!un.isEmpty(t.password)&&!un.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=VT.encrypt(t.password)),t.password=kT.hash(t.password)),t.role==="")throw new Error(lD);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await jf(i)||[])}catch(c){throw Ne.error("Got an error searching for a role."),Ne.error(c),c}if(!o||o.length===0){let c=mc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ne.error(c),Us(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mc.ALTER_USER_DUP_ROLES(t.role);throw Ne.error(c),Us(new Error,c,vs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await _D.update(n)}catch(i){throw Ne.error("Error during update."),Ne.error(i),i}try{await Sc()}catch(i){throw Ne.error("Got an error setting users to global"),Ne.error(i),i}return $T.signalUserChange(new YT(process.pid)),s}a(XJ,"alterUser");function ZJ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(ZJ,"isClusterUser");async function e2(e){try{let t=dD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(un.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,mc.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await zJ(r)}catch(s){throw Ne.error("Got an error deleting a user."),Ne.error(s),s}Ne.debug(n);try{await Sc()}catch(s){throw Ne.error("Got an error setting users to global."),Ne.error(s),s}return $T.signalUserChange(new YT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(e2,"dropUser");async function t2(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=FT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await jJ(r)}catch(s){throw Ne.error("Got an error searching for a role."),Ne.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ne.error(r),r}return t}a(t2,"userInfo");async function r2(){let e;try{e=await zf()}catch(t){throw Ne.error("Got an error listing users."),Ne.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(r2,"listUsersExternal");async function zf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jf(e)}catch(o){throw Ne.error("Got an error searching for roles."),Ne.error(o),o}let r={};for(let o of t)r[o.id]=FT.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jf(n)}catch(o){throw Ne.error("Got an error searching for users."),Ne.error(o),o}let i=new Map;for(let o of s)o=FT.cloneDeep(o),o.role=r[o.role],n2(o.role),i.set(o.username,o);return i}catch(e){throw Ne.error("got an error listing users"),Ne.error(e),un.errorizeMessage(e)}return null}a(zf,"listUsers");function n2(e){try{if(!e){Ne.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(KJ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ne.error("Got an error trying to set system permissions."),Ne.error(t)}}a(n2,"appendSystemTablesToRole");async function Sc(){try{let e=await zf();global.hdb_users=e}catch(e){throw Ne.error(e),e}}a(Sc,"setUsersToGlobal");async function pD(e,t,r=!0){global.hdb_users||await Sc();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Us(new Error,qT.USER_INACTIVE,vs.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(iD.get(t)===n.password)return s;if(kT.validate(n.password,t))iD.set(t,n.password);else throw Us(new Error,qT.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(pD,"findAndValidateUser");async function s2(){global.hdb_users||await Sc();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(s2,"getSuperUser");async function i2(){let e=await zf(),t=YJ.getConfigFromFile(nD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!un.isEmpty(r)&&r?.role?.role===nD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=VT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+sD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+sD.SERVER_SUFFIX.ADMIN,r}a(i2,"getClusterUser");var mD=[];KT.invalidateUser=function(e){for(let t of mD)try{t(e)}catch(r){QJ.error("Error invalidating user",r)}};KT.onInvalidatedUser=function(e){mD.push(e)}});var bu=R((dSe,AD)=>{"use strict";var ua=k(),_n=L(),o2=Xw(),uSe=Bn(),_Se=Ei(),a2=Lr(),{validateEvent:TD}=os(),Ou=Hn(),c2=require("process"),{resetDatabases:l2}=(Re(),ae(Ve)),u2={[_n.ITC_EVENT_TYPES.SCHEMA]:_2,[_n.ITC_EVENT_TYPES.USER]:RD};async function _2(e){let t=TD(e);if(t){ua.error(t);return}ua.trace("ITC schemaHandler received schema event:",e),await o2(e.message),await d2(e.message)}a(_2,"schemaHandler");async function d2(e){try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=l2();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ua.error(t)}}a(d2,"syncSchemaMetadata");var gD=[];async function RD(e){try{try{Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ou.resetReadTxn(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ua.warn(r)}let t=TD(e);if(t){ua.error(t);return}ua.trace(`ITC userHandler ${_n.HDB_ITC_CLIENT_PREFIX}${c2.pid} received user event:`,e),await a2.setUsersToGlobal();for(let r of gD)r()}catch(t){ua.error(t)}}a(RD,"userHandler");RD.addListener=function(e){gD.push(e)};AD.exports=u2});var os=R((SSe,bD)=>{"use strict";var ESe=k(),WT=Y(),f2=L(),{ITC_ERRORS:Nu}=nn(),{parentPort:hSe,threadId:E2,isMainThread:h2,workerData:pSe}=require("worker_threads"),{onMessageFromWorkers:p2,broadcast:mSe,broadcastWithAcknowledgement:m2}=rt();bD.exports={sendItcEvent:S2,validateEvent:OD,SchemaEventMsg:T2,UserEventMsg:g2};var Jf;p2(async(e,t)=>{Jf=Jf||bu(),OD(e),Jf[e.type]&&await Jf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function S2(e){return!h2&&e.message&&(e.message.originator=E2),m2(e)}a(S2,"sendItcEvent");function OD(e){if(typeof e!="object")return Nu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||WT.isEmpty(e.type))return Nu.MISSING_TYPE;if(!e.hasOwnProperty("message")||WT.isEmpty(e.message))return Nu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||WT.isEmpty(e.message.originator))return Nu.MISSING_ORIGIN;if(f2.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nu.INVALID_EVENT(e.type)}a(OD,"validateEvent");function T2(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(T2,"SchemaEventMsg");function g2(e){this.originator=e}a(g2,"UserEventMsg")});var hi=R((RSe,wD)=>{"use strict";var ND=L(),gSe=Y(),Xf=k(),yD=jw(),Tc,{sendItcEvent:ID}=os();function R2(e){try{Xf.trace("signalSchemaChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.SCHEMA,e);return Tc.schema(t),ID(t)}catch(t){Xf.error(t)}}a(R2,"signalSchemaChange");function A2(e){try{Xf.trace("signalUserChange called with message:",e),Tc=Tc||bu();let t=new yD(ND.ITC_EVENT_TYPES.USER,e);return Tc.user(t),ID(t)}catch(t){Xf.error(t)}}a(A2,"signalUserChange");wD.exports={signalSchemaChange:R2,signalUserChange:A2}});var Zf=R((OSe,DD)=>{"use strict";var CD=Y(),O2=L(),b2=k(),N2=Lf(),y2=Df(),I2=hi(),{SchemaEventMsg:w2}=os(),C2="already exists in";DD.exports=D2;async function D2(e,t,r){if(CD.isEmptyOrZeroLength(r))return r;let n=[];CD.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 L2(e,t.schema,t.name,i)})),s}a(D2,"lmdbCheckForNewAttributes");async function L2(e,t,r,n){let s=new y2(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await P2(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(C2))b2.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(L2,"createNewAttribute");async function P2(e){let t;return t=await N2(e),I2.signalSchemaChange(new w2(process.pid,O2.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(P2,"createAttribute")});var gc=R((NSe,LD)=>{"use strict";var QT=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}};LD.exports=QT});var MD=R((ISe,PD)=>{"use strict";var M2=gc(),U2=L().OPERATIONS_ENUM,jT=class extends M2{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(U2.INSERT,r,n,s,i),this.records=t}};PD.exports=jT});var vD=R((CSe,UD)=>{"use strict";var v2=gc(),B2=L().OPERATIONS_ENUM,zT=class extends v2{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(B2.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};UD.exports=zT});var HD=R((LSe,BD)=>{"use strict";var H2=gc(),G2=L().OPERATIONS_ENUM,JT=class extends H2{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(G2.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};BD.exports=JT});var xD=R((MSe,GD)=>{"use strict";var x2=gc(),q2=L().OPERATIONS_ENUM,XT=class extends x2{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(q2.DELETE,n,s,t,i),this.original_records=r}};GD.exports=XT});var yu=R((BSe,$D)=>{"use strict";var vSe=require("path"),qD=Ye(),F2=MD(),k2=vD(),$2=HD(),V2=xD(),Rc=_t(),FD=Y(),{CONFIG_PARAMS:Y2}=L(),kD=J();kD.initSync();var eE=L().OPERATIONS_ENUM,{getTransactionAuditStorePath:K2}=Je();$D.exports=W2;async function W2(e,t){if(kD.get(Y2.LOGGING_AUDITLOG)===!1)return;let r=K2(e.schema,e.table),n=await qD.openEnvironment(r,e.table,!0),s=Q2(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){qD.initializeDBIs(n,Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),FD.isEmpty(s.user_name)||n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Rc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(W2,"writeTransaction");function Q2(e,t){let r=FD.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===eE.INSERT)return new F2(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPDATE)return new k2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.UPSERT)return new $2(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===eE.DELETE)return new V2(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Q2,"createTransactionObject")});var ZT=R((xSe,VD)=>{"use strict";var j2=Su(),GSe=tu(),Iu=L(),z2=ru(),J2=Zo().insertRecords,X2=Ye(),Z2=k(),e4=Zf(),{getSchemaPath:t4}=Je(),r4=yu();VD.exports=n4;async function n4(e){try{let{schema_table:t,attributes:r}=j2(e);z2(e,r,t.hash_attribute),e.schema!==Iu.SYSTEM_SCHEMA_NAME&&(r.includes(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await e4(e.hdb_auth_header,t,r),s=t4(e.schema,e.table),i=await X2.openEnvironment(s,e.table),o=await J2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await r4(e,o)}catch(c){Z2.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(n4,"lmdbCreateRecords")});var WD=R((FSe,KD)=>{"use strict";var YD=L(),s4=ZT(),i4=tu(),o4=require("fs-extra"),{getSchemaPath:a4}=Je();KD.exports=c4;async function c4(e){let t=[{name:e.schema,createddate:Date.now()}],r=new i4(YD.SYSTEM_SCHEMA_NAME,YD.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await s4(r),await o4.mkdirp(a4(e.schema))}a(c4,"lmdbCreateSchema")});var jD=R(($Se,QD)=>{"use strict";var eg=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}};QD.exports=eg});var ZD=R((QSe,XD)=>{"use strict";var zD=Ye(),tg=Nr(),rg=nn().LMDB_ERRORS_ENUM,l4=_t(),JD=k(),YSe=Y(),u4=require("lmdb"),_4=jD(),d4=L(),{OVERFLOW_MARKER:KSe,MAX_SEARCH_KEY_LENGTH:WSe}=l4,f4=d4.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function E4(e,t,r,n){if(tg.validateEnv(e),t===void 0)throw new Error(rg.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(rg.IDS_REQUIRED):new Error(rg.IDS_MUST_BE_ITERABLE);try{let s=zD.listDBIs(e);zD.initializeDBIs(e,t,s);let i=new _4,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[f4]>n){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,u4.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let g=s[S];if(!h.hasOwnProperty(g)||g===t)continue;let T=e.dbis[g],b=h[g];if(b!=null)try{let N=tg.getIndexedValues(b);if(N)for(let U=0,v=N.length;U<v;U++)T.remove(N[U],o)}catch{JD.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(m),l.push(o),i.original_records.push(h)}catch(h){JD.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let E=0,f=u.length;E<f;E++)u[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=tg.getNextMonotonicTime(),i}catch(s){throw s}}a(E4,"deleteRecords");XD.exports={deleteRecords:E4}});var wu=R((zSe,tL)=>{"use strict";var Ac=Y(),h4=ZD(),p4=Ye(),{getSchemaPath:m4}=Je(),S4=yu(),T4=k();tL.exports=g4;async function g4(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ac.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ac.isEmptyOrZeroLength(e.hash_values)&&!Ac.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Ac.isEmpty(l)||e.hash_values.push(l)}}if(Ac.isEmptyOrZeroLength(e.hash_values))return eL([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ac.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=m4(e.schema,e.table),i=await p4.openEnvironment(s,e.table),o=await h4.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await S4(e,o)}catch(c){T4.error(`unable to write transaction due to ${c.message}`)}return eL(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(g4,"lmdbDeleteRecords");function eL(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(eL,"createDeleteResponse")});var sg=R((ZSe,rL)=>{"use strict";var R4=L(),XSe=Nr();function ng(e,t){let r=Object.create(null);if(t.length===1&&R4.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(ng,"parseRow");function A4(e,t,r,n){let s=ng(r,e);n.push(s)}a(A4,"searchAll");function O4(e,t,r,n){let s=ng(r,e);n[t]=s}a(O4,"searchAllToMap");function b4(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(b4,"iterateDBI");function _a(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(_a,"pushResults");function N4(e,t,r,n,s,i){t.toString().endsWith(e)&&_a(t,r,n,s,i)}a(N4,"endsWith");function y4(e,t,r,n,s,i){t.toString().includes(e)&&_a(t,r,n,s,i)}a(y4,"contains");function I4(e,t,r,n,s,i){t>e&&_a(t,r,n,s,i)}a(I4,"greaterThanCompare");function w4(e,t,r,n,s,i){t>=e&&_a(t,r,n,s,i)}a(w4,"greaterThanEqualCompare");function C4(e,t,r,n,s,i){t<e&&_a(t,r,n,s,i)}a(C4,"lessThanCompare");function D4(e,t,r,n,s,i){t<=e&&_a(t,r,n,s,i)}a(D4,"lessThanEqualCompare");rL.exports={parseRow:ng,searchAll:A4,searchAllToMap:O4,iterateDBI:b4,endsWith:N4,contains:y4,greaterThanCompare:I4,greaterThanEqualCompare:w4,lessThanCompare:C4,lessThanEqualCompare:D4,pushResults:_a}});var Oc=R((sTe,lL)=>{"use strict";var uo=Ye(),tTe=k(),dn=Nr(),tE=_t(),Tt=nn().LMDB_ERRORS_ENUM,rTe=Y(),L4=L(),rE=sg(),{parseRow:P4}=rE,nTe=require("lmdb"),{OVERFLOW_MARKER:nL,MAX_SEARCH_KEY_LENGTH:M4}=tE;function sL(e,t,r,n=!1,s=void 0,i=void 0){return da(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(sL,"iterateFullIndex");function Cu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return da(e,t,r,(u,d,E,f)=>{let T={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return f===r?(T.values=!1,d.getRange(T).map(b=>({value:b}))):d.getRange(T)})}a(Cu,"iterateRangeBetween");function da(e,t,r,n){let s=e.database||e,i=uo.openDBI(s,r);i[tE.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&uo.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(da,"setupTransaction");function iL(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(nL)){if(!s)if(r)s=uo.openDBI(e,r);else{let l=uo.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=uo.openDBI(e,l[_]),!s[tE.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(iL,"getOverflowCheck");function U4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return da(e,t,t,(o,c,l)=>(nE(r),r=Du(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>P4(_.value,r))))}a(U4,"searchAll");function v4(e,t,r,n=!1,s=void 0,i=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);nE(r),r=Du(e.database||e,r);let o=new Map;for(let{key:c,value:l}of sL(e,t,t,n,s,i))o.set(c,rE.parseRow(l,r));return o}a(v4,"searchAllToMap");function B4(e,t,r=!1,n=void 0,s=void 0){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sL(e,void 0,t,r,n,s),c=o.transaction,l=iL(c.database,c,void 0,t);for(let{key:_,value:u}of o){let d=l(_,u);i[d]===void 0&&(i[d]=[]),i[d].push(u)}return i}a(B4,"iterateDBI");function H4(e,t){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);return uo.statDBI(e,t).entryCount}a(H4,"countAll");function G4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,t,r,(c,l,_,u)=>(n=dn.convertKeyValueToWrite(n),u===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(G4,"equals");function x4(e,t,r){return _o(e,t,r),uo.openDBI(e,t).getValuesCount(r)}a(x4,"count");function q4(e,t,r,n,s=!1,i=void 0,o=void 0){return _o(e,r,n),da(e,null,r,(c,l)=>{n=dn.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return u.DONE}}),u.filter(E=>E)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(q4,"startsWith");function F4(e,t,r,n,s=!1,i=void 0,o=void 0){return oL(e,t,r,n,s,i,o,!0)}a(F4,"endsWith");function oL(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return _o(e,r,n),da(e,null,r,(l,_,u,d)=>{let E=iL(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(nL)?_.getValues(f,{transaction:l}).map(m=>{let S=E(f,m);if(c?S.endsWith(n):S.includes(n))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(n):h.includes(n))?_[tE.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:l}).map(m=>({key:f,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(oL,"contains");function k4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!0,!1)}a(k4,"greaterThan");function $4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Cu(e,t,r,n,l,s,i,o,!1,!1)}a($4,"greaterThanEqual");function V4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!0)}a(V4,"lessThan");function Y4(e,t,r,n,s=!1,i=void 0,o=void 0){_o(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Cu(e,t,r,l,n,s,i,o,!1,!1)}a(Y4,"lessThanEqual");function K4(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(dn.validateEnv(e),r===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Tt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Tt.END_VALUE_REQUIRED);if(n=dn.convertKeyValueToWrite(n),s=dn.convertKeyValueToWrite(s),n>s)throw new Error(Tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Cu(e,t,r,n,s,i,o,c)}a(K4,"between");function W4(e,t,r,n){dn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),r=Du(s,r),n===void 0)throw new Error(Tt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=rE.parseRow(c,r)),o}a(W4,"searchByHash");function Q4(e,t,r){dn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Q4,"checkHashExists");function j4(e,t,r,n,s=[]){return cL(e,t,r,n,s),aL(e,t,r,n,s).map(i=>i[1])}a(j4,"batchSearchByHash");function z4(e,t,r,n,s=[]){cL(e,t,r,n,s);let i=new Map;for(let[o,c]of aL(e,t,r,n,s))i.set(o,c);return i}a(z4,"batchSearchByHashToMap");function aL(e,t,r,n,s=[]){return da(e,t,t,(i,o,c)=>{r=Du(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,rE.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(aL,"batchHashSearch");function cL(e,t,r,n,s){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.HASH_ATTRIBUTE_REQUIRED);if(nE(r),n==null)throw new Error(Tt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Tt.IDS_MUST_BE_ITERABLE)}a(cL,"initializeBatchSearchByHash");function nE(e){if(!Array.isArray(e))throw e===void 0?new Error(Tt.FETCH_ATTRIBUTES_REQUIRED):new Error(Tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(nE,"validateFetchAttributes");function _o(e,t,r){if(dn.validateEnv(e),t===void 0)throw new Error(Tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Tt.SEARCH_VALUE_REQUIRED);if(r?.length>M4)throw new Error(Tt.SEARCH_VALUE_TOO_LARGE)}a(_o,"validateComparisonFunctions");function Du(e,t){return t.length===1&&L4.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=uo.listDBIs(e)),t}a(Du,"setGetWholeRowAttributes");lL.exports={searchAll:U4,searchAllToMap:v4,count:x4,countAll:H4,equals:G4,startsWith:q4,endsWith:F4,contains:oL,searchByHash:W4,setGetWholeRowAttributes:Du,batchSearchByHash:j4,batchSearchByHashToMap:z4,checkHashExists:Q4,iterateDBI:B4,greaterThan:k4,greaterThanEqual:$4,lessThan:V4,lessThanEqual:Y4,between:K4}});var bc=R((oTe,EL)=>{var uL=require("lodash"),_L=nt(),me=require("joi"),J4=Y(),{hdb_schema_table:Lu,checkValidTable:dL,hdb_table:fL,hdb_database:sE}=Ls(),{handleHDBError:X4,hdb_errors:Z4}=ie(),{getDatabases:e3}=(Re(),ae(Ve)),{HTTP_STATUS_CODES:t3}=Z4,r3=me.object({database:sE,schema:sE,table:fL,search_attribute:Lu,search_value:me.any().required(),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),desc:me.bool(),limit:me.number().integer().min(1),offset:me.number().integer().min(0)}),n3=me.object({database:sE,schema:sE,table:fL,operator:me.string().valid("and","or").default("and").lowercase(),offset:me.number().integer().min(0),limit:me.number().integer().min(1),get_attributes:me.array().min(1).items(me.alternatives(Lu,me.object())).optional(),sort:me.object({attribute:me.alternatives(Lu,me.array().min(1)),descending:me.bool().optional()}).optional(),conditions:me.array().min(1).items(me.alternatives(me.object({operator:me.string().valid("and","or").default("and").lowercase(),conditions:me.array()}),me.object({search_attribute:me.alternatives(Lu,me.array().min(1)),search_type:me.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:me.when("search_type",{switch:[{is:"equals",then:me.any()},{is:"between",then:me.array().items(me.alternatives([me.string(),me.number()])).length(2)}],otherwise:me.alternatives(me.string(),me.number())}).required()}))).required()});EL.exports=function(e,t){let r=null;switch(t){case"value":r=_L.validateBySchema(e,r3);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(dL("database",e.schema)),i(dL("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=_L.validateBySchema(e,n3);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=J4.checkGlobalSchemaTable(e.schema,e.table);if(s)return X4(new Error,s,t3.NOT_FOUND);let o=e3()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,E=u.conditions.length;d<E;d++){let f=u.conditions[d];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=uL.filter(c,u=>u!=="*"&&!u.startsWith?.("$")&&u.attribute!=="*"&&!Array.isArray(u)&&!u.name&&!uL.some(o,d=>d===u||d.attribute===u||d.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var ig=R((cTe,hL)=>{"use strict";var s3=Ye(),i3=bc(),{getSchemaPath:o3}=Je();hL.exports=a3;function a3(e){let t=i3(e,"hashes");if(t)throw t;let r=o3(e.schema,e.table);return s3.openEnvironment(r,e.table)}a(a3,"initialize")});var og=R((uTe,pL)=>{"use strict";var c3=Oc(),l3=ig();pL.exports=u3;async function u3(e){let t=await l3(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return c3.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(u3,"lmdbGetDataByHash")});var Nc=R((dTe,mL)=>{"use strict";var ag=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};mL.exports=ag});var TL=R((hTe,SL)=>{"use strict";var ETe=Nc(),_3=Oc(),d3=ig();SL.exports=f3;async function f3(e){let t=await d3(e),r=global.hdb_schema[e.schema][e.table];return _3.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(f3,"lmdbSearchByHash")});var as=R((mTe,gL)=>{"use strict";var cg=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,_=void 0,u=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=_,this.offset=u}};gL.exports=cg});var iE=R((TTe,yL)=>{"use strict";var Er=Oc(),E3=Ye(),h3=Y(),Se=_t(),fa=L(),p3=_i(),RL=nn().LMDB_ERRORS_ENUM,{getSchemaPath:m3}=Je(),pi=fa.SEARCH_WILDCARDS;async function S3(e,t,r){let n;e.schema===fa.SYSTEM_SCHEMA_NAME?n=p3[e.table]:n=global.hdb_schema[e.schema][e.table];let s=NL(e,n.hash_attribute,r,t);return OL(e,s,n.hash_attribute,r)}a(S3,"prepSearch");async function OL(e,t,r,n){let s=m3(e.schema,e.table),i=await E3.openEnvironment(s,e.table),o=bL(i,e,t,r),c=o.transaction||i;if([Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Se.SEARCH_TYPES.SEARCH_ALL,Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(T3(e,r)===!1){let u=e.search_attribute;if(u===r)return n?AL(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[u]:E.key}),"toObject");return n?AL(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?Er.batchSearchByHashToMap(c,r,e.get_attributes,_):Er.batchSearchByHash(c,r,e.get_attributes,_)}a(OL,"executeSearch");function bL(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 Se.SEARCH_TYPES.EQUALS:s=Er.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.CONTAINS:s=Er.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.ENDS_WITH:case Se.SEARCH_TYPES._ENDS_WITH:s=Er.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.STARTS_WITH:case Se.SEARCH_TYPES._STARTS_WITH:s=Er.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Er.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Er.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Se.SEARCH_TYPES.SEARCH_ALL:return Er.searchAll(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Er.searchAllToMap(e,n,t.get_attributes,o,c,l);case Se.SEARCH_TYPES.BETWEEN:s=Er.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN:case Se.SEARCH_TYPES._GREATER_THAN:s=Er.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.GREATER_THAN_EQUAL:case Se.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Er.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN:case Se.SEARCH_TYPES._LESS_THAN:s=Er.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case Se.SEARCH_TYPES.LESS_THAN_EQUAL:case Se.SEARCH_TYPES._LESS_THAN_EQUAL:s=Er.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(bL,"searchByType");function AL(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(AL,"createMapFromIterable");function T3(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(T3,"checkToFetchMore");function NL(e,t,r,n){if(h3.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),pi.indexOf(s)>-1)return r===!0?Se.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Se.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(pi[0])<0&&s.indexOf(pi[1])<0)return c===!0?r===!0?Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Se.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Se.SEARCH_TYPES.EQUALS;if(pi.indexOf(i)>=0&&pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),Se.SEARCH_TYPES.CONTAINS;if(pi.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Se.SEARCH_TYPES.ENDS_WITH;if(pi.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),Se.SEARCH_TYPES.STARTS_WITH;if(s.includes(pi[0])||s.includes(pi[1]))return Se.SEARCH_TYPES.EQUALS;throw new Error(RL.UNKNOWN_SEARCH_TYPE)}else switch(n){case fa.VALUE_SEARCH_COMPARATORS.BETWEEN:return Se.SEARCH_TYPES.BETWEEN;case fa.VALUE_SEARCH_COMPARATORS.GREATER:return Se.SEARCH_TYPES.GREATER_THAN;case fa.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Se.SEARCH_TYPES.GREATER_THAN_EQUAL;case fa.VALUE_SEARCH_COMPARATORS.LESS:return Se.SEARCH_TYPES.LESS_THAN;case fa.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Se.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RL.UNKNOWN_SEARCH_TYPE)}}a(NL,"createSearchTypeFromSearchObject");yL.exports={executeSearch:OL,createSearchTypeFromSearchObject:NL,prepSearch:S3,searchByType:bL}});var wL=R((ATe,IL)=>{"use strict";var RTe=as(),g3=bc(),R3=Y(),A3=L(),O3=iE();IL.exports=b3;function b3(e,t){if(!R3.isEmpty(t)&&A3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=g3(e,"value");if(n)throw n;return O3.prepSearch(e,t,!0)}a(b3,"lmdbGetDataByValue")});var Pu=R((NTe,CL)=>{"use strict";var bTe=as(),N3=bc(),y3=Y(),I3=L(),w3=iE();CL.exports=C3;async function C3(e,t){if(!y3.isEmpty(t)&&I3.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N3(e,"value");if(n)throw n;return w3.prepSearch(e,t,!1)}a(C3,"lmdbSearchByValue")});var LL=R((wTe,DL)=>{"use strict";var ITe=_t(),lg=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}},ug=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},_g=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};DL.exports={SearchByConditionsObject:lg,SearchCondition:ug,SortAttribute:_g}});var BL=R((PTe,vL)=>{"use strict";var DTe=LL().SearchByConditionsObject,D3=as(),L3=bc(),dg=Oc(),oE=_t(),{Resource:LTe}=(Mn(),ae(fg)),UL=iE(),P3=sg(),M3=require("lodash"),{getSchemaPath:U3}=Je(),PL=Ye(),{handleHDBError:v3,hdb_errors:B3}=ie(),{HTTP_STATUS_CODES:H3}=B3,G3=1e8;vL.exports=x3;async function x3(e){let t=L3(e,"conditions");if(t)throw v3(t,t.message,H3.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=U3(e.schema,e.table),n=await PL.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)PL.openDBI(n,_.search_attribute);let i=M3.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===oE.SEARCH_TYPES.EQUALS?_.estimated_count=dg.count(n,_.search_attribute,_.search_value):u===oE.SEARCH_TYPES.CONTAINS||u===oE.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=G3}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await ML(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],u=i.slice(1).map(UL.filterByType),d=u.length,E=dg.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(l=l.filter(f=>{for(let h=0;h<d;h++)if(!u[h](f))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(f=>P3.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await ML(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=dg.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(x3,"lmdbSearchByConditions");async function ML(e,t,r,n){let s=new D3(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===oE.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,UL.searchByType(e,s,i,n).map(o=>o.value)}a(ML,"executeConditionSearch")});var Mu=R((UTe,HL)=>{"use strict";var q3=L().OPERATIONS_ENUM,Eg=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=q3.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};HL.exports=Eg});var hg=R((BTe,YL)=>{"use strict";var FL=as(),kL=Mu(),$L=Pu(),VL=wu(),Pr=L(),GL=Y(),xL=Ye(),{getTransactionAuditStorePath:F3,getSchemaPath:k3}=Je(),qL=k();YL.exports=$3;async function $3(e){try{if(GL.isEmpty(global.hdb_schema[e.schema])||GL.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await V3(e),await Y3(e);let t=k3(e.schema,e.table);try{await xL.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=F3(e.schema,e.table);await xL.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qL.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a($3,"lmdbDropTable");async function V3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await $L(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await VL(s)}a(V3,"deleteAttributesFromSystem");async function Y3(e){let t=new FL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Pr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await $L(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 kL(Pr.SYSTEM_SCHEMA_NAME,Pr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await VL(s)}catch(i){throw i}}a(Y3,"dropTableFromSystem")});var WL=R((GTe,KL)=>{"use strict";var K3=require("fs-extra"),W3=as(),Q3=Nc(),j3=Mu(),z3=hg(),J3=wu(),X3=og(),Z3=Pu(),mi=L(),{getSchemaPath:eX}=Je(),{handleHDBError:tX,hdb_errors:rX}=ie(),{HDB_ERROR_MSGS:nX,HTTP_STATUS_CODES:sX}=rX;KL.exports=iX;async function iX(e){let t;try{t=await oX(e.schema);let r=new W3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Z3(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await z3(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await J3(s);let i=eX(t);await K3.remove(i)}catch(r){throw r}}a(iX,"lmdbDropSchema");async function oX(e){let t=new Q3(mi.SYSTEM_SCHEMA_NAME,mi.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await X3(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw tX(new Error,nX.SCHEMA_NOT_FOUND(e),sX.NOT_FOUND,void 0,void 0,!0);return n}a(oX,"validateDropSchema")});var Uu=R((qTe,QL)=>{"use strict";var pg=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};QL.exports=pg});var Sg=R(($Te,jL)=>{"use strict";var aX=require("fs-extra"),aE=Ye(),{getTransactionAuditStorePath:cX}=Je(),mg=_t(),kTe=Uu();jL.exports=lX;async function lX(e){let t;try{let r=cX(e.schema,e.table);await aX.mkdirp(r),t=await aE.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{aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),aE.createDBI(t,mg.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),aE.createDBI(t,mg.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(lX,"createTransactionsAuditEnvironment")});var ZL=R((YTe,XL)=>{"use strict";var Tg=L(),zL=Ye(),uX=Zo(),{getSystemSchemaPath:_X,getSchemaPath:dX}=Je(),fX=_i(),EX=Lf(),gg=Df(),hX=k(),pX=Sg(),Ag=fX.hdb_table,JL=[];for(let e=0;e<Ag.attributes.length;e++)JL.push(Ag.attributes[e].attribute);XL.exports=mX;async function mX(e,t){let r=dX(t.schema,t.table),n=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new gg(t.schema,t.table,Tg.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new gg(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zL.createEnvironment(r,t.table),e!==void 0){let o=await zL.openEnvironment(_X(),Tg.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await uX.insertRecords(o,Ag.hash_attribute,JL,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Rg(n),await Rg(s),await Rg(i)}await pX(t)}catch(o){throw o}}a(mX,"lmdbCreateTable");async function Rg(e){try{await EX(e)}catch(t){hX.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Rg,"createAttribute")});var tP=R((WTe,eP)=>{"use strict";var SX=Su(),TX=ru(),gX=Zf(),vu=L(),RX=Zo().updateRecords,AX=Ye(),{getSchemaPath:OX}=Je(),bX=yu(),NX=k();eP.exports=yX;async function yX(e){try{let{schema_table:t,attributes:r}=SX(e);TX(e,r,t.hash_attribute),e.schema!==vu.SYSTEM_SCHEMA_NAME&&(r.includes(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await gX(e.hdb_auth_header,t,r),s=OX(e.schema,e.table),i=await AX.openEnvironment(s,e.table),o=await RX(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await bX(e,o)}catch(c){NX.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(yX,"lmdbUpdateRecords")});var nP=R((jTe,rP)=>{"use strict";var IX=L().OPERATIONS_ENUM,Og=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=IX.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rP.exports=Og});var iP=R((XTe,sP)=>{"use strict";var JTe=nP(),wX=Su(),CX=ru(),DX=Zf(),Bu=L(),LX=Zo().upsertRecords,PX=Ye(),{getSchemaPath:MX}=Je(),UX=yu(),vX=k(),{handleHDBError:BX,hdb_errors:HX}=ie();sP.exports=GX;async function GX(e){let t;try{t=wX(e)}catch(l){throw BX(l,l.message,HX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;CX(e,n,r.hash_attribute),e.schema!==Bu.SYSTEM_SCHEMA_NAME&&(n.includes(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await DX(e.hdb_auth_header,r,n),i=MX(e.schema,e.table),o=await PX.openEnvironment(i,e.table),c=await LX(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await UX(e,c)}catch(l){vX.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(GX,"lmdbUpsertRecords")});var aP=R((ege,oP)=>{"use strict";var bg=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};oP.exports=bg});var lP=R((rge,cP)=>{"use strict";var Ng=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}};cP.exports=Ng});var dP=R((ige,_P)=>{"use strict";var yg=Ye(),{getTransactionAuditStorePath:xX}=Je(),sge=aP(),Hu=_t(),qX=Y(),uP=lP(),FX=require("util").promisify,kX=FX(setTimeout),$X=1e4,VX=100;_P.exports=YX;async function YX(e){let t=xX(e.schema,e.table),r=await yg.openEnvironment(t,e.table,!0),n=yg.listDBIs(r);yg.initializeDBIs(r,Hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new uP;do s=await KX(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 kX(VX);while(s.transactions_deleted>0);return i}a(YX,"deleteAuditLogsBefore");async function KX(e,t){let r=new uP;try{let n=e.dbis[Hu.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[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];qX.isEmpty(c)||(s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>$X)break}return await s,r}catch(n){throw n}}a(KX,"deleteTransactions")});var EP=R((age,fP)=>{"use strict";var Ig=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};fP.exports=Ig});var pP=R((uge,hP)=>{"use strict";var WX=as(),QX=Mu(),lge=EP(),Bs=L(),jX=Y(),wg=Ye(),zX=_i(),JX=Pu(),XX=wu(),{getSchemaPath:ZX}=Je();hP.exports=eZ;async function eZ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=zX[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await rZ(e),s=ZX(e.schema,e.table),i=await wg.openEnvironment(s,e.table);return t===!0&&await tZ(e,i,r.hash_attribute),wg.dropDBI(i,e.attribute),n}a(eZ,"lmdbDropAttribute");async function tZ(e,t,r){let n=wg.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let _={};for(let u in c)u!==i&&(_[u]=c[u]);s=t.dbis[r].put(o,_,l)}await s}a(tZ,"removeAttributeFromAllObjects");async function rZ(e){let t=new WX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await JX(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jX.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new QX(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return XX(i)}a(rZ,"dropAttributeFromSystem")});var AP=R((fge,RP)=>{"use strict";var Cg=Ye(),yc=_t(),dge=Nr(),Dg=L(),mP=Y(),{getTransactionAuditStorePath:nZ}=Je(),sZ=Oc(),cE=gc(),iZ=k();RP.exports=oZ;async function oZ(e){let t=nZ(e.schema,e.table),r=await Cg.openEnvironment(t,e.table,!0),n=Cg.listDBIs(r);Cg.initializeDBIs(r,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return SP(r,e.search_values);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,cZ(r,e.search_values,s);case Dg.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return aZ(r,e.search_values);default:return SP(r)}}a(oZ,"readAuditLog");function SP(e,t=[0,Date.now()]){mP.isEmpty(t[0])&&(t[0]=0),mP.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[yc.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 cE,s))}a(SP,"searchTransactionsByTimestamp");function aZ(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[yc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,gP(e,i))}return Object.fromEntries(r)}a(aZ,"searchTransactionsByUsername");function cZ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=sZ.equals(e,yc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=gP(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);TP(l,"records",r,u,o),TP(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(cZ,"searchTransactionsByHashValues");function TP(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let _=s.get(l),u=_[_.length-1];if(u.timestamp===i)u[t]=[c];else{let d=new cE(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new cE(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(TP,"loopRecords");function gP(e,t){let r=[];try{let n=e.dbis[yc.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 cE,i);r.push(o)}}catch(i){iZ.warn(i)}return r}catch(n){throw n}}a(gP,"batchSearchTransactions")});var bP=R((mge,OP)=>{"use strict";var{getSchemaPath:hge}=Je(),pge=Ye(),{database:lZ}=(Re(),ae(Ve));OP.exports={writeTransaction:uZ};async function uZ(e,t,r){return lZ({database:e,table:t}).transaction(r)}a(uZ,"writeTransaction")});var wP=R((Tge,IP)=>{"use strict";var{getSchemaPath:NP}=Je(),yP=Ye();IP.exports={flush:_Z,resetReadTxn:dZ};async function _Z(e,t){return(await yP.openEnvironment(NP(e,t),t.toString())).flushed}a(_Z,"flush");async function dZ(e,t){try{(await yP.openEnvironment(NP(e,t),t.toString())).resetReadTxn()}catch{}}a(dZ,"resetReadTxn")});var PP=R((Rge,LP)=>{"use strict";var{Readable:fZ}=require("stream"),{getDatabases:EZ}=(Re(),ae(Ve)),{readSync:hZ,openSync:pZ,createReadStream:CP}=require("fs"),{open:mZ}=require("lmdb"),DP=_u(),SZ=du(),{AUDIT_STORE_OPTIONS:TZ}=(no(),ae(MP)),{INTERNAL_DBIS_NAME:gZ,AUDIT_STORE_NAME:RZ}=_t();LP.exports=OZ;var Lg=32768,AZ=100;async function OZ(e){let t=e.database||e.schema||"data",r=EZ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let u=_.dbisDB,d=mZ({noSync:!0,maxDbs:SZ.MAX_DBS}),E,f=d.openDB(gZ,new DP(!1)),h=u.useReadTransaction(),m=0,S=a(async function(T,b){b.encoding="binary",b.encoder=void 0;let N=d.openDB(T,b),U=u.openDB(T,b);for(let{key:v,version:q,value:M}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=N.put(v,M,q),m++%AZ===0&&(await new Promise(W=>setTimeout(W,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:T,value:b}of u.getRange({transaction:h,start:!1}))if(s.some(N=>T.startsWith?.(N+"/"))){f.put(T,b);let[,N]=T.split("/"),U=!N,v=new DP(!U,U);await S(T,v)}e.include_audit&&await S(RZ,Object.assign({},TZ)),await E;let g=CP(d.path);return g.headers=l(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=pZ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Lg);hZ(c,_,0,Lg),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=CP(null,{fd:c,start:Lg}),E=new fZ.from(async function*(){yield _;for await(let f of d)u.openTimer&&(u.openTimer=0),yield f;u.done()}());return E.headers=l(),E});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(OZ,"getBackup")});var BP=R((Oge,vP)=>{"use strict";var bZ=k(),{handleHDBError:NZ}=ie(),yZ=ew(),IZ=Lf(),wZ=ZT(),CZ=WD(),DZ=wu(),LZ=og(),PZ=TL(),MZ=wL(),UZ=Pu(),vZ=BL(),BZ=WL(),HZ=ZL(),GZ=tP(),xZ=iP(),qZ=dP(),FZ=hg(),kZ=pP(),$Z=AP(),VZ=bP(),UP=wP(),YZ=PP(),Pg=class extends yZ{static{a(this,"LMDBBridge")}async searchByConditions(t){return vZ(t)}async getDataByHash(t){return await LZ(t)}async searchByHash(t){return await PZ(t)}async getDataByValue(t,r){return await MZ(t,r)}async searchByValue(t){return await UZ(t)}async createSchema(t){return await CZ(t)}async dropSchema(t){return await BZ(t)}async createTable(t,r){return await HZ(t,r)}async dropTable(t){return await FZ(t)}async createAttribute(t){return await IZ(t)}async createRecords(t){return await wZ(t)}async updateRecords(t){return await GZ(t)}async upsertRecords(t){try{return await xZ(t)}catch(r){throw NZ(r,null,null,bZ.ERR,r)}}async deleteRecords(t){return await DZ(t)}async dropAttribute(t){return await kZ(t)}async deleteAuditLogsBefore(t){return await qZ(t)}async readAuditLog(t){return await $Z(t)}writeTransaction(t,r,n){return VZ.writeTransaction(t,r,n)}flush(t,r){return UP.flush(t,r)}resetReadTxn(t,r){return UP.resetReadTxn(t,r)}getBackup(t){return YZ(t)}};vP.exports=Pg});function jZ(){QZ=setInterval(function(){for(let e of Mg)if(e.stale){let t=e[Ie]?.url;qP.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},WZ).unref()}var Ug,xP,qP,FP,kP,$P,HP,Mg,KZ,Gu,GP,Ea,lE,WZ,QZ,vg=be(()=>{Ug=G(Nr()),xP=G(ie()),qP=G(k());Mn();FP=G(J()),kP=G(L()),$P=G(Y()),HP=100,Mg=new Set,KZ=(0,$P.convertToMS)(FP.get(kP.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ea=class e{static{a(this,"DatabaseTransaction")}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),Mg.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Mg.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Gu&&!this.overloadChecked&&performance.now()-GP>KZ)throw new xP.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=t.timestamp||(0,Ug.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let m=d;m<this.validated;m++){let S=this.writes[m];if(!S)continue;let g=S[f===0?"before":"beforeIntermediate"];if(g){let T=g();h?h.push?h.push(T):h=[h,T]:h=T}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}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 E=d.store.ifVersion(d.key,d.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.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 Gu||(Gu=s,GP=performance.now(),Gu.then(()=>{Gu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+HP/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let u={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));u.next=d}return u}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},lE=class extends Ea{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Ug.getNextMonotonicTime)())}getReadTxn(){}},WZ=3e4;a(jZ,"startMonitoringTxns");jZ()});function it(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 Ea;e.timestamp&&(n.timestamp=e.timestamp),n[Ie]=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 VP,ha=be(()=>{VP=require("../index");Mn();vg();a(it,"transaction");(0,VP._assignPackageExport)("transaction",it);it.commit=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};it.abort=function(e){let t=(e[Ie]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var XP={};$e(XP,{ResourceBridge:()=>Gg});function xg({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 KP(e,t){let r=Hs(e),n=xg(e,r);if(!r)throw new cs.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},o;it(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let _=c[l++],u;try{u=await r.get({id:_,lazy:s,select:n},i),u=u&&_E(u)}catch(d){u={message:d.toString()}}return t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||JZ,r=Mr()[t];if(!r)throw(0,cs.handleHDBError)(new Error,zZ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WP(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*QP(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:l}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(l)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[l]})}n&&(yield n)}var jP,uE,cs,zP,ls,Bg,Hg,JP,zZ,JZ,XZ,ZZ,YP,Gg,ZP=be(()=>{"use strict";jP=G(BP()),uE=G(bc()),cs=G(ie());Re();zP=G(Su()),ls=G(L()),Bg=G(hi()),Hg=G(os()),JP=G(Y());ha();dE();({HDB_ERROR_MSGS:zZ}=cs.hdb_errors),JZ="data",XZ=1e4,ZZ=10,Gg=class extends jP.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YP=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,uE.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Hs(t);if(!n)throw new cs.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:xg(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}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 cs.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}]}St({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return Ic({database:t.schema,table:null}),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qg(t.schema),Bg.signalSchemaChange(new Hg.SchemaEventMsg(process.pid,ls.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,YP.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,zP.default)(t),s,i=Mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return it(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(E=>E.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=u[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(u[i.primaryKey]);continue}E&&(E=_E(E));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let h=u[f];if(typeof h=="function")try{let m=h([[E]]);Array.isArray(m)&&(h=m[0].func_val,u[f]=h)}catch(m){throw m.message+="Trying to set key "+f+" on object"+JSON.stringify(u),m}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=E[f]);await(d==null?i.create(u,o):i.put(u,o)),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=Mr()[t.schema][t.table],n={user:t.hdb_user};return it(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 WP(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=Mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.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:ls.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],_=a(async()=>{let u=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...u.deleted_hashes),o.push(...u.skipped_hashes),await(0,JP.async_set_timeout)(ZZ),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%XZ===0&&await _();return l.length>0&&await _(),s?WP(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,uE.default)(t,"hashes");if(r)throw r;return KP(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of KP(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&ls.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,uE.default)(t,"value");if(n)throw n;let s=Hs(t);if(!s)throw new cs.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===ls.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:xg(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache})}async getDataByValue(t,r){let n=new Map,s=Hs(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){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),n={};switch(t.search_type){case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of QP(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return QP(r,t.search_values?.[0],t.search_values?.[1])}}};a(xg,"getSelect");a(KP,"getRecords");a(Hs,"getTable");a(WP,"createDeleteResponse");a(QP,"groupRecordsInHistory")});var Hn=R((Gge,eM)=>{"use strict";var{ResourceBridge:e5}=(ZP(),ae(XP)),t5=J();t5.initSync();var fE;function r5(){return fE||(fE=new e5,fE)}a(r5,"getBridge");eM.exports=r5()});var sM=R((qge,nM)=>{"use strict";var tM=require("lodash"),xu=require("mathjs"),n5=require("jsonata"),rM=Y();nM.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tM.uniqWith(e,tM.isEqual):e,searchJSON:s5,mad:qu.bind(null,xu.mad),mean:qu.bind(null,xu.mean),mode:qu.bind(null,xu.mode),prod:qu.bind(null,xu.prod),median:qu.bind(null,xu.median)};function qu(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(qu,"aggregateFunction");function s5(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(rM.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rM.isEmpty(this.__ala__.res[r])){let n=n5(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s5,"searchJSON")});var oM=R((kge,iM)=>{"use strict";var It=require("moment"),Fg="YYYY-MM-DDTHH:mm:ss.SSSZZ";It.suppressDeprecationWarnings=!0;iM.exports={current_date:()=>It().utc().format("YYYY-MM-DD"),current_time:()=>It().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return It(e).utc().format("YYYY");case"month":return It(e).utc().format("MM");case"day":return It(e).utc().format("DD");case"hour":return It(e).utc().format("HH");case"minute":return It(e).utc().format("mm");case"second":return It(e).utc().format("ss");case"millisecond":return It(e).utc().format("SSS");default:break}},date:e=>It(e).utc().format(Fg),date_format:(e,t)=>It(e).utc().format(t),date_add:(e,t,r)=>It(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>It(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=It(e).utc(),s=It(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>It().utc().valueOf(),get_server_time:()=>It().format(Fg),offset_utc:(e,t)=>It(e).utc().utcOffset(t).format(Fg)}});var uM=R(($ge,lM)=>{"use strict";var i5=require("@turf/area"),o5=require("@turf/length"),a5=require("@turf/circle"),c5=require("@turf/difference"),l5=require("@turf/distance"),u5=require("@turf/boolean-contains"),_5=require("@turf/boolean-equal"),d5=require("@turf/boolean-disjoint"),f5=require("@turf/helpers"),aM=L(),Ae=Y(),Si=k();lM.exports={geoArea:E5,geoLength:h5,geoCircle:p5,geoDifference:m5,geoDistance:cM,geoNear:S5,geoContains:T5,geoEqual:g5,geoCrosses:R5,geoConvert:A5};function E5(e){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return i5.default(e)}catch(t){return Si.trace(t,e),NaN}}a(E5,"geoArea");function h5(e,t){if(Ae.isEmpty(e))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return o5.default(e,{units:t||"kilometers"})}catch(r){return Si.trace(r,e),NaN}}a(h5,"geoLength");function p5(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e));try{return a5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(p5,"geoCircle");function m5(e,t){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return c5(e,t)}catch(r){return Si.trace(r,e,t),NaN}}a(m5,"geoDifference");function cM(e,t,r){if(Ae.isEmpty(e))return NaN;if(Ae.isEmpty(t))return NaN;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return l5.default(e,t,{units:r||"kilometers"})}catch(n){return Si.trace(n,e,t),NaN}}a(cM,"geoDistance");function S5(e,t,r,n){if(Ae.isEmpty(e)||Ae.isEmpty(t))return!1;if(Ae.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cM(e,t,n)<=r}catch(s){return Si.trace(s,e,t),!1}}a(S5,"geoNear");function T5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return u5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(T5,"geoContains");function g5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return _5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(g5,"geoEqual");function R5(e,t){if(Ae.isEmpty(e)||Ae.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ae.autoCastJSON(e)),typeof t=="string"&&(t=Ae.autoCastJSON(t));try{return!d5.default(e,t)}catch(r){return Si.trace(r,e,t),!1}}a(R5,"geoCrosses");function A5(e,t,r){if(Ae.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ae.isEmpty(t))throw new Error("geo_type is required");if(Ae.isEmpty(aM.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aM.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ae.autoCastJSON(e)),f5[t](e,r)}a(A5,"geoConvert")});var EE=R((Yge,_M)=>{var pa=sM(),fn=oM(),Gs=uM();_M.exports=e=>{e.aggr.mad=e.aggr.MAD=pa.mad,e.aggr.mean=e.aggr.MEAN=pa.mean,e.aggr.mode=e.aggr.MODE=pa.mode,e.aggr.prod=e.aggr.PROD=pa.prod,e.aggr.median=e.aggr.MEDIAN=pa.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=pa.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=pa.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=fn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=fn.current_time,e.fn.extract=e.fn.EXTRACT=fn.extract,e.fn.date=e.fn.DATE=fn.date,e.fn.date_format=e.fn.DATE_FORMAT=fn.date_format,e.fn.date_add=e.fn.DATE_ADD=fn.date_add,e.fn.date_sub=e.fn.DATE_SUB=fn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=fn.date_diff,e.fn.now=e.fn.NOW=fn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=fn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=fn.get_server_time,e.fn.getdate=e.fn.GETDATE=fn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=fn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var hM=R((Kge,EM)=>{"use strict";var Fu=require("lodash"),Ur=require("alasql");Ur.options.cache=!1;var O5=EE(),dM=require("clone"),hE=require("recursive-iterator"),he=k(),Me=Y(),wc=Hn(),b5=L(),{hdb_errors:N5}=ie(),{getDatabases:fM}=(Re(),ae(Ve)),y5="IS NULL",us="There was a problem performing this search. Please check the logs and try again.";O5(Ur);var kg=class{static{a(this,"SQLSearch")}constructor(t,r){if(Me.isEmpty(t))throw he.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(),Me.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Me.isEmptyOrZeroLength(n))return he.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw he.error("Error thrown from checkEmptySQL in SQLSearch class method search."),he.error(n),new Error(us)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw he.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),he.error(n),new Error(us)}if(Object.keys(this.data).length===0)return he.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw he.error("Error thrown from processJoins in SQLSearch class method search."),he.error(n),new Error(us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw he.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),he.error(n),new Error(us)}try{return t=await this._finalSQL(),t}catch(n){throw he.error("Error thrown from finalSQL in SQLSearch class method search."),he.error(n),new Error(us)}}_getColumns(){let t=new hE(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(dM(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Fu.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=fM()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Me.isEmpty(this.statement.where)){he.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hE(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Me.isEmpty(r)&&r.right)if(Me.isNotEmptyAndHasValue(r.right.value)){let n=Me.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Ur.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Me.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Ur.yy.LogicValue({value:i}):n instanceof Ur.yy.StringValue&&Me.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Ur.yy.NumValue({value:i}))});if(t){he.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hE(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(!Me.isEmpty(b5.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Me.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Me.isEmptyOrZeroLength(r.left.columnid)||Me.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(Me.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"=":!Me.isEmpty(r.right.value)||!Me.isEmpty(r.left.value)?n.add(Me.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<l.length;_++)if(l[_].value)n.add(l[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from)&&Me.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&&Fu.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(Me.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Me.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(Me.isEmptyOrZeroLength(this.all_table_attributes)&&!Me.isEmptyOrZeroLength(this.columns.columns))return t;if(Me.isEmptyOrZeroLength(this.all_table_attributes)&&Me.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ur.promise(r)}catch(r){throw he.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),he.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(dM(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(Me.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(y5)>-1&&this.tables.forEach(s=>{let i={columnid:fM()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Fu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Me.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await wc.getDataByHash(c);for(let d of c.hash_values)u.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let E=await wc.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),he.error(u),new Error(us)}else if(!Me.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Me.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,E=u.length;d<E;d++){let f=u[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await wc.getDataByValue(c,f.operation);if(l)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...n[i]],this._setMergedHashAttribute(i,m));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]):(this.data[i].__merged_data[m]=[...n[i]],this._updateMergedAttribute(i,m,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,m))}}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),he.error(u),new Error(us)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await wc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw he.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),he.error(u),new Error(us)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Ur.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(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 Ur.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Ur.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new Ur.yy.FuncValue:new Ur.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,m=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${m}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${m}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await Ur.promise(h,t),t=null}catch(f){throw he.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),he.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let m=E[f];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),m=Fu.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,g=m.length;S<g;S++){let T=m[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[T]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hE(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=Fu.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 he.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),he.error(i),new Error(us)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let u in i)o.push(i[u][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await wc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let E=o[u],f=l.get(E);for(let h=0;h<_;h++){let m=s.columns[h],S=f[m]===void 0?null:f[m];this.data[n].__merged_data[E].push(S)}}}}catch(r){throw he.error("Error thrown from getDataByHash function in SQLSearch class method getData."),he.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();he.trace(`Final SQL: ${s}`),n=await Ur.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),he.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw he.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),he.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 he.error(N5.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),he.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],_=new RegExp(`${l}.\`${o}\``,"g"),u=`${l}.[${c}]`;n=n.replace(_,u)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(l,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await wc.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw he.error("There was an error when processing this SQL operation. Check your logs"),he.error(o),new Error(us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EM.exports=kg});var ur=R((Qge,pM)=>{"use strict";var I5=XI();pM.exports={searchByConditions:C5,searchByHash:D5,searchByValue:L5,search:P5};var $g=Hn(),{transformReq:Vg}=Y(),w5=hM();async function C5(e){return Vg(e),$g.searchByConditions(e)}a(C5,"searchByConditions");async function D5(e){Vg(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $g.searchByHash(e))r&&t.push(r);return t}a(D5,"searchByHash");async function L5(e){Vg(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $g.searchByValue(e))t.push(r);return t}a(L5,"searchByValue");function P5(e,t){try{let r=new I5(e);r.validate(),new w5(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(P5,"search")});var pE=R((zge,mM)=>{"use strict";var M5=Hn();mM.exports={writeTransaction:U5};function U5(e,t,r){return M5.writeTransaction(e,t,r)}a(U5,"writeTransaction")});var RM=R((Zge,gM)=>{"use strict";var v5=ur(),B5=Bn(),SM=k(),H5=Cr(),Xge=pE(),G5=require("clone"),Kg=require("alasql"),x5=EE(),TM=require("util"),q5=TM.promisify(B5.getTableSchema),F5=TM.promisify(v5.search),k5=L(),Yg=Y();x5(Kg);gM.exports={update:V5};var $5="There was a problem performing this update. Please check the logs and try again.";async function V5({statement:e,hdb_user:t}){let r=await q5(e.table.databaseid,e.table.tableid),n=Y5(e.columns);Yg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=G5(s),c=Yg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Kg.parse(l).statements[0],u=await F5(_),d=K5(n,u);return W5(o,d,t)}a(V5,"update");function Y5(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Kg.compile(`SELECT ${r.expression.toString()} AS [${k5.FUNC_VAL}] FROM ?`)}),t}catch(t){throw SM.error(t),new Error($5)}}a(Y5,"createUpdateRecord");function K5(e,t){return Yg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(K5,"buildUpdateRecords");async function W5(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){SM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W5,"updateRecords")});var OM=R((nRe,AM)=>{var Q5=require("alasql"),j5=ur(),z5=k(),J5=Hn(),Qg=require("util"),Wg=Y(),X5=L(),Z5=Bn(),tRe=pE(),rRe=Cr(),e8="record",t8="successfully deleted",r8=Qg.callbackify(o8),n8=Qg.promisify(j5.search),s8=Qg.promisify(Z5.getTableSchema);AM.exports={convertDelete:r8};function i8(e){return`${e.deleted_hashes.length} ${e8}${e.deleted_hashes.length===1?"":"s"} ${t8}`}a(i8,"generateReturnMessage");async function o8({statement:e,hdb_user:t}){let r=await s8(e.table.databaseid,e.table.tableid);Wg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=Wg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Q5.parse(o).statements[0],l={operation:X5.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await n8(c);let _=await J5.deleteRecords(l);return Wg.isEmptyOrZeroLength(_.message)&&(_.message=i8(_)),delete _.txn_time,_}catch(_){throw z5.error(_),_.hdb_code?_.message:_}}a(o8,"convertDelete")});var wM=R((iRe,IM)=>{"use strict";var a8=Ei(),{hdb_errors:bM}=ie(),{getDatabases:NM}=(Re(),ae(Ve));IM.exports={checkSchemaExists:yM,checkSchemaTableExists:c8,schema_describe:a8};async function yM(e){if(!NM()[e])return bM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yM,"checkSchemaExists");async function c8(e,t){let r=await yM(e);if(r)return r;if(!NM()[e][t])return bM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(c8,"checkSchemaTableExists")});var ma=R((aRe,l8)=>{l8.exports={name:"harperdb",version:"4.3.29",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",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.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.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ku={};$e(Ku,{addAnalyticsListener:()=>Yu,recordAction:()=>vr,recordActionBinary:()=>En,setAnalyticsEnabled:()=>u8});function u8(e){HM=e}function vr(e,t,r,n,s){if(!HM)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=TE.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let _=c;o.values=c=new Float32Array(l*2),c.set(_),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},TE.set(i,o)}mE||_8()}function En(e,t,r,n,s){vr(!!e,t,r,n,s)}function Yu(e){qM.push(e)}function _8(){mE=performance.now(),setTimeout(async()=>{let e=performance.now()-mE;mE=0;let t=[],r={time:Date.now(),period:e,threadId:Sa.threadId,metrics:t};for(let[s,i]of TE){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,_=[],u;for(let d of FM){let E=Math.floor(c*d),f=o[E-1];if(E>l){let h=E-l;if(f===u){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:f,count:h}:f),u=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await kM()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Sa.threadId,byThread:!0,...n});for(let s of qM)s(t);TE=new Map,Sa.parentPort?Sa.parentPort.postMessage({type:xM,report:r}):YM({report:r})},GM).unref()}async function d8(e,t=6e4){let r=Jg(),n=$M(),s=new Promise(m=>{let S=performance.now();setImmediate(()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-S>5e3&&(0,ku.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-S)+"ms"),m(g-S)})}),i;for(let m of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(m.value?.time){i=m.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,_=[],u;for(let{key:m,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(m>o+t)break}else o=m;u=m;let{metrics:g,threadId:T}=S;for(let b of g||[]){let{path:N,method:U,type:v,metric:q,count:M,total:W,distribution:z,threads:X,...ce}=b;M||(M=1);let _e=q+(N?"-"+N:"");U!==void 0&&(_e+="-"+U),v!==void 0&&(_e+="-"+v);let de=c.get(_e);if(de){if(de.threads){let we=de.threads[T];if(we)de=we;else{de.threads[T]=Object.assign({},ce);continue}}de.count||(de.count=1);let Ge=de.count;for(let we in ce){let xe=ce[we];typeof xe=="number"&&(de[we]=(de[we]*Ge+xe*M)/(Ge+M))}de.count+=M,W>=0&&(de.total+=W,de.ratio=de.total/de.count)}else de=Object.assign({period:t},b),delete de.distribution,c.set(_e,de),de.byThread&&(de.threads=[],de.threads[T]=Object.assign({},ce),_.push(de));if(z){z=z.map(we=>typeof we=="number"?{value:we,count:1}:we);let Ge=l.get(_e);Ge?Ge.push(...z):l.set(_e,z)}}await kM()}for(let m of _){let{path:S,method:g,type:T,metric:b,count:N,total:U,distribution:v,threads:q,...M}=m;q=q.filter(W=>W);for(let W in M){if(typeof m[W]!="number")continue;let z=0;for(let X of q){let ce=X[W];typeof ce=="number"&&(z+=ce)}m[W]=z}m.count=q.length,delete m.threads,delete m.byThread}for(let[m,S]of l){let g=c.get(m);S.sort((we,xe)=>we.value>xe.value?1:-1);let T=g.count-1,b=[],N=0,U=0,v;for(let we of FM){let xe=T*we;for(;N<xe;)v=S[U++],N+=v.count,U===1&&N--;let Wd=S[U>1?U-2:0];v||(v=S[0]),b.push(v.value-(v.value-Wd.value)*(N-xe)/v.count)}let[q,M,W,z,X,ce,_e,de,Ge]=b;Object.assign(g,{p1:q,p10:M,p25:W,median:z,p75:X,p90:ce,p95:_e,p99:de,p999:Ge})}let d;for(let[m,S]of c)S.id=(0,SE.getNextMonotonicTime)(),S.time=u,n.primaryStore.put(S.id,S,{append:!0}).then(g=>{g||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let m=(0,SE.getNextMonotonicTime)(),S={id:m,metric:"main-thread-utilization",idle:f-CM,active:h-DM,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(m,S,{append:!0}).then(g=>{g||n.primaryStore.put(m,S)})}CM=f,DM=h}async function LM(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Jg(){return PM||(PM=St({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $M(){return MM||(MM=St({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function h8(){VM=!0;let e=(0,Vu.get)(zg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await d8(GM,e),await LM(Jg(),f8),await LM($M(),E8)},Math.min(e/2,2147483647)).unref()}function YM(e,t){let r=e.report;r.threadId=t?.threadId||Sa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(UM+=n.mean*n.count);r.totalBytesProcessed=UM,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vM.get(t))}),vM.set(t,t.performance.eventLoopUtilization())),r.id=(0,SE.getNextMonotonicTime)(),Jg().primaryStore.put(r.id,r),VM||h8(),p8&&(KM=S8(r))}async function S8(e){if(await KM,!fo){let r=(0,$u.dirname)((0,ku.getLogFilePath)());try{fo=await(0,jg.open)((0,$u.join)(r,"analytics.log"),"r+")}catch{fo=await(0,jg.open)((0,$u.join)(r,"analytics.log"),"w+")}}let t=(await fo.stat()).size;if(t>m8){let r=Buffer.alloc(t);await fo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fo.write(r,{position:0}),await fo.truncate(r.length),t=r.length}await fo.write(JSON.stringify(e)+`
11
+ `,t)}var Sa,BM,ku,$u,jg,SE,Vu,zg,TE,HM,mE,GM,xM,qM,FM,CM,DM,kM,f8,E8,PM,MM,VM,UM,vM,p8,KM,fo,m8,Ti=be(()=>{Sa=require("worker_threads"),BM=G(rt());Re();ku=G(k()),$u=require("path"),jg=require("fs/promises"),SE=G(Nr()),Vu=G(J()),zg=G(L());yr();(0,Vu.initSync)();TE=new Map,HM=(0,Vu.get)(zg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(u8,"setAnalyticsEnabled");a(vr,"recordAction");dt.recordAnalytics=vr;a(En,"recordActionBinary");mE=0,GM=1e3,xM="analytics-report",qM=[];a(Yu,"addAnalyticsListener");FM=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(_8,"sendAnalytics");a(d8,"aggregation");CM=0,DM=0,kM=a(()=>new Promise(setImmediate),"rest");a(LM,"cleanup");f8=36e5,E8=31536e6;a(Jg,"getRawAnalyticsTable");a($M,"getAnalyticsTable");(0,BM.setChildListenerByType)(xM,YM);a(h8,"startScheduledTasks");UM=0,vM=new Map,p8=!1;a(YM,"recordAnalytics");m8=1e6;a(S8,"logAnalytics")});var rR=R((gRe,sU)=>{"use strict";var{decode:T8}=require("msgpackr"),{isMainThread:mRe,parentPort:SRe,threadId:TRe}=require("worker_threads"),AE=gt(),Cc=Ze(),eR=L(),hr=k(),Zg=J(),g8=L(),{onMessageByType:R8}=rt(),zM=fi(),{recordAction:WM,recordActionBinary:A8}=(Ti(),ae(Ku)),{publishToStream:O8}=AE,{ConsumerEvents:QM}=require("nats"),b8=ur(),{promisify:N8}=require("util"),JM=N8(setTimeout),OE=1e4,bE,RE,y8,I8,XM,Wu=new Map,Dc=new Map;sU.exports={initialize:ZM,ingestConsumer:tR,setSubscription:w8,setIgnoreOrigin:L8,getDatabaseSubscriptions:D8,updateConsumer:eU};async function ZM(){R8(eR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await eU(n)}),XM=!0,hr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await AE.getNATSReferences();bE=e,RE=e.info.server_name,y8=t,I8=r}a(ZM,"initialize");async function eU(e){if(e.status==="start"){let{js:t,jsm:r}=await tU(e.node_domain_name);tR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Wu.get(e.stream_name+e.node_domain_name);t&&(hr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Wu.set(e.stream_name+e.node_domain_name,"close")),Dc.get(e.node_domain_name)==="failed"&&Dc.set(e.node_domain_name,"close")}}a(eU,"updateConsumer");var NE=new Map;function w8(e,t,r){let n=NE.get(e);n||NE.set(e,n=new Map),n.set(t,r),XM||ZM().then(C8)}a(w8,"setSubscription");async function C8(){let e=await b8.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Cc.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await tU(r),!n))break;let{schema:o,table:c}=i,l=zM.createNatsTableStreamName(o,c);tR(l,n,s,r)}}}a(C8,"accessConsumers");async function tU(e){let t,r,n=1;for(;!r;)try{t=await bE.jetstream({domain:e}),r=await bE.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Dc.get(e)==="close")break;Dc.set(e,"failed"),n%10===1&&hr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<OE?n++*100:OE;await JM(i)}return{js:t,jsm:r}}a(tU,"connectToRemoteJS");function D8(){return NE}a(D8,"getDatabaseSubscriptions");var rU;function L8(e){rU=e}a(L8,"setIgnoreOrigin");var nU=100,jM=new Array(nU),gE=0;async function tR(e,t,r,n){let{connection:s}=await AE.getNATSReferences();bE=s,RE=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,RE),hr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(Dc.get(n)==="close")break;o%10===1&&hr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(hr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await AE.createConsumer(r,e,RE,new Date(Date.now()).toISOString()));let u=o++*100<OE?o++*100:OE;await JM(u)}let c=!1,l;for(;!c;){if(Wu.get(e+n)==="close"||Dc.get(n)==="close"){Wu.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Zg.get(eR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Wu.set(e+n,l);let _=!1;(async()=>{for await(let u of await l.status())if(u.type===QM.ConsumerDeleted&&(await l.close(),c=!0),u.type===QM.HeartbeatsMissed){let d=u.data;hr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),d===100&&(hr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),_=!0)}})();try{for await(let u of l)await jM[gE],jM[gE]=P8(u).catch(d=>{hr.error(d)}),++gE>=nU&&(gE=0)}catch(u){u.message==="consumer deleted"?(hr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hr.error("Error consuming clustering ingest, restarting consumer",u)}}}a(tR,"ingestConsumer");async function P8(e){let t=T8(e.data);WM(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Zg.get(eR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Cc.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Cc.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Cc.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!rU),A8(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Cc.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:E,expiresAt:f}=t;hr.trace("processing message:",o,c,_,(u?"records: "+u.map(U=>U?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),hr.trace(`messageProcessor nats msg id: ${e.headers.get(Cc.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let m=new Promise(U=>h=U),{timestamp:S,user:g,node_name:T}=E||{},b=NE.get(c)?.get(_);if(!b)throw new Error(`Missing table for replication message: ${_}`);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(u.length===1&&!l)b.send({type:Xg(o),value:u[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:g,nodeName:T});else{let U=u.map((v,q)=>({type:Xg(o),value:v,expiresAt:f,id:d?.[q],table:_}));for(;l;)U.push({type:Xg(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;b.send({type:"transaction",writes:U,table:_,timestamp:S,onCommit:h,user:g,nodeName:T})}Zg.get(g8.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&O8(e.subject.split(".").slice(0,-1).join("."),zM.createNatsTableStreamName(c,_),e.headers,e.data),await m;let N=Date.now()-S;S&&WM(N,"replication-latency",e.subject,o,"ingest")}catch(o){hr.error(o)}e.ack()}a(P8,"messageProcessor");function Xg(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Xg,"convertOperation")});var gt=R((IRe,RU)=>{"use strict";var Wt=J();Wt.initSync();var M8=require("fs-extra"),U8=require("semver"),zu=require("path"),{monotonicFactory:v8}=require("ulidx"),oU=v8(),B8=require("util"),aU=require("child_process"),H8=B8.promisify(aU.exec),G8=aU.spawn,rr=Ze(),Ce=L(),yE=Y(),_s=k(),IE=fi(),x8=pE(),Qu=Et(),{broadcast:q8,onMessageByType:F8,getWorkerIndex:k8}=rt(),{isMainThread:cU}=require("worker_threads"),{Encoder:$8,decode:oR}=require("msgpackr"),lU=new $8,{isEmpty:Aa}=yE,uU=Lr(),ARe=48*36e11;cU&&F8(Ce.ITC_EVENT_TYPES.RESTART,()=>{Br=void 0,Ra=void 0});var{connect:V8,StorageType:Y8,RetentionPolicy:K8,AckPolicy:aR,DeliverPolicy:cR,DiscardPolicy:W8,NatsConnection:ORe,JetStreamManager:bRe,JetStreamClient:NRe,StringCodec:yRe,JSONCodec:Q8,createInbox:lR,headers:j8,ErrorCode:iU}=require("nats"),{PACKAGE_ROOT:z8}=L(),J8=ma(),{recordAction:X8}=(Ti(),ae(Ku)),_U=Q8(),Z8="clustering",e6=J8.engines[rr.NATS_SERVER_NAME],t6=zu.join(z8,"dependencies"),iR=zu.join(t6,`${process.platform}-${process.arch}`,rr.NATS_BINARY_NAME),nR,sR,ju,Ta,ga;RU.exports={runCommand:dU,checkNATSServerInstalled:r6,createConnection:uR,getConnection:Ju,getJetStreamManager:Xu,getJetStream:EU,getNATSReferences:xs,getServerList:s6,createLocalStream:_R,listStreams:hU,deleteLocalStream:i6,getServerConfig:Lc,listRemoteStreams:o6,viewStream:a6,viewStreamIterator:c6,publishToStream:l6,request:d6,reloadNATS:dR,reloadNATSHub:f6,reloadNATSLeaf:E6,extractServerName:_6,requestErrorHandler:h6,createLocalTableStream:TU,createTableStreams:S6,purgeTableStream:gU,purgeSchemaTableStreams:T6,getStreamInfo:g6,updateLocalStreams:A6,closeConnection:n6,getJsmServerName:wE,addNatsMsgHeader:pU,clearClientCache:fU,updateRemoteConsumer:p6,createConsumer:mU,updateConsumerIterator:m6};async function dU(e,t=void 0){let{stdout:r,stderr:n}=await H8(e,{cwd:t});if(n)throw new Error(n.replace(`
12
12
  `,""));return r.replace(`
13
- `,"")}a(dU,"runCommand");async function r6(){try{await M8.access(iR)}catch{return!1}let e=await dU(`${iR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return U8.eq(t,e6)}a(r6,"checkNATSServerInstalled");async function uR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await uU.getClusterUser();if(Aa(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await $8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_s.error("Error with Nats client connection, connection closed",o),fU()}),i}a(uR,"createConnection");function fU(){Br=void 0,Ta=void 0,ga=void 0,Ra=void 0}a(fU,"clearClientCache");async function n6(){Br&&(await Br.drain(),Br=void 0,Ta=void 0,ga=void 0,Ra=void 0)}a(n6,"closeConnection");var Br,Ra;async function Ju(){return Ra||(Ra=uR(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Br=await Ra),Br||Ra}a(Ju,"getConnection");async function Xu(){if(Ta)return Ta;Aa(Br)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ta=await Br.jetstreamManager({domain:e,timeout:6e4}),Ta}a(Xu,"getJetStreamManager");async function EU(){if(ga)return ga;Aa(Br)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ga=Br.jetstream({domain:e,timeout:6e4}),ga}a(EU,"getJetStream");async function xs(){let e=Br||await Ju(),t=Ta||await Xu(),r=ga||await EU();return{connection:e,jsm:t,js:r}}a(xs,"getNATSReferences");async function s6(e){let t=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await uU.getClusterUser(),s=await uR(t,r,n),i=lR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=_U.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(s6,"getServerList");async function _R(e,t){let{jsm:r}=await xs(),n=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Y8.File,retention:K8.Limits,subjects:t,discard:W8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(_R,"createLocalStream");async function hU(){let{jsm:e}=await xs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(hU,"listStreams");async function i6(e){let{jsm:t}=await xs();await t.streams.delete(e)}a(i6,"deleteLocalStream");async function o6(e){let{connection:t}=await xs(),r=[],n=lR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(_U.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(o6,"listRemoteStreams");async function a6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await xs(),i=oU(),o={durable_name:i,ack_policy:aR.Explicit};t&&(o.deliver_policy=cR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=oR(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(rr.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(a6,"viewStream");async function*c6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await xs(),i=oU(),o={durable_name:i,ack_policy:aR.Explicit};t&&(o.deliver_policy=cR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=oR(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(rr.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(c6,"viewStreamIterator");async function l6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pU(n,r);let{js:s}=await xs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:lU.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),X8(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 SU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await _R(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(l6,"publishToStream");function pU(e,t){t===void 0&&(t=j8());let r=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(rr.MSG_HEADERS.ORIGIN)&&r&&t.append(rr.MSG_HEADERS.ORIGIN,r),t}a(pU,"addNatsMsgHeader");function Lc(e){e=e.toLowerCase();let t=zu.join(Wt.get(Ce.CONFIG_PARAMS.ROOTPATH),Z8);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Aa(sR)&&(sR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.HUB,config_file:rr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zu.join(t,rr.PID_FILES.HUB),hdb_nats_path:t}),sR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Aa(nR)&&(nR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.LEAF,config_file:rr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.LEAF,pid_file_path:zu.join(t,rr.PID_FILES.LEAF),hdb_nats_path:t}),nR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Lc,"getServerConfig");async function mU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:aR.Explicit,durable_name:r,deliver_policy:cR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(mU,"createConsumer");async function u6(e,t,r){await e.consumers.delete(t,r)}a(u6,"removeConsumer");function _6(e){return e.split(".")[1]}a(_6,"extractServerName");async function d6(e,t,r=6e4,n=lR()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=lU.encode(t),{connection:i}=await xs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return oR(c.data)}a(d6,"request");function dR(e){return new Promise(async(t,r)=>{let n=G8(iR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(dR,"reloadNATS");async function f6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await dR(e)}a(f6,"reloadNATSHub");async function E6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await dR(e)}a(E6,"reloadNATSLeaf");function h6(e,t,r){let n;switch(e.code){case iU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case iU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(h6,"requestErrorHandler");async function p6(e,t){let r=t+rr.SERVER_SUFFIX.LEAF,{connection:n}=await xs(),{jsm:s}=await b6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await SU(async()=>{if(e.subscribe===!0)await mU(s,c,n.info.server_name,l);else try{await u6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(p6,"updateRemoteConsumer");async function m6(e,t,r,n){let s=IE.createNatsTableStreamName(e,t),i=r+rr.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!cU&&k8()<Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=rR();await c(o)}await q8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(m6,"updateConsumerIterator");function SU(e){return x8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(SU,"exclusiveLock");async function TU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=R6(e,t,n);await _R(r,[s])}a(TU,"createLocalTableStream");async function S6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await TU(n,s)}}a(S6,"createTableStreams");async function gU(e,t,r=void 0){if(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Ju()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(gU,"purgeTableStream");async function T6(e,t){if(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await gU(e,t[r])}a(T6,"purgeSchemaTableStreams");async function g6(e){return(await Xu()).streams.info(e)}a(g6,"getStreamInfo");function R6(e,t,r){return`${rr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(R6,"createSubjectName");async function wE(){if(ju)return ju;if(ju=(await Xu())?.nc?.info?.server_name,ju===void 0)throw new Error("Unable to get jetstream manager server name");return ju}a(wE,"getJsmServerName");async function A6(){let e=await Xu(),t=await wE(),r=await hU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=O6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(A6,"updateLocalStreams");function O6(e){let{config:t}=e,r=!1,n=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Wt.get(Ce.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(O6,"updateStreamLimits");async function b6(e){let t,r;try{t=await Br.jetstream({domain:e}),r=await Br.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _s.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(b6,"connectToRemoteJS")});var PE=R((DRe,NU)=>{"use strict";var Pc=Cf(),Mc=wM(),N6=k(),y6=require("uuid").v4,CRe=require("clone"),DE=hi(),Uc=L(),I6=require("util"),Eo=Hn(),{handleHDBError:Hr,hdb_errors:w6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=w6,{SchemaEventMsg:LE}=os(),AU=gt(),{getDatabases:C6}=(Re(),ae($e)),{transformReq:vc}=Y();NU.exports={createSchema:D6,createSchemaStructure:OU,createTable:L6,createTableStructure:bU,createAttribute:B6,dropSchema:P6,dropTable:M6,dropAttribute:U6,getBackup:H6};async function D6(e){let t=await OU(e);return DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),t}a(D6,"createSchema");async function OU(e){let t=Pc.schema_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw Hr(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Eo.createSchema(e),`database '${e.schema}' successfully created`}a(OU,"createSchemaStructure");async function L6(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await bU(e)}a(L6,"createTable");async function bU(e){let t=Pc.create_table_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw Hr(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:y6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Eo.createTable(n,e);else throw Hr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Gr.BAD_REQUEST);else await Eo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(bU,"createTableStructure");async function P6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Pc.schema_object(e),n=t??r;if(n)throw Hr(n,n.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw Hr(new Error,s,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,s,!0);let i=await Mc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Eo.dropSchema(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),await AU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(P6,"dropSchema");async function M6(e){let t=Pc.table_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Hr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await Eo.dropTable(e),await AU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(M6,"dropTable");async function U6(e){let t=Pc.attribute_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Hr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Hr(new Error,"You cannot drop a hash attribute",Gr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Hr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Gr.BAD_REQUEST,void 0,void 0,!0);try{return await Eo.dropAttribute(e),v6(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw N6.error(`Got an error deleting attribute ${I6.inspect(e)}.`),n}}a(U6,"dropAttribute");function v6(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(v6,"dropAttributeFromGlobal");async function B6(e){vc(e);let t=C6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Hr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Gr.BAD_REQUEST,void 0,void 0,!0);return await Eo.createAttribute(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(B6,"createAttribute");function H6(e){return Eo.getBackup(e)}a(H6,"getBackup")});var IU=R((PRe,yU)=>{"use strict";var{OPERATIONS_ENUM:G6}=L(),fR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=G6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yU.exports=fR});var ER=R((vRe,PU)=>{"use strict";var x6=Hn(),URe=IU(),ME=Y(),UE=L(),q6=X(),{handleHDBError:wU,hdb_errors:F6}=ie(),{HDB_ERROR_MSGS:CU,HTTP_STATUS_CODES:DU}=F6,k6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),LU="To use this operation audit log must be enabled in harperdb-config.yaml";PU.exports=V6;async function V6(e){if(ME.isEmpty(e.schema))throw new Error(CU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(CU.TABLE_REQUIRED_ERR);if(!q6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wU(new Error,LU,DU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,LU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw wU(new Error,t,DU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&k6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await x6.readAuditLog(e)}a(V6,"readAuditLog")});var UU=R((HRe,MU)=>{"use strict";var{OPERATIONS_ENUM:$6}=L(),hR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=$6.GET_BACKUP,this.schema=t,this.table=r}};MU.exports=hR});var HU=R((FRe,BU)=>{"use strict";var Y6=Hn(),xRe=UU(),pR=Y(),K6=L(),qRe=X(),{handleHDBError:W6,hdb_errors:Q6}=ie(),{HDB_ERROR_MSGS:vU,HTTP_STATUS_CODES:j6}=Q6;BU.exports=z6;async function z6(e){if(pR.isEmpty(e.schema))throw new Error(vU.SCHEMA_REQUIRED_ERR);if(pR.isEmpty(e.table))throw new Error(vU.TABLE_REQUIRED_ERR);let t=pR.checkSchemaTableExist(e.schema,e.table);if(t)throw W6(new Error,t,j6.NOT_FOUND,K6.LOG_LEVELS.ERROR,t,!0);return await Y6.getBackup(read_audit_log_object)}a(z6,"getBackup")});var VU=R((VRe,kU)=>{var ho=require("validate.js"),xU=nt(),Bc=L(),{handleHDBError:J6,hdb_errors:X6}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:Z6}=X6,mR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),e9={STRUCTURE_USER:"structure_user"},GU=Object.values(Bc.ROLE_TYPES_ENUM),t9="attribute_permissions",r9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,n9=[t9,...Object.values(Hc)],qU=[Hc.READ,Hc.INSERT,Hc.UPDATE],s9=[r9,...qU];function i9(e){let t=mR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,FU(e,t)}a(i9,"addRoleValidation");function o9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,FU(e,t)}a(o9,"alterRoleValidation");function a9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xU.validateObject(e,t)}a(a9,"dropRoleValidation");var c9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function FU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)c9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=xU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=l9(e);o&&wt(o,r),GU.forEach(c=>{e.permission[c]&&!ho.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GU.indexOf(o)<0){if(o===e9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||wt(Rt.SCHEMA_NOT_FOUND(d),r)}continue}wt(Rt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){wt(Rt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){wt(Rt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{n9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{ho.isDefined(_[u])?ho.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),ho.isDefined(_.attribute_permissions)){if(!ho.isArray(_.attribute_permissions)){wt(Rt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{wt(Rt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(m=>{!s9.includes(m)&&m!==Hc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!ho.isDefined(f.attribute_name)){wt(Rt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){wt(Rt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}qU.forEach(m=>{ho.isDefined(f[m])?ho.isBoolean(f[m])||wt(Rt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):wt(Rt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;wt(Rt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return u9(r)}a(FU,"customValidate");kU.exports={addRoleValidation:i9,alterRoleValidation:o9,dropRoleValidation:a9};function l9(e){let{operation:t,permission:r}=e;if(t===Bc.OPERATIONS_ENUM.ADD_ROLE||t===Bc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return Rt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return Rt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(l9,"validateNoSUPerms");function u9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Rt.ROLE_PERMS_ERROR,...e};return J6(new Error,n,Z6.BAD_REQUEST)}else return null}a(u9,"generateRolePermResponse");function wt(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(wt,"addPermError")});var BE=R((YRe,WU)=>{"use strict";var $U=Cr(),YU=ur(),_9=ia(),TR=VU(),gR=hi(),d9=require("uuid").v4,f9=require("util"),vE=L(),E9=Y(),RR=YU.searchByValue,h9=YU.searchByHash,p9=f9.promisify(_9.delete),m9=as(),S9=Nc(),{hdb_errors:T9,handleHDBError:Oa}=ie(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:Zu}=T9,{UserEventMsg:AR}=os();WU.exports={addRole:g9,alterRole:R9,dropRole:A9,listRoles:O9};function SR(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(SR,"scrubRoleDetails");async function g9(e){let t=TR.addRoleValidation(e);if(t)throw t;e=SR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await RR(r)||[])}catch(i){throw Oa(i)}if(n&&n.length>0)throw Oa(new Error,KU.ROLE_ALREADY_EXISTS(e.role),Zu.CONFLICT,void 0,void 0,!0);e.id||(e.id=d9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await $U.insert(s),gR.signalUserChange(new AR(process.pid)),e=SR(e),e}a(g9,"addRole");async function R9(e){let t=TR.alterRoleValidation(e);if(t)throw t;e=SR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await $U.update(r)}catch(s){throw Oa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Oa(new Error,"Invalid role id",Zu.BAD_REQUEST,void 0,void 0,!0);return await gR.signalUserChange(new AR(process.pid)),e}a(R9,"alterRole");async function A9(e){let t=TR.dropRoleValidation(e);if(t)throw Oa(new Error,t,Zu.BAD_REQUEST,void 0,void 0,!0);let r=new S9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await h9(r));if(n.length===0)throw Oa(new Error,KU.ROLE_NOT_FOUND,Zu.NOT_FOUND,void 0,void 0,!0);let s=new m9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await RR(s)),o=!1;if(E9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Oa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await p9(c),gR.signalUserChange(new AR(process.pid)),`${n[0].role} successfully deleted`}a(A9,"dropRole");async function O9(){return RR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(O9,"listRoles")});var JU=R((WRe,zU)=>{"use strict";var b9=X(),po=require("joi"),N9=nt(),QU=require("moment"),y9=require("fs-extra"),OR=require("path"),I9=require("lodash"),e_=L(),{LOG_LEVELS:ba}=L(),w9="YYYY-MM-DD hh:mm:ss",C9=OR.resolve(__dirname,"../logs");zU.exports=function(e){return N9.validateBySchema(e,D9)};var D9=po.object({from:po.custom(jU),until:po.custom(jU),level:po.valid(ba.NOTIFY,ba.FATAL,ba.ERROR,ba.WARN,ba.INFO,ba.DEBUG,ba.TRACE),order:po.valid("asc","desc"),limit:po.number().min(1),start:po.number().min(0),log_name:po.custom(L9)});function jU(e,t){if(QU(e,QU.ISO_8601).format(w9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jU,"validateDatetime");function L9(e,t){if(I9.invert(e_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=b9.get(e_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?e_.LOG_NAMES.HDB:e,i=s===e_.LOG_NAMES.INSTALL?OR.join(C9,e_.LOG_NAMES.INSTALL):OR.join(n,s);return y9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(L9,"validateReadLogPath")});var NR=R((jRe,ZU)=>{"use strict";var HE=L(),P9=k(),M9=X(),U9=JU(),bR=require("path"),XU=require("fs-extra"),{once:v9}=require("events"),{handleHDBError:B9,hdb_errors:H9}=ie(),{PACKAGE_ROOT:G9}=L(),x9=bR.join(G9,"logs"),q9=1e3,F9=200;ZU.exports=k9;async function k9(e){let t=U9(e);if(t)throw B9(t,t.message,H9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=M9.get(HE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?HE.LOG_NAMES.HDB:e.log_name,s=n===HE.LOG_NAMES.INSTALL?bR.join(x9,HE.LOG_NAMES.INSTALL):bR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?q9:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,m=0;E==="desc"&&!l&&!u&&(m=Math.max(XU.statSync(s).size-(h+5)*F9,0));let S=XU.createReadStream(s,{start:m});S.on("error",v=>{P9.error(v)});let g=0,T=[],b="",N;S.on("data",v=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=b+v;let M=0,W;for(;(W=q.exec(v))&&!S.destroyed;){N&&(N.message=v.slice(M,W.index),U(N));let[z,J,ce]=W,_e=ce.split("] ["),de=_e[0],Ge=_e[1];_e.splice(0,2),N={timestamp:J,thread:de,level:Ge,tags:_e,message:""},M=W.index+z.length}b=v.slice(M)}),S.on("end",v=>{S.destroyed||N&&(N.message=b.trim(),U(N))}),S.resume();function U(v){let q,M,W;switch(!0){case(i&&c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),v.level===o&&q>=M&&q<=W&&g<f?g++:v.level===o&&q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&c):q=new Date(v.timestamp),M=new Date(l),v.level===o&&q>=M&&g<f?g++:v.level===o&&q>=M&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&_):q=new Date(v.timestamp),W=new Date(u),v.level===o&&q<=W&&g<f?g++:v.level===o&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),q>=M&&q<=W&&g<f?g++:q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case i:v.level===o&&g<f?g++:v.level===o&&(mo(v,E,T),g++,g===h&&S.destroy());break;case c:q=new Date(v.timestamp),M=new Date(l),q>=M&&g<f?g++:q>=M&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;case _:q=new Date(v.timestamp),W=new Date(u),q<=W&&g<f?g++:q<=W&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;default:g<f?g++:(mo(v,E,T),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await v9(S,"close"),T}a(k9,"readLog");function mo(e,t,r){t==="desc"?V9(e,r):t==="asc"?$9(e,r):r.push(e)}a(mo,"pushLineToResult");function V9(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(V9,"insertDescending");function $9(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($9,"insertAscending")});var GE=R((eAe,nv)=>{"use strict";var yR=require("joi"),{string:t_,boolean:ev,date:Y9}=yR.types(),K9=nt(),{validateSchemaExists:JRe,validateTableExists:XRe,validateSchemaName:ZRe}=Ls(),W9=L(),Q9=Ze(),tv=X();tv.initSync();var j9=t_.invalid(tv.get(W9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Q9.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),rv={operation:t_.valid("add_node","update_node","set_node_replication"),node_name:j9,subscriptions:yR.array().items({table:t_.optional(),schema:t_.optional(),database:t_.optional(),subscribe:ev.required(),publish:ev.required().custom(J9),start_time:Y9.iso()}).min(1).required()};function z9(e){return K9.validateBySchema(e,yR.object(rv))}a(z9,"addUpdateNodeValidator");function J9(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(J9,"checkForFalsy");nv.exports={addUpdateNodeValidator:z9,validation_schema:rv}});var iv=R((rAe,sv)=>{var X9=nt(),Z9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sv.exports=function(e){return X9.validateObject(e,Z9)}});var xE=R((nAe,ov)=>{"use strict";var e7=L().OPERATIONS_ENUM,IR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=e7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ov.exports=IR});var cv=R((iAe,av)=>{"use strict";var t7={OPERATION:"operation",REFRESH:"refresh"},wR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},CR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};av.exports={JWTTokens:wR,TOKEN_TYPE_ENUM:t7,JWTRSAKeys:CR}});var s_=R((aAe,dv)=>{"use strict";var n_=require("jsonwebtoken"),DR=require("fs-extra"),LR=Y(),Gn=L(),{handleHDBError:xr,hdb_errors:r7}=ie(),{HTTP_STATUS_CODES:qr,AUTHENTICATION_ERROR_MSGS:Fr}=r7,r_=k(),lv=qf(),UR=Lr(),n7=Cr().update,s7=xE(),i7=hi(),{UserEventMsg:o7}=os(),So=X();So.initSync();var PR=require("path"),{JWTTokens:a7,JWTRSAKeys:c7,TOKEN_TYPE_ENUM:qE}=cv(),l7=So.get(Gn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?So.get(Gn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",u7=So.get(Gn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?So.get(Gn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",MR;dv.exports={createTokens:_7,validateOperationToken:f7,refreshOperationToken:d7,validateRefreshToken:_v};async function _7(e){if(LR.isEmpty(e)||typeof e!="object")throw xr(new Error,Fr.INVALID_AUTH_OBJECT,qr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.username))throw xr(new Error,Fr.USERNAME_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.password))throw xr(new Error,Fr.PASSWORD_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await UR.findAndValidateUser(e.username,e.password),!t)throw xr(new Error,Fr.INVALID_CREDENTIALS,qr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw r_.error(E),xr(new Error,Fr.INVALID_CREDENTIALS,qr.UNAUTHORIZED,void 0,void 0,!0)}let r=await kE(),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 uv(i,r.private_key,r.passphrase),c=await n_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:u7,algorithm:FE,subject:qE.REFRESH}),l=lv.hash(c),_=new s7(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await n7(_)}catch(E){r_.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw xr(new Error,Fr.REFRESH_TOKEN_SAVE_FAILED,qr.INTERNAL_SERVER_ERROR);return i7.signalUserChange(new o7(process.pid)),new a7(o,c)}a(_7,"createTokens");async function uv(e,t,r){return await n_.sign(e,{key:t,passphrase:r},{expiresIn:l7,algorithm:FE,subject:qE.OPERATION})}a(uv,"signOperationToken");async function kE(){if(MR===void 0)try{let e=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await DR.readFile(e)).toString(),s=(await DR.readFile(t)).toString(),i=(await DR.readFile(r)).toString();MR=new c7(i,s,n)}catch(e){throw r_.error(e),xr(new Error,Fr.NO_ENCRYPTION_KEYS,qr.INTERNAL_SERVER_ERROR)}return MR}a(kE,"getJWTRSAKeys");async function d7(e){if(!e)throw xr(new Error,Fr.INVALID_BODY,qr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw xr(new Error,Fr.REFRESH_TOKEN_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);await _v(e.refresh_token);let t=await kE(),r=await n_.decode(e.refresh_token);return{operation_token:await uv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(d7,"refreshOperationToken");async function f7(e){try{let t=await kE(),r=await n_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await UR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw r_.warn(t),t.name&&t.name==="TokenExpiredError"?xr(new Error,Fr.TOKEN_EXPIRED,qr.FORBIDDEN):xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED)}}a(f7,"validateOperationToken");async function _v(e){let t;try{let r=await kE(),n=await n_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await UR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw r_.warn(r),r.name&&r.name==="TokenExpiredError"?xr(new Error,Fr.TOKEN_EXPIRED,qr.FORBIDDEN):xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED)}if(!lv.validate(t.refresh_token,e))throw xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED);return t}a(_v,"validateRefreshToken")});var vR=R((uAe,hv)=>{"use strict";var E7=iv(),Gc=require("passport"),h7=require("passport-local").Strategy,p7=require("passport-http").BasicStrategy,m7=require("util"),S7=Lr(),Ev=m7.callbackify(S7.findAndValidateUser),lAe=rn(),T7=L(),fv=s_();Gc.use(new h7(function(e,t,r){Ev(e,t,r)}));Gc.use(new p7(function(e,t,r){Ev(e,t,r)}));Gc.serializeUser(function(e,t){t(null,e)});Gc.deserializeUser(function(e,t){t(null,e)});function g7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Gc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===T7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?fv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):fv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Gc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(g7,"authorize");function R7(e,t){let r=E7(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(R7,"checkPermissions");hv.exports={authorize:g7,checkPermissions:R7}});var xc=R((dAe,pv)=>{"use strict";var BR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},HR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};pv.exports={Node:BR,NodeSubscription:HR}});var Sv=R((EAe,mv)=>{"use strict";var A7=L().OPERATIONS_ENUM,GR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=A7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mv.exports=GR});var i_=R((pAe,Tv)=>{"use strict";var xR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},qR=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)}};Tv.exports={RemotePayloadObject:xR,RemotePayloadSubscription:qR}});var Rv=R((SAe,gv)=>{"use strict";var FR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};gv.exports=FR});var bv=R((OAe,Ov)=>{"use strict";var O7=Rv(),gAe=_t(),Av=Ye(),b7=k(),{getSchemaPath:RAe,getTransactionAuditStorePath:AAe}=Je(),{getDatabases:N7}=(Re(),ae($e));Ov.exports=y7;async function y7(e){let t=new O7;try{let r=N7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Av.environmentDataSize(schema_path,e.name),o=await Av.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){b7.warn(`unable to stat table dbi due to ${r}`)}return t}a(y7,"lmdbGetTableSize")});var yv=R((NAe,Nv)=>{"use strict";var kR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Nv.exports=kR});var gi=R((LAe,Dv)=>{"use strict";var I7=require("fs-extra"),w7=require("path"),pr=require("systeminformation"),To=k(),Iv=gt(),IAe=Ze(),$E=L(),C7=bv(),D7=Ei(),{getThreadInfo:wv}=rt(),ZR=X();ZR.initSync();var L7=yv(),{openEnvironment:wAe}=Ye(),{getSchemaPath:CAe}=Je(),{database:DAe,databases:VR}=(Re(),ae($e)),VE;Dv.exports={getHDBProcessInfo:WR,getNetworkInfo:jR,getDiskInfo:QR,getMemoryInfo:KR,getCPUInfo:YR,getTimeInfo:$R,getSystemInformation:zR,systemInformation:P7,getTableSize:JR,getMetrics:XR};function $R(){return pr.time()}a($R,"getTimeInfo");async function YR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await pr.cpu();u.cpu_speed=await pr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:g,...T}=await pr.currentLoad();return T.cpus=[],g.forEach(b=>{let{raw_load:N,raw_load_idle:U,raw_load_irq:v,raw_load_nice:q,raw_load_system:M,raw_load_user:W,...z}=b;T.cpus.push(z)}),u.current_load=T,u}catch(e){return To.error(`error in getCPUInfo: ${e}`),{}}}a(YR,"getCPUInfo");async function KR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await pr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return To.error(`error in getMemoryInfo: ${e}`),{}}}a(KR,"getMemoryInfo");async function WR(){let e={core:[],clustering:[]};try{let t=await pr.processes(),r;try{r=Number.parseInt(await I7.readFile(w7.join(ZR.get($E.CONFIG_PARAMS.ROOTPATH),$E.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===$E.NODE_ERROR_CODES.ENOENT)To.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 To.error(`error in getHDBProcessInfo: ${t}`),e}}a(WR,"getHDBProcessInfo");async function QR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await pr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await pr.fsStats();return e.read_write=_,e.size=await pr.fsSize(),e}catch(t){return To.error(`error in getDiskInfo: ${t}`),e}}a(QR,"getDiskInfo");async function jR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pr.networkInterfaceDefault(),e.latency=await pr.inetChecksite("google.com"),(await pr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await pr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return To.error(`error in getNetworkInfo: ${t}`),e}}a(jR,"getNetworkInfo");async function zR(){if(VE!==void 0)return VE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await pr.osInfo();e=c;let l=await pr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,VE=e,VE}catch(t){return To.error(`error in getSystemInformation: ${t}`),e}}a(zR,"getSystemInformation");async function JR(){let e=[],t=await D7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await C7(n));return e}a(JR,"getTableSize");async function XR(){let e={};for(let t in VR){let r=e[t]={},n=r.tables={};for(let s in VR[t])try{let i=VR[t][s];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,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){To.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(XR,"getMetrics");async function Cv(){if(ZR.get($E.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Iv.getNATSReferences(),t=await Iv.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(Cv,"getNatsStreamInfo");async function P7(e){let t=new L7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zR(),t.time=$R(),t.cpu=await YR(),t.memory=await KR(),t.disk=await QR(),t.network=await jR(),t.harperdb_processes=await WR(),t.table_size=await JR(),t.metrics=await XR(),t.threads=await wv(),t.replication=await Cv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zR();break;case"time":t.time=$R();break;case"cpu":t.cpu=await YR();break;case"memory":t.memory=await KR();break;case"disk":t.disk=await QR();break;case"network":t.network=await jR();break;case"harperdb_processes":t.harperdb_processes=await WR();break;case"table_size":t.table_size=await JR();break;case"database_metrics":case"metrics":t.metrics=await XR();break;case"threads":t.threads=await wv();break;case"replication":t.replication=await Cv();break;default:break}return t}a(P7,"systemInformation")});var Ri=R((MAe,Lv)=>{"use strict";Lv.exports={version:M7,printVersion:U7};var YE=ma();function M7(){if(YE)return YE.version}a(M7,"version");function U7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(U7,"printVersion")});var Ai=R((HAe,vv)=>{"use strict";var v7=Cr(),eA=Y(),B7=require("util"),Na=L(),Pv=X();Pv.initSync();var H7=vR(),Mv=ur(),{Node:vAe,NodeSubscription:BAe}=xc(),G7=Nc(),x7=Sv(),{RemotePayloadObject:q7,RemotePayloadSubscription:F7}=i_(),{handleHDBError:k7,hdb_errors:V7}=ie(),{HTTP_STATUS_CODES:$7,HDB_ERROR_MSGS:Y7}=V7,K7=as(),W7=gi(),Q7=Ri(),{getDatabases:j7}=(Re(),ae($e)),z7=B7.promisify(H7.authorize),J7=Mv.searchByHash,X7=Mv.searchByValue;vv.exports={authHeaderToUser:Z7,isEmpty:eee,getNodeRecord:tee,upsertNodeRecord:ree,buildNodePayloads:nee,checkClusteringEnabled:see,getAllNodeRecords:iee,getSystemInfo:oee,reverseSubscription:Uv};async function Z7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await z7(t,null),e}a(Z7,"authHeaderToUser");function eee(e){return e==null}a(eee,"isEmpty");async function tee(e){let t=new G7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return J7(t)}a(tee,"getNodeRecord");async function ree(e){let t=new x7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return v7.upsert(t)}a(ree,"upsertNodeRecord");function Uv(e){if(eA.isEmpty(e.subscribe)||eA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Uv,"reverseSubscription");function nee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=eA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=Uv(c),f=j7()[l]?.[_],h=new F7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new q7(r,t,s,n)}a(nee,"buildNodePayloads");function see(){if(!Pv.get(Na.CONFIG_PARAMS.CLUSTERING_ENABLED))throw k7(new Error,Y7.CLUSTERING_NOT_ENABLED,$7.BAD_REQUEST,void 0,void 0,!0)}a(see,"checkClusteringEnabled");async function iee(){let e=new K7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await X7(e))}a(iee,"getAllNodeRecords");async function oee(){let e=await W7.getSystemInformation();return{hdb_version:Q7.version(),node_version:e.node_version,platform:e.platform}}a(oee,"getSystemInfo")});var tA=R((xAe,Vv)=>{"use strict";var KE=gt(),Bv=Y(),Hv=Ze(),Gv=L(),WE=k(),xv=PE(),aee=Uu(),{RemotePayloadObject:cee}=i_(),{handleHDBError:qv,hdb_errors:lee}=ie(),{HTTP_STATUS_CODES:Fv}=lee,{NodeSubscription:kv}=xc();Vv.exports=uee;async function uee(e,t){let r;try{r=await KE.request(`${t}.${Hv.REQUEST_SUFFIX}`,new cee(Gv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),WE.trace("Response from remote describe all request:",r)}catch(o){WE.error(`addNode received error from describe all request to remote node: ${o}`);let c=KE.requestErrorHandler(o,"add_node",t);throw qv(new Error,c,Fv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Hv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw qv(new Error,o,Fv.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===Gv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new kv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Bv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Bv.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(WE.trace(`addNode creating schema: ${l}`),await xv.createSchema({operation:"create_schema",schema:l})),!d&&E){WE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new aee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await xv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new kv(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(uee,"reviewSubscriptions")});var c_=R((FAe,Kv)=>{"use strict";var{handleHDBError:QE,hdb_errors:_ee}=ie(),{HTTP_STATUS_CODES:jE}=_ee,{addUpdateNodeValidator:dee}=GE(),zE=k(),Yv=L(),$v=Ze(),fee=Y(),o_=gt(),a_=Ai(),Eee=X(),hee=tA(),{Node:pee,NodeSubscription:mee}=xc(),{broadcast:See}=rt(),Tee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",gee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ree=Eee.get(Yv.CONFIG_PARAMS.CLUSTERING_NODENAME);Kv.exports=Aee;async function Aee(e,t=!1){zE.trace("addNode called with:",e),a_.checkClusteringEnabled();let r=dee(e);if(r)throw QE(r,r.message,jE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await a_.getNodeRecord(n);if(!fee.isEmptyOrZeroLength(d))throw QE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,jE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await hee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Tee,o;let c=a_.buildNodePayloads(s,Ree,Yv.OPERATIONS_ENUM.ADD_NODE,await a_.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new mee(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await o_.request(`${n}.${$v.REQUEST_SUFFIX}`,c)}catch(d){zE.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let m=s[f];m.publish=!1,m.subscribe=!1,await o_.updateRemoteConsumer(m,n)}let E=o_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===$v.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw QE(new Error,d,jE.INTERNAL_SERVER_ERROR,"error",d)}zE.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await o_.updateRemoteConsumer(f,n),f.subscribe===!0&&await o_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new pee(n,l,_.system_info);return await a_.upsertNodeRecord(u),See({type:"nats_update"}),i.length>0?o.message=gee:o.message=`Successfully added '${n}' to manifest`,o}a(Aee,"addNode")});var sA=R(($Ae,jv)=>{"use strict";var{handleHDBError:rA,hdb_errors:Oee}=ie(),{HTTP_STATUS_CODES:nA}=Oee,{addUpdateNodeValidator:bee}=GE(),l_=k(),Qv=L(),Wv=Ze(),VAe=Y(),u_=gt(),__=Ai(),Nee=X(),{cloneDeep:yee}=require("lodash"),Iee=tA(),{Node:wee,NodeSubscription:Cee}=xc(),{broadcast:Dee}=rt(),Lee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Pee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mee=Nee.get(Qv.CONFIG_PARAMS.CLUSTERING_NODENAME);jv.exports=Uee;async function Uee(e){l_.trace("updateNode called with:",e),__.checkClusteringEnabled();let t=bee(e);if(t)throw rA(t,t.message,nA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await __.getNodeRecord(r);s.length>0&&(n=yee(s));let{added:i,skipped:o}=await Iee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Lee,c;let l=__.buildNodePayloads(i,Mee,Qv.OPERATIONS_ENUM.UPDATE_NODE,await __.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];l_.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}l_.trace("updateNode sending remote payload:",l);let _;try{_=await u_.request(`${r}.${Wv.REQUEST_SUFFIX}`,l)}catch(u){l_.error(`updateNode received error from request: ${u}`);let d=u_.requestErrorHandler(u,"update_node",r);throw rA(new Error,d,nA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Wv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw rA(new Error,u,nA.INTERNAL_SERVER_ERROR,"error",u)}l_.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await u_.updateRemoteConsumer(E,r),E.subscribe===!0?await u_.updateConsumerIterator(E.schema,E.table,r,"start"):await u_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new wee(r,[],_.system_info)]),await vee(n[0],i,_.system_info),o.length>0?c.message=Pee:c.message=`Successfully updated '${r}'`,c}a(Uee,"updateNode");async function vee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Cee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await __.upsertNodeRecord(n),Dee({type:"nats_update"})}a(vee,"updateNodeTable")});var e0=R((KAe,Zv)=>{"use strict";var Xv=require("joi"),{string:zv}=Xv.types(),Bee=nt(),Jv=L(),Hee=X(),Gee=Ze();Zv.exports=xee;function xee(e){let t=zv.invalid(Hee.get(Jv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gee.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=Xv.object({operation:zv.valid(Jv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Bee.validateBySchema(e,r)}a(xee,"removeNodeValidator")});var XE=R((QAe,i0)=>{"use strict";var{handleHDBError:t0,hdb_errors:qee}=ie(),{HTTP_STATUS_CODES:r0}=qee,Fee=e0(),d_=k(),n0=Ai(),kee=Y(),JE=L(),s0=Ze(),iA=gt(),Vee=X(),{RemotePayloadObject:$ee}=i_(),{NodeSubscription:Yee}=xc(),Kee=Mu(),Wee=ia(),{broadcast:Qee}=rt(),jee=Vee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);i0.exports=zee;async function zee(e){d_.trace("removeNode called with:",e),n0.checkClusteringEnabled();let t=Fee(e);if(t)throw t0(t,t.message,r0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await n0.getNodeRecord(r);if(kee.isEmptyOrZeroLength(n))throw t0(new Error,`Node '${r}' was not found.`,r0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new $ee(JE.OPERATIONS_ENUM.REMOVE_NODE,jee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await iA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await iA.updateRemoteConsumer(new Yee(u.schema,u.table,!1,!1),r)}catch(d){d_.error(d)}}try{i=await iA.request(`${r}.${s0.REQUEST_SUFFIX}`,s),d_.trace("Remove node reply from remote node:",r,i)}catch(l){d_.error("removeNode received error from request:",l),o=!0}let c=new Kee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Wee.deleteRecord(c),Qee({type:"nats_update"}),i?.status===s0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(d_.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(zee,"removeNode")});var c0=R((zAe,a0)=>{"use strict";var o0=require("joi"),{string:Jee,array:Xee}=o0.types(),Zee=nt(),ete=GE();a0.exports=tte;function tte(e){let t=o0.object({operation:Jee.valid("configure_cluster").required(),connections:Xee.items(ete.validation_schema).required()});return Zee.validateBySchema(e,t)}a(tte,"configureClusterValidator")});var eh=R((XAe,f0)=>{"use strict";var rte=L(),ZE=k(),nte=Y(),ste=XE(),ite=c_(),l0=Ai(),ote=c0(),{handleHDBError:u0,hdb_errors:ate}=ie(),{HTTP_STATUS_CODES:_0}=ate,cte="Configure cluster complete.",lte="Failed to configure the cluster. Check the logs for more details.",ute="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";f0.exports=_te;async function _te(e){ZE.trace("configure cluster called with:",e),l0.checkClusteringEnabled();let t=ote(e);if(t)throw u0(t,t.message,_0.BAD_REQUEST,void 0,void 0,!0);let r=await l0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await d0(ste,{operation:rte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}ZE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await d0(ite,d,d.node_name);s.push(E)}ZE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(ZE.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(nte.isEmptyOrZeroLength(o))return{message:cte,connections:c};if(l)return{message:ute,failed_nodes:o,connections:c};throw u0(new Error,lte,_0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(_te,"configureCluster");async function d0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(d0,"functionWrapper")});var m0=R((eOe,p0)=>{"use strict";var f_=require("joi"),dte=nt(),{validateSchemaExists:E0,validateTableExists:fte,validateSchemaName:h0}=Ls(),Ete=f_.object({operation:f_.string().valid("purge_stream"),schema:f_.string().custom(E0).custom(h0).optional(),database:f_.string().custom(E0).custom(h0).optional(),table:f_.string().custom(fte).required()});function hte(e){return dte.validateBySchema(e,Ete)}a(hte,"purgeStreamValidator");p0.exports=hte});var oA=R((rOe,S0)=>{"use strict";var{handleHDBError:pte,hdb_errors:mte}=ie(),{HTTP_STATUS_CODES:Ste}=mte,Tte=m0(),gte=gt(),Rte=Ai();S0.exports=Ate;async function Ate(e){e.schema=e.schema??e.database;let t=Tte(e);if(t)throw pte(t,t.message,Ste.BAD_REQUEST,void 0,void 0,!0);Rte.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await gte.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ate,"purgeStream")});var rh=R((sOe,b0)=>{"use strict";var cA=Ai(),Ote=gt(),R0=X(),th=L(),ya=Ze(),bte=Y(),aA=k(),{RemotePayloadObject:Nte}=i_(),{ErrorCode:T0}=require("nats"),g0=R0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),A0=R0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);b0.exports={clusterStatus:yte,buildNodeStatus:O0};async function yte(){let e={node_name:A0,is_enabled:g0,connections:[]};if(!g0)return e;let t=await cA.getAllNodeRecords();if(bte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(O0(t[n],e.connections));return await Promise.allSettled(r),e}a(yte,"clusterStatus");async function O0(e,t){let r=e.name,n=new Nte(th.OPERATIONS_ENUM.CLUSTER_STATUS,A0,void 0,await cA.getSystemInfo()),s,i,o=ya.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Ote.request(ya.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ya.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ya.CLUSTER_STATUS_STATUSES.CLOSED,aA.error(`Error getting node status from ${r} `,s))}catch(l){aA.warn(`Error getting node status from ${r}`,l),l.code===T0.NoResponders?o=ya.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===T0.Timeout?o=ya.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ya.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ite(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!==th.PRE_4_0_0_VERSION&&await cA.upsertNodeRecord(l)}catch(l){aA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(O0,"buildNodeStatus");function Ite(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(Ite,"NodeStatusObject")});var sh=R((oOe,N0)=>{"use strict";var{handleHDBError:wte,hdb_errors:Cte}=ie(),{HTTP_STATUS_CODES:Dte}=Cte,Lte=gt(),Pte=Ai(),lA=Y(),nh=require("joi"),Mte=nt(),Ute=2e3,vte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});N0.exports=Bte;async function Bte(e){Pte.checkClusteringEnabled();let t=Mte.validateBySchema(e,vte);if(t)throw wte(t,t.message,Dte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||lA.autoCastBoolean(n),o=s===void 0||lA.autoCastBoolean(s),c={nodes:[]},l=await Lte.getServerList(r??Ute),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(m=>({host:m.split(":")[0],port:lA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Bte,"clusterNetwork")});var C0=R((cOe,w0)=>{"use strict";var uA=require("joi"),y0=nt(),{route_constraints:I0}=CT();w0.exports={setRoutesValidator:Hte,deleteRoutesValidator:Gte};function Hte(e){let t=uA.object({server:uA.valid("hub","leaf").required(),routes:I0.required()});return y0.validateBySchema(e,t)}a(Hte,"setRoutesValidator");function Gte(e){let t=uA.object({routes:I0.required()});return y0.validateBySchema(e,t)}a(Gte,"deleteRoutesValidator")});var oh=R((uOe,M0)=>{"use strict";var Ia=Et(),_A=Y(),ih=L(),D0=C0(),{handleHDBError:L0,hdb_errors:xte}=ie(),{HTTP_STATUS_CODES:P0}=xte,qte="cluster routes successfully set",Fte="cluster routes successfully deleted";M0.exports={setRoutes:kte,getRoutes:Vte,deleteRoutes:$te};function kte(e){let t=D0.setRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=_A.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:qte,set:o,skipped:i}}a(kte,"setRoutes");function Vte(){let e=Ia.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Vte,"getRoutes");function $te(e){let t=D0.deleteRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let m=n[f];if(d.host===m.host&&d.port===m.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=_A.isEmptyOrZeroLength(n)?null:n,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=_A.isEmptyOrZeroLength(s)?null:s,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Fte,deleted:i,skipped:o}}a($te,"deleteRoutes")});var v0=R((dOe,U0)=>{"use strict";var E_=require("alasql"),wa=require("recursive-iterator"),ds=k(),Yte=Y(),h_=L(),dA=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Wte(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Kte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Kte(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(Kte,"filterReadRestrictedAttrs");function Wte(e,t,r,n,s){Qte(e,t,r,n,s)}a(Wte,"interpretAST");function p_(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(p_,"addSchemaTableToMap");function Qte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?Xte(e,t,r):e instanceof E_.yy.Select?jte(e,t,r,n,s):e instanceof E_.yy.Update?zte(e,t,r):e instanceof E_.yy.Delete?Jte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Qte,"getRecordAttributesAST");function jte(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Yte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{p_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),p_(c.table,t,r,n,s)});let o=new wa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new wa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new wa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new wa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(jte,"getSelectAttributes");function zte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(zte,"getUpdateAttributes");function Jte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new wa(e.where),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(Jte,"getDeleteAttributes");function Xte(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.into.databaseid;p_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.into.tableid,s,i.columnid,t,r)}a(Xte,"getInsertAttributes");function fA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(fA,"pushAttribute");U0.exports=dA});var ch=R((EOe,x0)=>{var ah=la(),B0=require("chalk"),En=k(),H0=require("prompt"),{promisify:Zte}=require("util"),EA=L(),ere=require("fs-extra"),tre=require("path"),rre=Y(),nre=Ri(),G0=X();G0.initSync();var sre=require("moment"),ire=Zte(H0.get),ore=tre.join(G0.getHdbBasePath(),EA.LICENSE_KEY_DIR_NAME,EA.LICENSE_FILE_NAME,EA.LICENSE_FILE_NAME);x0.exports={getFingerprint:cre,setLicense:are,parseLicense:hA,register:lre,getRegistrationInfo:_re};async function are(e){if(e&&e.key&&e.company){try{En.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw En.error(r),En.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(are,"setLicense");async function cre(){let e={};try{e=await ah.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw En.error(r),En.error(t),new Error(r)}return e}a(cre,"getFingerprint");async function hA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");En.info("Validating license input...");let r=ah.validateLicense(e,t);if(En.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(En.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(En.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{En.info("writing license to disk"),await ere.writeFile(ore,JSON.stringify({license_key:e,company:t}))}catch(n){throw En.error("Failed to write License"),n}return"Registration successful."}a(hA,"parseLicense");async function lre(){let e=await ure();return hA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(lre,"register");async function ure(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:B0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:B0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{H0.start()}catch(n){En.error(n)}let r;try{r=await ire(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(ure,"promptForRegistration");async function _re(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ah.getLicense()}catch(r){throw En.error(`There was an error when searching licenses due to: ${r.message}`),r}if(rre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=nre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=sre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(_re,"getRegistrationInfo")});var F0=R((pOe,q0)=>{"use strict";var dre=Ze(),pA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+dre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};q0.exports=pA});var $0=R((SOe,V0)=>{"use strict";var k0=Ze(),mA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+k0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+k0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};V0.exports=mA});var K0=R((gOe,Y0)=>{"use strict";var SA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Y0.exports=SA});var Q0=R((AOe,W0)=>{"use strict";var fre=Ze(),TA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+fre.SERVER_SUFFIX.ADMIN,this.password=r}};W0.exports=TA});var fh=R((bOe,J0)=>{"use strict";var qc=require("path"),_h=require("fs-extra"),Ere=F0(),hre=$0(),pre=K0(),mre=Q0(),gA=Lr(),kc=Y(),kr=Et(),uh=L(),m_=Ze(),{CONFIG_PARAMS:At}=uh,Vc=k(),S_=X(),j0=fi(),RA=gt(),Fc="clustering",Sre=1e4,z0=50;J0.exports={generateNatsConfig:gre,removeNatsConfig:Rre,getHubConfigPath:Tre};function Tre(){let e=S_.get(At.ROOTPATH);return qc.join(e,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER)}a(Tre,"getHubConfigPath");async function gre(e=!1,t=void 0){S_.initSync();let r=S_.get(At.ROOTPATH),n=qc.join(r,Fc,m_.PID_FILES.HUB),s=qc.join(r,Fc,m_.PID_FILES.LEAF),i=kr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,Fc,m_.NATS_CONFIG_FILES.LEAF_SERVER),l=kr.getConfigFromFile(At.CLUSTERING_TLS_CERTIFICATE),_=kr.getConfigFromFile(At.CLUSTERING_TLS_PRIVATEKEY),u=kr.getConfigFromFile(At.CLUSTERING_TLS_CERT_AUTH),d=kr.getConfigFromFile(At.CLUSTERING_TLS_INSECURE),E=kr.getConfigFromFile(At.CLUSTERING_TLS_VERIFY),f=kr.getConfigFromFile(At.CLUSTERING_NODENAME),h=kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await RA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await gA.listUsers(),S=kr.getConfigFromFile(At.CLUSTERING_USER),g=await gA.getClusterUser();(kc.isEmpty(g)||g.active!==!0)&&dh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lh(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_NETWORK_PORT),await lh(At.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],b=[];for(let[z,J]of m.entries())J.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&J.active&&(T.push(new mre(J.username,j0.decrypt(J.hash))),b.push(new pre(J.username,j0.decrypt(J.hash))));let N=[],{hub_routes:U}=kr.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(U))for(let z of U)N.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Ere(kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NAME),kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,b);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _h.writeJson(o,v),Vc.trace(`Hub server config written to ${o}`));let q=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new hre(kr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[M],T,b,l,_,u,d);u==null&&delete W.tls.ca_file,(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _h.writeJson(c,W),Vc.trace(`Leaf server config written to ${c}`))}a(gre,"generateNatsConfig");async function lh(e){let t=S_.get(e);return kc.isEmpty(t)&&dh(`port undefined for '${e}'`),await kc.isPortTaken(t)&&dh(`'${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(lh,"isPortAvailable");function dh(e){let t=`Error generating clustering config: ${e}`;Vc.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Rre(e){let{port:t,config_file:r}=RA.getServerConfig(e),{username:n,decrypt_hash:s}=await gA.getClusterUser(),i=0,o=2e3;for(;i<z0;){try{let u=await RA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Vc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=z0)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 _=o*(i*2);_>3e4&&Vc.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await kc.async_set_timeout(_)}let c="0".repeat(Sre),l=qc.join(S_.get(At.ROOTPATH),Fc,r);await _h.writeFile(l,c),await _h.remove(l),Vc.notify(e,"started.")}a(Rre,"removeNatsConfig")});var nB=R((yOe,rB)=>{"use strict";var hn=X(),Are=la(),Te=L(),T_=Ze(),Oi=require("path"),{PACKAGE_ROOT:hh}=L(),X0=X(),Eh=Y(),$c="/dev/null",Ore=Oi.join(hh,"launchServiceScripts"),Z0=Oi.join(hh,"utility/scripts"),bre=Oi.join(Z0,Te.HDB_RESTART_SCRIPT),eB=Oi.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,T_.NATS_BINARY_NAME);function tB(){let t=Are.licenseSearch().ram_allocation||Te.RAM_ALLOCATION_ENUM.DEFAULT,r=Te.MEM_SETTING_KEY+t,n={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Eh.noBootFile()&&(n[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{name:Te.PROCESS_DESCRIPTORS.HDB,script:Te.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:hh}}a(tB,"generateMainServerConfig");var Nre=9930;function yre(){hn.initSync(!0);let e=hn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.HUB_SERVER),r=Oi.join(hn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[hn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Nre?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return hn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(yre,"generateNatsHubServerConfig");var Ire=9940;function wre(){hn.initSync(!0);let e=hn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.LEAF_SERVER),r=Oi.join(hn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[hn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ire?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return hn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$c,i.error_file=$c),i}a(wre,"generateNatsLeafServerConfig");function Cre(){hn.initSync();let e=Oi.join(hn.get(Te.CONFIG_PARAMS.LOGGING_ROOT),Te.LOG_NAMES.HDB),t={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ore,autorestart:!1};return hn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$c,t.error_file=$c),t}a(Cre,"generateClusteringUpgradeV4ServiceConfig");function Dre(){let e={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.RESTART_HDB};return Eh.noBootFile()&&(e[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{...{name:Te.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Z0},script:bre}}a(Dre,"generateRestart");function Lre(){return{apps:[tB()]}}a(Lre,"generateAllServiceConfigs");rB.exports={generateAllServiceConfigs:Lre,generateMainServerConfig:tB,generateRestart:Dre,generateNatsHubServerConfig:yre,generateNatsLeafServerConfig:wre,generateClusteringUpgradeV4ServiceConfig:Cre}});var Yc=R((COe,pB)=>{"use strict";var He=L(),Pre=Y(),Ni=fh(),ph=gt(),bi=Ze(),go=nB(),mh=X(),Ro=k(),Mre=Ai(),{startWorker:sB,onMessageFromWorkers:Ure}=rt(),vre=gi(),wOe=require("util"),Bre=require("child_process"),Hre=require("fs"),{execFile:Gre}=Bre,De;pB.exports={enterPM2Mode:xre,start:Ao,stop:AA,reload:oB,restart:aB,list:OA,describe:lB,connect:yi,kill:$re,startAllServices:Yre,startService:bA,getUniqueServicesList:uB,restartAllServices:Kre,isServiceRegistered:_B,reloadStopStart:dB,restartHdb:cB,deleteProcess:kre,startClusteringProcesses:EB,startClusteringThreads:hB,isHdbRestartRunning:Vre,isClusteringRunning:Qre,stopClustering:Wre,reloadClustering:jre};var g_=!1;Ure(e=>{e.type==="restart"&&mh.initSync(!0)});function xre(){g_=!0}a(xre,"enterPM2Mode");function yi(){return De||(De=require("pm2")),new Promise((e,t)=>{De.connect((r,n)=>{Ro.setupConsoleLogging(),r&&t(r),e(n)})})}a(yi,"connect");var Vr,qre=10,iB;function Ao(e,t=!1){if(g_)return Fre(e);let r=Gre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Vr.indexOf(r);o>-1&&Vr.splice(o,1),!iB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<qre&&(Hre.existsSync(Ni.getHubConfigPath())?Ao(e):(await Ni.generateNatsConfig(!0),Ao(e),await new Promise(c=>setTimeout(c,3e3)),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=mh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=bi.LOG_LEVELS[E]}if(bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Vr=[],!Vr&&!t){let i=a(()=>{iB=!0,Vr&&(Vr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Vr.push(r)}a(Ao,"start");function Fre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.start(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(Fre,"startWithPM2");function AA(e){if(!g_){for(let t of Vr||[])t.name===e&&(Vr.splice(Vr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.stop(e,async(n,s)=>{n&&(De.disconnect(),r(n)),De.delete(e,(i,o)=>{i&&(De.disconnect(),r(n)),De.disconnect(),t(o)})})})}a(AA,"stop");function oB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.reload(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(oB,"reload");function aB(e){if(!g_)for(let t of Vr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.restart(e,(n,s)=>{De.disconnect(),t(s)})})}a(aB,"restart");function kre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.delete(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(kre,"deleteProcess");async function cB(){await Ao(go.generateRestart())}a(cB,"restartHdb");async function Vre(){let e=await OA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Vre,"isHdbRestartRunning");function OA(){return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.list((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(OA,"list");function lB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.describe(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(lB,"describe");function $re(){if(!g_){for(let e of Vr||[])e.kill();Vr=[];return}return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.killDaemon((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a($re,"kill");async function Yre(){try{await EB(),await hB(),await Ao(go.generateAllServiceConfigs())}catch(e){throw De?.disconnect(),e}}a(Yre,"startAllServices");async function bA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=go.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=go.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=go.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=go.generateNatsHubServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=go.generateNatsLeafServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=go.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ao(r)}catch(r){throw De?.disconnect(),r}}a(bA,"startService");async function uB(){try{let e=await OA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw De?.disconnect(),e}}a(uB,"getUniqueServicesList");async function Kre(e=[]){try{let t=!1,r=await uB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await aB(o))}t&&await dB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw De?.disconnect(),t}}a(Kre,"restartAllServices");async function _B(e){if(Vr?.find(r=>r.name===e))return!0;let t=await vre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(_B,"isServiceRegistered");async function dB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await lB(e),n=Pre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await AA(e),await bA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await cB():await oB(e)}a(dB,"reloadStopStart");var fB;async function EB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await bA(r,e)}}a(EB,"startClusteringProcesses");async function hB(){fB=sB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ph.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ph.updateLocalStreams();let e=await Mre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ro.info("Starting clustering upgrade 4.0.0 process"),sB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(hB,"startClusteringThreads");async function Wre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await fB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await AA(t)}}a(Wre,"stopClustering");async function Qre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await _B(t)===!1)return!1}return!0}a(Qre,"isClusteringRunning");async function jre(){await Ni.generateNatsConfig(!0),await ph.reloadNATSHub(),await ph.reloadNATSLeaf(),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(jre,"reloadClustering")});var gh={};Ve(gh,{compactOnStart:()=>zre,copyDb:()=>AB});async function zre(){A_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,NA.get)(Oo.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Mr();try{for(let n in r){if(n==="system")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,Sh.join)(e,"backup",n+".mdb"),o=(0,Sh.join)(e,Oo.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await mB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await AB(n,o),console.log("Backing up",n,"to",i),await(0,Ca.move)(s,i,{overwrite:!0})}R_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ca.move)(i,s,{overwrite:!0}),await(0,Ca.remove)((0,Sh.join)(e,Oo.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));R_()}catch(n){A_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,yA.updateConfigValue)(Oo.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,Ca.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw R_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await mB(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}.
13
+ `,"")}a(dU,"runCommand");async function r6(){try{await M8.access(iR)}catch{return!1}let e=await dU(`${iR} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return U8.eq(t,e6)}a(r6,"checkNATSServerInstalled");async function uR(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await uU.getClusterUser();if(Aa(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await V8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&_s.error("Error with Nats client connection, connection closed",o),fU()}),i}a(uR,"createConnection");function fU(){Br=void 0,Ta=void 0,ga=void 0,Ra=void 0}a(fU,"clearClientCache");async function n6(){Br&&(await Br.drain(),Br=void 0,Ta=void 0,ga=void 0,Ra=void 0)}a(n6,"closeConnection");var Br,Ra;async function Ju(){return Ra||(Ra=uR(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Br=await Ra),Br||Ra}a(Ju,"getConnection");async function Xu(){if(Ta)return Ta;Aa(Br)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ta=await Br.jetstreamManager({domain:e,timeout:6e4}),Ta}a(Xu,"getJetStreamManager");async function EU(){if(ga)return ga;Aa(Br)&&await Ju();let{domain:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Aa(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ga=Br.jetstream({domain:e,timeout:6e4}),ga}a(EU,"getJetStream");async function xs(){let e=Br||await Ju(),t=Ta||await Xu(),r=ga||await EU();return{connection:e,jsm:t,js:r}}a(xs,"getNATSReferences");async function s6(e){let t=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await uU.getClusterUser(),s=await uR(t,r,n),i=lR(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=_U.decode(u.data);d.response_time=Date.now()-l,c.push(d)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await yE.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(s6,"getServerList");async function _R(e,t){let{jsm:r}=await xs(),n=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Y8.File,retention:K8.Limits,subjects:t,discard:W8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(_R,"createLocalStream");async function hU(){let{jsm:e}=await xs(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(hU,"listStreams");async function i6(e){let{jsm:t}=await xs();await t.streams.delete(e)}a(i6,"deleteLocalStream");async function o6(e){let{connection:t}=await xs(),r=[],n=lR(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(_U.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(o6,"listRemoteStreams");async function a6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await xs(),i=oU(),o={durable_name:i,ack_policy:aR.Explicit};t&&(o.deliver_policy=cR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let u of l){let d=oR(u.data),E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(E.origin=u.headers.get(rr.MSG_HEADERS.ORIGIN)),_.push(E),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(a6,"viewStream");async function*c6(e,t=void 0,r=void 0){let{jsm:n,js:s}=await xs(),i=oU(),o={durable_name:i,ack_policy:aR.Explicit};t&&(o.deliver_policy=cR.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of l){let u=oR(_.data);u[0]||(u=[u]);for(let d of u){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(rr.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(c6,"viewStreamIterator");async function l6(e,t,r,n){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=pU(n,r);let{js:s}=await xs(),i=await wE(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:lU.encode(n);try{_s.trace(`publishToStream publishing to subject: ${o}`),X8(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 SU(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await _R(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(l6,"publishToStream");function pU(e,t){t===void 0&&(t=j8());let r=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(rr.MSG_HEADERS.ORIGIN)&&r&&t.append(rr.MSG_HEADERS.ORIGIN,r),t}a(pU,"addNatsMsgHeader");function Lc(e){e=e.toLowerCase();let t=zu.join(Wt.get(Ce.CONFIG_PARAMS.ROOTPATH),Z8);if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Aa(sR)&&(sR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.HUB,config_file:rr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:zu.join(t,rr.PID_FILES.HUB),hdb_nats_path:t}),sR;if(e===Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Aa(nR)&&(nR={port:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.LEAF,config_file:rr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Qu.getConfigFromFile(Ce.CONFIG_PARAMS.CLUSTERING_NODENAME)+rr.SERVER_SUFFIX.LEAF,pid_file_path:zu.join(t,rr.PID_FILES.LEAF),hdb_nats_path:t}),nR;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Lc,"getServerConfig");async function mU(e,t,r,n){try{await e.consumers.add(t,{ack_policy:aR.Explicit,durable_name:r,deliver_policy:cR.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(mU,"createConsumer");async function u6(e,t,r){await e.consumers.delete(t,r)}a(u6,"removeConsumer");function _6(e){return e.split(".")[1]}a(_6,"extractServerName");async function d6(e,t,r=6e4,n=lR()){if(!yE.isObject(t))throw new Error("data param must be an object");let s=lU.encode(t),{connection:i}=await xs(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return oR(c.data)}a(d6,"request");function dR(e){return new Promise(async(t,r)=>{let n=G8(iR,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(dR,"reloadNATS");async function f6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await dR(e)}a(f6,"reloadNATSHub");async function E6(){let{pid_file_path:e}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await dR(e)}a(E6,"reloadNATSLeaf");function h6(e,t,r){let n;switch(e.code){case iU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case iU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(h6,"requestErrorHandler");async function p6(e,t){let r=t+rr.SERVER_SUFFIX.LEAF,{connection:n}=await xs(),{jsm:s}=await b6(r),{schema:i,table:o}=e,c=IE.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await SU(async()=>{if(e.subscribe===!0)await mU(s,c,n.info.server_name,l);else try{await u6(s,c,n.info.server_name)}catch(_){_s.trace(_)}})}a(p6,"updateRemoteConsumer");async function m6(e,t,r,n){let s=IE.createNatsTableStreamName(e,t),i=r+rr.SERVER_SUFFIX.LEAF,o={type:Ce.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!cU&&k8()<Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=rR();await c(o)}await q8(o),n==="stop"&&await yE.async_set_timeout(1e3)}a(m6,"updateConsumerIterator");function SU(e){return x8.writeTransaction(Ce.SYSTEM_SCHEMA_NAME,Ce.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(SU,"exclusiveLock");async function TU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await wE(),s=R6(e,t,n);await _R(r,[s])}a(TU,"createLocalTableStream");async function S6(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await TU(n,s)}}a(S6,"createTableStreams");async function gU(e,t,r=void 0){if(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{domain:s}=Lc(Ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Ju()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_s.warn(n);else throw n}}a(gU,"purgeTableStream");async function T6(e,t){if(Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await gU(e,t[r])}a(T6,"purgeSchemaTableStreams");async function g6(e){return(await Xu()).streams.info(e)}a(g6,"getStreamInfo");function R6(e,t,r){return`${rr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(R6,"createSubjectName");async function wE(){if(ju)return ju;if(ju=(await Xu())?.nc?.info?.server_name,ju===void 0)throw new Error("Unable to get jetstream manager server name");return ju}a(wE,"getJsmServerName");async function A6(){let e=await Xu(),t=await wE(),r=await hU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=O6(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let u=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u,await e.streams.update(s.name,s)}}a(A6,"updateLocalStreams");function O6(e){let{config:t}=e,r=!1,n=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wt.get(Ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Wt.get(Ce.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(O6,"updateStreamLimits");async function b6(e){let t,r;try{t=await Br.jetstream({domain:e}),r=await Br.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _s.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(b6,"connectToRemoteJS")});var PE=R((DRe,NU)=>{"use strict";var Pc=Cf(),Mc=wM(),N6=k(),y6=require("uuid").v4,CRe=require("clone"),DE=hi(),Uc=L(),I6=require("util"),Eo=Hn(),{handleHDBError:Hr,hdb_errors:w6}=ie(),{HDB_ERROR_MSGS:CE,HTTP_STATUS_CODES:Gr}=w6,{SchemaEventMsg:LE}=os(),AU=gt(),{getDatabases:C6}=(Re(),ae(Ve)),{transformReq:vc}=Y();NU.exports={createSchema:D6,createSchemaStructure:OU,createTable:L6,createTableStructure:bU,createAttribute:B6,dropSchema:P6,dropTable:M6,dropAttribute:U6,getBackup:H6};async function D6(e){let t=await OU(e);return DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),t}a(D6,"createSchema");async function OU(e){let t=Pc.schema_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(vc(e),!await Mc.checkSchemaExists(e.schema))throw Hr(new Error,CE.SCHEMA_EXISTS_ERR(e.schema),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.SCHEMA_EXISTS_ERR(e.schema),!0);return await Eo.createSchema(e),`database '${e.schema}' successfully created`}a(OU,"createSchemaStructure");async function L6(e){return vc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await bU(e)}a(L6,"createTable");async function bU(e){let t=Pc.create_table_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);if(Pc.validateTableResidence(e.residence),!await Mc.checkSchemaTableExists(e.schema,e.table))throw Hr(new Error,CE.TABLE_EXISTS_ERR(e.schema,e.table),Gr.BAD_REQUEST,Uc.LOG_LEVELS.ERROR,CE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:y6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Eo.createTable(n,e);else throw Hr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Gr.BAD_REQUEST);else await Eo.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(bU,"createTableStructure");async function P6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Pc.schema_object(e),n=t??r;if(n)throw Hr(n,n.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let s=await Mc.checkSchemaExists(e.schema);if(s)throw Hr(new Error,s,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,s,!0);let i=await Mc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Eo.dropSchema(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema)),await AU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(P6,"dropSchema");async function M6(e){let t=Pc.table_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Hr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);return await Eo.dropTable(e),await AU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(M6,"dropTable");async function U6(e){let t=Pc.attribute_object(e);if(t)throw Hr(t,t.message,Gr.BAD_REQUEST,void 0,void 0,!0);vc(e);let r=await Mc.checkSchemaTableExists(e.schema,e.table);if(r)throw Hr(new Error,r,Gr.NOT_FOUND,Uc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Hr(new Error,"You cannot drop a hash attribute",Gr.BAD_REQUEST,void 0,void 0,!0);if(Uc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Hr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Gr.BAD_REQUEST,void 0,void 0,!0);try{return await Eo.dropAttribute(e),v6(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw N6.error(`Got an error deleting attribute ${I6.inspect(e)}.`),n}}a(U6,"dropAttribute");function v6(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(v6,"dropAttributeFromGlobal");async function B6(e){vc(e);let t=C6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Hr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Gr.BAD_REQUEST,void 0,void 0,!0);return await Eo.createAttribute(e),DE.signalSchemaChange(new LE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(B6,"createAttribute");function H6(e){return Eo.getBackup(e)}a(H6,"getBackup")});var IU=R((PRe,yU)=>{"use strict";var{OPERATIONS_ENUM:G6}=L(),fR=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=G6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yU.exports=fR});var ER=R((vRe,PU)=>{"use strict";var x6=Hn(),URe=IU(),ME=Y(),UE=L(),q6=J(),{handleHDBError:wU,hdb_errors:F6}=ie(),{HDB_ERROR_MSGS:CU,HTTP_STATUS_CODES:DU}=F6,k6=Object.values(UE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),LU="To use this operation audit log must be enabled in harperdb-config.yaml";PU.exports=$6;async function $6(e){if(ME.isEmpty(e.schema))throw new Error(CU.SCHEMA_REQUIRED_ERR);if(ME.isEmpty(e.table))throw new Error(CU.TABLE_REQUIRED_ERR);if(!q6.get(UE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wU(new Error,LU,DU.BAD_REQUEST,UE.LOG_LEVELS.ERROR,LU,!0);let t=ME.checkSchemaTableExist(e.schema,e.table);if(t)throw wU(new Error,t,DU.NOT_FOUND,UE.LOG_LEVELS.ERROR,t,!0);if(!ME.isEmpty(e.search_type)&&k6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await x6.readAuditLog(e)}a($6,"readAuditLog")});var UU=R((HRe,MU)=>{"use strict";var{OPERATIONS_ENUM:V6}=L(),hR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=V6.GET_BACKUP,this.schema=t,this.table=r}};MU.exports=hR});var HU=R((FRe,BU)=>{"use strict";var Y6=Hn(),xRe=UU(),pR=Y(),K6=L(),qRe=J(),{handleHDBError:W6,hdb_errors:Q6}=ie(),{HDB_ERROR_MSGS:vU,HTTP_STATUS_CODES:j6}=Q6;BU.exports=z6;async function z6(e){if(pR.isEmpty(e.schema))throw new Error(vU.SCHEMA_REQUIRED_ERR);if(pR.isEmpty(e.table))throw new Error(vU.TABLE_REQUIRED_ERR);let t=pR.checkSchemaTableExist(e.schema,e.table);if(t)throw W6(new Error,t,j6.NOT_FOUND,K6.LOG_LEVELS.ERROR,t,!0);return await Y6.getBackup(read_audit_log_object)}a(z6,"getBackup")});var $U=R(($Re,kU)=>{var ho=require("validate.js"),xU=nt(),Bc=L(),{handleHDBError:J6,hdb_errors:X6}=ie(),{HDB_ERROR_MSGS:Rt,HTTP_STATUS_CODES:Z6}=X6,mR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),e9={STRUCTURE_USER:"structure_user"},GU=Object.values(Bc.ROLE_TYPES_ENUM),t9="attribute_permissions",r9="attribute_name",{PERMS_CRUD_ENUM:Hc}=Bc,n9=[t9,...Object.values(Hc)],qU=[Hc.READ,Hc.INSERT,Hc.UPDATE],s9=[r9,...qU];function i9(e){let t=mR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,FU(e,t)}a(i9,"addRoleValidation");function o9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,FU(e,t)}a(o9,"alterRoleValidation");function a9(e){let t=mR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xU.validateObject(e,t)}a(a9,"dropRoleValidation");var c9=["operation","role","id","permission","hdb_user","hdb_auth_header"];function FU(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)c9.includes(n[o])||s.push(n[o]);s.length>0&&wt(Rt.INVALID_ROLE_JSON_KEYS(s),r);let i=xU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{wt(o,r)}),e.permission){let o=l9(e);o&&wt(o,r),GU.forEach(c=>{e.permission[c]&&!ho.isBoolean(e.permission[c])&&wt(Rt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GU.indexOf(o)<0){if(o===e9.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let _=0,u=l.length;_<u;_++){let d=l[_];global.hdb_schema[d]||wt(Rt.SCHEMA_NOT_FOUND(d),r)}continue}wt(Rt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){wt(Rt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let _=c.tables[l];if(!l||!global.hdb_schema[o][l]){wt(Rt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{n9.includes(u)||wt(Rt.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Hc).forEach(u=>{ho.isDefined(_[u])?ho.isBoolean(_[u])||wt(Rt.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):wt(Rt.TABLE_PERM_MISSING(u),r,o,l)}),ho.isDefined(_.attribute_permissions)){if(!ho.isArray(_.attribute_permissions)){wt(Rt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{wt(Rt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(m=>{!s9.includes(m)&&m!==Hc.DELETE&&wt(Rt.INVALID_ATTR_PERM_KEY(m),r,o,l)}),!ho.isDefined(f.attribute_name)){wt(Rt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!u.includes(h)){wt(Rt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}qU.forEach(m=>{ho.isDefined(f[m])?ho.isBoolean(f[m])||wt(Rt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,l):wt(Rt.ATTR_PERM_MISSING(m,h),r,o,l)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${l}`;wt(Rt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return u9(r)}a(FU,"customValidate");kU.exports={addRoleValidation:i9,alterRoleValidation:o9,dropRoleValidation:a9};function l9(e){let{operation:t,permission:r}=e;if(t===Bc.OPERATIONS_ENUM.ADD_ROLE||t===Bc.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return Rt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Bc.ROLE_TYPES_ENUM.SUPER_USER:Bc.ROLE_TYPES_ENUM.CLUSTER_USER;return Rt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(l9,"validateNoSUPerms");function u9(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Rt.ROLE_PERMS_ERROR,...e};return J6(new Error,n,Z6.BAD_REQUEST)}else return null}a(u9,"generateRolePermResponse");function wt(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(wt,"addPermError")});var BE=R((YRe,WU)=>{"use strict";var VU=Cr(),YU=ur(),_9=ia(),TR=$U(),gR=hi(),d9=require("uuid").v4,f9=require("util"),vE=L(),E9=Y(),RR=YU.searchByValue,h9=YU.searchByHash,p9=f9.promisify(_9.delete),m9=as(),S9=Nc(),{hdb_errors:T9,handleHDBError:Oa}=ie(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:Zu}=T9,{UserEventMsg:AR}=os();WU.exports={addRole:g9,alterRole:R9,dropRole:A9,listRoles:O9};function SR(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(SR,"scrubRoleDetails");async function g9(e){let t=TR.addRoleValidation(e);if(t)throw t;e=SR(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await RR(r)||[])}catch(i){throw Oa(i)}if(n&&n.length>0)throw Oa(new Error,KU.ROLE_ALREADY_EXISTS(e.role),Zu.CONFLICT,void 0,void 0,!0);e.id||(e.id=d9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await VU.insert(s),gR.signalUserChange(new AR(process.pid)),e=SR(e),e}a(g9,"addRole");async function R9(e){let t=TR.alterRoleValidation(e);if(t)throw t;e=SR(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await VU.update(r)}catch(s){throw Oa(s)}if(n&&n?.message==="updated 0 of 1 records")throw Oa(new Error,"Invalid role id",Zu.BAD_REQUEST,void 0,void 0,!0);return await gR.signalUserChange(new AR(process.pid)),e}a(R9,"alterRole");async function A9(e){let t=TR.dropRoleValidation(e);if(t)throw Oa(new Error,t,Zu.BAD_REQUEST,void 0,void 0,!0);let r=new S9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await h9(r));if(n.length===0)throw Oa(new Error,KU.ROLE_NOT_FOUND,Zu.NOT_FOUND,void 0,void 0,!0);let s=new m9(vE.SYSTEM_SCHEMA_NAME,vE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await RR(s)),o=!1;if(E9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Oa(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Zu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await p9(c),gR.signalUserChange(new AR(process.pid)),`${n[0].role} successfully deleted`}a(A9,"dropRole");async function O9(){return RR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(O9,"listRoles")});var JU=R((WRe,zU)=>{"use strict";var b9=J(),po=require("joi"),N9=nt(),QU=require("moment"),y9=require("fs-extra"),OR=require("path"),I9=require("lodash"),e_=L(),{LOG_LEVELS:ba}=L(),w9="YYYY-MM-DD hh:mm:ss",C9=OR.resolve(__dirname,"../logs");zU.exports=function(e){return N9.validateBySchema(e,D9)};var D9=po.object({from:po.custom(jU),until:po.custom(jU),level:po.valid(ba.NOTIFY,ba.FATAL,ba.ERROR,ba.WARN,ba.INFO,ba.DEBUG,ba.TRACE),order:po.valid("asc","desc"),limit:po.number().min(1),start:po.number().min(0),log_name:po.custom(L9)});function jU(e,t){if(QU(e,QU.ISO_8601).format(w9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jU,"validateDatetime");function L9(e,t){if(I9.invert(e_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=b9.get(e_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?e_.LOG_NAMES.HDB:e,i=s===e_.LOG_NAMES.INSTALL?OR.join(C9,e_.LOG_NAMES.INSTALL):OR.join(n,s);return y9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(L9,"validateReadLogPath")});var NR=R((jRe,ZU)=>{"use strict";var HE=L(),P9=k(),M9=J(),U9=JU(),bR=require("path"),XU=require("fs-extra"),{once:v9}=require("events"),{handleHDBError:B9,hdb_errors:H9}=ie(),{PACKAGE_ROOT:G9}=L(),x9=bR.join(G9,"logs"),q9=1e3,F9=200;ZU.exports=k9;async function k9(e){let t=U9(e);if(t)throw B9(t,t.message,H9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=M9.get(HE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?HE.LOG_NAMES.HDB:e.log_name,s=n===HE.LOG_NAMES.INSTALL?bR.join(x9,HE.LOG_NAMES.INSTALL):bR.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,_=e.until!==void 0,u=_?new Date(e.until):void 0,d=e.limit===void 0?q9:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,m=0;E==="desc"&&!l&&!u&&(m=Math.max(XU.statSync(s).size-(h+5)*F9,0));let S=XU.createReadStream(s,{start:m});S.on("error",v=>{P9.error(v)});let g=0,T=[],b="",N;S.on("data",v=>{let q=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;v=b+v;let M=0,W;for(;(W=q.exec(v))&&!S.destroyed;){N&&(N.message=v.slice(M,W.index),U(N));let[z,X,ce]=W,_e=ce.split("] ["),de=_e[0],Ge=_e[1];_e.splice(0,2),N={timestamp:X,thread:de,level:Ge,tags:_e,message:""},M=W.index+z.length}b=v.slice(M)}),S.on("end",v=>{S.destroyed||N&&(N.message=b.trim(),U(N))}),S.resume();function U(v){let q,M,W;switch(!0){case(i&&c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),v.level===o&&q>=M&&q<=W&&g<f?g++:v.level===o&&q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&c):q=new Date(v.timestamp),M=new Date(l),v.level===o&&q>=M&&g<f?g++:v.level===o&&q>=M&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(i&&_):q=new Date(v.timestamp),W=new Date(u),v.level===o&&q<=W&&g<f?g++:v.level===o&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case(c&&_):q=new Date(v.timestamp),M=new Date(l),W=new Date(u),q>=M&&q<=W&&g<f?g++:q>=M&&q<=W&&(mo(v,E,T),g++,g===h&&S.destroy());break;case i:v.level===o&&g<f?g++:v.level===o&&(mo(v,E,T),g++,g===h&&S.destroy());break;case c:q=new Date(v.timestamp),M=new Date(l),q>=M&&g<f?g++:q>=M&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;case _:q=new Date(v.timestamp),W=new Date(u),q<=W&&g<f?g++:q<=W&&g>=f&&(mo(v,E,T),g++,g===h&&S.destroy());break;default:g<f?g++:(mo(v,E,T),g++,g===h&&S.destroy())}}return a(U,"onLogMessage"),await v9(S,"close"),T}a(k9,"readLog");function mo(e,t,r){t==="desc"?$9(e,r):t==="asc"?V9(e,r):r.push(e)}a(mo,"pushLineToResult");function $9(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($9,"insertDescending");function V9(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(V9,"insertAscending")});var GE=R((eAe,nv)=>{"use strict";var yR=require("joi"),{string:t_,boolean:ev,date:Y9}=yR.types(),K9=nt(),{validateSchemaExists:JRe,validateTableExists:XRe,validateSchemaName:ZRe}=Ls(),W9=L(),Q9=Ze(),tv=J();tv.initSync();var j9=t_.invalid(tv.get(W9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Q9.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),rv={operation:t_.valid("add_node","update_node","set_node_replication"),node_name:j9,subscriptions:yR.array().items({table:t_.optional(),schema:t_.optional(),database:t_.optional(),subscribe:ev.required(),publish:ev.required().custom(J9),start_time:Y9.iso()}).min(1).required()};function z9(e){return K9.validateBySchema(e,yR.object(rv))}a(z9,"addUpdateNodeValidator");function J9(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(J9,"checkForFalsy");nv.exports={addUpdateNodeValidator:z9,validation_schema:rv}});var iv=R((rAe,sv)=>{var X9=nt(),Z9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sv.exports=function(e){return X9.validateObject(e,Z9)}});var xE=R((nAe,ov)=>{"use strict";var e7=L().OPERATIONS_ENUM,IR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=e7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ov.exports=IR});var cv=R((iAe,av)=>{"use strict";var t7={OPERATION:"operation",REFRESH:"refresh"},wR=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},CR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};av.exports={JWTTokens:wR,TOKEN_TYPE_ENUM:t7,JWTRSAKeys:CR}});var s_=R((aAe,dv)=>{"use strict";var n_=require("jsonwebtoken"),DR=require("fs-extra"),LR=Y(),Gn=L(),{handleHDBError:xr,hdb_errors:r7}=ie(),{HTTP_STATUS_CODES:qr,AUTHENTICATION_ERROR_MSGS:Fr}=r7,r_=k(),lv=qf(),UR=Lr(),n7=Cr().update,s7=xE(),i7=hi(),{UserEventMsg:o7}=os(),So=J();So.initSync();var PR=require("path"),{JWTTokens:a7,JWTRSAKeys:c7,TOKEN_TYPE_ENUM:qE}=cv(),l7=So.get(Gn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?So.get(Gn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",u7=So.get(Gn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?So.get(Gn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",FE="RS256",MR;dv.exports={createTokens:_7,validateOperationToken:f7,refreshOperationToken:d7,validateRefreshToken:_v};async function _7(e){if(LR.isEmpty(e)||typeof e!="object")throw xr(new Error,Fr.INVALID_AUTH_OBJECT,qr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.username))throw xr(new Error,Fr.USERNAME_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);if(LR.isEmpty(e.password))throw xr(new Error,Fr.PASSWORD_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await UR.findAndValidateUser(e.username,e.password),!t)throw xr(new Error,Fr.INVALID_CREDENTIALS,qr.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw r_.error(E),xr(new Error,Fr.INVALID_CREDENTIALS,qr.UNAUTHORIZED,void 0,void 0,!0)}let r=await kE(),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 uv(i,r.private_key,r.passphrase),c=await n_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:u7,algorithm:FE,subject:qE.REFRESH}),l=lv.hash(c),_=new s7(Gn.SYSTEM_SCHEMA_NAME,Gn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await n7(_)}catch(E){r_.error(E),d=E}if(d!==void 0||u.skipped_hashes.length>0)throw xr(new Error,Fr.REFRESH_TOKEN_SAVE_FAILED,qr.INTERNAL_SERVER_ERROR);return i7.signalUserChange(new o7(process.pid)),new a7(o,c)}a(_7,"createTokens");async function uv(e,t,r){return await n_.sign(e,{key:t,passphrase:r},{expiresIn:l7,algorithm:FE,subject:qE.OPERATION})}a(uv,"signOperationToken");async function kE(){if(MR===void 0)try{let e=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=PR.join(So.getHdbBasePath(),Gn.LICENSE_KEY_DIR_NAME,Gn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await DR.readFile(e)).toString(),s=(await DR.readFile(t)).toString(),i=(await DR.readFile(r)).toString();MR=new c7(i,s,n)}catch(e){throw r_.error(e),xr(new Error,Fr.NO_ENCRYPTION_KEYS,qr.INTERNAL_SERVER_ERROR)}return MR}a(kE,"getJWTRSAKeys");async function d7(e){if(!e)throw xr(new Error,Fr.INVALID_BODY,qr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw xr(new Error,Fr.REFRESH_TOKEN_REQUIRED,qr.BAD_REQUEST,void 0,void 0,!0);await _v(e.refresh_token);let t=await kE(),r=await n_.decode(e.refresh_token);return{operation_token:await uv({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(d7,"refreshOperationToken");async function f7(e){try{let t=await kE(),r=await n_.verify(e,t.public_key,{algorithms:FE,subject:qE.OPERATION});return await UR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw r_.warn(t),t.name&&t.name==="TokenExpiredError"?xr(new Error,Fr.TOKEN_EXPIRED,qr.FORBIDDEN):xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED)}}a(f7,"validateOperationToken");async function _v(e){let t;try{let r=await kE(),n=await n_.verify(e,r.public_key,{algorithms:FE,subject:qE.REFRESH});t=await UR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw r_.warn(r),r.name&&r.name==="TokenExpiredError"?xr(new Error,Fr.TOKEN_EXPIRED,qr.FORBIDDEN):xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED)}if(!lv.validate(t.refresh_token,e))throw xr(new Error,Fr.INVALID_TOKEN,qr.UNAUTHORIZED);return t}a(_v,"validateRefreshToken")});var vR=R((uAe,hv)=>{"use strict";var E7=iv(),Gc=require("passport"),h7=require("passport-local").Strategy,p7=require("passport-http").BasicStrategy,m7=require("util"),S7=Lr(),Ev=m7.callbackify(S7.findAndValidateUser),lAe=nn(),T7=L(),fv=s_();Gc.use(new h7(function(e,t,r){Ev(e,t,r)}));Gc.use(new p7(function(e,t,r){Ev(e,t,r)}));Gc.serializeUser(function(e,t){t(null,e)});Gc.deserializeUser(function(e,t){t(null,e)});function g7(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":Gc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===T7.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?fv.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):fv.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Gc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(g7,"authorize");function R7(e,t){let r=E7(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(R7,"checkPermissions");hv.exports={authorize:g7,checkPermissions:R7}});var xc=R((dAe,pv)=>{"use strict";var BR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},HR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};pv.exports={Node:BR,NodeSubscription:HR}});var Sv=R((EAe,mv)=>{"use strict";var A7=L().OPERATIONS_ENUM,GR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=A7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mv.exports=GR});var i_=R((pAe,Tv)=>{"use strict";var xR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},qR=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)}};Tv.exports={RemotePayloadObject:xR,RemotePayloadSubscription:qR}});var Rv=R((SAe,gv)=>{"use strict";var FR=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};gv.exports=FR});var bv=R((OAe,Ov)=>{"use strict";var O7=Rv(),gAe=_t(),Av=Ye(),b7=k(),{getSchemaPath:RAe,getTransactionAuditStorePath:AAe}=Je(),{getDatabases:N7}=(Re(),ae(Ve));Ov.exports=y7;async function y7(e){let t=new O7;try{let r=N7()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await Av.environmentDataSize(schema_path,e.name),o=await Av.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){b7.warn(`unable to stat table dbi due to ${r}`)}return t}a(y7,"lmdbGetTableSize")});var yv=R((NAe,Nv)=>{"use strict";var kR=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};Nv.exports=kR});var gi=R((LAe,Dv)=>{"use strict";var I7=require("fs-extra"),w7=require("path"),pr=require("systeminformation"),To=k(),Iv=gt(),IAe=Ze(),VE=L(),C7=bv(),D7=Ei(),{getThreadInfo:wv}=rt(),ZR=J();ZR.initSync();var L7=yv(),{openEnvironment:wAe}=Ye(),{getSchemaPath:CAe}=Je(),{database:DAe,databases:$R}=(Re(),ae(Ve)),$E;Dv.exports={getHDBProcessInfo:WR,getNetworkInfo:jR,getDiskInfo:QR,getMemoryInfo:KR,getCPUInfo:YR,getTimeInfo:VR,getSystemInformation:zR,systemInformation:P7,getTableSize:JR,getMetrics:XR};function VR(){return pr.time()}a(VR,"getTimeInfo");async function YR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await pr.cpu();u.cpu_speed=await pr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:g,...T}=await pr.currentLoad();return T.cpus=[],g.forEach(b=>{let{raw_load:N,raw_load_idle:U,raw_load_irq:v,raw_load_nice:q,raw_load_system:M,raw_load_user:W,...z}=b;T.cpus.push(z)}),u.current_load=T,u}catch(e){return To.error(`error in getCPUInfo: ${e}`),{}}}a(YR,"getCPUInfo");async function KR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await pr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return To.error(`error in getMemoryInfo: ${e}`),{}}}a(KR,"getMemoryInfo");async function WR(){let e={core:[],clustering:[]};try{let t=await pr.processes(),r;try{r=Number.parseInt(await I7.readFile(w7.join(ZR.get(VE.CONFIG_PARAMS.ROOTPATH),VE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===VE.NODE_ERROR_CODES.ENOENT)To.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 To.error(`error in getHDBProcessInfo: ${t}`),e}}a(WR,"getHDBProcessInfo");async function QR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await pr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await pr.fsStats();return e.read_write=_,e.size=await pr.fsSize(),e}catch(t){return To.error(`error in getDiskInfo: ${t}`),e}}a(QR,"getDiskInfo");async function jR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pr.networkInterfaceDefault(),e.latency=await pr.inetChecksite("google.com"),(await pr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await pr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return To.error(`error in getNetworkInfo: ${t}`),e}}a(jR,"getNetworkInfo");async function zR(){if($E!==void 0)return $E;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await pr.osInfo();e=c;let l=await pr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,$E=e,$E}catch(t){return To.error(`error in getSystemInformation: ${t}`),e}}a(zR,"getSystemInformation");async function JR(){let e=[],t=await D7.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await C7(n));return e}a(JR,"getTableSize");async function XR(){let e={};for(let t in $R){let r=e[t]={},n=r.tables={};for(let s in $R[t])try{let i=$R[t][s];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,d]=l.trim().split(" ");return{pid:_,thread:u,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){To.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(XR,"getMetrics");async function Cv(){if(ZR.get(VE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await Iv.getNATSReferences(),t=await Iv.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(Cv,"getNatsStreamInfo");async function P7(e){let t=new L7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zR(),t.time=VR(),t.cpu=await YR(),t.memory=await KR(),t.disk=await QR(),t.network=await jR(),t.harperdb_processes=await WR(),t.table_size=await JR(),t.metrics=await XR(),t.threads=await wv(),t.replication=await Cv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zR();break;case"time":t.time=VR();break;case"cpu":t.cpu=await YR();break;case"memory":t.memory=await KR();break;case"disk":t.disk=await QR();break;case"network":t.network=await jR();break;case"harperdb_processes":t.harperdb_processes=await WR();break;case"table_size":t.table_size=await JR();break;case"database_metrics":case"metrics":t.metrics=await XR();break;case"threads":t.threads=await wv();break;case"replication":t.replication=await Cv();break;default:break}return t}a(P7,"systemInformation")});var Ri=R((MAe,Lv)=>{"use strict";Lv.exports={version:M7,printVersion:U7};var YE=ma();function M7(){if(YE)return YE.version}a(M7,"version");function U7(){YE&&console.log(`HarperDB Version ${YE.version}`)}a(U7,"printVersion")});var Ai=R((HAe,vv)=>{"use strict";var v7=Cr(),eA=Y(),B7=require("util"),Na=L(),Pv=J();Pv.initSync();var H7=vR(),Mv=ur(),{Node:vAe,NodeSubscription:BAe}=xc(),G7=Nc(),x7=Sv(),{RemotePayloadObject:q7,RemotePayloadSubscription:F7}=i_(),{handleHDBError:k7,hdb_errors:$7}=ie(),{HTTP_STATUS_CODES:V7,HDB_ERROR_MSGS:Y7}=$7,K7=as(),W7=gi(),Q7=Ri(),{getDatabases:j7}=(Re(),ae(Ve)),z7=B7.promisify(H7.authorize),J7=Mv.searchByHash,X7=Mv.searchByValue;vv.exports={authHeaderToUser:Z7,isEmpty:eee,getNodeRecord:tee,upsertNodeRecord:ree,buildNodePayloads:nee,checkClusteringEnabled:see,getAllNodeRecords:iee,getSystemInfo:oee,reverseSubscription:Uv};async function Z7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await z7(t,null),e}a(Z7,"authHeaderToUser");function eee(e){return e==null}a(eee,"isEmpty");async function tee(e){let t=new G7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return J7(t)}a(tee,"getNodeRecord");async function ree(e){let t=new x7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return v7.upsert(t)}a(ree,"upsertNodeRecord");function Uv(e){if(eA.isEmpty(e.subscribe)||eA.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(Uv,"reverseSubscription");function nee(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:_}=c,u=eA.getTableHashAttribute(l,_),{subscribe:d,publish:E}=Uv(c),f=j7()[l]?.[_],h=new F7(l,_,u,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new q7(r,t,s,n)}a(nee,"buildNodePayloads");function see(){if(!Pv.get(Na.CONFIG_PARAMS.CLUSTERING_ENABLED))throw k7(new Error,Y7.CLUSTERING_NOT_ENABLED,V7.BAD_REQUEST,void 0,void 0,!0)}a(see,"checkClusteringEnabled");async function iee(){let e=new K7(Na.SYSTEM_SCHEMA_NAME,Na.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await X7(e))}a(iee,"getAllNodeRecords");async function oee(){let e=await W7.getSystemInformation();return{hdb_version:Q7.version(),node_version:e.node_version,platform:e.platform}}a(oee,"getSystemInfo")});var tA=R((xAe,$v)=>{"use strict";var KE=gt(),Bv=Y(),Hv=Ze(),Gv=L(),WE=k(),xv=PE(),aee=Uu(),{RemotePayloadObject:cee}=i_(),{handleHDBError:qv,hdb_errors:lee}=ie(),{HTTP_STATUS_CODES:Fv}=lee,{NodeSubscription:kv}=xc();$v.exports=uee;async function uee(e,t){let r;try{r=await KE.request(`${t}.${Hv.REQUEST_SUFFIX}`,new cee(Gv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),WE.trace("Response from remote describe all request:",r)}catch(o){WE.error(`addNode received error from describe all request to remote node: ${o}`);let c=KE.requestErrorHandler(o,"add_node",t);throw qv(new Error,c,Fv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Hv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw qv(new Error,o,Fv.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===Gv.SYSTEM_SCHEMA_NAME){await KE.createLocalTableStream(l,c);let h=new kv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=Bv.doesSchemaExist(l),u=n[l]!==void 0,d=c?Bv.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!E){s.push(o);continue}if(!_&&u&&(WE.trace(`addNode creating schema: ${l}`),await xv.createSchema({operation:"create_schema",schema:l})),!d&&E){WE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new aee(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await xv.createTable(h)}await KE.createLocalTableStream(l,c);let f=new kv(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(uee,"reviewSubscriptions")});var c_=R((FAe,Kv)=>{"use strict";var{handleHDBError:QE,hdb_errors:_ee}=ie(),{HTTP_STATUS_CODES:jE}=_ee,{addUpdateNodeValidator:dee}=GE(),zE=k(),Yv=L(),Vv=Ze(),fee=Y(),o_=gt(),a_=Ai(),Eee=J(),hee=tA(),{Node:pee,NodeSubscription:mee}=xc(),{broadcast:See}=rt(),Tee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",gee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Ree=Eee.get(Yv.CONFIG_PARAMS.CLUSTERING_NODENAME);Kv.exports=Aee;async function Aee(e,t=!1){zE.trace("addNode called with:",e),a_.checkClusteringEnabled();let r=dee(e);if(r)throw QE(r,r.message,jE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await a_.getNodeRecord(n);if(!fee.isEmptyOrZeroLength(d))throw QE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,jE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await hee(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Tee,o;let c=a_.buildNodePayloads(s,Ree,Yv.OPERATIONS_ENUM.ADD_NODE,await a_.getSystemInfo()),l=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,l.push(new mee(f.schema,f.table,f.publish,f.subscribe))}zE.trace("addNode sending remote payload:",c);let _;try{_=await o_.request(`${n}.${Vv.REQUEST_SUFFIX}`,c)}catch(d){zE.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let m=s[f];m.publish=!1,m.subscribe=!1,await o_.updateRemoteConsumer(m,n)}let E=o_.requestErrorHandler(d,"add_node",n);throw QE(new Error,E,jE.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===Vv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw QE(new Error,d,jE.INTERNAL_SERVER_ERROR,"error",d)}zE.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await o_.updateRemoteConsumer(f,n),f.subscribe===!0&&await o_.updateConsumerIterator(f.schema,f.table,n,"start")}let u=new pee(n,l,_.system_info);return await a_.upsertNodeRecord(u),See({type:"nats_update"}),i.length>0?o.message=gee:o.message=`Successfully added '${n}' to manifest`,o}a(Aee,"addNode")});var sA=R((VAe,jv)=>{"use strict";var{handleHDBError:rA,hdb_errors:Oee}=ie(),{HTTP_STATUS_CODES:nA}=Oee,{addUpdateNodeValidator:bee}=GE(),l_=k(),Qv=L(),Wv=Ze(),$Ae=Y(),u_=gt(),__=Ai(),Nee=J(),{cloneDeep:yee}=require("lodash"),Iee=tA(),{Node:wee,NodeSubscription:Cee}=xc(),{broadcast:Dee}=rt(),Lee="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Pee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Mee=Nee.get(Qv.CONFIG_PARAMS.CLUSTERING_NODENAME);jv.exports=Uee;async function Uee(e){l_.trace("updateNode called with:",e),__.checkClusteringEnabled();let t=bee(e);if(t)throw rA(t,t.message,nA.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await __.getNodeRecord(r);s.length>0&&(n=yee(s));let{added:i,skipped:o}=await Iee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Lee,c;let l=__.buildNodePayloads(i,Mee,Qv.OPERATIONS_ENUM.UPDATE_NODE,await __.getSystemInfo());for(let u=0,d=i.length;u<d;u++){let E=i[u];l_.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[u].start_time===void 0&&delete i[u].start_time}l_.trace("updateNode sending remote payload:",l);let _;try{_=await u_.request(`${r}.${Wv.REQUEST_SUFFIX}`,l)}catch(u){l_.error(`updateNode received error from request: ${u}`);let d=u_.requestErrorHandler(u,"update_node",r);throw rA(new Error,d,nA.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Wv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw rA(new Error,u,nA.INTERNAL_SERVER_ERROR,"error",u)}l_.trace(_);for(let u=0,d=i.length;u<d;u++){let E=i[u];await u_.updateRemoteConsumer(E,r),E.subscribe===!0?await u_.updateConsumerIterator(E.schema,E.table,r,"start"):await u_.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new wee(r,[],_.system_info)]),await vee(n[0],i,_.system_info),o.length>0?c.message=Pee:c.message=`Successfully updated '${r}'`,c}a(Uee,"updateNode");async function vee(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,_=e.subscriptions.length;l<_;l++){let u=n.subscriptions[l];if(u.schema===o.schema&&u.table===o.table){u.publish=o.publish,u.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Cee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await __.upsertNodeRecord(n),Dee({type:"nats_update"})}a(vee,"updateNodeTable")});var e0=R((KAe,Zv)=>{"use strict";var Xv=require("joi"),{string:zv}=Xv.types(),Bee=nt(),Jv=L(),Hee=J(),Gee=Ze();Zv.exports=xee;function xee(e){let t=zv.invalid(Hee.get(Jv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gee.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=Xv.object({operation:zv.valid(Jv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Bee.validateBySchema(e,r)}a(xee,"removeNodeValidator")});var XE=R((QAe,i0)=>{"use strict";var{handleHDBError:t0,hdb_errors:qee}=ie(),{HTTP_STATUS_CODES:r0}=qee,Fee=e0(),d_=k(),n0=Ai(),kee=Y(),JE=L(),s0=Ze(),iA=gt(),$ee=J(),{RemotePayloadObject:Vee}=i_(),{NodeSubscription:Yee}=xc(),Kee=Mu(),Wee=ia(),{broadcast:Qee}=rt(),jee=$ee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);i0.exports=zee;async function zee(e){d_.trace("removeNode called with:",e),n0.checkClusteringEnabled();let t=Fee(e);if(t)throw t0(t,t.message,r0.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await n0.getNodeRecord(r);if(kee.isEmptyOrZeroLength(n))throw t0(new Error,`Node '${r}' was not found.`,r0.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Vee(JE.OPERATIONS_ENUM.REMOVE_NODE,jee,[]),i,o=!1;for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];u.subscribe===!0&&await iA.updateConsumerIterator(u.schema,u.table,r,"stop");try{await iA.updateRemoteConsumer(new Yee(u.schema,u.table,!1,!1),r)}catch(d){d_.error(d)}}try{i=await iA.request(`${r}.${s0.REQUEST_SUFFIX}`,s),d_.trace("Remove node reply from remote node:",r,i)}catch(l){d_.error("removeNode received error from request:",l),o=!0}let c=new Kee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Wee.deleteRecord(c),Qee({type:"nats_update"}),i?.status===s0.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(d_.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(zee,"removeNode")});var c0=R((zAe,a0)=>{"use strict";var o0=require("joi"),{string:Jee,array:Xee}=o0.types(),Zee=nt(),ete=GE();a0.exports=tte;function tte(e){let t=o0.object({operation:Jee.valid("configure_cluster").required(),connections:Xee.items(ete.validation_schema).required()});return Zee.validateBySchema(e,t)}a(tte,"configureClusterValidator")});var eh=R((XAe,f0)=>{"use strict";var rte=L(),ZE=k(),nte=Y(),ste=XE(),ite=c_(),l0=Ai(),ote=c0(),{handleHDBError:u0,hdb_errors:ate}=ie(),{HTTP_STATUS_CODES:_0}=ate,cte="Configure cluster complete.",lte="Failed to configure the cluster. Check the logs for more details.",ute="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";f0.exports=_te;async function _te(e){ZE.trace("configure cluster called with:",e),l0.checkClusteringEnabled();let t=ote(e);if(t)throw u0(t,t.message,_0.BAD_REQUEST,void 0,void 0,!0);let r=await l0.getAllNodeRecords(),n=[];for(let u=0,d=r.length;u<d;u++){let E=await d0(ste,{operation:rte.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[u].name},r[u].name);n.push(E)}ZE.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let u=0;u<i;u++){let d=e.connections[u],E=await d0(ite,d,d.node_name);s.push(E)}ZE.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,_=n.concat(s);for(let u=0,d=_.length;u<d;u++){let E=_[u];E.status==="rejected"&&(ZE.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(nte.isEmptyOrZeroLength(o))return{message:cte,connections:c};if(l)return{message:ute,failed_nodes:o,connections:c};throw u0(new Error,lte,_0.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(_te,"configureCluster");async function d0(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(d0,"functionWrapper")});var m0=R((eOe,p0)=>{"use strict";var f_=require("joi"),dte=nt(),{validateSchemaExists:E0,validateTableExists:fte,validateSchemaName:h0}=Ls(),Ete=f_.object({operation:f_.string().valid("purge_stream"),schema:f_.string().custom(E0).custom(h0).optional(),database:f_.string().custom(E0).custom(h0).optional(),table:f_.string().custom(fte).required()});function hte(e){return dte.validateBySchema(e,Ete)}a(hte,"purgeStreamValidator");p0.exports=hte});var oA=R((rOe,S0)=>{"use strict";var{handleHDBError:pte,hdb_errors:mte}=ie(),{HTTP_STATUS_CODES:Ste}=mte,Tte=m0(),gte=gt(),Rte=Ai();S0.exports=Ate;async function Ate(e){e.schema=e.schema??e.database;let t=Tte(e);if(t)throw pte(t,t.message,Ste.BAD_REQUEST,void 0,void 0,!0);Rte.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await gte.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Ate,"purgeStream")});var rh=R((sOe,b0)=>{"use strict";var cA=Ai(),Ote=gt(),R0=J(),th=L(),ya=Ze(),bte=Y(),aA=k(),{RemotePayloadObject:Nte}=i_(),{ErrorCode:T0}=require("nats"),g0=R0.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED),A0=R0.get(th.CONFIG_PARAMS.CLUSTERING_NODENAME);b0.exports={clusterStatus:yte,buildNodeStatus:O0};async function yte(){let e={node_name:A0,is_enabled:g0,connections:[]};if(!g0)return e;let t=await cA.getAllNodeRecords();if(bte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(O0(t[n],e.connections));return await Promise.allSettled(r),e}a(yte,"clusterStatus");async function O0(e,t){let r=e.name,n=new Nte(th.OPERATIONS_ENUM.CLUSTER_STATUS,A0,void 0,await cA.getSystemInfo()),s,i,o=ya.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Ote.request(ya.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ya.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ya.CLUSTER_STATUS_STATUSES.CLOSED,aA.error(`Error getting node status from ${r} `,s))}catch(l){aA.warn(`Error getting node status from ${r}`,l),l.code===T0.NoResponders?o=ya.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===T0.Timeout?o=ya.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ya.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ite(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!==th.PRE_4_0_0_VERSION&&await cA.upsertNodeRecord(l)}catch(l){aA.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(O0,"buildNodeStatus");function Ite(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(Ite,"NodeStatusObject")});var sh=R((oOe,N0)=>{"use strict";var{handleHDBError:wte,hdb_errors:Cte}=ie(),{HTTP_STATUS_CODES:Dte}=Cte,Lte=gt(),Pte=Ai(),lA=Y(),nh=require("joi"),Mte=nt(),Ute=2e3,vte=nh.object({timeout:nh.number().min(1),connected_nodes:nh.boolean(),routes:nh.boolean()});N0.exports=Bte;async function Bte(e){Pte.checkClusteringEnabled();let t=Mte.validateBySchema(e,vte);if(t)throw wte(t,t.message,Dte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||lA.autoCastBoolean(n),o=s===void 0||lA.autoCastBoolean(s),c={nodes:[]},l=await Lte.getServerList(r??Ute),_={};if(i)for(let u=0,d=l.length;u<d;u++){let E=l[u].statsz;E&&(_[l[u].server.name]=E.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let E=l[u].server,f=l[u].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(m=>({host:m.split(":")[0],port:lA.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Bte,"clusterNetwork")});var C0=R((cOe,w0)=>{"use strict";var uA=require("joi"),y0=nt(),{route_constraints:I0}=CT();w0.exports={setRoutesValidator:Hte,deleteRoutesValidator:Gte};function Hte(e){let t=uA.object({server:uA.valid("hub","leaf").required(),routes:I0.required()});return y0.validateBySchema(e,t)}a(Hte,"setRoutesValidator");function Gte(e){let t=uA.object({routes:I0.required()});return y0.validateBySchema(e,t)}a(Gte,"deleteRoutesValidator")});var oh=R((uOe,M0)=>{"use strict";var Ia=Et(),_A=Y(),ih=L(),D0=C0(),{handleHDBError:L0,hdb_errors:xte}=ie(),{HTTP_STATUS_CODES:P0}=xte,qte="cluster routes successfully set",Fte="cluster routes successfully deleted";M0.exports={setRoutes:kte,getRoutes:$te,deleteRoutes:Vte};function kte(e){let t=D0.setRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,l=e.routes.length;c<l;c++){let _=e.routes[c];_.port=_A.autoCast(_.port);let u=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:qte,set:o,skipped:i}}a(kte,"setRoutes");function $te(){let e=Ia.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a($te,"getRoutes");function Vte(e){let t=D0.deleteRoutesValidator(e);if(t)throw L0(t,t.message,P0.BAD_REQUEST,void 0,void 0,!0);let r=Ia.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let m=n[f];if(d.host===m.host&&d.port===m.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,m=s.length;h<m;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=_A.isEmptyOrZeroLength(n)?null:n,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=_A.isEmptyOrZeroLength(s)?null:s,Ia.updateConfigValue(ih.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Fte,deleted:i,skipped:o}}a(Vte,"deleteRoutes")});var v0=R((dOe,U0)=>{"use strict";var E_=require("alasql"),wa=require("recursive-iterator"),ds=k(),Yte=Y(),h_=L(),dA=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Wte(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>h_.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!h_.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][h_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Kte(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let l=this.affected_attributes.get(i).get(o).filter(_=>!h_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new E_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function Kte(e){return e.filter(t=>t[h_.PERMS_CRUD_ENUM.READ])}a(Kte,"filterReadRestrictedAttrs");function Wte(e,t,r,n,s){Qte(e,t,r,n,s)}a(Wte,"interpretAST");function p_(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(p_,"addSchemaTableToMap");function Qte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof E_.yy.Insert?Xte(e,t,r):e instanceof E_.yy.Select?jte(e,t,r,n,s):e instanceof E_.yy.Update?zte(e,t,r):e instanceof E_.yy.Delete?Jte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Qte,"getRecordAttributesAST");function jte(e,t,r,n,s){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Yte.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{p_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),p_(c.table,t,r,n,s)});let o=new wa(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,_=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(c.columnid)<0&&t.get(_).get(l).push(c.columnid)}if(e.where){let c=new wa(e.where),l=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid?_.tableid:l;if(!t.get(i).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(i).get(u).indexOf(_.columnid)<0&&t.get(i).get(u).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new wa(c.on);for(let{node:_}of l)if(_&&_.columnid){let u=_.tableid,d=s.get(u);if(!t.get(d).has(u))if(r.has(u))u=r.get(u);else{ds.info(`table specified as ${u} not found.`);continue}t.get(d).get(u).indexOf(_.columnid)<0&&t.get(d).get(u).push(_.columnid)}}),e.order){let c=new wa(e.order);for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid,u=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{ds.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(l.columnid)<0&&t.get(u).get(_).push(l.columnid)}}}a(jte,"getSelectAttributes");function zte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(zte,"getUpdateAttributes");function Jte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new wa(e.where),s=e.table.databaseid;p_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.table.tableid,s,i.columnid,t,r)}a(Jte,"getDeleteAttributes");function Xte(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new wa(e.columns),s=e.into.databaseid;p_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&fA(e.into.tableid,s,i.columnid,t,r)}a(Xte,"getInsertAttributes");function fA(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(fA,"pushAttribute");U0.exports=dA});var ch=R((EOe,x0)=>{var ah=la(),B0=require("chalk"),hn=k(),H0=require("prompt"),{promisify:Zte}=require("util"),EA=L(),ere=require("fs-extra"),tre=require("path"),rre=Y(),nre=Ri(),G0=J();G0.initSync();var sre=require("moment"),ire=Zte(H0.get),ore=tre.join(G0.getHdbBasePath(),EA.LICENSE_KEY_DIR_NAME,EA.LICENSE_FILE_NAME,EA.LICENSE_FILE_NAME);x0.exports={getFingerprint:cre,setLicense:are,parseLicense:hA,register:lre,getRegistrationInfo:_re};async function are(e){if(e&&e.key&&e.company){try{hn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw hn.error(r),hn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(are,"setLicense");async function cre(){let e={};try{e=await ah.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw hn.error(r),hn.error(t),new Error(r)}return e}a(cre,"getFingerprint");async function hA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");hn.info("Validating license input...");let r=ah.validateLicense(e,t);if(hn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(hn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(hn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{hn.info("writing license to disk"),await ere.writeFile(ore,JSON.stringify({license_key:e,company:t}))}catch(n){throw hn.error("Failed to write License"),n}return"Registration successful."}a(hA,"parseLicense");async function lre(){let e=await ure();return hA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(lre,"register");async function ure(){let e=await ah.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:B0.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:B0.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{H0.start()}catch(n){hn.error(n)}let r;try{r=await ire(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(ure,"promptForRegistration");async function _re(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ah.getLicense()}catch(r){throw hn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(rre.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=nre.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=sre.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(_re,"getRegistrationInfo")});var F0=R((pOe,q0)=>{"use strict";var dre=Ze(),pA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+dre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};q0.exports=pA});var V0=R((SOe,$0)=>{"use strict";var k0=Ze(),mA=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d){this.port=t,d===null&&(d=void 0),this.server_name=r+k0.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+k0.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:u,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};$0.exports=mA});var K0=R((gOe,Y0)=>{"use strict";var SA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Y0.exports=SA});var Q0=R((AOe,W0)=>{"use strict";var fre=Ze(),TA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+fre.SERVER_SUFFIX.ADMIN,this.password=r}};W0.exports=TA});var fh=R((bOe,J0)=>{"use strict";var qc=require("path"),_h=require("fs-extra"),Ere=F0(),hre=V0(),pre=K0(),mre=Q0(),gA=Lr(),kc=Y(),kr=Et(),uh=L(),m_=Ze(),{CONFIG_PARAMS:At}=uh,$c=k(),S_=J(),j0=fi(),RA=gt(),Fc="clustering",Sre=1e4,z0=50;J0.exports={generateNatsConfig:gre,removeNatsConfig:Rre,getHubConfigPath:Tre};function Tre(){let e=S_.get(At.ROOTPATH);return qc.join(e,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER)}a(Tre,"getHubConfigPath");async function gre(e=!1,t=void 0){S_.initSync();let r=S_.get(At.ROOTPATH),n=qc.join(r,Fc,m_.PID_FILES.HUB),s=qc.join(r,Fc,m_.PID_FILES.LEAF),i=kr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qc.join(r,Fc,m_.NATS_CONFIG_FILES.HUB_SERVER),c=qc.join(r,Fc,m_.NATS_CONFIG_FILES.LEAF_SERVER),l=kr.getConfigFromFile(At.CLUSTERING_TLS_CERTIFICATE),_=kr.getConfigFromFile(At.CLUSTERING_TLS_PRIVATEKEY),u=kr.getConfigFromFile(At.CLUSTERING_TLS_CERT_AUTH),d=kr.getConfigFromFile(At.CLUSTERING_TLS_INSECURE),E=kr.getConfigFromFile(At.CLUSTERING_TLS_VERIFY),f=kr.getConfigFromFile(At.CLUSTERING_NODENAME),h=kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await RA.checkNATSServerInstalled()||dh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await gA.listUsers(),S=kr.getConfigFromFile(At.CLUSTERING_USER),g=await gA.getClusterUser();(kc.isEmpty(g)||g.active!==!0)&&dh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lh(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lh(At.CLUSTERING_HUBSERVER_NETWORK_PORT),await lh(At.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],b=[];for(let[z,X]of m.entries())X.role?.role===uh.ROLE_TYPES_ENUM.CLUSTER_USER&&X.active&&(T.push(new mre(X.username,j0.decrypt(X.hash))),b.push(new pre(X.username,j0.decrypt(X.hash))));let N=[],{hub_routes:U}=kr.getClusteringRoutes();if(!kc.isEmptyOrZeroLength(U))for(let z of U)N.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${z.host}:${z.port}`);let v=new Ere(kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,l,_,u,d,E,h,kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NAME),kr.getConfigFromFile(At.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,T,b);u==null&&(delete v.tls.ca_file,delete v.leafnodes.tls.ca_file),t=kc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await _h.writeJson(o,v),$c.trace(`Hub server config written to ${o}`));let q=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=new hre(kr.getConfigFromFile(At.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[q],[M],T,b,l,_,u,d);u==null&&delete W.tls.ca_file,(t===void 0||t===uh.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await _h.writeJson(c,W),$c.trace(`Leaf server config written to ${c}`))}a(gre,"generateNatsConfig");async function lh(e){let t=S_.get(e);return kc.isEmpty(t)&&dh(`port undefined for '${e}'`),await kc.isPortTaken(t)&&dh(`'${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(lh,"isPortAvailable");function dh(e){let t=`Error generating clustering config: ${e}`;$c.error(t),console.error(t),process.exit(1)}a(dh,"generateNatsConfigError");async function Rre(e){let{port:t,config_file:r}=RA.getServerConfig(e),{username:n,decrypt_hash:s}=await gA.getClusterUser(),i=0,o=2e3;for(;i<z0;){try{let u=await RA.createConnection(t,n,s,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){$c.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=z0)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 _=o*(i*2);_>3e4&&$c.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await kc.async_set_timeout(_)}let c="0".repeat(Sre),l=qc.join(S_.get(At.ROOTPATH),Fc,r);await _h.writeFile(l,c),await _h.remove(l),$c.notify(e,"started.")}a(Rre,"removeNatsConfig")});var nB=R((yOe,rB)=>{"use strict";var pn=J(),Are=la(),Te=L(),T_=Ze(),Oi=require("path"),{PACKAGE_ROOT:hh}=L(),X0=J(),Eh=Y(),Vc="/dev/null",Ore=Oi.join(hh,"launchServiceScripts"),Z0=Oi.join(hh,"utility/scripts"),bre=Oi.join(Z0,Te.HDB_RESTART_SCRIPT),eB=Oi.resolve(hh,"dependencies",`${process.platform}-${process.arch}`,T_.NATS_BINARY_NAME);function tB(){let t=Are.licenseSearch().ram_allocation||Te.RAM_ALLOCATION_ENUM.DEFAULT,r=Te.MEM_SETTING_KEY+t,n={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Eh.noBootFile()&&(n[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{name:Te.PROCESS_DESCRIPTORS.HDB,script:Te.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:hh}}a(tB,"generateMainServerConfig");var Nre=9930;function yre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.HUB_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Nre?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(yre,"generateNatsHubServerConfig");var Ire=9940;function wre(){pn.initSync(!0);let e=pn.get(Te.CONFIG_PARAMS.ROOTPATH),t=Oi.join(e,"clustering",T_.NATS_CONFIG_FILES.LEAF_SERVER),r=Oi.join(pn.get(Te.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Te.LOG_NAMES.HDB),n=X0.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=T_.LOG_LEVEL_FLAGS[pn.get(Te.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ire?"-"+n:""),script:eB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vc,i.error_file=Vc),i}a(wre,"generateNatsLeafServerConfig");function Cre(){pn.initSync();let e=Oi.join(pn.get(Te.CONFIG_PARAMS.LOGGING_ROOT),Te.LOG_NAMES.HDB),t={name:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ore,autorestart:!1};return pn.get(Te.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vc,t.error_file=Vc),t}a(Cre,"generateClusteringUpgradeV4ServiceConfig");function Dre(){let e={[Te.PROCESS_NAME_ENV_PROP]:Te.PROCESS_DESCRIPTORS.RESTART_HDB};return Eh.noBootFile()&&(e[Te.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Eh.getEnvCliRootPath()),{...{name:Te.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Z0},script:bre}}a(Dre,"generateRestart");function Lre(){return{apps:[tB()]}}a(Lre,"generateAllServiceConfigs");rB.exports={generateAllServiceConfigs:Lre,generateMainServerConfig:tB,generateRestart:Dre,generateNatsHubServerConfig:yre,generateNatsLeafServerConfig:wre,generateClusteringUpgradeV4ServiceConfig:Cre}});var Yc=R((COe,pB)=>{"use strict";var He=L(),Pre=Y(),Ni=fh(),ph=gt(),bi=Ze(),go=nB(),mh=J(),Ro=k(),Mre=Ai(),{startWorker:sB,onMessageFromWorkers:Ure}=rt(),vre=gi(),wOe=require("util"),Bre=require("child_process"),Hre=require("fs"),{execFile:Gre}=Bre,De;pB.exports={enterPM2Mode:xre,start:Ao,stop:AA,reload:oB,restart:aB,list:OA,describe:lB,connect:yi,kill:Vre,startAllServices:Yre,startService:bA,getUniqueServicesList:uB,restartAllServices:Kre,isServiceRegistered:_B,reloadStopStart:dB,restartHdb:cB,deleteProcess:kre,startClusteringProcesses:EB,startClusteringThreads:hB,isHdbRestartRunning:$re,isClusteringRunning:Qre,stopClustering:Wre,reloadClustering:jre};var g_=!1;Ure(e=>{e.type==="restart"&&mh.initSync(!0)});function xre(){g_=!0}a(xre,"enterPM2Mode");function yi(){return De||(De=require("pm2")),new Promise((e,t)=>{De.connect((r,n)=>{Ro.setupConsoleLogging(),r&&t(r),e(n)})})}a(yi,"connect");var $r,qre=10,iB;function Ao(e,t=!1){if(g_)return Fre(e);let r=Gre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=$r.indexOf(r);o>-1&&$r.splice(o,1),!iB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<qre&&(Hre.existsSync(Ni.getHubConfigPath())?Ao(e):(await Ni.generateNatsConfig(!0),Ao(e),await new Promise(c=>setTimeout(c,3e3)),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=mh.get(He.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let f=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",f,n,i.slice(_,l.index).trim())}let[d,E]=l;_=l.index+d.length,u=bi.LOG_LEVELS[E]}if(bi.LOG_LEVEL_HIERARCHY[o]>=bi.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===bi.LOG_LEVELS.ERR||u===bi.LOG_LEVELS.WRN?Ro.OUTPUTS.STDERR:Ro.OUTPUTS.STDOUT;Ro.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),$r=[],!$r&&!t){let i=a(()=>{iB=!0,$r&&($r.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)}$r.push(r)}a(Ao,"start");function Fre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.start(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(Fre,"startWithPM2");function AA(e){if(!g_){for(let t of $r||[])t.name===e&&($r.splice($r.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.stop(e,async(n,s)=>{n&&(De.disconnect(),r(n)),De.delete(e,(i,o)=>{i&&(De.disconnect(),r(n)),De.disconnect(),t(o)})})})}a(AA,"stop");function oB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.reload(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(oB,"reload");function aB(e){if(!g_)for(let t of $r||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.restart(e,(n,s)=>{De.disconnect(),t(s)})})}a(aB,"restart");function kre(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.delete(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(kre,"deleteProcess");async function cB(){await Ao(go.generateRestart())}a(cB,"restartHdb");async function $re(){let e=await OA();for(let t in e)if(e[t].name===He.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a($re,"isHdbRestartRunning");function OA(){return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.list((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(OA,"list");function lB(e){return new Promise(async(t,r)=>{try{await yi()}catch(n){r(n)}De.describe(e,(n,s)=>{n&&(De.disconnect(),r(n)),De.disconnect(),t(s)})})}a(lB,"describe");function Vre(){if(!g_){for(let e of $r||[])e.kill();$r=[];return}return new Promise(async(e,t)=>{try{await yi()}catch(r){t(r)}De.killDaemon((r,n)=>{r&&(De.disconnect(),t(r)),De.disconnect(),e(n)})})}a(Vre,"kill");async function Yre(){try{await EB(),await hB(),await Ao(go.generateAllServiceConfigs())}catch(e){throw De?.disconnect(),e}}a(Yre,"startAllServices");async function bA(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case He.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=go.generateMainServerConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=go.generateNatsIngestServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=go.generateNatsReplyServiceConfig();break;case He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=go.generateNatsHubServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=go.generateNatsLeafServerConfig(),await Ao(r,t),await Ni.removeNatsConfig(e);return;case He.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=go.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ao(r)}catch(r){throw De?.disconnect(),r}}a(bA,"startService");async function uB(){try{let e=await OA(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw De?.disconnect(),e}}a(uB,"getUniqueServicesList");async function Kre(e=[]){try{let t=!1,r=await uB();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===He.PROCESS_DESCRIPTORS.HDB?t=!0:await aB(o))}t&&await dB(He.PROCESS_DESCRIPTORS.HDB)}catch(t){throw De?.disconnect(),t}}a(Kre,"restartAllServices");async function _B(e){if($r?.find(r=>r.name===e))return!0;let t=await vre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(_B,"isServiceRegistered");async function dB(e){let t=mh.get(He.CONFIG_PARAMS.THREADS_COUNT)??mh.get(He.CONFIG_PARAMS.THREADS),r=await lB(e),n=Pre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await AA(e),await bA(e)):e===He.PROCESS_DESCRIPTORS.HDB?await cB():await oB(e)}a(dB,"reloadStopStart");var fB;async function EB(e=!1){for(let t in He.CLUSTERING_PROCESSES){let r=He.CLUSTERING_PROCESSES[t];await bA(r,e)}}a(EB,"startClusteringProcesses");async function hB(){fB=sB(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:He.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await ph.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await ph.updateLocalStreams();let e=await Mre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===He.PRE_4_0_0_VERSION){Ro.info("Starting clustering upgrade 4.0.0 process"),sB(He.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(hB,"startClusteringThreads");async function Wre(){for(let e in He.CLUSTERING_PROCESSES)if(e!==He.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===He.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await fB.terminate();else{let t=He.CLUSTERING_PROCESSES[e];await AA(t)}}a(Wre,"stopClustering");async function Qre(){for(let e in He.CLUSTERING_PROCESSES){let t=He.CLUSTERING_PROCESSES[e];if(await _B(t)===!1)return!1}return!0}a(Qre,"isClusteringRunning");async function jre(){await Ni.generateNatsConfig(!0),await ph.reloadNATSHub(),await ph.reloadNATSLeaf(),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ni.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(jre,"reloadClustering")});var gh={};$e(gh,{compactOnStart:()=>zre,copyDb:()=>AB});async function zre(){A_.notify("Running compact on start"),console.log("Running compact on start");let e=(0,NA.get)(Oo.CONFIG_PARAMS.ROOTPATH),t=new Map,r=Mr();try{for(let n in r){if(n==="system")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,Sh.join)(e,"backup",n+".mdb"),o=(0,Sh.join)(e,Oo.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await mB(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await AB(n,o),console.log("Backing up",n,"to",i),await(0,Ca.move)(s,i,{overwrite:!0})}R_();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Ca.move)(i,s,{overwrite:!0}),await(0,Ca.remove)((0,Sh.join)(e,Oo.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));R_()}catch(n){A_.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,yA.updateConfigValue)(Oo.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,Ca.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw R_(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await mB(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
14
  Total record count before compaction: ${i}, total after: ${c}.
15
- Database backup has not been removed and can be found here: ${s}`;A_.error(l),console.error(l)}(0,NA.get)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Ca.remove)(s))}(0,yA.updateConfigValue)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function mB(e){let t=await(0,RB.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function AB(e,t){console.log("copyDb start");let r=Mr()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,SB.open)(new TB.default(t)),c=o.openDB(Th.INTERNAL_DBIS_NAME),l,_=0,u=s.useReadTransaction();try{for(let{key:f,value:h}of s.getRange({transaction:u})){let m=h.is_hash_attribute||h.isPrimaryKey,S,g;if(m&&(S=h.compression,g=Oh(),g?h.compression=g:delete h.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(f,h),!(m||h.indexed))continue;let T=new gB.default(!m,m);T.encoding="binary",T.compression=S;let b=n.openDB(f,T);b.decoder=null,T.compression=g;let N=o.openDB(f,T);N.encoder=null,console.log("copying",f,"from",e,"to",t),await E(b,N,m,u)}let d=n.openDB(Th.AUDIT_STORE_NAME,Ah);console.log("copying audit log"),E(i,d,!1,u);async function E(f,h,m,S){let g=0,T=0;for(let{key:b,value:N,version:U}of f.getRange({start:null,versions:m,transaction:S}))l=h.put(b,N,U),g++,S.openTimer&&(S.openTimer=0),T+=(b?.length||10)+N.length,_++>5e3&&(await l,console.log("copied",g,"entries",T,"bytes"),_=0);console.log("finish copying, copied",g,"entries",T,"bytes")}a(E,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{u.done(),o.close()}}var SB,Sh,Ca,NA,TB,gB,Th,Oo,RB,yA,A_,Rh=be(()=>{Re();SB=require("lmdb"),Sh=require("path"),Ca=require("fs-extra"),NA=G(X()),TB=G(du()),gB=G(_u()),Th=G(_t()),Oo=G(L());no();RB=G(Ei()),yA=G(Et()),A_=G(k());a(zre,"compactOnStart");a(mB,"getTotalDBRecordCount");a(AB,"copyDb")});var bo=R((BOe,wB)=>{"use strict";var Jre=require("minimist"),{isMainThread:CA,parentPort:IA,threadId:UOe}=require("worker_threads"),ot=L(),{PROCESS_DESCRIPTORS_VALIDATE:O_}=ot,qs=k(),DA=Y(),Nh=fh(),bh=gt(),vOe=Ze(),NB=Et(),Fs=Yc(),OB=gi(),{compactOnStart:Xre}=(Rh(),ae(gh)),Zre=to(),{restartWorkers:yh,onMessageByType:ene}=rt(),{handleHDBError:tne,hdb_errors:rne}=ie(),{HTTP_STATUS_CODES:nne}=rne,N_=X();N_.initSync();var b_=`Restarting HarperDB. This may take up to ${ot.RESTART_TIMEOUT_MS/1e3} seconds.`,sne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",bB="Clustering is not enabled so cannot be restarted",ine="Invalid service",Kc,xn;wB.exports={restart:yB,restartService:LA};CA&&ene(ot.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await LA({service:e.workerType}):yB({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function yB(e){xn=Object.keys(e).length===0,Kc=await Fs.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR);let t=Jre(process.argv);if(t.service){await LA(t);return}if(xn&&!Kc){console.error(sne);return}if(xn&&console.log(b_),Kc){Fs.enterPM2Mode(),qs.notify(b_);let r=Zre(Object.keys(ot.CONFIG_PARAM_MAP),!0);return DA.isEmptyOrZeroLength(Object.keys(r))||NB.updateConfigValue(void 0,void 0,r,!0,!0),one(),b_}return CA?(qs.notify(b_),N_.get(ot.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xre(),setTimeout(()=>{yh()},50)):IA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART}),b_}a(yB,"restart");async function LA(e){let{service:t}=e;if(ot.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw tne(new Error,ine,nne.BAD_REQUEST,void 0,void 0,!0);if(Kc=await Fs.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR),!CA)return IA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{IA.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case O_.clustering:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bB;break}xn&&console.log("Restarting clustering"),qs.notify("Restarting clustering"),await IB();break;case O_.clustering_config:case O_["clustering config"]:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bB;break}xn&&console.log("Restarting clustering_config"),qs.notify("Restarting clustering_config"),await Fs.reloadClustering();break;case"custom_functions":case"custom functions":case O_.harperdb:case O_.http_workers:if(xn&&!Kc){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}xn&&console.log("Restarting http_workers"),qs.notify("Restarting http_workers"),xn?await Fs.restart(ot.HDB_PROC_DESCRIPTOR):await yh("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(qs.error(r),xn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(LA,"restartService");async function one(){await IB(),await Fs.restart(ot.HDB_PROC_DESCRIPTOR),await DA.async_set_timeout(2e3),N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await wA(),xn&&(await bh.closeConnection(),process.exit(0))}a(one,"restartPM2Mode");async function IB(){if(!NB.getConfigFromFile(ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await OB.getHDBProcessInfo()).clustering.length===0)qs.trace("Clustering not running, restart will start clustering services"),await Nh.generateNatsConfig(!0),await Fs.startClusteringProcesses(),await Fs.startClusteringThreads(),await wA(),xn&&await bh.closeConnection();else{await Nh.generateNatsConfig(!0),Kc?(qs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Fs.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Fs.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await OB.getHDBProcessInfo()).clustering.forEach(s=>{qs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await DA.async_set_timeout(3e3),await wA(),await bh.updateLocalStreams(),xn&&await bh.closeConnection(),qs.trace("Restart clustering restarting ingest and reply service threads");let t=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(IB,"restartClustering");async function wA(){await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(wA,"removeNatsConfig")});var xB=R((xOe,GB)=>{"use strict";var GOe=require("lodash"),$r=L(),{handleHDBError:CB,hdb_errors:ane}=ie(),{HDB_ERROR_MSGS:cne,HTTP_STATUS_CODES:lne}=ane,PA=k();GB.exports={getRolePermissions:_ne};var Da=Object.create(null),une=a(e=>({key:e,perms:{}}),"perms_template_obj"),MB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),UB=a((e=!1,t=!1,r=!1,n=!1)=>({[$r.PERMS_CRUD_ENUM.READ]:e,[$r.PERMS_CRUD_ENUM.INSERT]:t,[$r.PERMS_CRUD_ENUM.UPDATE]:r,[$r.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),MA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...UB(t,r,n,s)}),"table_perms_template"),DB=a((e,t=UB())=>({attribute_name:e,describe:HB(t),[y_]:t[y_],[UA]:t[UA],[vA]:t[vA]}),"attr_perms_template"),LB=a((e,t=!1)=>({attribute_name:e,describe:t,[y_]:t}),"timestamp_attr_perms_template"),{READ:y_,INSERT:UA,UPDATE:vA}=$r.PERMS_CRUD_ENUM,vB=Object.values($r.PERMS_CRUD_ENUM),BB=[y_,UA,vA];function _ne(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[$r.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Da[t]&&Da[t].key===n)return Da[t].perms;let s=dne(e,r);return Da[t]?Da[t].key=n:Da[t]=une(n),Da[t].perms=s,s}catch(r){if(!e[$r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[$r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<$r.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 PA.error(n),PA.debug(r),CB(new Error,cne.OUTDATED_PERMS_TRANSLATION_ERROR,lne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
- ${r.stack}`;throw PA.error(n),CB(new Error)}}}a(_ne,"getRolePermissions");function dne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[$r.SYSTEM_SCHEMA_NAME]=n[$r.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]=fne(t[i]);return}r[i]=MB(),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],_=Ene(c,l);r[i].describe||vB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=MA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=MA()})}),r}a(dne,"translateRolePermissions");function fne(e){let t=MB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=MA(!0,!0,!0,!0,!0)}),t}a(fne,"createStructureUserPermissions");function Ene(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,E=u;return $r.TIME_STAMP_NAMES.includes(d)&&(E=LB(d,u[y_])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=DB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=HB(u),s.attribute_permissions.push(u),c||hne(u,l)}else if(_!==o){let u;$r.TIME_STAMP_NAMES.includes(_)?u=LB(_):u=DB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=PB(s),s}else return e.describe=PB(e),e}a(Ene,"getTableAttrPerms");function PB(e){return vB.filter(t=>e[t]).length>0}a(PB,"getSchemaTableDescribePerm");function HB(e){return BB.filter(t=>e[t]).length>0}a(HB,"getAttributeDescribePerm");function hne(e,t){BB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(hne,"checkForHashPerms")});var qB={};Ve(qB,{Resources:()=>Ih,keyArrayToString:()=>Wc,resetResources:()=>pne,resources:()=>No});function pne(){return No=new Ih}function Wc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ih,No,I_=be(()=>{ha();Ih=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let _=c.split(".");l=this.get(_[0])}if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return it(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(pne,"resetResources");a(Wc,"keyArrayToString")});var FB={};Ve(FB,{Headers:()=>yo,appendHeader:()=>BA});function BA(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var yo,w_=be(()=>{yo=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(BA,"appendHeader")});var C_={};Ve(C_,{authentication:()=>jB,bypassAuth:()=>One,login:()=>Nne,logout:()=>yne,start:()=>bne});function One(){QB=!0}async function jB(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?gne?Tne:[]:Sne?mne:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new yo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return wh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),wh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(wh){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let m of h)if(m.startsWith(f)){let S=m.indexOf(";");l=m.slice(f.length,S===-1?m.length:S),_=await VB.get(l);break}e.session=_||(_={})}let u=a((f,h,m)=>{let S=new Qc.AuthAuditLog(f,h,Qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Qt.AUTH_AUDIT_STATUS.SUCCESS?kB.notify(S):kB.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await dt.getUser(f,null,null),u(f,Qt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Qc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=La.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),m=n.slice(f+1),S,g;try{switch(h){case"Basic":let T=atob(m),b=T.indexOf(":");S=T.slice(0,b),g=T.slice(b+1),d=S||g?await dt.getUser(S,g,e):null;break;case"Bearer":try{d=await(0,Ch.validateOperationToken)(m)}catch(N){if(N.message==="invalid token")try{return await(0,Ch.validateRefreshToken)(m),c({status:-1})}catch{throw N}}break}}catch(T){return Ane&&(La.get(m)||(La.set(m,m),u(S,Qt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Pa({error:T.message},e)})}La.set(n,d),Rne&&u(d.username,Qt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await dt.getUser(_.user,null,e):(QB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,YB.getSuperUser)());wh&&(e.session.update=function(f){if(!l){l=(0,KB.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):E?.headers?.set&&E.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,VB.put(f)},e.login=async function(f,h){e.user=await dt.getUser(f,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&No.loginPath?(E.status=302,E.headers.set("Location",No.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new yo);for(let d=0;d<_;){let E=o[d++];u.set(E,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function bne({server:e,port:t}){e.http(jB,{port:t||"all"}),$B||($B=!0,setInterval(()=>{La=new Map},qn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),WB.user.addListener(()=>{La=new Map}))}async function Nne(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 yne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var YB,Ch,KB,qn,Qt,Qc,WB,kB,mne,Sne,Tne,gne,VB,wh,QB,Rne,Ane,La,$B,Dh=be(()=>{YB=G(Lr());yr();I_();Ch=G(s_());Re();KB=require("uuid"),qn=G(X()),Qt=G(L()),Qc=G(k()),WB=G(bu());w_();jc();kB=(0,Qc.loggerWithTag)("auth-event");qn.initSync();mne=qn.get(Qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Sne=qn.get(Qt.CONFIG_PARAMS.HTTP_CORS),Tne=qn.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),gne=qn.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),VB=St({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),wh=qn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,QB=qn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Rne=qn.get(Qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ane=qn.get(Qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,La=new Map;dt.onInvalidatedUser(()=>{La=new Map});a(One,"bypassAuth");a(jB,"authentication");a(bne,"start");a(Nne,"login");a(yne,"logout")});var rH=R((zOe,tH)=>{"use strict";var Le=require("joi"),zB=require("fs-extra"),JB=require("path"),wi=nt(),XB=X(),ZB=L(),eH=k(),{hdb_errors:Ine}=ie(),{HDB_ERROR_MSGS:mr}=Ine,Ii=/^[a-zA-Z0-9-_]+$/;tH.exports={getDropCustomFunctionValidator:Cne,setCustomFunctionValidator:Dne,addComponentValidator:Une,dropCustomFunctionProjectValidator:vne,packageComponentValidator:Bne,deployComponentValidator:Hne,setComponentFileValidator:Lne,getComponentFileValidator:Mne,dropComponentFileValidator:Pne};function Lh(e,t,r){try{let n=XB.get(ZB.CONFIG_PARAMS.COMPONENTSROOT),s=JB.join(n,t);return zB.existsSync(s)?e?t:r.message(mr.PROJECT_EXISTS):e?r.message(mr.NO_PROJECT):t}catch(n){return eH.error(n),r.message(mr.VALIDATION_ERR)}}a(Lh,"checkProjectExists");function D_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(D_,"checkFilePath");function wne(e,t,r,n){try{let s=XB.get(ZB.CONFIG_PARAMS.COMPONENTSROOT),i=JB.join(s,e,t,r+".js");return zB.existsSync(i)?r:n.message(mr.NO_FILE)}catch(s){return eH.error(s),n.message(mr.VALIDATION_ERR)}}a(wne,"checkFileExists");function Cne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(Ii).custom(wne.bind(null,e.project,e.type)).custom(D_).required().messages({"string.pattern.base":mr.BAD_FILE_NAME})});return wi.validateBySchema(e,t)}a(Cne,"getDropCustomFunctionValidator");function Dne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(D_).required(),function_content:Le.string().required()});return wi.validateBySchema(e,t)}a(Dne,"setCustomFunctionValidator");function Lne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Lne,"setComponentFileValidator");function Pne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).optional()});return wi.validateBySchema(e,t)}a(Pne,"dropComponentFileValidator");function Mne(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(D_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Mne,"getComponentFileValidator");function Une(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!1)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(Une,"addComponentValidator");function vne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(vne,"dropCustomFunctionProjectValidator");function Bne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return wi.validateBySchema(e,t)}a(Bne,"packageComponentValidator");function Hne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),payload:Le.string().optional().messages({"string.pattern.base":mr.BAD_PACKAGE}),package:Le.string().optional()});return wi.validateBySchema(e,t)}a(Hne,"deployComponentValidator")});var vh=R((XOe,lH)=>{"use strict";var Ph=require("joi"),Mh=require("path"),nH=require("fs-extra"),{exec:Gne}=require("child_process"),xne=require("util"),sH=xne.promisify(Gne),L_=L(),{handleHDBError:zc,hdb_errors:qne}=ie(),{HTTP_STATUS_CODES:Jc}=qne,P_=X(),Fne=nt(),Xc=k();P_.initSync();var HA=P_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),iH="npm install --omit=dev --json",kne=`${iH} --dry-run`;lH.exports={installModules:Kne,auditModules:Wne,installAllRootModules:Vne,uninstallRootModule:$ne,linkHarperdb:Yne};async function Vne(e=!1){await Uh(),await M_(e?"npm install --ignore-scripts":"npm install",P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Vne,"installAllRootModules");async function $ne(e){await M_(`npm uninstall ${e}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a($ne,"uninstallRootModule");async function Yne(){await Uh(),await M_(`npm link ${L_.PACKAGE_ROOT}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Yne,"linkHarperdb");async function M_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await sH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
15
+ Database backup has not been removed and can be found here: ${s}`;A_.error(l),console.error(l)}(0,NA.get)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Ca.remove)(s))}(0,yA.updateConfigValue)(Oo.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function mB(e){let t=await(0,RB.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function AB(e,t){console.log("copyDb start");let r=Mr()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,SB.open)(new TB.default(t)),c=o.openDB(Th.INTERNAL_DBIS_NAME),l,_=0,u=s.useReadTransaction();try{for(let{key:f,value:h}of s.getRange({transaction:u})){let m=h.is_hash_attribute||h.isPrimaryKey,S,g;if(m&&(S=h.compression,g=Oh(),g?h.compression=g:delete h.compression,S?.dictionary?.toString()===g?.dictionary?.toString()&&(S=null,g=null)),c.put(f,h),!(m||h.indexed))continue;let T=new gB.default(!m,m);T.encoding="binary",T.compression=S;let b=n.openDB(f,T);b.decoder=null,T.compression=g;let N=o.openDB(f,T);N.encoder=null,console.log("copying",f,"from",e,"to",t),await E(b,N,m,u)}let d=n.openDB(Th.AUDIT_STORE_NAME,Ah);console.log("copying audit log"),E(i,d,!1,u);async function E(f,h,m,S){let g=0,T=0;for(let{key:b,value:N,version:U}of f.getRange({start:null,versions:m,transaction:S}))l=h.put(b,N,U),g++,S.openTimer&&(S.openTimer=0),T+=(b?.length||10)+N.length,_++>5e3&&(await l,console.log("copied",g,"entries",T,"bytes"),_=0);console.log("finish copying, copied",g,"entries",T,"bytes")}a(E,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{u.done(),o.close()}}var SB,Sh,Ca,NA,TB,gB,Th,Oo,RB,yA,A_,Rh=be(()=>{Re();SB=require("lmdb"),Sh=require("path"),Ca=require("fs-extra"),NA=G(J()),TB=G(du()),gB=G(_u()),Th=G(_t()),Oo=G(L());no();RB=G(Ei()),yA=G(Et()),A_=G(k());a(zre,"compactOnStart");a(mB,"getTotalDBRecordCount");a(AB,"copyDb")});var bo=R((BOe,wB)=>{"use strict";var Jre=require("minimist"),{isMainThread:CA,parentPort:IA,threadId:UOe}=require("worker_threads"),ot=L(),{PROCESS_DESCRIPTORS_VALIDATE:O_}=ot,qs=k(),DA=Y(),Nh=fh(),bh=gt(),vOe=Ze(),NB=Et(),Fs=Yc(),OB=gi(),{compactOnStart:Xre}=(Rh(),ae(gh)),Zre=to(),{restartWorkers:yh,onMessageByType:ene}=rt(),{handleHDBError:tne,hdb_errors:rne}=ie(),{HTTP_STATUS_CODES:nne}=rne,N_=J();N_.initSync();var b_=`Restarting HarperDB. This may take up to ${ot.RESTART_TIMEOUT_MS/1e3} seconds.`,sne="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",bB="Clustering is not enabled so cannot be restarted",ine="Invalid service",Kc,xn;wB.exports={restart:yB,restartService:LA};CA&&ene(ot.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await LA({service:e.workerType}):yB({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function yB(e){xn=Object.keys(e).length===0,Kc=await Fs.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR);let t=Jre(process.argv);if(t.service){await LA(t);return}if(xn&&!Kc){console.error(sne);return}if(xn&&console.log(b_),Kc){Fs.enterPM2Mode(),qs.notify(b_);let r=Zre(Object.keys(ot.CONFIG_PARAM_MAP),!0);return DA.isEmptyOrZeroLength(Object.keys(r))||NB.updateConfigValue(void 0,void 0,r,!0,!0),one(),b_}return CA?(qs.notify(b_),N_.get(ot.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xre(),setTimeout(()=>{yh()},50)):IA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART}),b_}a(yB,"restart");async function LA(e){let{service:t}=e;if(ot.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw tne(new Error,ine,nne.BAD_REQUEST,void 0,void 0,!0);if(Kc=await Fs.isServiceRegistered(ot.HDB_PROC_DESCRIPTOR),!CA)return IA.postMessage({type:ot.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{IA.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case O_.clustering:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bB;break}xn&&console.log("Restarting clustering"),qs.notify("Restarting clustering"),await IB();break;case O_.clustering_config:case O_["clustering config"]:if(!N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=bB;break}xn&&console.log("Restarting clustering_config"),qs.notify("Restarting clustering_config"),await Fs.reloadClustering();break;case"custom_functions":case"custom functions":case O_.harperdb:case O_.http_workers:if(xn&&!Kc){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}xn&&console.log("Restarting http_workers"),qs.notify("Restarting http_workers"),xn?await Fs.restart(ot.HDB_PROC_DESCRIPTOR):await yh("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(qs.error(r),xn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(LA,"restartService");async function one(){await IB(),await Fs.restart(ot.HDB_PROC_DESCRIPTOR),await DA.async_set_timeout(2e3),N_.get(ot.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await wA(),xn&&(await bh.closeConnection(),process.exit(0))}a(one,"restartPM2Mode");async function IB(){if(!NB.getConfigFromFile(ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await OB.getHDBProcessInfo()).clustering.length===0)qs.trace("Clustering not running, restart will start clustering services"),await Nh.generateNatsConfig(!0),await Fs.startClusteringProcesses(),await Fs.startClusteringThreads(),await wA(),xn&&await bh.closeConnection();else{await Nh.generateNatsConfig(!0),Kc?(qs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Fs.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Fs.restart(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await OB.getHDBProcessInfo()).clustering.forEach(s=>{qs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await DA.async_set_timeout(3e3),await wA(),await bh.updateLocalStreams(),xn&&await bh.closeConnection(),qs.trace("Restart clustering restarting ingest and reply service threads");let t=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=yh(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(IB,"restartClustering");async function wA(){await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Nh.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(wA,"removeNatsConfig")});var xB=R((xOe,GB)=>{"use strict";var GOe=require("lodash"),Vr=L(),{handleHDBError:CB,hdb_errors:ane}=ie(),{HDB_ERROR_MSGS:cne,HTTP_STATUS_CODES:lne}=ane,PA=k();GB.exports={getRolePermissions:_ne};var Da=Object.create(null),une=a(e=>({key:e,perms:{}}),"perms_template_obj"),MB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),UB=a((e=!1,t=!1,r=!1,n=!1)=>({[Vr.PERMS_CRUD_ENUM.READ]:e,[Vr.PERMS_CRUD_ENUM.INSERT]:t,[Vr.PERMS_CRUD_ENUM.UPDATE]:r,[Vr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),MA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...UB(t,r,n,s)}),"table_perms_template"),DB=a((e,t=UB())=>({attribute_name:e,describe:HB(t),[y_]:t[y_],[UA]:t[UA],[vA]:t[vA]}),"attr_perms_template"),LB=a((e,t=!1)=>({attribute_name:e,describe:t,[y_]:t}),"timestamp_attr_perms_template"),{READ:y_,INSERT:UA,UPDATE:vA}=Vr.PERMS_CRUD_ENUM,vB=Object.values(Vr.PERMS_CRUD_ENUM),BB=[y_,UA,vA];function _ne(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Vr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Da[t]&&Da[t].key===n)return Da[t].perms;let s=dne(e,r);return Da[t]?Da[t].key=n:Da[t]=une(n),Da[t].perms=s,s}catch(r){if(!e[Vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Vr.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 PA.error(n),PA.debug(r),CB(new Error,cne.OUTDATED_PERMS_TRANSLATION_ERROR,lne.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
+ ${r.stack}`;throw PA.error(n),CB(new Error)}}}a(_ne,"getRolePermissions");function dne(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Vr.SYSTEM_SCHEMA_NAME]=n[Vr.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]=fne(t[i]);return}r[i]=MB(),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],_=Ene(c,l);r[i].describe||vB.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=MA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=MA()})}),r}a(dne,"translateRolePermissions");function fne(e){let t=MB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=MA(!0,!0,!0,!0,!0)}),t}a(fne,"createStructureUserPermissions");function Ene(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,E=u;return Vr.TIME_STAMP_NAMES.includes(d)&&(E=LB(d,u[y_])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=DB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=HB(u),s.attribute_permissions.push(u),c||hne(u,l)}else if(_!==o){let u;Vr.TIME_STAMP_NAMES.includes(_)?u=LB(_):u=DB(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=PB(s),s}else return e.describe=PB(e),e}a(Ene,"getTableAttrPerms");function PB(e){return vB.filter(t=>e[t]).length>0}a(PB,"getSchemaTableDescribePerm");function HB(e){return BB.filter(t=>e[t]).length>0}a(HB,"getAttributeDescribePerm");function hne(e,t){BB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(hne,"checkForHashPerms")});var qB={};$e(qB,{Resources:()=>Ih,keyArrayToString:()=>Wc,resetResources:()=>pne,resources:()=>No});function pne(){return No=new Ih}function Wc(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ih,No,I_=be(()=>{ha();Ih=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let _=c.split(".");l=this.get(_[0])}if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return it(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(pne,"resetResources");a(Wc,"keyArrayToString")});var FB={};$e(FB,{Headers:()=>yo,appendHeader:()=>BA});function BA(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}var yo,w_=be(()=>{yo=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(BA,"appendHeader")});var C_={};$e(C_,{authentication:()=>jB,bypassAuth:()=>One,login:()=>Nne,logout:()=>yne,start:()=>bne});function One(){QB=!0}async function jB(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?gne?Tne:[]:Sne?mne:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new yo([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return wh&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),wh&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(wh){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let m of h)if(m.startsWith(f)){let S=m.indexOf(";");l=m.slice(f.length,S===-1?m.length:S),_=await $B.get(l);break}e.session=_||(_={})}let u=a((f,h,m)=>{let S=new Qc.AuthAuditLog(f,h,Qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Qt.AUTH_AUDIT_STATUS.SUCCESS?kB.notify(S):kB.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await dt.getUser(f,null,null),u(f,Qt.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Qc.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=La.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),m=n.slice(f+1),S,g;try{switch(h){case"Basic":let T=atob(m),b=T.indexOf(":");S=T.slice(0,b),g=T.slice(b+1),d=S||g?await dt.getUser(S,g,e):null;break;case"Bearer":try{d=await(0,Ch.validateOperationToken)(m)}catch(N){if(N.message==="invalid token")try{return await(0,Ch.validateRefreshToken)(m),c({status:-1})}catch{throw N}}break}}catch(T){return Ane&&(La.get(m)||(La.set(m,m),u(S,Qt.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Pa({error:T.message},e)})}La.set(n,d),Rne&&u(d.username,Qt.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await dt.getUser(_.user,null,e):(QB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,YB.getSuperUser)());wh&&(e.session.update=function(f){if(!l){l=(0,KB.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):E?.headers?.set&&E.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,$B.put(f)},e.login=async function(f,h){e.user=await dt.getUser(f,h,e),e.session.update({user:e.user.username})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&No.loginPath?(E.status=302,E.headers.set("Location",No.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new yo);for(let d=0;d<_;){let E=o[d++];u.set(E,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function bne({server:e,port:t}){e.http(jB,{port:t||"all"}),VB||(VB=!0,setInterval(()=>{La=new Map},qn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),WB.user.addListener(()=>{La=new Map}))}async function Nne(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 yne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var YB,Ch,KB,qn,Qt,Qc,WB,kB,mne,Sne,Tne,gne,$B,wh,QB,Rne,Ane,La,VB,Dh=be(()=>{YB=G(Lr());yr();I_();Ch=G(s_());Re();KB=require("uuid"),qn=G(J()),Qt=G(L()),Qc=G(k()),WB=G(bu());w_();jc();kB=(0,Qc.loggerWithTag)("auth-event");qn.initSync();mne=qn.get(Qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Sne=qn.get(Qt.CONFIG_PARAMS.HTTP_CORS),Tne=qn.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),gne=qn.get(Qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),$B=St({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),wh=qn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,QB=qn.get(Qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Rne=qn.get(Qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ane=qn.get(Qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,La=new Map;dt.onInvalidatedUser(()=>{La=new Map});a(One,"bypassAuth");a(jB,"authentication");a(bne,"start");a(Nne,"login");a(yne,"logout")});var rH=R((zOe,tH)=>{"use strict";var Le=require("joi"),zB=require("fs-extra"),JB=require("path"),wi=nt(),XB=J(),ZB=L(),eH=k(),{hdb_errors:Ine}=ie(),{HDB_ERROR_MSGS:mr}=Ine,Ii=/^[a-zA-Z0-9-_]+$/;tH.exports={getDropCustomFunctionValidator:Cne,setCustomFunctionValidator:Dne,addComponentValidator:Une,dropCustomFunctionProjectValidator:vne,packageComponentValidator:Bne,deployComponentValidator:Hne,setComponentFileValidator:Lne,getComponentFileValidator:Mne,dropComponentFileValidator:Pne};function Lh(e,t,r){try{let n=XB.get(ZB.CONFIG_PARAMS.COMPONENTSROOT),s=JB.join(n,t);return zB.existsSync(s)?e?t:r.message(mr.PROJECT_EXISTS):e?r.message(mr.NO_PROJECT):t}catch(n){return eH.error(n),r.message(mr.VALIDATION_ERR)}}a(Lh,"checkProjectExists");function D_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(D_,"checkFilePath");function wne(e,t,r,n){try{let s=XB.get(ZB.CONFIG_PARAMS.COMPONENTSROOT),i=JB.join(s,e,t,r+".js");return zB.existsSync(i)?r:n.message(mr.NO_FILE)}catch(s){return eH.error(s),n.message(mr.VALIDATION_ERR)}}a(wne,"checkFileExists");function Cne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().pattern(Ii).custom(wne.bind(null,e.project,e.type)).custom(D_).required().messages({"string.pattern.base":mr.BAD_FILE_NAME})});return wi.validateBySchema(e,t)}a(Cne,"getDropCustomFunctionValidator");function Dne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),type:Le.string().valid("helpers","routes").required(),file:Le.string().custom(D_).required(),function_content:Le.string().required()});return wi.validateBySchema(e,t)}a(Dne,"setCustomFunctionValidator");function Lne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).required(),payload:Le.string().allow("").optional(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Lne,"setComponentFileValidator");function Pne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),file:Le.string().custom(D_).optional()});return wi.validateBySchema(e,t)}a(Pne,"dropComponentFileValidator");function Mne(e){let t=Le.object({project:Le.string().required(),file:Le.string().custom(D_).required(),encoding:Le.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return wi.validateBySchema(e,t)}a(Mne,"getComponentFileValidator");function Une(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!1)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(Une,"addComponentValidator");function vne(e){let t=Le.object({project:Le.string().pattern(Ii).custom(Lh.bind(null,!0)).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME})});return wi.validateBySchema(e,t)}a(vne,"dropCustomFunctionProjectValidator");function Bne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),skip_node_modules:Le.boolean()});return wi.validateBySchema(e,t)}a(Bne,"packageComponentValidator");function Hne(e){let t=Le.object({project:Le.string().pattern(Ii).required().messages({"string.pattern.base":mr.BAD_PROJECT_NAME}),payload:Le.string().optional().messages({"string.pattern.base":mr.BAD_PACKAGE}),package:Le.string().optional()});return wi.validateBySchema(e,t)}a(Hne,"deployComponentValidator")});var vh=R((XOe,lH)=>{"use strict";var Ph=require("joi"),Mh=require("path"),nH=require("fs-extra"),{exec:Gne}=require("child_process"),xne=require("util"),sH=xne.promisify(Gne),L_=L(),{handleHDBError:zc,hdb_errors:qne}=ie(),{HTTP_STATUS_CODES:Jc}=qne,P_=J(),Fne=nt(),Xc=k();P_.initSync();var HA=P_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),iH="npm install --omit=dev --json",kne=`${iH} --dry-run`;lH.exports={installModules:Kne,auditModules:Wne,installAllRootModules:$ne,uninstallRootModule:Vne,linkHarperdb:Yne};async function $ne(e=!1){await Uh(),await M_(e?"npm install --ignore-scripts":"npm install",P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a($ne,"installAllRootModules");async function Vne(e){await M_(`npm uninstall ${e}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Vne,"uninstallRootModule");async function Yne(){await Uh(),await M_(`npm link ${L_.PACKAGE_ROOT}`,P_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Yne,"linkHarperdb");async function M_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await sH(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
17
17
  `,""))}return n&&!n.includes("Debugger listening")&&Xc.error("Error running NPM command:",e,n),Xc.trace(r,n),r?.replace(`
18
18
  `,"")}a(M_,"runCommand");async function Kne(e){Xc.info(`starting installModules for request: ${e}`);let t=cH(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?kne:iH;await Uh(),await aH(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=Mh.join(HA,l),u,d=null;try{let{stdout:E,stderr:f}=await sH(s,{cwd:_});u=E?E.replace(`
19
19
  `,""):null,d=f?f.replace(`
20
20
  `,""):null}catch(E){E.stderr?i[l].npm_error=oH(E.stderr):i[l].npm_error=E.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return Xc.info(`finished installModules with response ${i}`),i}a(Kne,"installModules");function oH(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(oH,"parseNPMStdErr");async function Wne(e){Xc.info(`starting auditModules for request: ${e}`);let t=cH(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST);let{projects:r}=e;await Uh(),await aH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Mh.join(HA,o);n[o]={npm_output:null,npm_error:null};try{let l=await M_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=oH(l.stderr)}}return Xc.info(`finished auditModules with response ${n}`),n}a(Wne,"auditModules");async function Uh(){try{return await M_("npm -v"),!0}catch{throw zc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jc.BAD_REQUEST,void 0,void 0,!0)}}a(Uh,"checkNPMInstalled");async function aH(e){if(!Array.isArray(e)||e.length===0)throw zc(new Error,"projects argument must be an array with at least 1 element",Jc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Mh.join(HA,i.toString());if(!await nH.pathExists(o)){t.push(i);continue}let l=Mh.join(o,"package.json");await nH.pathExists(l)||r.push(i)}if(t.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jc.BAD_REQUEST,void 0,void 0,!0)}a(aH,"checkProjectPaths");function cH(e){let t=Ph.object({projects:Ph.array().min(1).items(Ph.string()).required(),dry_run:Ph.boolean().default(!1)});return Fne.validateBySchema(e,t)}a(cH,"modulesValidator")});var xA=R((ebe,EH)=>{"use strict";var Zc=require("fs-extra"),GA=require("path"),Bh=k(),uH=Y(),Hh=L(),fH=X(),Qne=Et();EH.exports=jne;async function jne(){let e=zne(),t=fH.get(Hh.CONFIG_PARAMS.ROOTPATH),r=GA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Hh.PACKAGE_ROOT}},s=GA.join(t,"node_modules");await Zc.ensureDir(s);let i,o=!0,c=!1;try{i=await Zc.readJson(r)}catch(l){if(uH.isEmptyOrZeroLength(e))return;if(l.code!==Hh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!uH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await _H(_);n.dependencies[l]=u+_}if(!o){Bh.notify("Installing components"),await dH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await _H(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Bh.notify("Removing component",l),c=!0);c&&(Bh.notify("Updating components."),await dH(r,n,i))}a(jne,"installComponents");function zne(){let e=Qne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(zne,"getComponentsConfig");async function _H(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":GA.extname(e)||await Zc.pathExists(e)?"file:":"github:"}a(_H,"getPkgPrefix");async function dH(e,t,r){Bh.trace("npm installing components package.json",t),await Zc.writeFile(e,JSON.stringify(t,null," "));try{await vh().installAllRootModules(fH.get(Hh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Zc.writeFile(e,JSON.stringify(r,null," ")):await Zc.unlink(e),n}}a(dH,"installPackages")});var kA=R((nbe,SH)=>{"use strict";var Ke=require("fs-extra"),qA=require("fast-glob"),Oe=require("path"),pH=require("tar-fs"),rbe=require("uuid").v4,FA=require("normalize-path"),ks=rH(),Gt=k(),Xe=L(),Ct=X(),U_=Et(),Jne=Y(),{PACKAGE_ROOT:Xne}=L(),{handleHDBError:jt,hdb_errors:Zne}=ie(),{basename:ese}=require("path"),tse=xA(),mH=X(),rse=L(),{Readable:nse}=require("stream"),{isMainThread:sse}=require("worker_threads"),{HDB_ERROR_MSGS:Ma,HTTP_STATUS_CODES:zt}=Zne,ise=Oe.join(Xne,"application-template"),hH=Oe.join(Ct.get(Xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ose(){Gt.trace("getting custom api status");let e={};try{e={port:Ct.get(Xe.CONFIG_PARAMS.HTTP_PORT),directory:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw jt(new Error,Ma.FUNCTION_STATUS,zt.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(ose,"customFunctionsStatus");function ase(){Gt.trace("getting custom api endpoints");let e={},t=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT);try{qA.sync(FA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:qA.sync(FA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qA.sync(FA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw jt(new Error,Ma.GET_FUNCTIONS,zt.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(ase,"getCustomFunctions");function cse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("getting custom api endpoint file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Oe.join(r,n,s,i+".js");try{return Ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw jt(new Error,Ma.GET_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(cse,"getCustomFunction");function lse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("setting custom function file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ke.outputFileSync(Oe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw jt(new Error,Ma.SET_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(lse,"setCustomFunction");function use(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("dropping custom function file");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ke.unlinkSync(Oe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw jt(new Error,Ma.DROP_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(use,"dropCustomFunction");function _se(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("adding component");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);return Ke.mkdirSync(s,{recursive:!0}),Ke.copySync(ise,s),`Successfully added project: ${n}`}catch(s){throw jt(new Error,Ma.ADD_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(_se,"addComponent");function dse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("dropping custom function project");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ct.get(Xe.CONFIG_PARAMS.APPS);if(!Jne.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 U_.updateConfigValue(Xe.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);return Ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw jt(new Error,Ma.DROP_FUNCTION_PROJECT,zt.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(dse,"dropCustomFunctionProject");async function fse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Ke.realpath(Oe.join(r,n))}catch(l){if(l.code!==Xe.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ke.realpath(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Xe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ke.ensureDir(hH);let i=Oe.join(hH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Oe.join(s,"node_modules"))}),pH.pack(s,o).pipe(Ke.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ke.readFileSync(i,{encoding:"base64"});return await Ke.remove(i),{project:n,payload:c}}a(fse,"packageComponent");async function Ese(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Gt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Oe.join(r,n),i="file:"+o,await Ke.emptyDir(o);let E=nse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{E.pipe(pH.extract(o,{finish:h})).on("error",m)});let f=await Ke.readdir(o);f.length===1&&f[0]==="package"&&(await Ke.copy(Oe.join(o,"package"),o),await Ke.remove(Oe.join(o,"package")))}if(await U_.addConfig(n,{package:i}),!s){await tse();let E=mH.get(rse.CONFIG_PARAMS.ROOTPATH);o=Oe.join(E,"node_modules",n)}if(sse)return;let c=new Map;c.isWorker=!0;let l=(xh(),ae(Gh)),_;l.setErrorReporter(E=>_=E);let u=ese(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Gt.info("Installed component"),`Successfully deployed: ${n}`}a(Ese,"deployComponent");async function hse(){let e=U_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ke.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Oe.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let E={name:u,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await Ke.stat(d),f={name:Oe.basename(u),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(l){return Gt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{name:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(xh(),ae(Gh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(hse,"getComponents");async function pse(e){let t=ks.getComponentFileValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let n=U_.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(mH.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ke.stat(Oe.join(n,e.project,e.file));return{message:await Ke.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Xe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}a(pse,"getComponentFile");async function mse(e){let t=ks.setComponentFileValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ke.ensureFile(n),await Ke.outputFile(n,e.payload,r)):await Ke.ensureDir(n),"Successfully set component: "+e.file}a(mse,"setComponentFile");async function Sse(e){let t=ks.dropComponentFileValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=e.file?Oe.join(e.project,e.file):e.project,n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ke.pathExists(n)&&await Ke.remove(n),U_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Sse,"dropComponent");SH.exports={customFunctionsStatus:ose,getCustomFunctions:ase,getCustomFunction:cse,setCustomFunction:lse,dropCustomFunction:use,addComponent:_se,dropCustomFunctionProject:dse,packageComponent:fse,deployComponent:Ese,getComponents:hse,getComponentFile:pse,setComponentFile:mse,dropComponent:Sse}});var VA=R((ibe,gH)=>{"use strict";var Vs=require("joi"),TH=nt();gH.exports={readTransactionLogValidator:Tse,deleteTransactionLogsBeforeValidator:gse};function Tse(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return TH.validateBySchema(e,t)}a(Tse,"readTransactionLogValidator");function gse(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return TH.validateBySchema(e,t)}a(gse,"deleteTransactionLogsBeforeValidator")});var qh=R((abe,NH)=>{"use strict";var $A=L(),v_=gt(),RH=Y(),AH=X(),OH=fi(),{handleHDBError:el,hdb_errors:Rse}=ie(),{HTTP_STATUS_CODES:tl}=Rse,{readTransactionLogValidator:Ase,deleteTransactionLogsBeforeValidator:Ose}=VA(),bH="This operation relies on clustering and cannot run with it disable.",bse="Logs successfully deleted from transaction log.",Nse="All logs successfully deleted from transaction log.";NH.exports={readTransactionLog:yse,deleteTransactionLogsBefore:Ise};async function*yse(e){let t=Ase(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!AH.get($A.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,bH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=RH.checkSchemaTableExist(r,n);if(s)throw el(new Error,s,tl.NOT_FOUND,void 0,void 0,!0);let i=OH.createNatsTableStreamName(r,n),o=await v_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===$A.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(yse,"readTransactionLog");async function Ise(e){let t=Ose(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!AH.get($A.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,bH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=RH.checkSchemaTableExist(r,n);if(i)throw el(new Error,i,tl.NOT_FOUND,void 0,void 0,!0);let o=OH.createNatsTableStreamName(r,n),{jsm:c}=await v_.getNATSReferences(),l=await v_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=bse,d,E=new Date(l.state.last_ts).getTime();return s>E?(d=l.state.last_seq+1,u=Nse):d=(await v_.viewStream(o,parseInt(s),1))[0].nats_sequence,await v_.purgeTableStream(r,n,{seq:d}),u}a(Ise,"deleteTransactionLogsBefore")});var IH=R((lbe,yH)=>{"use strict";var YA=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}};yH.exports=YA});var CH=R((_be,wH)=>{"use strict";var KA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};wH.exports=KA});var QA=R((fbe,LH)=>{"use strict";var DH=IH(),wse=CH(),{HDB_ERROR_MSGS:Cse}=rn(),WA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Cse.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 DH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new wse(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 DH(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}};LH.exports=WA});var $h=R((hbe,WH)=>{"use strict";var jA=Cr(),Fh=ur(),kn=PE(),G_=Ei(),zA=ia(),Dse=ER(),Lse=HU(),x_=Lr(),kh=BE(),xt=k(),Pse=NR(),Mse=c_(),Use=sA(),vse=XE(),Bse=eh(),Hse=oA(),Gse=rh(),xse=sh(),JA=oh(),Ci=Y(),qse=v0(),XA=ch(),UH=bo(),Fn=L(),vH=xB(),Fse=gi(),BH=s_(),HH=(Dh(),ae(C_)),GH=Et(),pn=kA(),kse=require("alasql"),xH=qh(),qH=vh(),FH=QA(),{handleHDBError:Yr,hdb_errors:kH}=ie(),{HDB_ERROR_MSGS:nr,HTTP_STATUS_CODES:B_}=kH,$=new Map,VH="delete",Io="insert",Di="read",Ua="update",H_="describe",PH=G_.describeSchema.name,MH=G_.describeTable.name,$H={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Vse="catchup",$se="handleGetJob",Yse="handleGetJobsByStartDate",Vh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Kse=[kn.createTable.name,kn.createAttribute.name,kn.dropTable.name,kn.dropAttribute.name],YH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},j=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};$.set(jA.insert.name,new j(!1,[Io]));$.set(jA.update.name,new j(!1,[Ua]));$.set(jA.upsert.name,new j(!1,[Io,Ua]));$.set(Fh.searchByConditions.name,new j(!1,[Di]));$.set(Fh.searchByHash.name,new j(!1,[Di]));$.set(Fh.searchByValue.name,new j(!1,[Di]));$.set(Fh.search.name,new j(!1,[Di]));$.set(kn.createSchema.name,new j(!0,[]));$.set(kn.createTable.name,new j(!0,[]));$.set(kn.createAttribute.name,new j(!1,[Io]));$.set(kn.dropSchema.name,new j(!0,[]));$.set(kn.dropTable.name,new j(!0,[]));$.set(kn.dropAttribute.name,new j(!0,[]));$.set(G_.describeSchema.name,new j(!1,[Di]));$.set(G_.describeTable.name,new j(!1,[Di]));$.set(zA.deleteRecord.name,new j(!1,[VH]));$.set(x_.addUser.name,new j(!0,[]));$.set(x_.alterUser.name,new j(!0,[]));$.set(x_.dropUser.name,new j(!0,[]));$.set(x_.listUsersExternal.name,new j(!0,[]));$.set(kh.listRoles.name,new j(!0,[]));$.set(kh.addRole.name,new j(!0,[]));$.set(kh.alterRole.name,new j(!0,[]));$.set(kh.dropRole.name,new j(!0,[]));$.set(Pse.name,new j(!0,[]));$.set(Mse.name,new j(!0,[]));$.set(Use.name,new j(!0,[]));$.set(vse.name,new j(!0,[]));$.set(Bse.name,new j(!0,[]));$.set(Hse.name,new j(!0,[]));$.set(JA.setRoutes.name,new j(!0,[]));$.set(JA.getRoutes.name,new j(!0,[]));$.set(JA.deleteRoutes.name,new j(!0,[]));$.set(GH.setConfiguration.name,new j(!0,[]));$.set(Gse.clusterStatus.name,new j(!0,[]));$.set(xse.name,new j(!0,[]));$.set(XA.getFingerprint.name,new j(!0,[]));$.set(XA.setLicense.name,new j(!0,[]));$.set(zA.deleteFilesBefore.name,new j(!0,[]));$.set(zA.deleteAuditLogsBefore.name,new j(!0,[]));$.set(UH.restart.name,new j(!0,[]));$.set(UH.restartService.name,new j(!0,[]));$.set(Dse.name,new j(!0,[]));$.set(Lse.name,new j(!0,[Di]));$.set(Fse.systemInformation.name,new j(!0,[]));$.set(GH.getConfiguration.name,new j(!0,[]));$.set(xH.readTransactionLog.name,new j(!0,[]));$.set(xH.deleteTransactionLogsBefore.name,new j(!0,[]));$.set(qH.installModules.name,new j(!0,[]));$.set(qH.auditModules.name,new j(!0,[]));$.set(BH.createTokens.name,new j(!1,[]));$.set(BH.refreshOperationToken.name,new j(!1,[]));$.set(HH.login.name,new j(!1,[]));$.set(HH.logout.name,new j(!1,[]));$.set(pn.customFunctionsStatus.name,new j(!0,[]));$.set(pn.getCustomFunctions.name,new j(!0,[]));$.set(pn.getComponents.name,new j(!0,[]));$.set(pn.getComponentFile.name,new j(!0,[]));$.set(pn.setComponentFile.name,new j(!0,[]));$.set(pn.dropComponent.name,new j(!0,[]));$.set(pn.getCustomFunction.name,new j(!0,[]));$.set(pn.setCustomFunction.name,new j(!0,[]));$.set(pn.dropCustomFunction.name,new j(!0,[]));$.set(pn.addComponent.name,new j(!0,[]));$.set(pn.dropCustomFunctionProject.name,new j(!0,[]));$.set(pn.packageComponent.name,new j(!0,[]));$.set(pn.deployComponent.name,new j(!0,[]));$.set(XA.getRegistrationInfo.name,new j(!1,[]));$.set(x_.userInfo.name,new j(!1,[]));$.set(G_.describeAll.name,new j(!1,[]));$.set($se,new j(!1,[]));$.set(Yse,new j(!0,[]));$.set(Vse,new j(!0,[]));$.set(Vh.CSV_DATA_LOAD,new j(!1,[Io,Ua]));$.set(Vh.CSV_URL_LOAD,new j(!1,[Io,Ua]));$.set(Vh.CSV_FILE_LOAD,new j(!1,[Io,Ua]));$.set(Vh.IMPORT_FROM_S3,new j(!1,[Io,Ua]));$.set(YH.EXPORT_TO_S3,new j(!0,[]));$.set(YH.EXPORT_LOCAL,new j(!0,[]));$.set(Fn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[VH]));$.set(Fn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Di]));$.set(Fn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[Io]));$.set(Fn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[Ua]));WH.exports={verifyPerms:Qse,verifyPermsAst:Wse,verifyBulkLoadAttributePerms:zse};function Wse(e,t,r){if(Ci.isEmptyOrZeroLength(e))throw xt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))throw xt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(r))throw xt.info("verify_perms_ast has a null operation parameter"),Yr(new Error);try{let n=new FH,s=new qse(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw xt.info("No schemas defined in verifyPermsAst(), will not continue."),Yr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&$H[r])throw Yr(new Error,nr.DROP_SYSTEM,B_.FORBIDDEN);if(c&&!l)return null;let _=vH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof kse.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let u=KH(t,r,o,n);return u||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),m=eO(t.role.permission,E,d[f]);ZA(h,m,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw Yr(n)}}a(Wse,"verifyPermsAst");function Qse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw xt.info("null required parameter in verifyPerms"),Yr(new Error,nr.DEFAULT_INVALID_REQUEST,B_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new FH;if(Ci.isEmptyOrZeroLength(e.hdb_user?.role)||Ci.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return xt.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(nr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,_=e.hdb_user?.role?.permission?.structure_user,u=o.has(Fn.SYSTEM_SCHEMA_NAME)||s===Fn.SYSTEM_SCHEMA_NAME;if(u&&$H[r])throw Yr(new Error,nr.DROP_SYSTEM,B_.FORBIDDEN);if(l&&!u||_===!0&&(r===kn.createSchema.name||r===kn.dropSchema.name))return null;if(Kse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=vH.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===PH||r===MH){if(s===Fn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(nr.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===PH&&(!d[s]||!d[s][H_]))return c.handleInvalidItem(nr.SCHEMA_NOT_FOUND(s));if(r===MH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][H_]))return c.handleInvalidItem(nr.TABLE_NOT_FOUND(s,i))}}let E=KH(e.hdb_user,r,o,c,n);if(E)return E;if($.get(r)&&$.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Fn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Fn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Fn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=m)}let f=jse(e),h=eO(e.hdb_user?.role?.permission,s,i);return ZA(f,h,r,i,s,c,n),c.getPermsResponse()}a(Qse,"verifyPerms");function KH(e,t,r,n,s){if(Ci.arrayHasEmptyValues([e,t,r]))throw xt.info("hasPermissions has an invalid parameter"),Yr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||$.get(t).requires_su))return null;if(!$.get(t))throw xt.info(`operation ${t} not found.`),Yr(new Error,nr.OP_NOT_FOUND(t),B_.BAD_REQUEST);if($.get(t)&&$.get(t).requires_su)return xt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(nr.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(nr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(nr.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[H_]===!1)n.addInvalidItem(nr.TABLE_NOT_FOUND(l,u));else try{let E=[],f=$.get(t).perms;!Ci.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let m=f[h],S=d[m];(S==null||S===!1)&&(xt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(m))}E.length>0&&n.addUnauthorizedTable(l,u,E)}catch(E){let f=nr.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw xt.error(f),xt.error(E),Yr(kH.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(KH,"hasPermissions");function ZA(e,t,r,n,s,i,o){if(!e||!t)throw xt.info("no attributes specified in checkAttributePerms."),Yr(new Error);let c=$.get(r).perms;if(!c||c==="")throw xt.info(`no permissions found for ${r} in checkAttributePerms().`),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))return xt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[H_]===!1){i.addInvalidItem(nr.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let E of c){if(Fn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Di)throw Yr(new Error,nr.SYSTEM_TIMESTAMP_PERMS_ERR,B_.FORBIDDEN);d[E]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(E):l[d.attribute_name]=[E])}}else i.addInvalidItem(nr.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(ZA,"checkAttributePerms");function jse(e){let t=new Set;try{if(e.action)return t;if(e.operation===Fn.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){xt.info(r)}return t}a(jse,"getRecordAttributes");function eO(e,t,r){let n=new Map;if(Ci.isEmpty(e))return xt.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{xt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(eO,"getAttributePermissions");function zse(e,t,r,n,s,i,o){let c=new Set(i),l=eO(e,n,s);ZA(c,l,t,s,n,o,r)}a(zse,"verifyBulkLoadAttributePerms")});var Kh=R((mbe,XH)=>{"use strict";XH.exports={evaluateSQL:lie,processAST:JH,convertSQLToAST:zH,checkASTPermissions:jH};var Jse=Cr(),QH=require("util"),Xse=QH.callbackify(Jse.insert),Zse=ur().search,eie=RM().update,tie=QH.callbackify(eie),rie=OM().convertDelete,wo=require("alasql"),nie=$h(),Yh=k(),sie=EE(),iie=Y(),q_=L(),{hdb_errors:oie,handleHDBError:tO}=ie(),{HTTP_STATUS_CODES:rO}=oie;sie(wo);var aie=403,cie="There was a problem performing this insert. Please check the logs and try again.",nO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function lie(e,t){let r=e.parsed_sql_object;if(!r){r=zH(e.sql);let n,s=r.ast.statements[0];if(s instanceof wo.yy.Insert?n=s.into.databaseid:s instanceof wo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wo.yy.Update||s instanceof wo.yy.Delete?n=s.table.databaseid:Yh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wo.yy.Select)&&iie.isEmptyOrZeroLength(n))return t("No schema specified",null)}JH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(lie,"evaluateSQL");function jH(e,t){let r;try{r=nie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(jH,"checkASTPermissions");function zH(e){let t=new nO;if(!e)throw tO(new Error,"The 'sql' parameter is missing from the request body",rO.BAD_REQUEST);try{let r=e.trim(),n=wo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
22
- `);throw n[1]?tO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,rO.BAD_REQUEST):tO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",rO.BAD_REQUEST)}return t}a(zH,"convertSQLToAST");function JH(e,t,r){try{let n=uie;if(!e.bypass_auth&&!t.permissions_checked){let i=jH(e,t);if(i&&i.length>0)return r(aie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=Zse,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=_ie;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=tie;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=rie;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(JH,"processAST");function uie(e,t){Yh.info(e),t("unknown sql statement")}a(uie,"nullFunction");function _ie({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=die(i,e.values)}catch(o){return r(o)}Xse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Yh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(_ie,"convertInsert");function die(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]]=wo.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Yh.error(r),new Error(cie)}}a(die,"createDataObjects")});var sO=R((Tbe,eG)=>{"use strict";var{S3:fie,GetObjectCommand:Eie}=require("@aws-sdk/client-s3");eG.exports={getFileStreamFromS3:hie,getS3AuthObj:ZH};async function hie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ZH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Eie(r))).Body}a(hie,"getFileStreamFromS3");function ZH(e,t,r){return new fie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ZH,"getS3AuthObj")});var Wh=R((Rbe,lG)=>{"use strict";var oO=ur(),pie=Kh(),mie=sO(),{AsyncParser:Sie,Transform:Tie}=require("json2csv"),k_=require("stream"),mn=Y(),iO=require("fs-extra"),gie=require("path"),Vn=k(),{promisify:nG}=require("util"),F_=Y(),{handleHDBError:Dt,hdb_errors:Rie}=ie(),{HDB_ERROR_MSGS:Kr,HTTP_STATUS_CODES:Lt}=Rie,{streamAsJSON:Aie}=(CS(),ae(xI)),{Upload:Oie}=require("@aws-sdk/lib-storage"),tG=["search_by_value","search_by_hash","sql","search_by_conditions"],rG=["json","csv"],sG="json",iG="csv",bie="Successfully exported JSON locally.",Nie="Successfully exported CSV locally.",yie=1e3,Iie=oO.searchByHash,wie=oO.searchByValue,Cie=nG(pie.evaluateSQL),Die=nG(k_.finished);lG.exports={export_to_s3:Uie,export_local:Lie,toCsvStream:oG};async function Lie(e){Vn.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=aG(e);if(!mn.isEmpty(t))throw Vn.error(t),Dt(new Error,t,Lt.BAD_REQUEST,void 0,void 0,!0);if(mn.isEmpty(e.path))throw Vn.error(Kr.MISSING_VALUE("path")),Dt(new Error,Kr.MISSING_VALUE("path"),Lt.BAD_REQUEST,void 0,void 0,!0);let r=(mn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(gie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=mn.buildFolderPath(e.path,r);await Pie(e.path);let s=await cG(e);return await Mie(n,e.format,s)}a(Lie,"export_local");async function Pie(e){if(Vn.trace("in confirmPath"),mn.isEmptyOrZeroLength(e))throw Dt(new Error,`Invalid path: ${e}`,Lt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await iO.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,Vn.error(n),Dt(new Error,n,Lt.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 Vn.error(r),Dt(new Error,r,Lt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Pie,"confirmPath");async function Mie(e,t,r){if(Vn.trace("in saveToLocal"),F_.isEmptyOrZeroLength(e))throw Dt(new Error,Kr.INVALID_VALUE("file_path"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmptyOrZeroLength(t))throw Dt(new Error,Kr.INVALID_VALUE("Source format"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmpty(r))throw Dt(new Error,Kr.NOT_FOUND("Data"),Lt.BAD_REQUEST,void 0,void 0,!0);if(t===sG){let n=iO.createWriteStream(e);return Aie(r).pipe(n),await Die(n),{message:bie,path:e}}else if(t===iG){let n=iO.createWriteStream(e),s=k_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new Sie(i,c).fromInput(s).toOutput(n).promise(!1),{message:Nie,path:e}}throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST)}a(Mie,"saveToLocal");async function Uie(e){if(!e.s3||Object.keys(e.s3).length===0)throw Dt(new Error,Kr.MISSING_VALUE("S3 object"),Lt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Dt(new Error,Kr.MISSING_VALUE("aws_access_key_id"),Lt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Dt(new Error,Kr.MISSING_VALUE("aws_secret_access_key"),Lt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.bucket))throw Dt(new Error,Kr.MISSING_VALUE("bucket"),Lt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.key))throw Dt(new Error,Kr.MISSING_VALUE("key"),Lt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.region))throw Dt(new Error,Kr.MISSING_VALUE("region"),Lt.BAD_REQUEST);let t=aG(e);if(!mn.isEmpty(t))throw Dt(new Error,t,Lt.BAD_REQUEST);Vn.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await cG(e)}catch(l){throw Vn.error(l),l}let n,s=await mie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new k_.PassThrough;if(e.format===iG){i=e.s3.key+".csv";let l=oG(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===sG){i=e.s3.key+".json";let l=new k_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";u+=f,d!==0&&d%yie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST);return new Oie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Uie,"export_to_s3");function oG(e,t){let r=k_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Tie(n,s);return r.pipe(i)}a(oG,"toCsvStream");function aG(e){if(Vn.trace("in exportCoreValidation"),mn.isEmpty(e.format))return"format missing";if(rG.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${rG.join(", ")}`;let t=e.search_operation.operation;if(mn.isEmpty(t))return"search_operation.operation missing";if(tG.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${tG.join(", ")}`}a(aG,"exportCoreValidation");async function cG(e){Vn.trace("in getRecords");let t,r;if(F_.isEmpty(e.search_operation)||F_.isEmptyOrZeroLength(e.search_operation.operation))throw Dt(new Error,Kr.INVALID_VALUE("Search operation"),Lt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=wie;break;case"search_by_hash":t=Iie;break;case"search_by_conditions":t=oO.searchByConditions;break;case"sql":t=Cie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Vn.error(r),Dt(new Error,r,Lt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(cG,"getRecords")});var SG={};Ve(SG,{contentTypes:()=>uO,findBestSerializer:()=>zh,getDeserializer:()=>Ba,registerContentHandlers:()=>_O,serialize:()=>Jh,serializeMessage:()=>Pa});function vie(e){try{return e?.[0]===123?lO(e):e}catch{return e}}function _O(e){e.register(Hie,{serializers:[{regex:/^application\/json$/,serializer:iu},{regex:/^application\/cbor$/,serializer:function(t){return new va.EncoderStream($_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jh.Readable.from((0,$s.encodeIter)(t,$_)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Qh.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,$s.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,va.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function zh(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]=l.split(/\s*;\s*/),d=1,E={q:1};for(let h of u){let m=h.indexOf("=");E[h.substring(0,m)]=h.substring(m+1)}d=+E.q;let f=Jt.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new fG.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Jt.keys()).join(", "),406);n=Jt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Jh(e,t,r){let n=_G&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=zh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Li.createBrotliCompress)({params:{[Li.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Li.constants.BROTLI_MODE_TEXT:Li.constants.BROTLI_MODE_GENERIC,[Li.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>_G?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Li.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Pa(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return V_(e);let r=t.serialize;if(r)return r(e);let n=zh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Gie(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 Ba(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Jt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Jt.get(e)?.deserialize||dG(e,n);return o=>Gie(o).then(i)}return e&&Jt.get(e)?.deserialize||dG(e,n)}function dG(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return lO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function xie(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 Qh,$s,va,Li,fG,jh,EG,aO,cO,hG,pG,V_,lO,$_,Jt,uO,uG,mG,Bie,Hie,_G,jc=be(()=>{CS();Qh=G(Wh()),$s=require("msgpackr"),va=require("cbor-x"),Li=require("zlib"),fG=G(ie()),jh=require("stream");yr();EG=require("../index"),aO=G(X()),cO=G(L()),hG=G(require("yaml")),pG=aO.default.get(cO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,V_=pG?zo:JSON.stringify,lO=pG?wS:JSON.parse,$_={useRecords:!1,useToJSON:!0},Jt=new Map,uO=Jt;dt.contentTypes=uO;(0,EG._assignPackageExport)("contentTypes",uO);Jt.set("application/json",{serializeStream:iu,serialize:V_,deserialize:lO,q:.8});uG=new va.Encoder($_);Jt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new va.EncoderStream($_).end(e)},serialize:uG.encode,deserialize:uG.decode,q:1});Jt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jh.Readable.from((0,$s.encodeIter)(e,$_)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});Jt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Qh.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,Qh.toCsvStream)(e,e?.getColumns?.())},q:.1});Jt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Jt.set("text/yaml",{serialize(e){return hG.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Jt.set("text/event-stream",{serializeStream:function(e){return jh.Readable.from(xie(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
23
- `),e.data){let r=e.data;typeof r=="object"&&(r=V_(r)),t+="data: "+r+`
21
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(oH,"parseNPMStdErr");async function Wne(e){Xc.info(`starting auditModules for request: ${e}`);let t=cH(e);if(t)throw zc(t,t.message,Jc.BAD_REQUEST);let{projects:r}=e;await Uh(),await aH(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=Mh.join(HA,o);n[o]={npm_output:null,npm_error:null};try{let l=await M_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=oH(l.stderr)}}return Xc.info(`finished auditModules with response ${n}`),n}a(Wne,"auditModules");async function Uh(){try{return await M_("npm -v"),!0}catch{throw zc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jc.BAD_REQUEST,void 0,void 0,!0)}}a(Uh,"checkNPMInstalled");async function aH(e){if(!Array.isArray(e)||e.length===0)throw zc(new Error,"projects argument must be an array with at least 1 element",Jc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=Mh.join(HA,i.toString());if(!await nH.pathExists(o)){t.push(i);continue}let l=Mh.join(o,"package.json");await nH.pathExists(l)||r.push(i)}if(t.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jc.BAD_REQUEST,void 0,void 0,!0)}a(aH,"checkProjectPaths");function cH(e){let t=Ph.object({projects:Ph.array().min(1).items(Ph.string()).required(),dry_run:Ph.boolean().default(!1)});return Fne.validateBySchema(e,t)}a(cH,"modulesValidator")});var xA=R((ebe,EH)=>{"use strict";var Zc=require("fs-extra"),GA=require("path"),Bh=k(),uH=Y(),Hh=L(),fH=J(),Qne=Et();EH.exports=jne;async function jne(){let e=zne(),t=fH.get(Hh.CONFIG_PARAMS.ROOTPATH),r=GA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Hh.PACKAGE_ROOT}},s=GA.join(t,"node_modules");await Zc.ensureDir(s);let i,o=!0,c=!1;try{i=await Zc.readJson(r)}catch(l){if(uH.isEmptyOrZeroLength(e))return;if(l.code!==Hh.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!uH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await _H(_);n.dependencies[l]=u+_}if(!o){Bh.notify("Installing components"),await dH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await _H(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Bh.notify("Removing component",l),c=!0);c&&(Bh.notify("Updating components."),await dH(r,n,i))}a(jne,"installComponents");function zne(){let e=Qne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(zne,"getComponentsConfig");async function _H(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":GA.extname(e)||await Zc.pathExists(e)?"file:":"github:"}a(_H,"getPkgPrefix");async function dH(e,t,r){Bh.trace("npm installing components package.json",t),await Zc.writeFile(e,JSON.stringify(t,null," "));try{await vh().installAllRootModules(fH.get(Hh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Zc.writeFile(e,JSON.stringify(r,null," ")):await Zc.unlink(e),n}}a(dH,"installPackages")});var kA=R((nbe,SH)=>{"use strict";var Ke=require("fs-extra"),qA=require("fast-glob"),Oe=require("path"),pH=require("tar-fs"),rbe=require("uuid").v4,FA=require("normalize-path"),ks=rH(),Gt=k(),Xe=L(),Ct=J(),U_=Et(),Jne=Y(),{PACKAGE_ROOT:Xne}=L(),{handleHDBError:jt,hdb_errors:Zne}=ie(),{basename:ese}=require("path"),tse=xA(),mH=J(),rse=L(),{Readable:nse}=require("stream"),{isMainThread:sse}=require("worker_threads"),{HDB_ERROR_MSGS:Ma,HTTP_STATUS_CODES:zt}=Zne,ise=Oe.join(Xne,"application-template"),hH=Oe.join(Ct.get(Xe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ose(){Gt.trace("getting custom api status");let e={};try{e={port:Ct.get(Xe.CONFIG_PARAMS.HTTP_PORT),directory:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw jt(new Error,Ma.FUNCTION_STATUS,zt.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(ose,"customFunctionsStatus");function ase(){Gt.trace("getting custom api endpoints");let e={},t=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT);try{qA.sync(FA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:qA.sync(FA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qA.sync(FA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw jt(new Error,Ma.GET_FUNCTIONS,zt.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(ase,"getCustomFunctions");function cse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("getting custom api endpoint file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=Oe.join(r,n,s,i+".js");try{return Ke.readFileSync(o,{encoding:"utf8"})}catch(c){throw jt(new Error,Ma.GET_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(cse,"getCustomFunction");function lse(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("setting custom function file content");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ke.outputFileSync(Oe.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw jt(new Error,Ma.SET_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(lse,"setCustomFunction");function use(e){e.project&&(e.project=Oe.parse(e.project).name),e.file&&(e.file=Oe.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("dropping custom function file");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ke.unlinkSync(Oe.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw jt(new Error,Ma.DROP_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(use,"dropCustomFunction");function _se(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("adding component");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Oe.join(r,n);return Ke.mkdirSync(s,{recursive:!0}),Ke.copySync(ise,s),`Successfully added project: ${n}`}catch(s){throw jt(new Error,Ma.ADD_FUNCTION,zt.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(_se,"addComponent");function dse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);Gt.trace("dropping custom function project");let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ct.get(Xe.CONFIG_PARAMS.APPS);if(!Jne.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 U_.updateConfigValue(Xe.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Oe.join(r,n);return Ke.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw jt(new Error,Ma.DROP_FUNCTION_PROJECT,zt.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(dse,"dropCustomFunctionProject");async function fse(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Ke.realpath(Oe.join(r,n))}catch(l){if(l.code!==Xe.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ke.realpath(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Xe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ke.ensureDir(hH);let i=Oe.join(hH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(Oe.join(s,"node_modules"))}),pH.pack(s,o).pipe(Ke.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ke.readFileSync(i,{encoding:"base64"});return await Ke.remove(i),{project:n,payload:c}}a(fse,"packageComponent");async function Ese(e){e.project&&(e.project=Oe.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Gt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=Oe.join(r,n),i="file:"+o,await Ke.emptyDir(o);let E=nse.from(Buffer.from(s,"base64"));await new Promise((h,m)=>{E.pipe(pH.extract(o,{finish:h})).on("error",m)});let f=await Ke.readdir(o);f.length===1&&f[0]==="package"&&(await Ke.copy(Oe.join(o,"package"),o),await Ke.remove(Oe.join(o,"package")))}if(await U_.addConfig(n,{package:i}),!s){await tse();let E=mH.get(rse.CONFIG_PARAMS.ROOTPATH);o=Oe.join(E,"node_modules",n)}if(sse)return;let c=new Map;c.isWorker=!0;let l=(xh(),ae(Gh)),_;l.setErrorReporter(E=>_=E);let u=ese(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Gt.info("Installed component"),`Successfully deployed: ${n}`}a(Ese,"deployComponent");async function hse(){let e=U_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ke.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=Oe.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let E={name:u,entries:[]};c.entries.push(E),await r(d,E)}else{let E=await Ke.stat(d),f={name:Oe.basename(u),mtime:E.mtime,size:E.size};c.entries.push(f)}}return c}catch(l){return Gt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),{name:Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT).split(Oe.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(Oe.join(Ct.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(xh(),ae(Gh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return n}a(hse,"getComponents");async function pse(e){let t=ks.getComponentFileValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let n=U_.getConfigObj()[e.project]||e.project==="harperdb"?Oe.join(mH.get(Xe.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ke.stat(Oe.join(n,e.project,e.file));return{message:await Ke.readFile(Oe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Xe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Oe.join(e.project,e.file)}'`):i}}a(pse,"getComponentFile");async function mse(e){let t=ks.setComponentFileValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ke.ensureFile(n),await Ke.outputFile(n,e.payload,r)):await Ke.ensureDir(n),"Successfully set component: "+e.file}a(mse,"setComponentFile");async function Sse(e){let t=ks.dropComponentFileValidator(e);if(t)throw jt(t,t.message,zt.BAD_REQUEST);let r=e.file?Oe.join(e.project,e.file):e.project,n=Oe.join(Ct.get(Xe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ke.pathExists(n)&&await Ke.remove(n),U_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Sse,"dropComponent");SH.exports={customFunctionsStatus:ose,getCustomFunctions:ase,getCustomFunction:cse,setCustomFunction:lse,dropCustomFunction:use,addComponent:_se,dropCustomFunctionProject:dse,packageComponent:fse,deployComponent:Ese,getComponents:hse,getComponentFile:pse,setComponentFile:mse,dropComponent:Sse}});var $A=R((ibe,gH)=>{"use strict";var $s=require("joi"),TH=nt();gH.exports={readTransactionLogValidator:Tse,deleteTransactionLogsBeforeValidator:gse};function Tse(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),from:$s.date().timestamp(),to:$s.date().timestamp(),limit:$s.number().min(1)});return TH.validateBySchema(e,t)}a(Tse,"readTransactionLogValidator");function gse(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return TH.validateBySchema(e,t)}a(gse,"deleteTransactionLogsBeforeValidator")});var qh=R((abe,NH)=>{"use strict";var VA=L(),v_=gt(),RH=Y(),AH=J(),OH=fi(),{handleHDBError:el,hdb_errors:Rse}=ie(),{HTTP_STATUS_CODES:tl}=Rse,{readTransactionLogValidator:Ase,deleteTransactionLogsBeforeValidator:Ose}=$A(),bH="This operation relies on clustering and cannot run with it disable.",bse="Logs successfully deleted from transaction log.",Nse="All logs successfully deleted from transaction log.";NH.exports={readTransactionLog:yse,deleteTransactionLogsBefore:Ise};async function*yse(e){let t=Ase(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!AH.get(VA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,bH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=RH.checkSchemaTableExist(r,n);if(s)throw el(new Error,s,tl.NOT_FOUND,void 0,void 0,!0);let i=OH.createNatsTableStreamName(r,n),o=await v_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let l=Math.floor(c?.nats_timestamp/1e6);if(e.to&&l>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:l,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===VA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(yse,"readTransactionLog");async function Ise(e){let t=Ose(e);if(t)throw el(t,t.message,tl.BAD_REQUEST,void 0,void 0,!0);if(!AH.get(VA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw el(new Error,bH,tl.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=RH.checkSchemaTableExist(r,n);if(i)throw el(new Error,i,tl.NOT_FOUND,void 0,void 0,!0);let o=OH.createNatsTableStreamName(r,n),{jsm:c}=await v_.getNATSReferences(),l=await v_.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=bse,d,E=new Date(l.state.last_ts).getTime();return s>E?(d=l.state.last_seq+1,u=Nse):d=(await v_.viewStream(o,parseInt(s),1))[0].nats_sequence,await v_.purgeTableStream(r,n,{seq:d}),u}a(Ise,"deleteTransactionLogsBefore")});var IH=R((lbe,yH)=>{"use strict";var YA=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}};yH.exports=YA});var CH=R((_be,wH)=>{"use strict";var KA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};wH.exports=KA});var QA=R((fbe,LH)=>{"use strict";var DH=IH(),wse=CH(),{HDB_ERROR_MSGS:Cse}=nn(),WA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Cse.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 DH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new wse(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 DH(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}};LH.exports=WA});var Vh=R((hbe,WH)=>{"use strict";var jA=Cr(),Fh=ur(),kn=PE(),G_=Ei(),zA=ia(),Dse=ER(),Lse=HU(),x_=Lr(),kh=BE(),xt=k(),Pse=NR(),Mse=c_(),Use=sA(),vse=XE(),Bse=eh(),Hse=oA(),Gse=rh(),xse=sh(),JA=oh(),Ci=Y(),qse=v0(),XA=ch(),UH=bo(),Fn=L(),vH=xB(),Fse=gi(),BH=s_(),HH=(Dh(),ae(C_)),GH=Et(),mn=kA(),kse=require("alasql"),xH=qh(),qH=vh(),FH=QA(),{handleHDBError:Yr,hdb_errors:kH}=ie(),{HDB_ERROR_MSGS:nr,HTTP_STATUS_CODES:B_}=kH,V=new Map,$H="delete",Io="insert",Di="read",Ua="update",H_="describe",PH=G_.describeSchema.name,MH=G_.describeTable.name,VH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},$se="catchup",Vse="handleGetJob",Yse="handleGetJobsByStartDate",$h={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Kse=[kn.createTable.name,kn.createAttribute.name,kn.dropTable.name,kn.dropAttribute.name],YH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},j=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};V.set(jA.insert.name,new j(!1,[Io]));V.set(jA.update.name,new j(!1,[Ua]));V.set(jA.upsert.name,new j(!1,[Io,Ua]));V.set(Fh.searchByConditions.name,new j(!1,[Di]));V.set(Fh.searchByHash.name,new j(!1,[Di]));V.set(Fh.searchByValue.name,new j(!1,[Di]));V.set(Fh.search.name,new j(!1,[Di]));V.set(kn.createSchema.name,new j(!0,[]));V.set(kn.createTable.name,new j(!0,[]));V.set(kn.createAttribute.name,new j(!1,[Io]));V.set(kn.dropSchema.name,new j(!0,[]));V.set(kn.dropTable.name,new j(!0,[]));V.set(kn.dropAttribute.name,new j(!0,[]));V.set(G_.describeSchema.name,new j(!1,[Di]));V.set(G_.describeTable.name,new j(!1,[Di]));V.set(zA.deleteRecord.name,new j(!1,[$H]));V.set(x_.addUser.name,new j(!0,[]));V.set(x_.alterUser.name,new j(!0,[]));V.set(x_.dropUser.name,new j(!0,[]));V.set(x_.listUsersExternal.name,new j(!0,[]));V.set(kh.listRoles.name,new j(!0,[]));V.set(kh.addRole.name,new j(!0,[]));V.set(kh.alterRole.name,new j(!0,[]));V.set(kh.dropRole.name,new j(!0,[]));V.set(Pse.name,new j(!0,[]));V.set(Mse.name,new j(!0,[]));V.set(Use.name,new j(!0,[]));V.set(vse.name,new j(!0,[]));V.set(Bse.name,new j(!0,[]));V.set(Hse.name,new j(!0,[]));V.set(JA.setRoutes.name,new j(!0,[]));V.set(JA.getRoutes.name,new j(!0,[]));V.set(JA.deleteRoutes.name,new j(!0,[]));V.set(GH.setConfiguration.name,new j(!0,[]));V.set(Gse.clusterStatus.name,new j(!0,[]));V.set(xse.name,new j(!0,[]));V.set(XA.getFingerprint.name,new j(!0,[]));V.set(XA.setLicense.name,new j(!0,[]));V.set(zA.deleteFilesBefore.name,new j(!0,[]));V.set(zA.deleteAuditLogsBefore.name,new j(!0,[]));V.set(UH.restart.name,new j(!0,[]));V.set(UH.restartService.name,new j(!0,[]));V.set(Dse.name,new j(!0,[]));V.set(Lse.name,new j(!0,[Di]));V.set(Fse.systemInformation.name,new j(!0,[]));V.set(GH.getConfiguration.name,new j(!0,[]));V.set(xH.readTransactionLog.name,new j(!0,[]));V.set(xH.deleteTransactionLogsBefore.name,new j(!0,[]));V.set(qH.installModules.name,new j(!0,[]));V.set(qH.auditModules.name,new j(!0,[]));V.set(BH.createTokens.name,new j(!1,[]));V.set(BH.refreshOperationToken.name,new j(!1,[]));V.set(HH.login.name,new j(!1,[]));V.set(HH.logout.name,new j(!1,[]));V.set(mn.customFunctionsStatus.name,new j(!0,[]));V.set(mn.getCustomFunctions.name,new j(!0,[]));V.set(mn.getComponents.name,new j(!0,[]));V.set(mn.getComponentFile.name,new j(!0,[]));V.set(mn.setComponentFile.name,new j(!0,[]));V.set(mn.dropComponent.name,new j(!0,[]));V.set(mn.getCustomFunction.name,new j(!0,[]));V.set(mn.setCustomFunction.name,new j(!0,[]));V.set(mn.dropCustomFunction.name,new j(!0,[]));V.set(mn.addComponent.name,new j(!0,[]));V.set(mn.dropCustomFunctionProject.name,new j(!0,[]));V.set(mn.packageComponent.name,new j(!0,[]));V.set(mn.deployComponent.name,new j(!0,[]));V.set(XA.getRegistrationInfo.name,new j(!1,[]));V.set(x_.userInfo.name,new j(!1,[]));V.set(G_.describeAll.name,new j(!1,[]));V.set(Vse,new j(!1,[]));V.set(Yse,new j(!0,[]));V.set($se,new j(!0,[]));V.set($h.CSV_DATA_LOAD,new j(!1,[Io,Ua]));V.set($h.CSV_URL_LOAD,new j(!1,[Io,Ua]));V.set($h.CSV_FILE_LOAD,new j(!1,[Io,Ua]));V.set($h.IMPORT_FROM_S3,new j(!1,[Io,Ua]));V.set(YH.EXPORT_TO_S3,new j(!0,[]));V.set(YH.EXPORT_LOCAL,new j(!0,[]));V.set(Fn.VALID_SQL_OPS_ENUM.DELETE,new j(!1,[$H]));V.set(Fn.VALID_SQL_OPS_ENUM.SELECT,new j(!1,[Di]));V.set(Fn.VALID_SQL_OPS_ENUM.INSERT,new j(!1,[Io]));V.set(Fn.VALID_SQL_OPS_ENUM.UPDATE,new j(!1,[Ua]));WH.exports={verifyPerms:Qse,verifyPermsAst:Wse,verifyBulkLoadAttributePerms:zse};function Wse(e,t,r){if(Ci.isEmptyOrZeroLength(e))throw xt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))throw xt.info("verify_perms_ast has an empty user parameter"),Yr(new Error);if(Ci.isEmptyOrZeroLength(r))throw xt.info("verify_perms_ast has a null operation parameter"),Yr(new Error);try{let n=new FH,s=new qse(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw xt.info("No schemas defined in verifyPermsAst(), will not continue."),Yr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&VH[r])throw Yr(new Error,nr.DROP_SYSTEM,B_.FORBIDDEN);if(c&&!l)return null;let _=vH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof kse.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let E=s.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let u=KH(t,r,o,n);return u||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=s.getAttributesBySchemaTableName(E,d[f]),m=eO(t.role.permission,E,d[f]);ZA(h,m,r,d[f],E,n)}}),n.getPermsResponse())}catch(n){throw Yr(n)}}a(Wse,"verifyPermsAst");function Qse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw xt.info("null required parameter in verifyPerms"),Yr(new Error,nr.DEFAULT_INVALID_REQUEST,B_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new FH;if(Ci.isEmptyOrZeroLength(e.hdb_user?.role)||Ci.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return xt.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(nr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,_=e.hdb_user?.role?.permission?.structure_user,u=o.has(Fn.SYSTEM_SCHEMA_NAME)||s===Fn.SYSTEM_SCHEMA_NAME;if(u&&VH[r])throw Yr(new Error,nr.DROP_SYSTEM,B_.FORBIDDEN);if(l&&!u||_===!0&&(r===kn.createSchema.name||r===kn.dropSchema.name))return null;if(Kse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let d=vH.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=d),r===PH||r===MH){if(s===Fn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(nr.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===PH&&(!d[s]||!d[s][H_]))return c.handleInvalidItem(nr.SCHEMA_NOT_FOUND(s));if(r===MH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][H_]))return c.handleInvalidItem(nr.TABLE_NOT_FOUND(s,i))}}let E=KH(e.hdb_user,r,o,c,n);if(E)return E;if(V.get(r)&&V.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Fn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[s].tables[i];S[Fn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(T=>T[Fn.PERMS_CRUD_ENUM.READ]).forEach(T=>{m.push(T.attribute_name)}):m=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=m)}let f=jse(e),h=eO(e.hdb_user?.role?.permission,s,i);return ZA(f,h,r,i,s,c,n),c.getPermsResponse()}a(Qse,"verifyPerms");function KH(e,t,r,n,s){if(Ci.arrayHasEmptyValues([e,t,r]))throw xt.info("hasPermissions has an invalid parameter"),Yr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||V.get(t).requires_su))return null;if(!V.get(t))throw xt.info(`operation ${t} not found.`),Yr(new Error,nr.OP_NOT_FOUND(t),B_.BAD_REQUEST);if(V.get(t)&&V.get(t).requires_su)return xt.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(nr.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(nr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(nr.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[H_]===!1)n.addInvalidItem(nr.TABLE_NOT_FOUND(l,u));else try{let E=[],f=V.get(t).perms;!Ci.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let m=f[h],S=d[m];(S==null||S===!1)&&(xt.info(`Required ${m} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(m))}E.length>0&&n.addUnauthorizedTable(l,u,E)}catch(E){let f=nr.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw xt.error(f),xt.error(E),Yr(kH.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(KH,"hasPermissions");function ZA(e,t,r,n,s,i,o){if(!e||!t)throw xt.info("no attributes specified in checkAttributePerms."),Yr(new Error);let c=V.get(r).perms;if(!c||c==="")throw xt.info(`no permissions found for ${r} in checkAttributePerms().`),Yr(new Error);if(Ci.isEmptyOrZeroLength(t))return xt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[H_]===!1){i.addInvalidItem(nr.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let E of c){if(Fn.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Di)throw Yr(new Error,nr.SYSTEM_TIMESTAMP_PERMS_ERR,B_.FORBIDDEN);d[E]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(E):l[d.attribute_name]=[E])}}else i.addInvalidItem(nr.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(ZA,"checkAttributePerms");function jse(e){let t=new Set;try{if(e.action)return t;if(e.operation===Fn.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){xt.info(r)}return t}a(jse,"getRecordAttributes");function eO(e,t,r){let n=new Map;if(Ci.isEmpty(e))return xt.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{xt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(eO,"getAttributePermissions");function zse(e,t,r,n,s,i,o){let c=new Set(i),l=eO(e,n,s);ZA(c,l,t,s,n,o,r)}a(zse,"verifyBulkLoadAttributePerms")});var Kh=R((mbe,XH)=>{"use strict";XH.exports={evaluateSQL:lie,processAST:JH,convertSQLToAST:zH,checkASTPermissions:jH};var Jse=Cr(),QH=require("util"),Xse=QH.callbackify(Jse.insert),Zse=ur().search,eie=RM().update,tie=QH.callbackify(eie),rie=OM().convertDelete,wo=require("alasql"),nie=Vh(),Yh=k(),sie=EE(),iie=Y(),q_=L(),{hdb_errors:oie,handleHDBError:tO}=ie(),{HTTP_STATUS_CODES:rO}=oie;sie(wo);var aie=403,cie="There was a problem performing this insert. Please check the logs and try again.",nO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function lie(e,t){let r=e.parsed_sql_object;if(!r){r=zH(e.sql);let n,s=r.ast.statements[0];if(s instanceof wo.yy.Insert?n=s.into.databaseid:s instanceof wo.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof wo.yy.Update||s instanceof wo.yy.Delete?n=s.table.databaseid:Yh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof wo.yy.Select)&&iie.isEmptyOrZeroLength(n))return t("No schema specified",null)}JH(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(lie,"evaluateSQL");function jH(e,t){let r;try{r=nie.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(jH,"checkASTPermissions");function zH(e){let t=new nO;if(!e)throw tO(new Error,"The 'sql' parameter is missing from the request body",rO.BAD_REQUEST);try{let r=e.trim(),n=wo.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
22
+ `);throw n[1]?tO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,rO.BAD_REQUEST):tO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",rO.BAD_REQUEST)}return t}a(zH,"convertSQLToAST");function JH(e,t,r){try{let n=uie;if(!e.bypass_auth&&!t.permissions_checked){let i=jH(e,t);if(i&&i.length>0)return r(aie,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=Zse,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=_ie;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=tie;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=rie;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(JH,"processAST");function uie(e,t){Yh.info(e),t("unknown sql statement")}a(uie,"nullFunction");function _ie({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=die(i,e.values)}catch(o){return r(o)}Xse(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){Yh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(_ie,"convertInsert");function die(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]]=wo.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw Yh.error(r),new Error(cie)}}a(die,"createDataObjects")});var sO=R((Tbe,eG)=>{"use strict";var{S3:fie,GetObjectCommand:Eie}=require("@aws-sdk/client-s3");eG.exports={getFileStreamFromS3:hie,getS3AuthObj:ZH};async function hie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ZH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Eie(r))).Body}a(hie,"getFileStreamFromS3");function ZH(e,t,r){return new fie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ZH,"getS3AuthObj")});var Wh=R((Rbe,lG)=>{"use strict";var oO=ur(),pie=Kh(),mie=sO(),{AsyncParser:Sie,Transform:Tie}=require("json2csv"),k_=require("stream"),Sn=Y(),iO=require("fs-extra"),gie=require("path"),$n=k(),{promisify:nG}=require("util"),F_=Y(),{handleHDBError:Dt,hdb_errors:Rie}=ie(),{HDB_ERROR_MSGS:Kr,HTTP_STATUS_CODES:Lt}=Rie,{streamAsJSON:Aie}=(CS(),ae(xI)),{Upload:Oie}=require("@aws-sdk/lib-storage"),tG=["search_by_value","search_by_hash","sql","search_by_conditions"],rG=["json","csv"],sG="json",iG="csv",bie="Successfully exported JSON locally.",Nie="Successfully exported CSV locally.",yie=1e3,Iie=oO.searchByHash,wie=oO.searchByValue,Cie=nG(pie.evaluateSQL),Die=nG(k_.finished);lG.exports={export_to_s3:Uie,export_local:Lie,toCsvStream:oG};async function Lie(e){$n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=aG(e);if(!Sn.isEmpty(t))throw $n.error(t),Dt(new Error,t,Lt.BAD_REQUEST,void 0,void 0,!0);if(Sn.isEmpty(e.path))throw $n.error(Kr.MISSING_VALUE("path")),Dt(new Error,Kr.MISSING_VALUE("path"),Lt.BAD_REQUEST,void 0,void 0,!0);let r=(Sn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(gie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Sn.buildFolderPath(e.path,r);await Pie(e.path);let s=await cG(e);return await Mie(n,e.format,s)}a(Lie,"export_local");async function Pie(e){if($n.trace("in confirmPath"),Sn.isEmptyOrZeroLength(e))throw Dt(new Error,`Invalid path: ${e}`,Lt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await iO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,$n.error(n),Dt(new Error,n,Lt.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw $n.error(r),Dt(new Error,r,Lt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Pie,"confirmPath");async function Mie(e,t,r){if($n.trace("in saveToLocal"),F_.isEmptyOrZeroLength(e))throw Dt(new Error,Kr.INVALID_VALUE("file_path"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmptyOrZeroLength(t))throw Dt(new Error,Kr.INVALID_VALUE("Source format"),Lt.BAD_REQUEST,void 0,void 0,!0);if(F_.isEmpty(r))throw Dt(new Error,Kr.NOT_FOUND("Data"),Lt.BAD_REQUEST,void 0,void 0,!0);if(t===sG){let n=iO.createWriteStream(e);return Aie(r).pipe(n),await Die(n),{message:bie,path:e}}else if(t===iG){let n=iO.createWriteStream(e),s=k_.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(u=>({label:u,value:u})));let c={objectMode:!0};return await new Sie(i,c).fromInput(s).toOutput(n).promise(!1),{message:Nie,path:e}}throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST)}a(Mie,"saveToLocal");async function Uie(e){if(!e.s3||Object.keys(e.s3).length===0)throw Dt(new Error,Kr.MISSING_VALUE("S3 object"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Dt(new Error,Kr.MISSING_VALUE("aws_access_key_id"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Dt(new Error,Kr.MISSING_VALUE("aws_secret_access_key"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.bucket))throw Dt(new Error,Kr.MISSING_VALUE("bucket"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.key))throw Dt(new Error,Kr.MISSING_VALUE("key"),Lt.BAD_REQUEST);if(Sn.isEmptyOrZeroLength(e.s3.region))throw Dt(new Error,Kr.MISSING_VALUE("region"),Lt.BAD_REQUEST);let t=aG(e);if(!Sn.isEmpty(t))throw Dt(new Error,t,Lt.BAD_REQUEST);$n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await cG(e)}catch(l){throw $n.error(l),l}let n,s=await mie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new k_.PassThrough;if(e.format===iG){i=e.s3.key+".csv";let l=oG(r,r.getColumns?.());l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===sG){i=e.s3.key+".json";let l=new k_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,E]of r.entries()){let f=d===_-1?JSON.stringify(E):JSON.stringify(E)+",";u+=f,d!==0&&d%yie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw Dt(new Error,Kr.INVALID_VALUE("format"),Lt.BAD_REQUEST);return new Oie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Uie,"export_to_s3");function oG(e,t){let r=k_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new Tie(n,s);return r.pipe(i)}a(oG,"toCsvStream");function aG(e){if($n.trace("in exportCoreValidation"),Sn.isEmpty(e.format))return"format missing";if(rG.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${rG.join(", ")}`;let t=e.search_operation.operation;if(Sn.isEmpty(t))return"search_operation.operation missing";if(tG.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${tG.join(", ")}`}a(aG,"exportCoreValidation");async function cG(e){$n.trace("in getRecords");let t,r;if(F_.isEmpty(e.search_operation)||F_.isEmptyOrZeroLength(e.search_operation.operation))throw Dt(new Error,Kr.INVALID_VALUE("Search operation"),Lt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=wie;break;case"search_by_hash":t=Iie;break;case"search_by_conditions":t=oO.searchByConditions;break;case"sql":t=Cie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,$n.error(r),Dt(new Error,r,Lt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(cG,"getRecords")});var SG={};$e(SG,{contentTypes:()=>uO,findBestSerializer:()=>zh,getDeserializer:()=>Ba,registerContentHandlers:()=>_O,serialize:()=>Jh,serializeMessage:()=>Pa});function vie(e){try{return e?.[0]===123?lO(e):e}catch{return e}}function _O(e){e.register(Hie,{serializers:[{regex:/^application\/json$/,serializer:iu},{regex:/^application\/cbor$/,serializer:function(t){return new va.EncoderStream(V_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?jh.Readable.from((0,Vs.encodeIter)(t,V_)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Qh.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Vs.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,va.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function zh(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]=l.split(/\s*;\s*/),d=1,E={q:1};for(let h of u){let m=h.indexOf("=");E[h.substring(0,m)]=h.substring(m+1)}d=+E.q;let f=Jt.get(_);if(f){let h=(f.q||1)*d;h>s&&(n=f,i=f.type||_,s=h,o=E)}}if(!n){if(r)throw new fG.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Jt.keys()).join(", "),406);n=Jt.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Jh(e,t,r){let n=_G&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=zh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Li.createBrotliCompress)({params:{[Li.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Li.constants.BROTLI_MODE_TEXT:Li.constants.BROTLI_MODE_GENERIC,[Li.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>_G?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Li.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function Pa(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return $_(e);let r=t.serialize;if(r)return r(e);let n=zh(t);return r=t.serialize=n.serializer.serialize,r(e)}function Gie(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 Ba(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=Jt.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=Jt.get(e)?.deserialize||dG(e,n);return o=>Gie(o).then(i)}return e&&Jt.get(e)?.deserialize||dG(e,n)}function dG(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return n=>({contentType:e,data:n.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return lO(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function xie(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 Qh,Vs,va,Li,fG,jh,EG,aO,cO,hG,pG,$_,lO,V_,Jt,uO,uG,mG,Bie,Hie,_G,jc=be(()=>{CS();Qh=G(Wh()),Vs=require("msgpackr"),va=require("cbor-x"),Li=require("zlib"),fG=G(ie()),jh=require("stream");yr();EG=require("../index"),aO=G(J()),cO=G(L()),hG=G(require("yaml")),pG=aO.default.get(cO.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,$_=pG?zo:JSON.stringify,lO=pG?wS:JSON.parse,V_={useRecords:!1,useToJSON:!0},Jt=new Map,uO=Jt;dt.contentTypes=uO;(0,EG._assignPackageExport)("contentTypes",uO);Jt.set("application/json",{serializeStream:iu,serialize:$_,deserialize:lO,q:.8});uG=new va.Encoder(V_);Jt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new va.EncoderStream(V_).end(e)},serialize:uG.encode,deserialize:uG.decode,q:1});Jt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?jh.Readable.from((0,Vs.encodeIter)(e,V_)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Jt.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,Qh.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,Qh.toCsvStream)(e,e?.getColumns?.())},q:.1});Jt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Jt.set("text/yaml",{serialize(e){return hG.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Jt.set("text/event-stream",{serializeStream:function(e){return jh.Readable.from(xie(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
23
+ `),e.data){let r=e.data;typeof r=="object"&&(r=$_(r)),t+="data: "+r+`
24
24
  `}return e.id&&(t+="id: "+e.id+`
25
25
  `),e.retry&&(t+="retry: "+e.retry+`
26
26
  `),t+`
27
- `}else return typeof e=="object"?`data: ${V_(e)}
27
+ `}else return typeof e=="object"?`data: ${$_(e)}
28
28
 
29
29
  `:`data: ${e}
30
30
 
31
- `},compressible:!1,q:.8});Jt.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()}});mG={type:"application/json",serializeStream:iu,serialize:V_,deserialize:vie,q:.5};Jt.set("*/*",mG);Jt.set("",mG);a(vie,"tryJSONParse");a(_O,"registerContentHandlers");Bie=require("fastify-plugin"),Hie=Bie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=zh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(zh,"findBestSerializer");_G=aO.default.get(cO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Jh,"serialize");a(Pa,"serializeMessage");a(Gie,"streamToBuffer");a(Ba,"getDeserializer");a(dG,"deserializerUnknownType");a(xie,"transformIterable")});function EO(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let f=1;f<e.length;f++){let h=e[f],m=_(h);d=d.concat(m)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(l),E=u(e.slice(1),!0,l.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?EO(d.conditions,d.operator,r,n,s,i,o,c):sl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,E,f){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",b=u(h.conditions,!T,f);return T?(N,U)=>b.some(v=>v(N,U)):(N,U)=>b.every(v=>v(N,U))}let S=(h.attribute||h[0])===r.primaryKey,g=W_(h,r,i,c,S,f);return E&&m<d.length-1&&f&&(f=Qie(r.primaryStore,h.estimated_count,f)),g}).filter(Boolean)}a(u,"mapConditionsToFilters")}function sl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],b=Mi(n.attributes,T);if(b.relationship){if(o.length<2)throw new Sn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let N=b.definition?.tableClass||b.elements?.definition?.tableClass,U=new Map,v=sl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,N,s,U);if(b.relationship.to){i[o[0]]=U;let q=!!Mi(N.attributes,b.relationship.to)?.elements;v=$ie(v,b,N.primaryStore,q,U)}if(b.relationship.from){let q=a(M=>sl({attribute:b.relationship.from,value:M},t,r,n,s,U),"searchEntry");b.elements?(i[o[0]]=U,v=Yie(v,b,N.primaryStore,U,q)):v=v.flatMap(q)}return v}else if(o.length===1)o=o[0];else throw new Sn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,E;c instanceof Date&&(c=c.getTime());let f;switch(hO[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=Ys.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Sn.ClientError(`Unknown query comparator "${l}"`)}let h,m=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>$n.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,$n.MAX_SEARCH_KEY_LENGTH)+$n.OVERFLOW_MARKER,E=!1,h=W_(e,n,null,i,m)),typeof u=="string"&&u.length>$n.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,$n.MAX_SEARCH_KEY_LENGTH)+$n.OVERFLOW_MARKER,d=!0,h=h??W_(e,n,null,i,m)),r){let T=_;_=u,u=T,T=!E,E=!d,d=T}let S=m?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Sn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Sn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Sn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Sn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??W_(e,n,null,i,m),!h)throw new Sn.ClientError(`Unknown search operator ${e.comparator}`)}let g={start:_,end:u,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:m,transaction:t,reverse:r};if(m){let T=S.getRange(g).map(h?function({key:b,value:N}){return this.isSync?N&&h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(N&&h(N)?b:Co.SKIP)}catch(q){v(q)}}))}:b=>b.value==null?Co.SKIP:b);return T.hasEntries=!0,T}else return S?S.getRange(g).map(h?function({key:T,value:b}){let N;return typeof T=="string"&&T.length>$n.MAX_SEARCH_KEY_LENGTH?N=n.primaryStore.get(b):N={[o]:T},this.isSync?h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(h(N)?b:Co.SKIP)}catch(q){v(q)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:b}){return this.isSync?b&&h(b)?T:Co.SKIP:new Promise((N,U)=>setImmediate(()=>{try{N(b&&h(b)?T:Co.SKIP)}catch(v){U(v)}}))})}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;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 $ie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let E=u;Array.isArray(u)&&(E=Es(u),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),u!==E&&(f.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),E=d?.[l];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],u);else _(E,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function Yie(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 _=Es(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(Es(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(E=>!E(d)))continue}_.set(Es(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function W_(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=Mi(t.attributes,u),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[u],h=W_({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},E,r,f?.[u]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let m=t.propertyResolvers?.[u],S,g=a((T,b)=>{let N,U;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let q of h.idFilter.idSet)e={attribute:m.from,value:q};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(g.idFilter=S.idFilter),v}U=m(T,r,b),N=U?.value}else N=T[u];return N?Array.isArray(N)?N.some(h):h(N,U):!1},"recordFilter");return g}}switch(l instanceof Date&&(l=l.getTime()),hO[o]||o){case $n.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,E=l.length;d<E;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,Ys.compareKeys)(u,l[0])>=0&&(0,Ys.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Ys.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Ys.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Ys.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Ys.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Ys.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Sn.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,E,f){let h;E=E&&!s&&t?.indices[u]&&i>3,E&&(e.estimated_count==null&&Zh(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let m=0,S=3;function g(T){let b=T[u],N;if(typeof b!="object"||!b||f?N=d(b):Array.isArray(b)?N=b.some(d):b instanceof Date&&(N=d(b.getTime())),E&&(S++,!N&&!g.idFilter&&++m/S*(i-S)>h)){let U=sl(e,r.transaction.getReadTxn(),!1,t).map(Es),v=new Set(U);g.idFilter=q=>v.has(Es(q)),g.idFilter.idSet=v}return N}return a(g,"recordFilter"),s&&(g.idFilter=d),g}a(_,"attributeComparator")}function Zh(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/Pi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=hO[n]||n,n===$n.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=Zh(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*Pi(e.indices[i.relationship.from])/(Pi(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=Pi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=kie*Pi(e.primaryStore)+1:n==="between"?r.estimated_count=Fie*Pi(e.primaryStore)+1:n==="sort"?r.estimated_count=Pi(e.primaryStore)+1:r.estimated_count=qie*Pi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function ep(e){if(e)if(Do=e,rl.lastIndex=0,Kie.test(e))try{let t=Y_(new nl,"");if(Wr!==Do.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 ${Wr} in '${Do}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Y_(e,t){let r=rl,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Do);){Wr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=dO}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=K_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=Vie[d],l=fO[i]?dO:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=K_(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&TG(h,u),Xh(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(K_(u)),s=void 0;break;case"(":rl.lastIndex=Wr;let f=Y_(u?[]:new nl,")");switch(u){case"":Xh(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=gG(f);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Do[Wr]===","?r.lastIndex=++Wr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");rl.lastIndex=Wr,E=Y_([],"}"),E.name=u,e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case"[":rl.lastIndex=Wr,u?(E=Y_(new nl,"]"),E.name=u):E=Y_(e.conditions?new nl:[],"]"),e.conditions?(Xh(e,_),e.conditions.push(E),s=null):e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&TG(h,u),Xh(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(K_(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Wie:rl,r.lastIndex=Wr),Wr===Do.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Xh(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 K_(e){return e.indexOf(".")>-1?e.split(".").map(K_):decodeURIComponent(e)}function dO(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new il(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=dO(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Sn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function TG(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Sn.ClientError("wildcard can only be used at the end of a string")}function gG(e){let t=RG(e[0]);return e.length>1&&(t.next=gG(e.slice(1))),t}function RG(e){if(Array.isArray(e)){let t=RG(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 Es(e){return Array.isArray(e)?e.join("\0"):e}function Pi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Qie(e,t,r){return t*r/Pi(e)}var Sn,$n,Ys,Co,qie,Fie,kie,Vie,fO,hO,Kie,rl,Wie,Wr,Do,nl,tp=be(()=>{Sn=G(ie()),$n=G(_t()),Ys=require("ordered-binary"),Co=require("lmdb");Mn();qie=.3,Fie=.1,kie=.05,Vie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},fO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EO,"executeConditions");a(sl,"searchByIndex");a(Mi,"findAttribute");a($ie,"joinTo");a(Yie,"joinFrom");hO={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(W_,"filterByType");a(Zh,"estimateCondition");Kie=/[()[\]|!<>.]|(=\w*=)/,rl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Wie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(ep,"parseQuery");a(Y_,"parseBlock");a(Xh,"assignOperator");a(K_,"decodeProperty");a(dO,"typedDecoding");a(TG,"wildcardDecoding");a(gG,"toSortObject");a(RG,"toSortEntry");nl=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(Es,"flattenKey");a(Pi,"estimatedEntryCount");a(Qie,"intersectionEstimate")});function yG(e){let t={openapi:jie,info:{title:"HarperDB HTTP REST interface",version:(0,NG.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:b,name:N,elements:U,relationship:v,definition:q}of o){if(v)b==="array"?_[N]={type:"array",items:{$ref:Lo+U.type}}:_[N]={$ref:Lo+b};else{let M=q??U?.definition;if(M){if(!t.components.schemas[M.type]){let W={};M.properties.forEach(z=>{W[z.name]=new TO(pO[z.type],z.type)}),t.components.schemas[M.type]=new bG(W)}b==="array"?_[N]={type:"array",items:{$ref:Lo+M.type}}:_[N]={$ref:Lo+M.type}}else b==="array"?U.type==="Any"||U.type=="ID"?_[N]={type:"array",items:{format:U.type}}:_[N]={type:"array",items:new TO(pO[U.type],U.type)}:b==="Any"||b=="ID"?_[N]={format:b}:_[N]=new TO(pO[b],b)}u.push(new gO(N,"query",_[N]))}let d=Object.keys(_),E=new gO(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new gO("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new bG(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",g=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new zie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new mO(u,r,{200:new SO({$ref:Lo+i})},"search for records by the specified property name and value pairs")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new OG(u,r,"delete all the records that match the provided query",{204:new AG})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new mO([E],r,{200:new SO({$ref:Lo+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Jie([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new OG([E],r,"delete a record with the given primary key",{204:new AG})),S&&f.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new mO([E,f],r,{200:new SO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function zie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Lo+e}}}},this.security=t,this.responses={200:{description:RO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function mO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function SO(e){this.description=RO,this.content={"application/json":{schema:e}}}function AG(){this.description="successfully processed request, no content returned to client"}function Jie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Lo+r}}}},this.responses={200:{description:RO}}}function OG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function bG(e){this.type="object",this.properties=e}function TO(e,t){this.type=e,this.format=t}function gO(e,t,r){this.name=e,this.in=t,this.schema=r}var NG,jie,pO,Lo,RO,IG=be(()=>{NG=G(Ri()),jie="3.0.3",pO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Lo="#/components/schemas/",RO="successful operation";a(yG,"generateJsonApi");a(zie,"Post");a(mO,"Get");a(SO,"Response200");a(AG,"Response204");a(Jie,"Put");a(OG,"Delete");a(bG,"ResourceSchema");a(TO,"Type");a(gO,"Parameter")});var np={};Ve(np,{start:()=>eoe});async function Zie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&ep(e);let s=new yo;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==wG){let h=rp.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await it(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ba(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new ol.ClientError(h,400)}if(e.authorize=!0,i===wG&&n==="GET"){if(e?.user?.role?.permission?.super_user)return yG(rp);throw new ol.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new ol.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ol.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,AO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Xie[0]=d;let h=String.fromCharCode(34,(sr[0]&63)+62,(sr[0]>>6)+(sr[1]<<2&63)+62,(sr[1]>>4)+(sr[2]<<4&63)+62,(sr[2]>>2)+62,(sr[3]&63)+62,(sr[3]>>6)+(sr[4]<<2&63)+62,(sr[4]>>4)+(sr[5]<<4&63)+62,(sr[5]>>2)+62,(sr[6]&63)+62,(sr[6]>>6)+(sr[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),AO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:u,headers:s,body:void 0},f=_?.wasLoadedFromSource?.();return f!==void 0&&(E.wasCacheMiss=f,!f&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(E.body=Jh(_,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Ha.warn(i):Ha.info(i):Ha.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Jh(i.contentType?i:i.toString(),e,o),o}}function eoe(e){AO=e,!CG&&(CG=!0,rp=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Zie(t,r)},e),e.server.ws(async(t,r,n)=>{Q_++;let s=new ts;DG||(DG=!0,Yu(l=>{Q_>0&&l.push({metric:"ws-connections",connections:Q_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ha.warn(l)});let o;t.on("message",a(function(_){o||(o=Ba(r.requestedContentType??r.headers.asObject["content-type"],!1));let u=o(_);s.push(u)},"message"));let c;t.on("close",()=>{Q_--,fn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),_=rp.getMatch(l);if(fn(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,vr(h=>({count:h.count,total:Q_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await it(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Pa(f.value,r);t.send(h),vr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){t.close(toe[l.statusCode]||1011,l.toString()),t.close("login failed")}t.close()},e))}var Ha,ol,sr,Xie,AO,wG,CG,rp,DG,Q_,toe,LG=be(()=>{jc();Ti();Ha=G(k()),ol=G(ie());tp();nu();ha();w_();IG();sr=new Uint8Array(8),Xie=new Float64Array(sr.buffer,0,1),AO={},wG="openapi";a(Zie,"http");Q_=0;a(eoe,"start");toe={401:3e3,403:3003}});var OO=R((qbe,MG)=>{var{recordAction:sp,recordActionBinary:PG}=(Ti(),ae(Ku)),roe=require("fastify-plugin"),noe=200;MG.exports=roe(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,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),sp(o,"duration",_,d,u),PG(s.raw.statusCode<400,"success",_,d,u),PG(1,"response_"+s.raw.statusCode,_,d,u);let E=noe;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{sp(performance.now()-c,"transfer",_,d,u),sp(E,"bytes-sent",_,d,u)})):(E+=i?.length||0,sp(E,"bytes-sent",_,d,u));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),m=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${m}`:m)}),r()},{name:"hdb-request-time"})});var CO=R((Vbe,HG)=>{var cp=require("clone"),lp=nt(),soe=Y(),op=L(),Fbe=k(),bO=require("fs"),yO=require("joi"),{string:ap}=yO.types(),{hdb_errors:ioe,handleHDBError:ip}=ie(),{HDB_ERROR_MSGS:kbe,HTTP_STATUS_CODES:NO}=ioe,{common_validators:al}=Ls(),UG=" is required",ooe=["insert","update","upsert"],IO={database:{presence:!1,format:al.schema_format,length:al.schema_length},schema:{presence:!1,format:al.schema_format,length:al.schema_length},table:{presence:!0,format:al.schema_format,length:al.schema_length},action:{inclusion:{within:ooe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},aoe={schema:ap.required(),table:ap.required(),action:ap.valid("insert","update","upsert")},{AWS_ACCESS_KEY:coe,AWS_SECRET:loe,AWS_BUCKET:uoe,AWS_FILE_KEY:_oe,REGION:doe}=op.S3_BUCKET_AUTH_KEYS,foe={s3:{presence:!0},[`s3.${coe}`]:{presence:!0,type:"String"},[`s3.${loe}`]:{presence:!0,type:"String"},[`s3.${uoe}`]:{presence:!0,type:"String"},[`s3.${_oe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${doe}`]:{presence:!0,type:"String"}},vG=cp(IO);vG.data.presence={message:UG};var BG=cp(IO);BG.file_path.presence={message:UG};var Eoe=Object.assign(cp(IO),foe),wO=cp(aoe);wO.csv_url=ap.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();wO.passthrough_headers=yO.object();function hoe(e){let t=lp.validateObject(e,vG);return up(e,t)}a(hoe,"dataObject");function poe(e){let t=lp.validateBySchema(e,yO.object(wO));return up(e,t)}a(poe,"urlObject");function moe(e){let t=lp.validateObject(e,BG);return up(e,t)}a(moe,"fileObject");function Soe(e){let t=lp.validateObject(e,Eoe);return up(e,t)}a(Soe,"s3FileObject");function up(e,t){if(!t){let r=soe.checkGlobalSchemaTable(e.schema,e.table);if(r)return ip(new Error,r,NO.BAD_REQUEST);if(e.operation===op.OPERATIONS_ENUM.CSV_FILE_LOAD)try{bO.accessSync(e.file_path,bO.constants.R_OK|bO.constants.F_OK)}catch(n){return n.code===op.NODE_ERROR_CODES.ENOENT?ip(n,`No such file or directory ${n.path}`,NO.BAD_REQUEST):n.code===op.NODE_ERROR_CODES.EACCES?ip(n,`Permission denied ${n.path}`,NO.BAD_REQUEST):ip(n)}}return t}a(up,"postValidateChecks");HG.exports={dataObject:hoe,urlObject:poe,fileObject:moe,s3FileObject:Soe}});var DO=R((Ybe,GG)=>{"use strict";var j_=k(),_p=L();async function Toe(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===_p.OPERATIONS_ENUM.INSERT||t.operation===_p.OPERATIONS_ENUM.UPDATE||t.operation===_p.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===_p.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(j_.info(i.message),i):i.http_resp_msg?(j_.error(`Error calling operation: ${e.name}`),j_.error(i.http_resp_msg),i):(j_.error(`Error calling operation: ${e.name}`),j_.error(i),i)}}a(Toe,"callOperationFunctionAsAwait");GG.exports={callOperationFunctionAsAwait:Toe}});var qG=R((Wbe,xG)=>{"use strict";var LO=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}},PO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};xG.exports={BulkLoadFileObject:LO,BulkLoadDataObject:PO}});var kG=R((jbe,FG)=>{"use strict";var MO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};FG.exports=MO});var xO=R((tNe,ix)=>{"use strict";var dp=Cr(),Ep=CO(),goe=require("needle"),hs=L(),Jbe=Ze(),cl=Y(),{handleHDBError:ht,hdb_errors:JG}=ie(),{HTTP_STATUS_CODES:ir,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:xa}=JG,ll=k(),UO=require("papaparse");cl.promisifyPapaParse();var ps=require("fs-extra"),Roe=require("path"),{chain:VG}=require("stream-chain"),$G=require("stream-json/streamers/StreamArray"),YG=require("stream-json/utils/Batch"),KG=require("stream-chain/utils/comp"),{finished:WG}=require("stream"),Aoe=X(),XG=DO(),Ooe=sO(),{BulkLoadFileObject:BO,BulkLoadDataObject:boe}=qG(),HO=QA(),{verifyBulkLoadAttributePerms:ZG}=$h(),Xbe=kG(),Zbe=gt(),eNe=fi(),{databases:Noe}=(Re(),ae($e)),{coerceType:yoe}=(hp(),ae(qO)),QG="No records parsed from csv file.",Ga=`${Aoe.get("HDB_ROOT")}/tmp`,{schema_regex:Ioe}=Ls(),jG=1024*1024*2,zG=5e3,woe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ix.exports={csvDataLoad:Coe,csvURLLoad:Doe,csvFileLoad:Loe,importFromS3:Poe};async function Coe(e,t){let r=Ep.dataObject(e);if(r)throw ht(r,r.message,ir.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=rx(e.schema,e.table),i=UO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:vO.bind(null,s),dynamicTyping:!1}),o=new HO;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&ZG(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 ht(new Error,c,ir.BAD_REQUEST,void 0,void 0,!0);let l=new boe(e.action,e.schema,e.table,i.data);return n=await XG.callOperationFunctionAsAwait(nx,l,null),n.message===QG?QG:sx(n.records,n.number_written)}catch(s){throw qa(s)}}a(Coe,"csvDataLoad");async function Doe(e){let t=Ep.urlObject(e);if(t)throw ht(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ga}/${r}`;try{await Moe(e,r)}catch(s){throw ll.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ht(s,xa(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new BO(this.job_operation_function.name,e.action,e.schema,e.table,n,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await GO(s);return await fp(n),i}catch(s){throw await fp(n),qa(s)}}a(Doe,"csvURLLoad");async function Loe(e){let t=Ep.fileObject(e);if(t)throw ht(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);let r=new BO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await GO(r)}catch(n){throw qa(n)}}a(Loe,"csvFileLoad");async function Poe(e){let t=Ep.s3FileObject(e);if(t)throw ht(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Roe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ga}/${s}`;let i=new BO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Uoe(s,e);let o=await GO(i);return await fp(r),o}catch(n){throw await fp(r),qa(n)}}a(Poe,"importFromS3");async function Moe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await goe("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 ht(n,s,n.statusCode,hs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Boe(r,e.csv_url),await voe(t,r.raw)}a(Moe,"downloadCSVFile");async function Uoe(e,t){try{let r=`${Ga}/${e}`;await ps.mkdirp(Ga),await ps.writeFile(`${Ga}/${e}`,"",{flag:"a+"});let n=await ps.createWriteStream(r),s=await Ooe.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(){ll.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ll.error(qt.S3_DOWNLOAD_ERR+" - "+r),ht(r,xa(qt.S3_DOWNLOAD_ERR))}}a(Uoe,"downloadFileFromS3");async function voe(e,t){try{await ps.mkdirp(Ga),await ps.writeFile(`${Ga}/${e}`,t)}catch(r){throw ll.error(qt.WRITE_TEMP_FILE_ERR),ht(r,xa(qt.DEFAULT_BULK_LOAD_ERR))}}a(voe,"writeFileToTempFolder");async function fp(e){if(e)try{await ps.access(e),await ps.unlink(e)}catch{ll.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(fp,"deleteTempFile");function Boe(e,t){if(e.statusCode!==JG.HTTP_STATUS_CODES.OK)throw ht(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,ir.BAD_REQUEST);if(!woe[e.headers["content-type"]])throw ht(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,ir.BAD_REQUEST);if(!e.raw)throw ht(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,ir.BAD_REQUEST)}a(Boe,"validateURLResponse");async function GO(e){try{let t;switch(e.file_type){case hs.VALID_S3_FILE_TYPES.CSV:t=await Hoe(e);break;case hs.VALID_S3_FILE_TYPES.JSON:t=await Goe(e);break;default:throw ht(new Error,qt.DEFAULT_BULK_LOAD_ERR,ir.BAD_REQUEST,hs.LOG_LEVELS.ERROR,qt.INVALID_FILE_EXT_ERR(e))}return sx(t.records,t.number_written)}catch(t){throw qa(t)}}a(GO,"fileLoad");async function ex(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 dp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&ZG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ht(c);r(l)}}a(ex,"validateChunk");async function tx(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;cl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!cl.isEmpty(c)&&!cl.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await XG.callOperationFunctionAsAwait(nx,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ht(c,xa(qt.INSERT_CSV_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(tx,"insertChunk");async function Hoe(e){let t={records:0,number_written:0},r=rx(e.schema,e.table);try{let n=new HO,s=ps.createReadStream(e.file_path,{highWaterMark:jG});s.setEncoding("utf8"),await UO.parsePromise(s,ex.bind(null,e,n),vO.bind(null,r));let i=n.getPermsResponse();if(i)throw ht(new Error,i,ir.BAD_REQUEST);return s=ps.createReadStream(e.file_path,{highWaterMark:jG}),s.setEncoding("utf8"),await UO.parsePromise(s,tx.bind(null,e,t),vO.bind(null,r)),s.destroy(),t}catch(n){throw ht(n,xa(qt.PAPA_PARSE_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(Hoe,"callPapaParse");function rx(e,t){let r=Noe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>yoe(i,s));return n}a(rx,"createTransformMap");function vO(e,t,r){let n=e.get(r);return n?n(t):cl.autoCast(t)}a(vO,"typeFunction");async function Goe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new HO,s=VG([ps.createReadStream(e.file_path,{encoding:"utf-8"}),$G.withParser(),c=>c.value,new YG({batchSize:zG}),KG(async c=>{await ex(e,n,r,c)})]);await new Promise((c,l)=>{WG(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ht(new Error,i,ir.BAD_REQUEST);let o=VG([ps.createReadStream(e.file_path,{encoding:"utf-8"}),$G.withParser(),c=>c.value,new YG({batchSize:zG}),KG(async c=>{await tx(e,t,r,c)})]);return await new Promise((c,l)=>{WG(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ht(n,xa(qt.INSERT_JSON_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(Goe,"insertJson");async function nx(e){let t={};try{e.data&&e.data.length>0&&xoe(e.data[0])?t=await qoe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ll.info(t.message))}catch(r){throw qa(r)}return t}a(nx,"callBulkFileLoad");function xoe(e){let t=Object.keys(e);for(let r of t)if(!Ioe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(xoe,"validateColumnNames");async function qoe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=dp.insert;break;case"update":i=dp.update;break;case"upsert":i=dp.upsert;break;default:throw ht(new Error,qt.INVALID_ACTION_PARAM_ERR(n),ir.BAD_REQUEST,hs.LOG_LEVELS.ERROR,qt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=cl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw qa(o)}}a(qoe,"bulkFileLoad");function sx(e,t){return`successfully loaded ${t} of ${e} records`}a(sx,"buildResponseMsg");function qa(e){return ht(e,xa(qt.DEFAULT_BULK_LOAD_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(qa,"buildTopLevelErrMsg")});var ax=R((nNe,ox)=>{"use strict";var FO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ox.exports=FO});var ux=R((iNe,lx)=>{"use strict";var Foe=L(),cx=require("moment"),koe=require("uuid").v4,kO=class{static{a(this,"JobObject")}constructor(){this.id=koe(),this.type=void 0,this.start_datetime=cx().valueOf(),this.created_datetime=cx().valueOf(),this.end_datetime=void 0,this.status=Foe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};lx.exports=kO});var VO=R((aNe,Sx)=>{"use strict";var Voe=require("uuid").v4,hx=Cr(),px=ur(),$oe=as(),Yoe=Nc(),Koe=ax(),et=L(),Woe=ux(),Qoe=xE(),Yn=k(),joe=tu(),ul=Y(),{promisify:zoe}=require("util"),Fa=require("moment"),Joe=Kh(),pp=CO(),_x=ST(),{deleteTransactionLogsBeforeValidator:Xoe}=VA(),{handleHDBError:dx,hdb_errors:Zoe}=ie(),{HTTP_STATUS_CODES:fx}=Zoe,Ex=px.searchByValue,eae=px.searchByHash,tae=hx.insert,rae=zoe(Joe.evaluateSQL),nae=hx.update;Sx.exports={addJob:oae,updateJob:cae,handleGetJob:sae,handleGetJobsByStartDate:iae,getJobById:mx};async function sae(e){try{let t=await mx(e.id);return ul.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Yn.error("There was an error getting job",t),new Error(r)}}a(sae,"handleGetJob");async function iae(e){try{let t=await aae(e);if(Yn.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=Fa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Fa(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 Yn.error(r),new Error(r)}}a(iae,"handleGetJobsByStartDate");async function oae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ul.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Yn.info(u),t.error=u,t}if(!et.JOB_TYPE_ENUM[e.operation])return Yn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:n=pp.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:n=pp.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:n=pp.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:n=pp.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=_x(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=_x(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Xoe(e);break;case et.OPERATIONS_ENUM.RESTART_SERVICE:if(et.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw dx(new Error,"Invalid service",fx.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw dx(n,n.message,fx.BAD_REQUEST,void 0,void 0,!0);let s=new Woe;s.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new $oe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Ex(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=Voe();try{o=await Ex(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Yn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new joe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await tae(l)}catch(u){return Yn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,Yn.trace(u)}return t}a(oae,"addJob");async function aae(e){let t=Fa(e.from_date,Fa.ISO_8601),r=Fa(e.to_date,Fa.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 Koe(n,e.hdb_user);try{return await rae(s)}catch(i){throw Yn.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(aae,"getJobsInDateRange");async function mx(e){if(ul.isEmptyOrZeroLength(e))return ul.errorizeMessage("Invalid job ID specified.");let t=new Yoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await eae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Yn.error(n),ul.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(mx,"getJobById");async function cae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ul.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Fa().valueOf());let t=new Qoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await nae(t),r}a(cae,"updateJob")});var yx=R((lNe,Nx)=>{"use strict";var Tx=Y(),Ft=L(),lae=require("moment"),mp=xO(),z_=k(),gx=VO(),Rx=Wh(),Ax=ia(),Ox=rt(),uae=qh(),_ae=bo(),{parentPort:dae,isMainThread:bx}=require("worker_threads"),{onMessageByType:fae}=rt(),$O=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Eae(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(Tx.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Tx.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ft.JOB_TYPE_ENUM.csv_file_load:await Ks(e,mp.csvFileLoad);break;case Ft.JOB_TYPE_ENUM.csv_url_load:await Ks(e,mp.csvURLLoad);break;case Ft.JOB_TYPE_ENUM.csv_data_load:await Ks(e,mp.csvDataLoad);break;case Ft.JOB_TYPE_ENUM.import_from_s3:await Ks(e,mp.importFromS3);break;case Ft.JOB_TYPE_ENUM.empty_trash:break;case Ft.JOB_TYPE_ENUM.export_local:await Ks(e,Rx.export_local);break;case Ft.JOB_TYPE_ENUM.export_to_s3:await Ks(e,Rx.export_to_s3);break;case Ft.JOB_TYPE_ENUM.delete_files_before:case Ft.JOB_TYPE_ENUM.delete_records_before:await Ks(e,Ax.deleteFilesBefore);break;case Ft.JOB_TYPE_ENUM.delete_audit_logs_before:await Ks(e,Ax.deleteAuditLogsBefore);break;case Ft.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ks(e,uae.deleteTransactionLogsBefore);break;case Ft.JOB_TYPE_ENUM.restart_service:return await Ks(e,_ae.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Eae,"parseMessage");async function Ks(e,t){try{e.job.status=Ft.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=lae().valueOf(),await gx.updateJob(e.job),await hae(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):z_.error(`There was an error running ${t.name} job with id ${e.job.id}`),z_.error(n),e.job.message=n,e.job.status=Ft.JOB_STATUS_ENUM.ERROR;try{await gx.updateJob(e.job)}catch(s){throw z_.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ks,"runJob");async function hae(e){z_.trace("launching job thread:",e),bx?Ox.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):dae.postMessage({type:Ft.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(hae,"launchJobThread");bx&&fae(Ft.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Ox.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){z_.error(r)}});Nx.exports={parseMessage:Eae,RunnerMessage:$O}});var wx=R((_Ne,Ix)=>{"use strict";var YO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Ix.exports=YO});var Yx=R((fNe,JO)=>{"use strict";var Ap=ur(),QO=Kh(),Sp=xO(),Ui=PE(),Tp=Ei(),X_=ia(),pae=ER(),J_=Lr(),gp=BE(),or=kA(),Rp=k(),mae=NR(),Sae=c_(),Cx=sA(),Tae=XE(),gae=eh(),Rae=oA(),Aae=rh(),Oae=sh(),KO=oh(),Dx=Wh(),bae=$h(),jO=VO(),V=L(),{hdb_errors:ed,handleHDBError:Z_}=ie(),{HTTP_STATUS_CODES:Lx}=ed,WO=ch(),Px=bo(),Fx=require("util"),_l=Cr(),Nae=Bn(),yae=gi(),Mx=yx(),Ux=s_(),vx=(Dh(),ae(C_)),Bx=Et(),Hx=qh(),Gx=vh(),{setServerUtilities:Iae}=(hp(),ae(qO)),{CONTEXT:wae}=(Mn(),ae(fg)),{_assignPackageExport:Cae}=require("../index"),{transformReq:Dae}=Y(),{server:Lae}=(yr(),ae(jo)),Sr=Rp.loggerWithTag("operation"),Pae=DO(),xx=Ap.searchByHash,Mae=Ap.searchByValue,Uae=Fx.promisify(Ap.search),vae=Fx.promisify(QO.evaluateSQL),Bae={[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},K=wx();async function kx(e,t){try{if(e.body.operation!=="read_log"&&(Rp.log_level===V.LOG_LEVELS.INFO||Rp.log_level===V.LOG_LEVELS.DEBUG||Rp.log_level===V.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Sr.info(o)}}catch(n){Sr.error(n)}let r=await Pae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Bae[e.body.operation]&&Nae.setSchemaDataToGlobal(n=>{n&&Sr.error(n)}),r}a(kx,"processLocalTransaction");var qx=Gae();JO.exports={chooseOperation:Vx,getOperationFunction:$x,operation:zO,processLocalTransaction:kx};Iae(JO.exports);Lae.operation=zO;function Vx(e){let t;try{t=$x(e)}catch(s){throw Sr.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=QO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=QO.checkASTPermissions(e,i);if(o)throw Sr.error(`${Lx.FORBIDDEN} from operation ${e.operation}`),Sr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Z_(new Error,o,ed.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=bae.verifyPerms(i,s);if(o)throw Sr.error(`${Lx.FORBIDDEN} from operation ${e.operation}`),Sr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Z_(new Error,o,ed.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Z_(s,"There was an error when trying to choose an operation path")}return r}a(Vx,"chooseOperation");function $x(e){if(Sr.trace(`getOperationFunction with operation: ${e.operation}`),qx.has(e.operation))return qx.get(e.operation);throw Z_(new Error,ed.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ed.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a($x,"getOperationFunction");Cae("operation",zO);function zO(e,t){e.hdb_user=this[wae]?.user,e.bypass_auth=!t;let r=Vx(e);return kx({body:e},r)}a(zO,"operation");async function Hae(e){Sr.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 _l.insert(i);break;case V.OPERATIONS_ENUM.UPDATE:o=await _l.update(i);break;case V.OPERATIONS_ENUM.UPSERT:o=await _l.upsert(i);break;case V.OPERATIONS_ENUM.DELETE:o=await X_.deleteRecord(i);break;default:Sr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Sr.info("Invalid operation in transaction"),Sr.error(o)}}a(Hae,"catchup");async function ms(e){Dae(e);let t,r;try{r=await jO.addJob(e),t=r.createdJob,Sr.info("addJob result",r);let n=new Mx.RunnerMessage(t,e);return{message:await Mx.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 Sr.error(s),Z_(n,s)}}a(ms,"executeJob");function Gae(){let e=new Map;return e.set(V.OPERATIONS_ENUM.INSERT,new K(_l.insert)),e.set(V.OPERATIONS_ENUM.UPDATE,new K(_l.update)),e.set(V.OPERATIONS_ENUM.UPSERT,new K(_l.upsert)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(Ap.searchByConditions)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(xx)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_ID,new K(xx)),e.set(V.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Mae)),e.set(V.OPERATIONS_ENUM.SEARCH,new K(Uae)),e.set(V.OPERATIONS_ENUM.SQL,new K(vae)),e.set(V.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(ms,Sp.csvDataLoad)),e.set(V.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(ms,Sp.csvFileLoad)),e.set(V.OPERATIONS_ENUM.CSV_URL_LOAD,new K(ms,Sp.csvURLLoad)),e.set(V.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(ms,Sp.importFromS3)),e.set(V.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ui.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ui.createSchema)),e.set(V.OPERATIONS_ENUM.CREATE_TABLE,new K(Ui.createTable)),e.set(V.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ui.createAttribute)),e.set(V.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ui.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_DATABASE,new K(Ui.dropSchema)),e.set(V.OPERATIONS_ENUM.DROP_TABLE,new K(Ui.dropTable)),e.set(V.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ui.dropAttribute)),e.set(V.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(Tp.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(Tp.describeSchema)),e.set(V.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(Tp.describeTable)),e.set(V.OPERATIONS_ENUM.DESCRIBE_ALL,new K(Tp.describeAll)),e.set(V.OPERATIONS_ENUM.DELETE,new K(X_.deleteRecord)),e.set(V.OPERATIONS_ENUM.ADD_USER,new K(J_.addUser)),e.set(V.OPERATIONS_ENUM.ALTER_USER,new K(J_.alterUser)),e.set(V.OPERATIONS_ENUM.DROP_USER,new K(J_.dropUser)),e.set(V.OPERATIONS_ENUM.LIST_USERS,new K(J_.listUsersExternal)),e.set(V.OPERATIONS_ENUM.LIST_ROLES,new K(gp.listRoles)),e.set(V.OPERATIONS_ENUM.ADD_ROLE,new K(gp.addRole)),e.set(V.OPERATIONS_ENUM.ALTER_ROLE,new K(gp.alterRole)),e.set(V.OPERATIONS_ENUM.DROP_ROLE,new K(gp.dropRole)),e.set(V.OPERATIONS_ENUM.USER_INFO,new K(J_.userInfo)),e.set(V.OPERATIONS_ENUM.READ_LOG,new K(mae)),e.set(V.OPERATIONS_ENUM.ADD_NODE,new K(Sae)),e.set(V.OPERATIONS_ENUM.UPDATE_NODE,new K(Cx)),e.set(V.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(Cx)),e.set(V.OPERATIONS_ENUM.REMOVE_NODE,new K(Tae)),e.set(V.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(gae)),e.set(V.OPERATIONS_ENUM.PURGE_STREAM,new K(Rae)),e.set(V.OPERATIONS_ENUM.SET_CONFIGURATION,new K(Bx.setConfiguration)),e.set(V.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Aae.clusterStatus)),e.set(V.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(Oae)),e.set(V.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(KO.setRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(KO.getRoutes)),e.set(V.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(KO.deleteRoutes)),e.set(V.OPERATIONS_ENUM.EXPORT_TO_S3,new K(ms,Dx.export_to_s3)),e.set(V.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(ms,X_.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(ms,X_.deleteFilesBefore)),e.set(V.OPERATIONS_ENUM.EXPORT_LOCAL,new K(ms,Dx.export_local)),e.set(V.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(jO.handleGetJobsByStartDate)),e.set(V.OPERATIONS_ENUM.GET_JOB,new K(jO.handleGetJob)),e.set(V.OPERATIONS_ENUM.GET_FINGERPRINT,new K(WO.getFingerprint)),e.set(V.OPERATIONS_ENUM.SET_LICENSE,new K(WO.setLicense)),e.set(V.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(WO.getRegistrationInfo)),e.set(V.OPERATIONS_ENUM.RESTART,new K(Px.restart)),e.set(V.OPERATIONS_ENUM.RESTART_SERVICE,new K(ms,Px.restartService)),e.set(V.OPERATIONS_ENUM.CATCHUP,new K(Hae)),e.set(V.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(yae.systemInformation)),e.set(V.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(ms,X_.deleteAuditLogsBefore)),e.set(V.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(pae)),e.set(V.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(Ux.createTokens)),e.set(V.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(Ux.refreshOperationToken)),e.set(V.OPERATIONS_ENUM.LOGIN,new K(vx.login)),e.set(V.OPERATIONS_ENUM.LOGOUT,new K(vx.logout)),e.set(V.OPERATIONS_ENUM.GET_CONFIGURATION,new K(Bx.getConfiguration)),e.set(V.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(or.customFunctionsStatus)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(or.getCustomFunctions)),e.set(V.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(or.getComponentFile)),e.set(V.OPERATIONS_ENUM.GET_COMPONENTS,new K(or.getComponents)),e.set(V.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(or.setComponentFile)),e.set(V.OPERATIONS_ENUM.DROP_COMPONENT,new K(or.dropComponent)),e.set(V.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(or.getCustomFunction)),e.set(V.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(or.setCustomFunction)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(or.dropCustomFunction)),e.set(V.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(or.addComponent)),e.set(V.OPERATIONS_ENUM.ADD_COMPONENT,new K(or.addComponent)),e.set(V.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(or.dropCustomFunctionProject)),e.set(V.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(or.packageComponent)),e.set(V.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(or.packageComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(or.deployComponent)),e.set(V.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(or.deployComponent)),e.set(V.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(Hx.readTransactionLog)),e.set(V.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(ms,Hx.deleteTransactionLogsBefore)),e.set(V.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(Gx.installModules)),e.set(V.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(Gx.auditModules)),e.set(V.OPERATIONS_ENUM.GET_BACKUP,new K(Ui.getBackup)),e}a(Gae,"initializeOperationFunctionMap")});var bp=R((hNe,Qx)=>{"use strict";var XO=L(),xae=Y(),td=k(),{handleHDBError:ZO,hdb_errors:Op}=ie(),{isMainThread:qae}=require("worker_threads"),{Readable:Fae}=require("stream"),Kx=require("os"),kae=require("util"),Vae=vR(),$ae=kae.promisify(Vae.authorize),Wx=Yx(),{createGzip:Yae,constants:Kae}=require("zlib");function Wae(e){let t=`Found an uncaught exception with message: ${e.message}. ${Kx.EOL}Stack: ${e.stack} ${Kx.EOL}Terminating ${qae?"HDB":"thread"}.`;console.error(t),td.fatal(t),process.exit(1)}a(Wae,"handleServerUncaughtException");function Qae(e,t,r){if(td[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:Op.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(Qae,"serverErrorHandler");function jae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=ZO(new Error,"Invalid JSON.",Op.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(xae.isEmpty(e.body.operation)){let n=ZO(new Error,"Request body must include an 'operation' property.",Op.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(jae,"reqBodyValidationHandler");function zae(e,t,r){let n;e.body.operation!==XO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==XO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==XO.OPERATIONS_ENUM.LOGOUT?$ae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{td.warn(s),td.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(ZO(s,i,Op.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(zae,"authHandler");async function Jae(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Wx.chooseOperation(e.body);let s=await Wx.processLocalTransaction(e,n);if(s instanceof Fae&&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(Yae({level:Kae.Z_BEST_SPEED})))}return s}catch(s){throw td.error(s),s}}a(Jae,"handlePostRequest");Qx.exports={authHandler:zae,handlePostRequest:Jae,handleServerUncaughtException:Wae,serverErrorHandler:Qae,reqBodyValidationHandler:jae}});var Xx=R((mNe,Jx)=>{"use strict";var Xae=require("fastify-plugin"),{handlePostRequest:jx,authHandler:Zae,reqBodyValidationHandler:ece}=bp();async function tce(e){e.decorate("hdbCore",{preValidation:[ece,Zae],request:t=>zx(jx(t,response)),requestWithoutAuthentication:(t,r)=>zx(jx(t,r,!0))})}a(tce,"hdbCore");async function zx(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(zx,"convertAsyncIterators");Jx.exports=Xae(tce)});var tq=R((gNe,eq)=>{"use strict";var TNe=require("fs"),eb=X();eb.initSync();var{CONFIG_PARAMS:Zx}=L(),rce=1024*1024*1024;function nce(e){let t=eb.get(Zx.HTTP_TIMEOUT),r=eb.get(Zx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:rce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(nce,"getServerOptions");eq.exports=nce});var sq=R((ANe,nq)=>{"use strict";var tb=X();tb.initSync();var{CONFIG_PARAMS:rq}=L();function sce(){let e=tb.get(rq.HTTP_CORSACCESSLIST),t=tb.get(rq.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(sce,"getCORSOptions");nq.exports=sce});var aq=R((bNe,oq)=>{"use strict";var iq=X();iq.initSync();var ice=L();function oce(){return iq.get(ice.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(oce,"getHeaderTimeoutConfig");oq.exports=oce});var nb={};Ve(nb,{customFunctionsServer:()=>lce,ready:()=>Aq,start:()=>cce});function cce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){vi||(vi=Rq(t),dt.http((await vi).server));let o=await vi,c=(0,rb.dirname)(s),l=(0,rb.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!cq.has(c)){cq.add(c);try{o.register(_ce(c,l))}catch(_){if(_.message==="Root plugin has already booted")We.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Aq}}async function lce(){try{We.info("In Custom Functions Fastify server"+process.cwd()),We.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),We.debug(`Custom Functions server process ${process.pid} starting up.`),await uce();let e=Eq.get(hq.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=vi=await Rq(e)}catch(r){throw We.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw We.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){We.error(`Custom Functions ${process.pid} Error: ${e}`),We.error(e),process.exit(1)}}async function uce(){try{We.info("Custom Functions starting configuration."),await pq.setUsersToGlobal(),We.info("Custom Functions completed configuration.")}catch(e){We.error(e)}}function _ce(e,t){return async function(r){try{We.info("Custom Functions starting buildRoutes"),We.trace("Loading fastify routes folder "+e),(0,lq.existsSync)(e)&&r.register(fq.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:We.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?We.error(s.message):s&&We.error(s),o()})}catch(n){We.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Rq(e){We.info("Custom Functions starting buildServer.");let t=(0,mq.default)(e),r=(0,uq.default)(t);r.server.headersTimeout=(0,Tq.default)(),r.setErrorHandler(gq.serverErrorHandler);let n=(0,Sq.default)();return n&&r.register(_q.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(dq.default),await r.register(ace),await r.after(),_O(r),We.info("Custom Functions completed buildServer."),r}function Aq(){if(vi)return vi.then?vi.then(e=>e.ready()):vi.ready()}var rb,lq,uq,_q,dq,fq,Eq,hq,We,ace,pq,mq,Sq,Tq,gq,vi,cq,Oq=be(()=>{rb=require("path"),lq=require("fs"),uq=G(require("fastify")),_q=G(require("@fastify/cors")),dq=G(OO()),fq=G(require("@fastify/autoload")),Eq=G(X()),hq=G(L()),We=G(k()),ace=G(Xx()),pq=G(Lr()),mq=G(tq()),Sq=G(sq()),Tq=G(aq()),gq=G(bp());jc();yr();cq=new Set;a(cce,"start");a(lce,"customFunctionsServer");a(uce,"setUp");a(_ce,"buildRouteFolder");a(Rq,"buildServer");a(Aq,"ready")});var sb={};Ve(sb,{start:()=>dce});function dce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,wq.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){Nq||(Nq=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=bq.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,yq.default)(s,(0,Iq.realpathSync)(o))}}return i(s)},{runFirst:!0})),bq.set(r,n)}}}var yq,Iq,wq,bq,Nq,Cq=be(()=>{yq=G(require("send")),Iq=require("fs"),wq=G(require("serve-static")),bq=new Map;a(dce,"start")});var cb={};Ve(cb,{Request:()=>ib,createReuseportFd:()=>Np});var Dq,ib,ob,ab,Np,yp=be(()=>{Dq=require("os"),ib=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 ab(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 ob(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},ob=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)}},ab=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Dq.platform)()!="win32"&&(Np=require("node-unix-socket").createReuseportFd)});var Sb=R(Po=>{"use strict";var{isMainThread:_b,parentPort:nd,threadId:Ip}=require("worker_threads"),{Socket:fce,createServer:Ece}=require("net"),{createServer:hce,IncomingMessage:pce}=require("http"),{createServer:mce}=require("https"),{readFileSync:Sce,unlinkSync:Lq,existsSync:Tce}=require("fs"),kt=k(),ke=X(),pt=L(),{server:Dp}=(yr(),ae(jo)),{WebSocketServer:gce}=require("ws"),{createSecureContext:Rce,createServer:Ace}=require("node:tls"),{getTicketKeys:Bq,restartNumber:Oce,getWorkerIndex:sd}=rt(),{Headers:Hq,appendHeader:bce}=(w_(),ae(FB)),{recordAction:rd,recordActionBinary:Pq}=(Ti(),ae(Ku)),{Request:Gq,createReuseportFd:Mq}=(yp(),ae(cb)),{checkMemoryLimit:Nce}=la(),{X509Certificate:yce}=require("crypto"),xq=require("tls"),Ice=xq.createSecureContext,dl;xq.createSecureContext=function(e){return dl||Ice(e)};var qq=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG);if(qq){let e;if(_b)e=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){kt.info("Could not close debugger",t)}});else{let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&sd()>=0&&(e=t+sd())}if(e){let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){kt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&_b)try{require("inspector").open(9229)}catch(e){Oce<=1&&kt.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:LNe,CONFIG_PARAMS:wce}=pt;ke.initSync();var Cce=ke.get(wce.HTTP_SESSIONAFFINITY),Ws={};Po.registerServer=hb;Po.httpServer=pb;Po.deliverSocket=Eb;Po.startServers=Fq;Po.when_components_loaded=null;Po.createSNICallback=mb;Dp.http=pb;Dp.request=Mce;Dp.socket=Uce;Dp.ws=vce;var lb={},wp={},Dce,Bi={},Cp={},Lce=[],db=[];function Fq(){return Po.when_components_loaded=Lp().loadRootComponents(!0).then(()=>{nd?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)Eb(n,r,s);else if(t.requestId)Pce(t);else if(t.type===pt.ITC_EVENT_TYPES.SHUTDOWN){kt.trace("received shutdown request",Ip);for(let i in Ws){let o=Ws[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),u=0,d=setInterval(()=>{u++;let E=u>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}u===1?kt.info(`Closing ${f.length} idle connections`):E&&kt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,m=f.length;h<m;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
31
+ `},compressible:!1,q:.8});Jt.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()}});mG={type:"application/json",serializeStream:iu,serialize:$_,deserialize:vie,q:.5};Jt.set("*/*",mG);Jt.set("",mG);a(vie,"tryJSONParse");a(_O,"registerContentHandlers");Bie=require("fastify-plugin"),Hie=Bie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=zh(n.raw);s.type(c),s.serializer(function(l){return(o.serializeStream||o.serialize)(l,{headers:{set:(_,u)=>{s.header(_,u)}}})})}),r()},{name:"content-type-negotiation"});a(zh,"findBestSerializer");_G=aO.default.get(cO.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Jh,"serialize");a(Pa,"serializeMessage");a(Gie,"streamToBuffer");a(Ba,"getDeserializer");a(dG,"deserializerUnknownType");a(xie,"transformIterable")});function EO(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let d=_(l);for(let f=1;f<e.length;f++){let h=e[f],m=_(h);d=d.concat(m)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(l),E=u(e.slice(1),!0,l.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?EO(d.conditions,d.operator,r,n,s,i,o,c):sl(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function u(d,E,f){return d.map((h,m)=>{if(h.conditions){let T=h.operator==="or",b=u(h.conditions,!T,f);return T?(N,U)=>b.some(v=>v(N,U)):(N,U)=>b.every(v=>v(N,U))}let S=(h.attribute||h[0])===r.primaryKey,g=W_(h,r,i,c,S,f);return E&&m<d.length-1&&f&&(f=Qie(r.primaryStore,h.estimated_count,f)),g}).filter(Boolean)}a(u,"mapConditionsToFilters")}function sl(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(Array.isArray(o)){let T=o[0],b=Mi(n.attributes,T);if(b.relationship){if(o.length<2)throw new Tn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let N=b.definition?.tableClass||b.elements?.definition?.tableClass,U=new Map,v=sl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,N,s,U);if(b.relationship.to){i[o[0]]=U;let q=!!Mi(N.attributes,b.relationship.to)?.elements;v=Vie(v,b,N.primaryStore,q,U)}if(b.relationship.from){let q=a(M=>sl({attribute:b.relationship.from,value:M},t,r,n,s,U),"searchEntry");b.elements?(i[o[0]]=U,v=Yie(v,b,N.primaryStore,U,q)):v=v.flatMap(q)}return v}else if(o.length===1)o=o[0];else throw new Tn.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,E;c instanceof Date&&(c=c.getTime());let f;switch(hO[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=Ys.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),u=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),u=c[1],u instanceof Date&&(u=u.getTime()),d=!0;break;case"equals":case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Tn.ClientError(`Unknown query comparator "${l}"`)}let h,m=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Vn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Vn.MAX_SEARCH_KEY_LENGTH)+Vn.OVERFLOW_MARKER,E=!1,h=W_(e,n,null,i,m)),typeof u=="string"&&u.length>Vn.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,Vn.MAX_SEARCH_KEY_LENGTH)+Vn.OVERFLOW_MARKER,d=!0,h=h??W_(e,n,null,i,m)),r){let T=_;_=u,u=T,T=!E,E=!d,d=T}let S=m?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Tn.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Tn.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Tn.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Tn.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??W_(e,n,null,i,m),!h)throw new Tn.ClientError(`Unknown search operator ${e.comparator}`)}let g={start:_,end:u,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:m,transaction:t,reverse:r};if(m){let T=S.getRange(g).map(h?function({key:b,value:N}){return this.isSync?N&&h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(N&&h(N)?b:Co.SKIP)}catch(q){v(q)}}))}:b=>b.value==null?Co.SKIP:b);return T.hasEntries=!0,T}else return S?S.getRange(g).map(h?function({key:T,value:b}){let N;return typeof T=="string"&&T.length>Vn.MAX_SEARCH_KEY_LENGTH?N=n.primaryStore.get(b):N={[o]:T},this.isSync?h(N)?b:Co.SKIP:new Promise((U,v)=>setImmediate(()=>{try{U(h(N)?b:Co.SKIP)}catch(q){v(q)}}))}:({value:T})=>T):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:T,value:b}){return this.isSync?b&&h(b)?T:Co.SKIP:new Promise((N,U)=>setImmediate(()=>{try{N(b&&h(b)?T:Co.SKIP)}catch(v){U(v)}}))})}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;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 Vie(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let l=t.relationship.to,_=a((u,d)=>{let E=u;Array.isArray(u)&&(E=Es(u),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),u!==E&&(f.key=u)},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),E=d?.[l];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],u);else _(E,u)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function Yie(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 _=Es(l.value);if(!c.has(_))return c.add(_),l}if(!i){let _=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>_.has(Es(d)));for(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(E=>!E(d)))continue}_.set(Es(u),u)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function W_(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let u=c[0],d=Mi(t.attributes,u),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[u],h=W_({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},E,r,f?.[u]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let m=t.propertyResolvers?.[u],S,g=a((T,b)=>{let N,U;if(m){if(m.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let q of h.idFilter.idSet)e={attribute:m.from,value:q};S=_(m.from,h.idFilter,!0,!0)}else S=_(m.from,h.idFilter,!1,!0);let v=S(T);return S.idFilter&&(g.idFilter=S.idFilter),v}U=m(T,r,b),N=U?.value}else N=T[u];return N?Array.isArray(N)?N.some(h):h(N,U):!1},"recordFilter");return g}}switch(l instanceof Date&&(l=l.getTime()),hO[o]||o){case Vn.SEARCH_TYPES.EQUALS:case void 0:return _(c,u=>u===l,!0);case"contains":return _(c,u=>u?.toString().includes(l));case"ends_with":return _(c,u=>u?.toString().endsWith(l));case"starts_with":return _(c,u=>typeof u=="string"&&u.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],_(c,u=>{if(!Array.isArray(u))return!1;for(let d=0,E=l.length;d<E;d++)if(u[d]!==l[d])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),_(c,u=>(0,Ys.compareKeys)(u,l[0])>=0&&(0,Ys.compareKeys)(u,l[1])<=0,!0);case"gt":return _(c,u=>(0,Ys.compareKeys)(u,l)>0);case"ge":return _(c,u=>(0,Ys.compareKeys)(u,l)>=0);case"lt":return _(c,u=>(0,Ys.compareKeys)(u,l)<0);case"le":return _(c,u=>(0,Ys.compareKeys)(u,l)<=0);case"ne":return _(c,u=>(0,Ys.compareKeys)(u,l)!==0);case"sort":return()=>!0;default:throw new Tn.ClientError(`Unknown query comparator "${o}"`)}function _(u,d,E,f){let h;E=E&&!s&&t?.indices[u]&&i>3,E&&(e.estimated_count==null&&Zh(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let m=0,S=3;function g(T){let b=T[u],N;if(typeof b!="object"||!b||f?N=d(b):Array.isArray(b)?N=b.some(d):b instanceof Date&&(N=d(b.getTime())),E&&(S++,!N&&!g.idFilter&&++m/S*(i-S)>h)){let U=sl(e,r.transaction.getReadTxn(),!1,t).map(Es),v=new Set(U);g.idFilter=q=>v.has(Es(q)),g.idFilter.idSet=v}return N}return a(g,"recordFilter"),s&&(g.idFilter=d),g}a(_,"attributeComparator")}function Zh(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/Pi(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=hO[n]||n,n===Vn.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=Zh(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*Pi(e.indices[i.relationship.from])/(Pi(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=Pi(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=kie*Pi(e.primaryStore)+1:n==="between"?r.estimated_count=Fie*Pi(e.primaryStore)+1:n==="sort"?r.estimated_count=Pi(e.primaryStore)+1:r.estimated_count=qie*Pi(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function ep(e){if(e)if(Do=e,rl.lastIndex=0,Kie.test(e))try{let t=Y_(new nl,"");if(Wr!==Do.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 ${Wr} in '${Do}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Y_(e,t){let r=rl,n,s,i,o,c,l=decodeURIComponent,_;for(;n=r.exec(Do);){Wr=r.lastIndex;let[,u,d]=n;if(o){if(u)throw new SyntaxError(`expected operator, but encountered '${u}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(u.length<=2)i=u;else throw new SyntaxError(`invalid FIQL operator ${u}`);l=dO}else{if(l=decodeURIComponent,i="equals",!u)throw new SyntaxError("attribute must be specified before equality comparator");s=K_(u)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=$ie[d],l=fO[i]?dO:decodeURIComponent,!u)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=K_(u);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:l(u)};i==="eq"&&TG(h,u),Xh(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(K_(u)),s=void 0;break;case"(":rl.lastIndex=Wr;let f=Y_(u?[]:new nl,")");switch(u){case"":Xh(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=gG(f);break;default:throw new SyntaxError(`unknown query function call ${u}`)}Do[Wr]===","?r.lastIndex=++Wr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!u)throw new SyntaxError("property sets must have a defined parent property name");rl.lastIndex=Wr,E=Y_([],"}"),E.name=u,e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case"[":rl.lastIndex=Wr,u?(E=Y_(new nl,"]"),E.name=u):E=Y_(e.conditions?new nl:[],"]"),e.conditions?(Xh(e,_),e.conditions.push(E),s=null):e.push(E),Do[Wr]===","?r.lastIndex=++Wr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(u)};i==="eq"&&TG(h,u),Xh(e,_),e.conditions.push(h)}else if(u)throw new SyntaxError("no attribute or comparison specified")}else(u||e.length>0&&c)&&e.push(K_(u));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?Wie:rl,r.lastIndex=Wr),Wr===Do.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Xh(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 K_(e){return e.indexOf(".")>-1?e.split(".").map(K_):decodeURIComponent(e)}function dO(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new il(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=dO(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new Tn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function TG(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Tn.ClientError("wildcard can only be used at the end of a string")}function gG(e){let t=RG(e[0]);return e.length>1&&(t.next=gG(e.slice(1))),t}function RG(e){if(Array.isArray(e)){let t=RG(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 Es(e){return Array.isArray(e)?e.join("\0"):e}function Pi(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Qie(e,t,r){return t*r/Pi(e)}var Tn,Vn,Ys,Co,qie,Fie,kie,$ie,fO,hO,Kie,rl,Wie,Wr,Do,nl,tp=be(()=>{Tn=G(ie()),Vn=G(_t()),Ys=require("ordered-binary"),Co=require("lmdb");Mn();qie=.3,Fie=.1,kie=.05,$ie={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},fO={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EO,"executeConditions");a(sl,"searchByIndex");a(Mi,"findAttribute");a(Vie,"joinTo");a(Yie,"joinFrom");hO={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(W_,"filterByType");a(Zh,"estimateCondition");Kie=/[()[\]|!<>.]|(=\w*=)/,rl=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,Wie=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(ep,"parseQuery");a(Y_,"parseBlock");a(Xh,"assignOperator");a(K_,"decodeProperty");a(dO,"typedDecoding");a(TG,"wildcardDecoding");a(gG,"toSortObject");a(RG,"toSortEntry");nl=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(Es,"flattenKey");a(Pi,"estimatedEntryCount");a(Qie,"intersectionEstimate")});function yG(e){let t={openapi:jie,info:{title:"HarperDB HTTP REST interface",version:(0,NG.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let _={},u=[];if(o)for(let{type:b,name:N,elements:U,relationship:v,definition:q}of o){if(v)b==="array"?_[N]={type:"array",items:{$ref:Lo+U.type}}:_[N]={$ref:Lo+b};else{let M=q??U?.definition;if(M){if(!t.components.schemas[M.type]){let W={};M.properties.forEach(z=>{W[z.name]=new TO(pO[z.type],z.type)}),t.components.schemas[M.type]=new bG(W)}b==="array"?_[N]={type:"array",items:{$ref:Lo+M.type}}:_[N]={$ref:Lo+M.type}}else b==="array"?U.type==="Any"||U.type=="ID"?_[N]={type:"array",items:{format:U.type}}:_[N]={type:"array",items:new TO(pO[U.type],U.type)}:b==="Any"||b=="ID"?_[N]={format:b}:_[N]=new TO(pO[b],b)}u.push(new gO(N,"query",_[N]))}let d=Object.keys(_),E=new gO(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new gO("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new bG(_);let h=l.post!==Resource.prototype.post||l.update,m=typeof l.put=="function",S=typeof l.get=="function",g=typeof l.delete=="function",T="/"+s+"/";h&&(t.paths[T]={},t.paths[T].post=new zie(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new mO(u,r,{200:new SO({$ref:Lo+i})},"search for records by the specified property name and value pairs")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new OG(u,r,"delete all the records that match the provided query",{204:new AG})),T="/"+s+"/{"+c+"}",S&&(t.paths[T]={},t.paths[T].get=new mO([E],r,{200:new SO({$ref:Lo+i})},"retrieve a record by its primary key")),m&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Jie([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new OG([E],r,"delete a record with the given primary key",{204:new AG})),S&&f.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new mO([E,f],r,{200:new SO({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function zie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Lo+e}}}},this.security=t,this.responses={200:{description:RO,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function mO(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function SO(e){this.description=RO,this.content={"application/json":{schema:e}}}function AG(){this.description="successfully processed request, no content returned to client"}function Jie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Lo+r}}}},this.responses={200:{description:RO}}}function OG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function bG(e){this.type="object",this.properties=e}function TO(e,t){this.type=e,this.format=t}function gO(e,t,r){this.name=e,this.in=t,this.schema=r}var NG,jie,pO,Lo,RO,IG=be(()=>{NG=G(Ri()),jie="3.0.3",pO={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Lo="#/components/schemas/",RO="successful operation";a(yG,"generateJsonApi");a(zie,"Post");a(mO,"Get");a(SO,"Response200");a(AG,"Response204");a(Jie,"Put");a(OG,"Delete");a(bG,"ResourceSchema");a(TO,"Type");a(gO,"Parameter")});var np={};$e(np,{start:()=>eoe});async function Zie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&ep(e);let s=new yo;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==wG){let h=rp.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let l=r["cache-control"];if(l){l=l.toLowerCase();let h=l.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await it(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ba(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new ol.ClientError(h,400)}if(e.authorize=!0,i===wG&&n==="GET"){if(e?.user?.role?.permission?.super_user)return yG(rp);throw new ol.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new ol.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ol.ServerError(`Method ${n} is not recognized`,501)}}),u=200,d;if(_==null)u=n==="GET"||n==="HEAD"?404:204,AO.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Xie[0]=d;let h=String.fromCharCode(34,(sr[0]&63)+62,(sr[0]>>6)+(sr[1]<<2&63)+62,(sr[1]>>4)+(sr[2]<<4&63)+62,(sr[2]>>2)+62,(sr[3]&63)+62,(sr[3]>>6)+(sr[4]<<2&63)+62,(sr[4]>>4)+(sr[5]<<4&63)+62,(sr[5]>>2)+62,(sr[6]&63)+62,(sr[6]>>6)+(sr[7]<<2&63)+62,34),m=r["if-none-match"];m&&h==m?(_?.onDone&&_.onDone(),u=304,_=void 0):s.setIfNone("ETag",h),AO.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(u=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:u,headers:s,body:void 0},f=_?.wasLoadedFromSource?.();return f!==void 0&&(E.wasCacheMiss=f,!f&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(E.body=Jh(_,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Ha.warn(i):Ha.info(i):Ha.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=Jh(i.contentType?i:i.toString(),e,o),o}}function eoe(e){AO=e,!CG&&(CG=!0,rp=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Zie(t,r)},e),e.server.ws(async(t,r,n)=>{Q_++;let s=new ts;DG||(DG=!0,Yu(l=>{Q_>0&&l.push({metric:"ws-connections",connections:Q_,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ha.warn(l)});let o;t.on("message",a(function(_){o||(o=Ba(r.requestedContentType??r.headers.asObject["content-type"],!1));let u=o(_);s.push(u)},"message"));let c;t.on("close",()=>{Q_--,En(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),_=rp.getMatch(l);if(En(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,vr(h=>({count:h.count,total:Q_}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await it(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Pa(f.value,r);t.send(h),vr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){t.close(toe[l.statusCode]||1011,l.toString()),t.close("login failed")}t.close()},e))}var Ha,ol,sr,Xie,AO,wG,CG,rp,DG,Q_,toe,LG=be(()=>{jc();Ti();Ha=G(k()),ol=G(ie());tp();nu();ha();w_();IG();sr=new Uint8Array(8),Xie=new Float64Array(sr.buffer,0,1),AO={},wG="openapi";a(Zie,"http");Q_=0;a(eoe,"start");toe={401:3e3,403:3003}});var OO=R((qbe,MG)=>{var{recordAction:sp,recordActionBinary:PG}=(Ti(),ae(Ku)),roe=require("fastify-plugin"),noe=200;MG.exports=roe(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,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),sp(o,"duration",_,d,u),PG(s.raw.statusCode<400,"success",_,d,u),PG(1,"response_"+s.raw.statusCode,_,d,u);let E=noe;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{sp(performance.now()-c,"transfer",_,d,u),sp(E,"bytes-sent",_,d,u)})):(E+=i?.length||0,sp(E,"bytes-sent",_,d,u));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),m=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${m}`:m)}),r()},{name:"hdb-request-time"})});var CO=R(($be,HG)=>{var cp=require("clone"),lp=nt(),soe=Y(),op=L(),Fbe=k(),bO=require("fs"),yO=require("joi"),{string:ap}=yO.types(),{hdb_errors:ioe,handleHDBError:ip}=ie(),{HDB_ERROR_MSGS:kbe,HTTP_STATUS_CODES:NO}=ioe,{common_validators:al}=Ls(),UG=" is required",ooe=["insert","update","upsert"],IO={database:{presence:!1,format:al.schema_format,length:al.schema_length},schema:{presence:!1,format:al.schema_format,length:al.schema_length},table:{presence:!0,format:al.schema_format,length:al.schema_length},action:{inclusion:{within:ooe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},aoe={schema:ap.required(),table:ap.required(),action:ap.valid("insert","update","upsert")},{AWS_ACCESS_KEY:coe,AWS_SECRET:loe,AWS_BUCKET:uoe,AWS_FILE_KEY:_oe,REGION:doe}=op.S3_BUCKET_AUTH_KEYS,foe={s3:{presence:!0},[`s3.${coe}`]:{presence:!0,type:"String"},[`s3.${loe}`]:{presence:!0,type:"String"},[`s3.${uoe}`]:{presence:!0,type:"String"},[`s3.${_oe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${doe}`]:{presence:!0,type:"String"}},vG=cp(IO);vG.data.presence={message:UG};var BG=cp(IO);BG.file_path.presence={message:UG};var Eoe=Object.assign(cp(IO),foe),wO=cp(aoe);wO.csv_url=ap.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();wO.passthrough_headers=yO.object();function hoe(e){let t=lp.validateObject(e,vG);return up(e,t)}a(hoe,"dataObject");function poe(e){let t=lp.validateBySchema(e,yO.object(wO));return up(e,t)}a(poe,"urlObject");function moe(e){let t=lp.validateObject(e,BG);return up(e,t)}a(moe,"fileObject");function Soe(e){let t=lp.validateObject(e,Eoe);return up(e,t)}a(Soe,"s3FileObject");function up(e,t){if(!t){let r=soe.checkGlobalSchemaTable(e.schema,e.table);if(r)return ip(new Error,r,NO.BAD_REQUEST);if(e.operation===op.OPERATIONS_ENUM.CSV_FILE_LOAD)try{bO.accessSync(e.file_path,bO.constants.R_OK|bO.constants.F_OK)}catch(n){return n.code===op.NODE_ERROR_CODES.ENOENT?ip(n,`No such file or directory ${n.path}`,NO.BAD_REQUEST):n.code===op.NODE_ERROR_CODES.EACCES?ip(n,`Permission denied ${n.path}`,NO.BAD_REQUEST):ip(n)}}return t}a(up,"postValidateChecks");HG.exports={dataObject:hoe,urlObject:poe,fileObject:moe,s3FileObject:Soe}});var DO=R((Ybe,GG)=>{"use strict";var j_=k(),_p=L();async function Toe(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===_p.OPERATIONS_ENUM.INSERT||t.operation===_p.OPERATIONS_ENUM.UPDATE||t.operation===_p.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===_p.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(j_.info(i.message),i):i.http_resp_msg?(j_.error(`Error calling operation: ${e.name}`),j_.error(i.http_resp_msg),i):(j_.error(`Error calling operation: ${e.name}`),j_.error(i),i)}}a(Toe,"callOperationFunctionAsAwait");GG.exports={callOperationFunctionAsAwait:Toe}});var qG=R((Wbe,xG)=>{"use strict";var LO=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}},PO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};xG.exports={BulkLoadFileObject:LO,BulkLoadDataObject:PO}});var kG=R((jbe,FG)=>{"use strict";var MO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};FG.exports=MO});var xO=R((tNe,ix)=>{"use strict";var dp=Cr(),Ep=CO(),goe=require("needle"),hs=L(),Jbe=Ze(),cl=Y(),{handleHDBError:ht,hdb_errors:JG}=ie(),{HTTP_STATUS_CODES:ir,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:xa}=JG,ll=k(),UO=require("papaparse");cl.promisifyPapaParse();var ps=require("fs-extra"),Roe=require("path"),{chain:$G}=require("stream-chain"),VG=require("stream-json/streamers/StreamArray"),YG=require("stream-json/utils/Batch"),KG=require("stream-chain/utils/comp"),{finished:WG}=require("stream"),Aoe=J(),XG=DO(),Ooe=sO(),{BulkLoadFileObject:BO,BulkLoadDataObject:boe}=qG(),HO=QA(),{verifyBulkLoadAttributePerms:ZG}=Vh(),Xbe=kG(),Zbe=gt(),eNe=fi(),{databases:Noe}=(Re(),ae(Ve)),{coerceType:yoe}=(hp(),ae(qO)),QG="No records parsed from csv file.",Ga=`${Aoe.get("HDB_ROOT")}/tmp`,{schema_regex:Ioe}=Ls(),jG=1024*1024*2,zG=5e3,woe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ix.exports={csvDataLoad:Coe,csvURLLoad:Doe,csvFileLoad:Loe,importFromS3:Poe};async function Coe(e,t){let r=Ep.dataObject(e);if(r)throw ht(r,r.message,ir.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=rx(e.schema,e.table),i=UO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:vO.bind(null,s),dynamicTyping:!1}),o=new HO;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&ZG(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 ht(new Error,c,ir.BAD_REQUEST,void 0,void 0,!0);let l=new boe(e.action,e.schema,e.table,i.data);return n=await XG.callOperationFunctionAsAwait(nx,l,null),n.message===QG?QG:sx(n.records,n.number_written)}catch(s){throw qa(s)}}a(Coe,"csvDataLoad");async function Doe(e){let t=Ep.urlObject(e);if(t)throw ht(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ga}/${r}`;try{await Moe(e,r)}catch(s){throw ll.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ht(s,xa(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new BO(this.job_operation_function.name,e.action,e.schema,e.table,n,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await GO(s);return await fp(n),i}catch(s){throw await fp(n),qa(s)}}a(Doe,"csvURLLoad");async function Loe(e){let t=Ep.fileObject(e);if(t)throw ht(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);let r=new BO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await GO(r)}catch(n){throw qa(n)}}a(Loe,"csvFileLoad");async function Poe(e){let t=Ep.s3FileObject(e);if(t)throw ht(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Roe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ga}/${s}`;let i=new BO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await Uoe(s,e);let o=await GO(i);return await fp(r),o}catch(n){throw await fp(r),qa(n)}}a(Poe,"importFromS3");async function Moe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await goe("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 ht(n,s,n.statusCode,hs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Boe(r,e.csv_url),await voe(t,r.raw)}a(Moe,"downloadCSVFile");async function Uoe(e,t){try{let r=`${Ga}/${e}`;await ps.mkdirp(Ga),await ps.writeFile(`${Ga}/${e}`,"",{flag:"a+"});let n=await ps.createWriteStream(r),s=await Ooe.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(){ll.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ll.error(qt.S3_DOWNLOAD_ERR+" - "+r),ht(r,xa(qt.S3_DOWNLOAD_ERR))}}a(Uoe,"downloadFileFromS3");async function voe(e,t){try{await ps.mkdirp(Ga),await ps.writeFile(`${Ga}/${e}`,t)}catch(r){throw ll.error(qt.WRITE_TEMP_FILE_ERR),ht(r,xa(qt.DEFAULT_BULK_LOAD_ERR))}}a(voe,"writeFileToTempFolder");async function fp(e){if(e)try{await ps.access(e),await ps.unlink(e)}catch{ll.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(fp,"deleteTempFile");function Boe(e,t){if(e.statusCode!==JG.HTTP_STATUS_CODES.OK)throw ht(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,ir.BAD_REQUEST);if(!woe[e.headers["content-type"]])throw ht(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,ir.BAD_REQUEST);if(!e.raw)throw ht(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,ir.BAD_REQUEST)}a(Boe,"validateURLResponse");async function GO(e){try{let t;switch(e.file_type){case hs.VALID_S3_FILE_TYPES.CSV:t=await Hoe(e);break;case hs.VALID_S3_FILE_TYPES.JSON:t=await Goe(e);break;default:throw ht(new Error,qt.DEFAULT_BULK_LOAD_ERR,ir.BAD_REQUEST,hs.LOG_LEVELS.ERROR,qt.INVALID_FILE_EXT_ERR(e))}return sx(t.records,t.number_written)}catch(t){throw qa(t)}}a(GO,"fileLoad");async function ex(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 dp.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&ZG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ht(c);r(l)}}a(ex,"validateChunk");async function tx(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;cl.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!cl.isEmpty(c)&&!cl.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await XG.callOperationFunctionAsAwait(nx,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ht(c,xa(qt.INSERT_CSV_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(tx,"insertChunk");async function Hoe(e){let t={records:0,number_written:0},r=rx(e.schema,e.table);try{let n=new HO,s=ps.createReadStream(e.file_path,{highWaterMark:jG});s.setEncoding("utf8"),await UO.parsePromise(s,ex.bind(null,e,n),vO.bind(null,r));let i=n.getPermsResponse();if(i)throw ht(new Error,i,ir.BAD_REQUEST);return s=ps.createReadStream(e.file_path,{highWaterMark:jG}),s.setEncoding("utf8"),await UO.parsePromise(s,tx.bind(null,e,t),vO.bind(null,r)),s.destroy(),t}catch(n){throw ht(n,xa(qt.PAPA_PARSE_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(Hoe,"callPapaParse");function rx(e,t){let r=Noe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>yoe(i,s));return n}a(rx,"createTransformMap");function vO(e,t,r){let n=e.get(r);return n?n(t):cl.autoCast(t)}a(vO,"typeFunction");async function Goe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new HO,s=$G([ps.createReadStream(e.file_path,{encoding:"utf-8"}),VG.withParser(),c=>c.value,new YG({batchSize:zG}),KG(async c=>{await ex(e,n,r,c)})]);await new Promise((c,l)=>{WG(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ht(new Error,i,ir.BAD_REQUEST);let o=$G([ps.createReadStream(e.file_path,{encoding:"utf-8"}),VG.withParser(),c=>c.value,new YG({batchSize:zG}),KG(async c=>{await tx(e,t,r,c)})]);return await new Promise((c,l)=>{WG(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ht(n,xa(qt.INSERT_JSON_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(Goe,"insertJson");async function nx(e){let t={};try{e.data&&e.data.length>0&&xoe(e.data[0])?t=await qoe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ll.info(t.message))}catch(r){throw qa(r)}return t}a(nx,"callBulkFileLoad");function xoe(e){let t=Object.keys(e);for(let r of t)if(!Ioe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(xoe,"validateColumnNames");async function qoe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=dp.insert;break;case"update":i=dp.update;break;case"upsert":i=dp.upsert;break;default:throw ht(new Error,qt.INVALID_ACTION_PARAM_ERR(n),ir.BAD_REQUEST,hs.LOG_LEVELS.ERROR,qt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let u=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][u])>=0&&e.splice(d,1)}let l=cl.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw qa(o)}}a(qoe,"bulkFileLoad");function sx(e,t){return`successfully loaded ${t} of ${e} records`}a(sx,"buildResponseMsg");function qa(e){return ht(e,xa(qt.DEFAULT_BULK_LOAD_ERR),ir.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(qa,"buildTopLevelErrMsg")});var ax=R((nNe,ox)=>{"use strict";var FO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ox.exports=FO});var ux=R((iNe,lx)=>{"use strict";var Foe=L(),cx=require("moment"),koe=require("uuid").v4,kO=class{static{a(this,"JobObject")}constructor(){this.id=koe(),this.type=void 0,this.start_datetime=cx().valueOf(),this.created_datetime=cx().valueOf(),this.end_datetime=void 0,this.status=Foe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};lx.exports=kO});var $O=R((aNe,Sx)=>{"use strict";var $oe=require("uuid").v4,hx=Cr(),px=ur(),Voe=as(),Yoe=Nc(),Koe=ax(),et=L(),Woe=ux(),Qoe=xE(),Yn=k(),joe=tu(),ul=Y(),{promisify:zoe}=require("util"),Fa=require("moment"),Joe=Kh(),pp=CO(),_x=ST(),{deleteTransactionLogsBeforeValidator:Xoe}=$A(),{handleHDBError:dx,hdb_errors:Zoe}=ie(),{HTTP_STATUS_CODES:fx}=Zoe,Ex=px.searchByValue,eae=px.searchByHash,tae=hx.insert,rae=zoe(Joe.evaluateSQL),nae=hx.update;Sx.exports={addJob:oae,updateJob:cae,handleGetJob:sae,handleGetJobsByStartDate:iae,getJobById:mx};async function sae(e){try{let t=await mx(e.id);return ul.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Yn.error("There was an error getting job",t),new Error(r)}}a(sae,"handleGetJob");async function iae(e){try{let t=await aae(e);if(Yn.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=Fa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Fa(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 Yn.error(r),new Error(r)}}a(iae,"handleGetJobsByStartDate");async function oae(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ul.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Yn.info(u),t.error=u,t}if(!et.JOB_TYPE_ENUM[e.operation])return Yn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:n=pp.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:n=pp.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:n=pp.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:n=pp.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=_x(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=_x(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Xoe(e);break;case et.OPERATIONS_ENUM.RESTART_SERVICE:if(et.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw dx(new Error,"Invalid service",fx.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw dx(n,n.message,fx.BAD_REQUEST,void 0,void 0,!0);let s=new Woe;s.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Voe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Ex(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=$oe();try{o=await Ex(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Yn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Yn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new joe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await tae(l)}catch(u){return Yn.error(`There was an error inserting a job for job type: ${e.operation} -- ${u}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let u=`Created a job with type ${s.type} and id ${s.id}`;t.message=u,t.createdJob=s,t.success=!0,Yn.trace(u)}return t}a(oae,"addJob");async function aae(e){let t=Fa(e.from_date,Fa.ISO_8601),r=Fa(e.to_date,Fa.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 Koe(n,e.hdb_user);try{return await rae(s)}catch(i){throw Yn.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(aae,"getJobsInDateRange");async function mx(e){if(ul.isEmptyOrZeroLength(e))return ul.errorizeMessage("Invalid job ID specified.");let t=new Yoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await eae(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Yn.error(n),ul.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(mx,"getJobById");async function cae(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ul.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Fa().valueOf());let t=new Qoe(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await nae(t),r}a(cae,"updateJob")});var yx=R((lNe,Nx)=>{"use strict";var Tx=Y(),Ft=L(),lae=require("moment"),mp=xO(),z_=k(),gx=$O(),Rx=Wh(),Ax=ia(),Ox=rt(),uae=qh(),_ae=bo(),{parentPort:dae,isMainThread:bx}=require("worker_threads"),{onMessageByType:fae}=rt(),VO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Eae(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(Tx.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Tx.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ft.JOB_TYPE_ENUM.csv_file_load:await Ks(e,mp.csvFileLoad);break;case Ft.JOB_TYPE_ENUM.csv_url_load:await Ks(e,mp.csvURLLoad);break;case Ft.JOB_TYPE_ENUM.csv_data_load:await Ks(e,mp.csvDataLoad);break;case Ft.JOB_TYPE_ENUM.import_from_s3:await Ks(e,mp.importFromS3);break;case Ft.JOB_TYPE_ENUM.empty_trash:break;case Ft.JOB_TYPE_ENUM.export_local:await Ks(e,Rx.export_local);break;case Ft.JOB_TYPE_ENUM.export_to_s3:await Ks(e,Rx.export_to_s3);break;case Ft.JOB_TYPE_ENUM.delete_files_before:case Ft.JOB_TYPE_ENUM.delete_records_before:await Ks(e,Ax.deleteFilesBefore);break;case Ft.JOB_TYPE_ENUM.delete_audit_logs_before:await Ks(e,Ax.deleteAuditLogsBefore);break;case Ft.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ks(e,uae.deleteTransactionLogsBefore);break;case Ft.JOB_TYPE_ENUM.restart_service:return await Ks(e,_ae.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Eae,"parseMessage");async function Ks(e,t){try{e.job.status=Ft.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=lae().valueOf(),await gx.updateJob(e.job),await hae(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):z_.error(`There was an error running ${t.name} job with id ${e.job.id}`),z_.error(n),e.job.message=n,e.job.status=Ft.JOB_STATUS_ENUM.ERROR;try{await gx.updateJob(e.job)}catch(s){throw z_.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ks,"runJob");async function hae(e){z_.trace("launching job thread:",e),bx?Ox.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):dae.postMessage({type:Ft.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(hae,"launchJobThread");bx&&fae(Ft.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{Ox.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ft.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){z_.error(r)}});Nx.exports={parseMessage:Eae,RunnerMessage:VO}});var wx=R((_Ne,Ix)=>{"use strict";var YO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};Ix.exports=YO});var Yx=R((fNe,JO)=>{"use strict";var Ap=ur(),QO=Kh(),Sp=xO(),Ui=PE(),Tp=Ei(),X_=ia(),pae=ER(),J_=Lr(),gp=BE(),or=kA(),Rp=k(),mae=NR(),Sae=c_(),Cx=sA(),Tae=XE(),gae=eh(),Rae=oA(),Aae=rh(),Oae=sh(),KO=oh(),Dx=Wh(),bae=Vh(),jO=$O(),$=L(),{hdb_errors:ed,handleHDBError:Z_}=ie(),{HTTP_STATUS_CODES:Lx}=ed,WO=ch(),Px=bo(),Fx=require("util"),_l=Cr(),Nae=Bn(),yae=gi(),Mx=yx(),Ux=s_(),vx=(Dh(),ae(C_)),Bx=Et(),Hx=qh(),Gx=vh(),{setServerUtilities:Iae}=(hp(),ae(qO)),{CONTEXT:wae}=(Mn(),ae(fg)),{_assignPackageExport:Cae}=require("../index"),{transformReq:Dae}=Y(),{server:Lae}=(yr(),ae(jo)),Sr=Rp.loggerWithTag("operation"),Pae=DO(),xx=Ap.searchByHash,Mae=Ap.searchByValue,Uae=Fx.promisify(Ap.search),vae=Fx.promisify(QO.evaluateSQL),Bae={[$.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},K=wx();async function kx(e,t){try{if(e.body.operation!=="read_log"&&(Rp.log_level===$.LOG_LEVELS.INFO||Rp.log_level===$.LOG_LEVELS.DEBUG||Rp.log_level===$.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;Sr.info(o)}}catch(n){Sr.error(n)}let r=await Pae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Bae[e.body.operation]&&Nae.setSchemaDataToGlobal(n=>{n&&Sr.error(n)}),r}a(kx,"processLocalTransaction");var qx=Gae();JO.exports={chooseOperation:$x,getOperationFunction:Vx,operation:zO,processLocalTransaction:kx};Iae(JO.exports);Lae.operation=zO;function $x(e){let t;try{t=Vx(e)}catch(s){throw Sr.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=QO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=QO.checkASTPermissions(e,i);if(o)throw Sr.error(`${Lx.FORBIDDEN} from operation ${e.operation}`),Sr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Z_(new Error,o,ed.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=bae.verifyPerms(i,s);if(o)throw Sr.error(`${Lx.FORBIDDEN} from operation ${e.operation}`),Sr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Z_(new Error,o,ed.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Z_(s,"There was an error when trying to choose an operation path")}return r}a($x,"chooseOperation");function Vx(e){if(Sr.trace(`getOperationFunction with operation: ${e.operation}`),qx.has(e.operation))return qx.get(e.operation);throw Z_(new Error,ed.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ed.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Vx,"getOperationFunction");Cae("operation",zO);function zO(e,t){e.hdb_user=this[wae]?.user,e.bypass_auth=!t;let r=$x(e);return kx({body:e},r)}a(zO,"operation");async function Hae(e){Sr.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 _l.insert(i);break;case $.OPERATIONS_ENUM.UPDATE:o=await _l.update(i);break;case $.OPERATIONS_ENUM.UPSERT:o=await _l.upsert(i);break;case $.OPERATIONS_ENUM.DELETE:o=await X_.deleteRecord(i);break;default:Sr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Sr.info("Invalid operation in transaction"),Sr.error(o)}}a(Hae,"catchup");async function ms(e){Dae(e);let t,r;try{r=await jO.addJob(e),t=r.createdJob,Sr.info("addJob result",r);let n=new Mx.RunnerMessage(t,e);return{message:await Mx.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 Sr.error(s),Z_(n,s)}}a(ms,"executeJob");function Gae(){let e=new Map;return e.set($.OPERATIONS_ENUM.INSERT,new K(_l.insert)),e.set($.OPERATIONS_ENUM.UPDATE,new K(_l.update)),e.set($.OPERATIONS_ENUM.UPSERT,new K(_l.upsert)),e.set($.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new K(Ap.searchByConditions)),e.set($.OPERATIONS_ENUM.SEARCH_BY_HASH,new K(xx)),e.set($.OPERATIONS_ENUM.SEARCH_BY_ID,new K(xx)),e.set($.OPERATIONS_ENUM.SEARCH_BY_VALUE,new K(Mae)),e.set($.OPERATIONS_ENUM.SEARCH,new K(Uae)),e.set($.OPERATIONS_ENUM.SQL,new K(vae)),e.set($.OPERATIONS_ENUM.CSV_DATA_LOAD,new K(ms,Sp.csvDataLoad)),e.set($.OPERATIONS_ENUM.CSV_FILE_LOAD,new K(ms,Sp.csvFileLoad)),e.set($.OPERATIONS_ENUM.CSV_URL_LOAD,new K(ms,Sp.csvURLLoad)),e.set($.OPERATIONS_ENUM.IMPORT_FROM_S3,new K(ms,Sp.importFromS3)),e.set($.OPERATIONS_ENUM.CREATE_SCHEMA,new K(Ui.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_DATABASE,new K(Ui.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_TABLE,new K(Ui.createTable)),e.set($.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new K(Ui.createAttribute)),e.set($.OPERATIONS_ENUM.DROP_SCHEMA,new K(Ui.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_DATABASE,new K(Ui.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_TABLE,new K(Ui.dropTable)),e.set($.OPERATIONS_ENUM.DROP_ATTRIBUTE,new K(Ui.dropAttribute)),e.set($.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new K(Tp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_DATABASE,new K(Tp.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_TABLE,new K(Tp.describeTable)),e.set($.OPERATIONS_ENUM.DESCRIBE_ALL,new K(Tp.describeAll)),e.set($.OPERATIONS_ENUM.DELETE,new K(X_.deleteRecord)),e.set($.OPERATIONS_ENUM.ADD_USER,new K(J_.addUser)),e.set($.OPERATIONS_ENUM.ALTER_USER,new K(J_.alterUser)),e.set($.OPERATIONS_ENUM.DROP_USER,new K(J_.dropUser)),e.set($.OPERATIONS_ENUM.LIST_USERS,new K(J_.listUsersExternal)),e.set($.OPERATIONS_ENUM.LIST_ROLES,new K(gp.listRoles)),e.set($.OPERATIONS_ENUM.ADD_ROLE,new K(gp.addRole)),e.set($.OPERATIONS_ENUM.ALTER_ROLE,new K(gp.alterRole)),e.set($.OPERATIONS_ENUM.DROP_ROLE,new K(gp.dropRole)),e.set($.OPERATIONS_ENUM.USER_INFO,new K(J_.userInfo)),e.set($.OPERATIONS_ENUM.READ_LOG,new K(mae)),e.set($.OPERATIONS_ENUM.ADD_NODE,new K(Sae)),e.set($.OPERATIONS_ENUM.UPDATE_NODE,new K(Cx)),e.set($.OPERATIONS_ENUM.SET_NODE_REPLICATION,new K(Cx)),e.set($.OPERATIONS_ENUM.REMOVE_NODE,new K(Tae)),e.set($.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new K(gae)),e.set($.OPERATIONS_ENUM.PURGE_STREAM,new K(Rae)),e.set($.OPERATIONS_ENUM.SET_CONFIGURATION,new K(Bx.setConfiguration)),e.set($.OPERATIONS_ENUM.CLUSTER_STATUS,new K(Aae.clusterStatus)),e.set($.OPERATIONS_ENUM.CLUSTER_NETWORK,new K(Oae)),e.set($.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new K(KO.setRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new K(KO.getRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new K(KO.deleteRoutes)),e.set($.OPERATIONS_ENUM.EXPORT_TO_S3,new K(ms,Dx.export_to_s3)),e.set($.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new K(ms,X_.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new K(ms,X_.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.EXPORT_LOCAL,new K(ms,Dx.export_local)),e.set($.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new K(jO.handleGetJobsByStartDate)),e.set($.OPERATIONS_ENUM.GET_JOB,new K(jO.handleGetJob)),e.set($.OPERATIONS_ENUM.GET_FINGERPRINT,new K(WO.getFingerprint)),e.set($.OPERATIONS_ENUM.SET_LICENSE,new K(WO.setLicense)),e.set($.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new K(WO.getRegistrationInfo)),e.set($.OPERATIONS_ENUM.RESTART,new K(Px.restart)),e.set($.OPERATIONS_ENUM.RESTART_SERVICE,new K(ms,Px.restartService)),e.set($.OPERATIONS_ENUM.CATCHUP,new K(Hae)),e.set($.OPERATIONS_ENUM.SYSTEM_INFORMATION,new K(yae.systemInformation)),e.set($.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new K(ms,X_.deleteAuditLogsBefore)),e.set($.OPERATIONS_ENUM.READ_AUDIT_LOG,new K(pae)),e.set($.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new K(Ux.createTokens)),e.set($.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new K(Ux.refreshOperationToken)),e.set($.OPERATIONS_ENUM.LOGIN,new K(vx.login)),e.set($.OPERATIONS_ENUM.LOGOUT,new K(vx.logout)),e.set($.OPERATIONS_ENUM.GET_CONFIGURATION,new K(Bx.getConfiguration)),e.set($.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new K(or.customFunctionsStatus)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new K(or.getCustomFunctions)),e.set($.OPERATIONS_ENUM.GET_COMPONENT_FILE,new K(or.getComponentFile)),e.set($.OPERATIONS_ENUM.GET_COMPONENTS,new K(or.getComponents)),e.set($.OPERATIONS_ENUM.SET_COMPONENT_FILE,new K(or.setComponentFile)),e.set($.OPERATIONS_ENUM.DROP_COMPONENT,new K(or.dropComponent)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new K(or.getCustomFunction)),e.set($.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new K(or.setCustomFunction)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new K(or.dropCustomFunction)),e.set($.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new K(or.addComponent)),e.set($.OPERATIONS_ENUM.ADD_COMPONENT,new K(or.addComponent)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new K(or.dropCustomFunctionProject)),e.set($.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new K(or.packageComponent)),e.set($.OPERATIONS_ENUM.PACKAGE_COMPONENT,new K(or.packageComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new K(or.deployComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_COMPONENT,new K(or.deployComponent)),e.set($.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new K(Hx.readTransactionLog)),e.set($.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new K(ms,Hx.deleteTransactionLogsBefore)),e.set($.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new K(Gx.installModules)),e.set($.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new K(Gx.auditModules)),e.set($.OPERATIONS_ENUM.GET_BACKUP,new K(Ui.getBackup)),e}a(Gae,"initializeOperationFunctionMap")});var bp=R((hNe,Qx)=>{"use strict";var XO=L(),xae=Y(),td=k(),{handleHDBError:ZO,hdb_errors:Op}=ie(),{isMainThread:qae}=require("worker_threads"),{Readable:Fae}=require("stream"),Kx=require("os"),kae=require("util"),$ae=vR(),Vae=kae.promisify($ae.authorize),Wx=Yx(),{createGzip:Yae,constants:Kae}=require("zlib");function Wae(e){let t=`Found an uncaught exception with message: ${e.message}. ${Kx.EOL}Stack: ${e.stack} ${Kx.EOL}Terminating ${qae?"HDB":"thread"}.`;console.error(t),td.fatal(t),process.exit(1)}a(Wae,"handleServerUncaughtException");function Qae(e,t,r){if(td[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:Op.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(Qae,"serverErrorHandler");function jae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=ZO(new Error,"Invalid JSON.",Op.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(xae.isEmpty(e.body.operation)){let n=ZO(new Error,"Request body must include an 'operation' property.",Op.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(jae,"reqBodyValidationHandler");function zae(e,t,r){let n;e.body.operation!==XO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==XO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==XO.OPERATIONS_ENUM.LOGOUT?Vae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{td.warn(s),td.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(ZO(s,i,Op.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(zae,"authHandler");async function Jae(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Wx.chooseOperation(e.body);let s=await Wx.processLocalTransaction(e,n);if(s instanceof Fae&&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(Yae({level:Kae.Z_BEST_SPEED})))}return s}catch(s){throw td.error(s),s}}a(Jae,"handlePostRequest");Qx.exports={authHandler:zae,handlePostRequest:Jae,handleServerUncaughtException:Wae,serverErrorHandler:Qae,reqBodyValidationHandler:jae}});var Xx=R((mNe,Jx)=>{"use strict";var Xae=require("fastify-plugin"),{handlePostRequest:jx,authHandler:Zae,reqBodyValidationHandler:ece}=bp();async function tce(e){e.decorate("hdbCore",{preValidation:[ece,Zae],request:t=>zx(jx(t,response)),requestWithoutAuthentication:(t,r)=>zx(jx(t,r,!0))})}a(tce,"hdbCore");async function zx(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(zx,"convertAsyncIterators");Jx.exports=Xae(tce)});var tq=R((gNe,eq)=>{"use strict";var TNe=require("fs"),eb=J();eb.initSync();var{CONFIG_PARAMS:Zx}=L(),rce=1024*1024*1024;function nce(e){let t=eb.get(Zx.HTTP_TIMEOUT),r=eb.get(Zx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:rce,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(nce,"getServerOptions");eq.exports=nce});var sq=R((ANe,nq)=>{"use strict";var tb=J();tb.initSync();var{CONFIG_PARAMS:rq}=L();function sce(){let e=tb.get(rq.HTTP_CORSACCESSLIST),t=tb.get(rq.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(sce,"getCORSOptions");nq.exports=sce});var aq=R((bNe,oq)=>{"use strict";var iq=J();iq.initSync();var ice=L();function oce(){return iq.get(ice.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(oce,"getHeaderTimeoutConfig");oq.exports=oce});var nb={};$e(nb,{customFunctionsServer:()=>lce,ready:()=>Aq,start:()=>cce});function cce(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){vi||(vi=Rq(t),dt.http((await vi).server));let o=await vi,c=(0,rb.dirname)(s),l=(0,rb.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!cq.has(c)){cq.add(c);try{o.register(_ce(c,l))}catch(_){if(_.message==="Root plugin has already booted")We.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:Aq}}async function lce(){try{We.info("In Custom Functions Fastify server"+process.cwd()),We.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),We.debug(`Custom Functions server process ${process.pid} starting up.`),await uce();let e=Eq.get(hq.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=vi=await Rq(e)}catch(r){throw We.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw We.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){We.error(`Custom Functions ${process.pid} Error: ${e}`),We.error(e),process.exit(1)}}async function uce(){try{We.info("Custom Functions starting configuration."),await pq.setUsersToGlobal(),We.info("Custom Functions completed configuration.")}catch(e){We.error(e)}}function _ce(e,t){return async function(r){try{We.info("Custom Functions starting buildRoutes"),We.trace("Loading fastify routes folder "+e),(0,lq.existsSync)(e)&&r.register(fq.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:We.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?We.error(s.message):s&&We.error(s),o()})}catch(n){We.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Rq(e){We.info("Custom Functions starting buildServer.");let t=(0,mq.default)(e),r=(0,uq.default)(t);r.server.headersTimeout=(0,Tq.default)(),r.setErrorHandler(gq.serverErrorHandler);let n=(0,Sq.default)();return n&&r.register(_q.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(dq.default),await r.register(ace),await r.after(),_O(r),We.info("Custom Functions completed buildServer."),r}function Aq(){if(vi)return vi.then?vi.then(e=>e.ready()):vi.ready()}var rb,lq,uq,_q,dq,fq,Eq,hq,We,ace,pq,mq,Sq,Tq,gq,vi,cq,Oq=be(()=>{rb=require("path"),lq=require("fs"),uq=G(require("fastify")),_q=G(require("@fastify/cors")),dq=G(OO()),fq=G(require("@fastify/autoload")),Eq=G(J()),hq=G(L()),We=G(k()),ace=G(Xx()),pq=G(Lr()),mq=G(tq()),Sq=G(sq()),Tq=G(aq()),gq=G(bp());jc();yr();cq=new Set;a(cce,"start");a(lce,"customFunctionsServer");a(uce,"setUp");a(_ce,"buildRouteFolder");a(Rq,"buildServer");a(Aq,"ready")});var sb={};$e(sb,{start:()=>dce});function dce(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,wq.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){Nq||(Nq=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=bq.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,yq.default)(s,(0,Iq.realpathSync)(o))}}return i(s)},{runFirst:!0})),bq.set(r,n)}}}var yq,Iq,wq,bq,Nq,Cq=be(()=>{yq=G(require("send")),Iq=require("fs"),wq=G(require("serve-static")),bq=new Map;a(dce,"start")});var cb={};$e(cb,{Request:()=>ib,createReuseportFd:()=>Np});var Dq,ib,ob,ab,Np,yp=be(()=>{Dq=require("os"),ib=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 ab(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 ob(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},ob=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)}},ab=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Dq.platform)()!="win32"&&(Np=require("node-unix-socket").createReuseportFd)});var Sb=R(Po=>{"use strict";var{isMainThread:_b,parentPort:nd,threadId:Ip}=require("worker_threads"),{Socket:fce,createServer:Ece}=require("net"),{createServer:hce,IncomingMessage:pce}=require("http"),{createServer:mce}=require("https"),{readFileSync:Sce,unlinkSync:Lq,existsSync:Tce}=require("fs"),kt=k(),ke=J(),pt=L(),{server:Dp}=(yr(),ae(jo)),{WebSocketServer:gce}=require("ws"),{createSecureContext:Rce,createServer:Ace}=require("node:tls"),{getTicketKeys:Bq,restartNumber:Oce,getWorkerIndex:sd}=rt(),{Headers:Hq,appendHeader:bce}=(w_(),ae(FB)),{recordAction:rd,recordActionBinary:Pq}=(Ti(),ae(Ku)),{Request:Gq,createReuseportFd:Mq}=(yp(),ae(cb)),{checkMemoryLimit:Nce}=la(),{X509Certificate:yce}=require("crypto"),xq=require("tls"),Ice=xq.createSecureContext,dl;xq.createSecureContext=function(e){return dl||Ice(e)};var qq=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG);if(qq){let e;if(_b)e=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){kt.info("Could not close debugger",t)}});else{let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&sd()>=0&&(e=t+sd())}if(e){let t=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ke.get(pt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){kt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&_b)try{require("inspector").open(9229)}catch(e){Oce<=1&&kt.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:LNe,CONFIG_PARAMS:wce}=pt;ke.initSync();var Cce=ke.get(wce.HTTP_SESSIONAFFINITY),Ws={};Po.registerServer=hb;Po.httpServer=pb;Po.deliverSocket=Eb;Po.startServers=Fq;Po.when_components_loaded=null;Po.createSNICallback=mb;Dp.http=pb;Dp.request=Mce;Dp.socket=Uce;Dp.ws=vce;var lb={},wp={},Dce,Bi={},Cp={},Lce=[],db=[];function Fq(){return Po.when_components_loaded=Lp().loadRootComponents(!0).then(()=>{nd?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)Eb(n,r,s);else if(t.requestId)Pce(t);else if(t.type===pt.ITC_EVENT_TYPES.SHUTDOWN){kt.trace("received shutdown request",Ip);for(let i in Ws){let o=Ws[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),u=0,d=setInterval(()=>{u++;let E=u>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}u===1?kt.info(`Closing ${f.length} idle connections`):E&&kt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,m=f.length;h<m;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
32
32
  Connection: close\r
33
33
  \r
34
- `))}},25).unref()}o.close?.(()=>{if(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&sd()==0)try{Lq(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ip),o.cantCleanupProperly||kt.warn("Had to forcefully exit the thread",Ip),process.exit(0)},5e3).unref()})}if(qq||process.env.DEV_MODE)try{require("inspector").close()}catch(i){kt.info("Could not close debugger",i)}}}).ref();let e=[];if(Mq&&!Cce)for(let t in Ws){let r=Ws[t];if(isNaN(t)&&sd()==0){Tce(t)&&Lq(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),kt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=ke.get(pt.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=sd();if(o<i[0]||o>i[1])continue}let s;try{s=Mq(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),kt.trace("Listening on port "+t,Ip)}).on("error",o)}))}Promise.all(e).then(()=>{nd?.postMessage({type:pt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Fq,"startServers");_b||Fq();function Eb(e,t,r){let n=e?.read?e:new fce({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ws[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=Ws[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(kt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(Eb,"deliverSocket");var Uq=new Map;function Pce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Uq.get(s),r){case"connection":i=Eb(void 0,t),Uq.set(s,i),i.write=(c,l,_)=>(nd.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(nd.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),nd.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(Pce,"proxyRequest");function hb(e,t,r=!0){!+t&&t!==ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(ke.get(pt.CONFIG_PARAMS.HTTP_PORT),10));let n=Ws[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",vq),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ws[t]=e;e.on("unhandled",vq)}a(hb,"registerServer");function kq(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],ke.get(pt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_PORT),secure:ke.get(pt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(kq,"getPorts");function pb(e,t){for(let{port:r,secure:n}of kq(t))Vq(r,n,t?.isOperationsServer),typeof e=="function"?db[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,hb(e,r,!1)),Cp[r]=fb(db,r),Dce=fb(Lce,r)}a(pb,"httpServer");function Vq(e,t,r){if(!Bi[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:ke.get(n+"_keepAliveTimeout"),headersTimeout:ke.get(n+"_headersTimeout"),requestTimeout:ke.get(n+"_timeout")},i=ke.get(n+"_mtls"),o=ke.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=ke.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Bq(),maxHeaderSize:ke.get(pt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:mb(l)})}let c=Nce();Bi[e]=(t?mce:hce)(s,async(l,_)=>{try{let d=performance.now(),E=new Gq(l,_);r&&(E.isOperationsServer=!0);let f=await Cp[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=$q(E)}if(c?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let U of f.headers||[])_.setHeader(U[0],U[1]);return l.baseRequest=E,_.baseResponse=f,Bi[e].emit("unhandled",l,_)}let h=f.status||200,m=performance.now(),S=m-d,g=f.body,T;if(!f.handlesHeaders){let U=f.headers||new Hq;g?g.length>=0&&(typeof g=="string"?U.set("Content-Length",Buffer.byteLength(g)):U.set("Content-Length",g.length),T=!0):(U.set("Content-Length","0"),T=!0);let v=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(v+=", miss"),bce(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),T&&_.end(g)}let b=E.handlerPath,N=E.method;if(rd(S,"duration",b,N,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Pq(h<400,"success",b,N),Pq(1,"response_"+h,b,N),!T)if(g?.pipe){g.pipe(_),g.destroy&&_.on("close",()=>{g.destroy()});let U=0;g.on("data",v=>{U+=v.length}),g.on("end",()=>{rd(performance.now()-m,"transfer",b,N),rd(U,"bytes-sent",b,N)})}else g?.then?g.then(U=>{_.end(U)},u):_.end(g)}catch(d){u(d)}function u(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?kt.warn(d):kt.info(d):kt.error(d)}a(u,"onError")}),i&&(Bi[e].mtlsConfig=i),t&&(Bi[e].on("secureConnection",l=>{l._parent.startTime&&rd(performance.now()-l._parent.startTime,"tls-handshake",e),rd(l.isSessionReused(),"tls-reused",e)}),Bi[e].isSecure=!0,s.SNICallback(null,(l,_)=>{try{dl=_,_&&Bi[e].setSecureContext(_.options)}finally{dl=null}})),hb(Bi[e],e)}return Bi[e]}a(Vq,"getHTTPServer");function fb(e,t){let r=$q;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(fb,"makeCallbackChain");function $q(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hq}}a($q,"unhandled");function Mce(e,t){pb(e,{requestOnly:!0,...t})}a(Mce,"onRequest");function Uce(e,t){let r;if(t.securePort){let n=Object.assign({},ke.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:mb(n)};r=Ace(s,e),s.SNICallback(null,(i,o)=>{try{dl=o,o&&r.setSecureContext(o.options)}finally{dl=null}}),Ws[t.securePort]=r}return t.port&&(r=Ece({noDelay:!0},e),Ws[t.port]=r),r}a(Uce,"onSocket");Object.defineProperty(pce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function vce(e,t){let r;for(let{port:n,secure:s}of kq(t)){wp[n]||(wp[n]=new gce({server:r=Vq(n,s)}),wp[n].on("connection",async(c,l)=>{try{let _=new Gq(l);_.isWebSocket=!0;let u=Cp[n](_),d=l.headers["sec-websocket-protocol"]||"",E=lb[n];if(d){let f;for(let h=0;h<E.length;h++){let m=E[h];m.protocol===d&&(f=!0,m.listener(c,_,u))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,u)}}catch(_){kt.warn("Error handling WebSocket connection",_)}}),wp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=lb[n];o||(o=lb[n]=[]),o.push({listener:e,protocol:i}),Cp[n]=fb(db,n)}return r}a(vce,"onWebSocket");function vq(e,t){t.writeHead(404),t.end(`Not found
35
- `)}a(vq,"defaultNotFound");function ub(e){return e.startsWith("-----BEGIN")?e:Sce(e)}a(ub,"readPEM");function mb(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=ub(i.privateKey),c=ub(i.certificate),l=i.certificateAuthority&&ub(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:l,ticketKeys:Bq()},u=Rce(_);u.options=_,_.instantiatedContext=u,u.context.setCert(c),u.context.setKey(o,void 0),_.cert=c,_.key=o,u.certStart=c.slice(0,100).toString(),n||(n=u);let d=new yce(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,u)):kt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let l=r.get(c);if(l)return kt.debug("Found certificate for",i,l.certStart),o(null,l);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}kt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(mb,"createSNICallback")});var Zq={};Ve(Zq,{startHTTPThreads:()=>Hce,startSocketServer:()=>Ob,updateWorkerIdleness:()=>Xq});async function Hce(e=2,t){if(t)Rb(0,1,!0);else{let{loadRootComponents:r}=Lp();if(e===0)return(0,Qs.setMainIsWorker)(!0),await Sb().startServers(),Promise.resolve([]);await r()}Jq();for(let r=0;r<e;r++)Rb(r,e);return Promise.all(zq)}function Jq(){let e=(0,Qq.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),gb=setInterval(()=>{Up.notify(e)},Bce).unref())}function Rb(e,t=1,r){if(Tb++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:ml.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===ml.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});zq.push(s),await s,fl.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Mp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=fl.indexOf(n);o>-1&&fl.splice(o,1)}if(a(i,"removeWorker"),El){let o=El;El=[];for(let c of o)jq[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Ab?Ab=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),Tb=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Ob(e=0,t){if(typeof e=="string")try{(0,vp.existsSync)(e)&&(0,vp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Gce:r=xce(t):r=bb;let n=(0,hl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=jq[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Ab=!0,r(o,(c,l)=>{if(!c){if(Yq){let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});Yq.deliverSocket(u,e,l),u.resume()}else Tb>0?(El.length===0&&setTimeout(()=>{El.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,El.push(o)):(console.log("start up a dynamic thread to handle request"),Rb(0));vr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});kce(u,c,e)}vr(!0,"socket-routed")})};let s=ma();Up.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 bb(e,t){let r,n=0;for(let s of fl){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Pp)return Pp=i,t(r);n=i}Pp=0,t(r)}function Gce(e,t){let r={};e.getpeername(r);let n=r.address,s=pl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);bb(e,o=>{pl.set(n,{worker:o,lastUsed:i}),t(o)})}function xce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new hl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=pl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);bb(n,d=>{pl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Xq(){Pp=0;for(let e of fl)e.expectedIdle=e.recentELU.idle+qce,e.requests=1;fl.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function kce(e,t,r){let n=Fce++;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(),Mp.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")),Mp.delete(n)),s.event=="destroy"&&(e.destroy(),Mp.delete(n))})}var Qs,hl,ml,Up,vp,Wq,Qq,fl,El,jq,Yq,Tb,zq,gb,Bce,Ab,Pp,Kq,pl,qce,Mp,Fce,Nb=be(()=>{Qs=G(rt()),hl=require("net"),ml=G(L()),Up=G(k()),vp=require("fs");Ti();Wq=require("worker_threads"),Qq=G(la()),fl=[],El=[],jq=[],Tb=0,zq=[];Wq.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Qs.onMessageFromWorkers)(e=>{e.type===ml.ITC_EVENT_TYPES.RESTART&&gb&&(clearInterval(gb),Jq())}));Bce=6e5;a(Hce,"startHTTPThreads");a(Jq,"licenseWarning");a(Rb,"startHTTPWorker");a(Ob,"startSocketServer");Pp=0;a(bb,"findMostIdleWorker");Kq=36e5,pl=new Map;a(Gce,"findByRemoteAddressAffinity");a(xce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of pl)r.lastUsed+Kq<e&&pl.delete(t)},Kq).unref();qce=1e3;a(Xq,"updateWorkerIdleness");(0,Qs.setMonitorListener)(Xq);Mp=new Map,Fce=1;a(kce,"proxySocket")});var nF=R((FNe,rF)=>{"use strict";var Vce=require("cluster"),ka=X();ka.initSync();var tF=L(),BNe=require("util"),Hi=k(),HNe=require("fs"),$ce=require("fastify"),GNe=ma(),Yce=require("@fastify/cors"),Kce=require("@fastify/compress"),Wce=require("@fastify/static"),Qce=OO(),jce=require("path"),{PACKAGE_ROOT:zce}=L(),Jce=Bn(),Xce=Y(),Zce=Lr(),ele=la(),{server:tle}=(yr(),ae(jo)),{node_request_key:xNe}=(yp(),ae(cb)),{authHandler:rle,handlePostRequest:nle,serverErrorHandler:sle,reqBodyValidationHandler:ile}=bp(),qNe=require("net"),{registerContentHandlers:ole}=(jc(),ae(SG)),ale=6e4,cle=1024*1024*1024,lle="TRUE",{CONFIG_PARAMS:id}=tF,Sl;rF.exports={hdbServer:eF,start:eF};async function eF(e){try{Hi.info("In Fastify server"+process.cwd()),Hi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Hi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Vce.isMaster,await ule();let t=e.securePort>0;Sl=_le(t),await Sl.ready(),e||(e={}),e.isOperationsServer=!0;try{tle.http(Sl.server,e),Sl.server.closeIdleConnections||await Sl.listen({port:0,host:"::"})}catch(r){throw Sl.close(),Hi.error(r),Hi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Hi.fatal(t),process.exit(1)}}a(eF,"operationsServer");async function ule(){Hi.trace("Configuring HarperDB process."),Jce.setSchemaDataToGlobal(),await Zce.setUsersToGlobal(),await ele.getLicense()}a(ule,"setUp");function _le(e){Hi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=dle(e),r=$ce(t);r.server.headersTimeout=Ele(),r.setErrorHandler(sle);let n=fle();n&&r.register(Yce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Qce),r.register(Kce),r.register(Wce,{root:jce.join(zce,"studio/build-local")}),ole(r);let s=ka.get(tF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Xce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ile,rle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),nle(i,o)}),r.get("/health",()=>"HarperDB is running."),Hi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(_le,"buildServer");function dle(e){let t=ka.get(id.OPERATIONSAPI_NETWORK_TIMEOUT),r=ka.get(id.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:cle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(dle,"getServerOptions");function fle(){let e=ka.get(id.OPERATIONSAPI_NETWORK_CORS),t=ka.get(id.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===lle)&&(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(fle,"getCORSOpts");function Ele(){return ka.get(id.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ale}a(Ele,"getHeaderTimeoutConfig")});var Lb={};Ve(Lb,{disableNATS:()=>ple,publishToStream:()=>Gp,setNATSReplicator:()=>yb,setPublishToStream:()=>mle,setSubscription:()=>Db,start:()=>hle});function hle(){od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Tle()}function ple(e=!0){cF=e}function mle(e,t){Gp=e,Db=t}function Tle(){if(cF||process.env._DISABLE_NATS)return;let e=Mr(),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];yb(s,r,i)}}Pb((r,n)=>{yb(r.tableName,r.databaseName,r),n&&uF(r)}),!sF&&(sF=!0)}function yb(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends er{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){uF(i)}static subscribe(){let i=new ts;return Db(t,e,i),i}static subscribeOnThisThread(i){return i<(od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Sle)}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 Bp(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=lF;return i}a(n,"getNATSTransaction")}function uF(e){let t=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Gp(`${wb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Cb.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 iF,wb,Cb,oF,aF,od,ad,Hp,cF,Gp,Db,Sle,lF,sF,Bp,Ib,_F=be(()=>{Re();Mn();iF=G(gt()),wb=G(Ze()),Cb=G(fi());nu();oF=G(rR()),aF=G(Nr()),od=G(X()),ad=G(L()),Hp=G(k());a(hle,"start");a(ple,"disableNATS");Gp=iF.publishToStream,Db=oF.setSubscription;a(mle,"setPublishToStream");Sle=2;a(Tle,"assignReplicationSource");a(yb,"setNATSReplicator");a(uF,"publishSchema");Bp=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=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,E=u.operation=="put"?"upsert":u.operation;l||(Hp.trace(`Sending transaction event ${E}`),_=l={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===E?(o.push(u.record),c.push(u.id)):_=_.next={operation:E,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Gp(`${wb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Cb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Hp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Ib=class extends Bp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,aF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};lF=new Ib});async function pF({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Mb.get(e,{returnNonexistent:!0});i=new Bb(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Mb.get(e);o&&o.delete()}i=new qp(e,t)}return n&&(n.id=e,n.user={username:t?.username},cd.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Ub(){return xp++,xp>65500&&(xp=1),xp}function vb(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=No.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return it(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var fF,Mo,EF,hF,dF,Mb,cd,xp,qp,Bb,mF=be(()=>{Re();I_();fF=G(Nr()),Mo=G(k());ha();EF=G(rt()),hF=G(Sb());yr();dF=100,Mb=St({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"}]}}]}),cd=St({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,EF.getWorkerIndex)()===0&&(async()=>{await hF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of cd.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await dt.getUser(r.user.username));try{await vb(r,t,r)}catch{(0,Mo.warn)("Failed to publish will",t)}cd.delete(e.id)}})();a(pF,"getSession");xp=1;a(Ub,"getNextMessageId");qp=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,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(g=>g.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Mo.trace)("Resuming subscription from",s,"from",o);let f=No.getMatch(_);if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let T=g.split("/"),b;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let N=!0;T[T.length-1]==="#"&&(T.length--,N=!1),b&&(n=a(v=>{let q=v.id;if(!Array.isArray(q)||N&&q.length!==T.length)return!1;for(let M=0;M<T.length;M++)if(T[M]!=="+"&&T[M]!==q[M])return!1;return!0},"filter"));let U=T.indexOf("+");E.url="/"+(U>-1?T.slice(0,U):T).concat("").join("/")}}let h=f.path,m=f.Resource,S=await it(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let T=await m.subscribe(E,g);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let b=(async()=>{for await(let N of T)try{let U;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"&&N.type!=="patch"||n&&!n(N))continue;r?(N.topic=s,U=this.needsAcknowledge(N)):(N.acknowledge?.(),U=Ub());let v=N.id;if(Array.isArray(v)&&(v=Wc(v)),v==null&&(v=""),await this.listener(h+"/"+v,N.value,U,t)===!1)break;this.awaitingAcks?.size>dF?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-dF)):await new Promise(setImmediate)}catch(U){(0,Mo.warn)(U)}})();return T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=Ub();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return vb(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();it(r,async()=>{try{if(!t){let n=await cd.get(this.sessionId);n?.doesExist()&&await vb(n,n.data,r)}}finally{await cd.delete(this.sessionId)}}).catch(n=>{(0,Mo.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(vb,"publish");Bb=class extends qp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Ub(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);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,Mo.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,fF.getNextMonotonicTime)()),(0,Mo.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Mb.put(this.sessionRecord)}}});var Gb={};Ve(Gb,{bypassAuth:()=>gle,start:()=>Rle});function gle(){AF=!0}function Rle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new RF.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),ar.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=TF(_,h=>{_.send(h)},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{ar.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(o.events.emit("connection",_),ar.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{u=await e.getUser(f,null,null),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&kp.notify({username:u?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&kp.error({username:f,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else ar.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),ar.error(f)}else if(l.required)return ar.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&AF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,gF.getSuperUser)(),ar.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:E}=TF(_,f=>_.write(f),null,u,o);_.on("data",d),_.on("close",E),_.on("error",f=>{ar.info("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function TF(e,t,r,n,s){SF||(SF=!0,Yu(d=>{Fp>0&&d.push({metric:"mqtt-connections",connections:Fp,byThread:!0})}));let i;Fp++;let o,c={protocolVersion:4},l=(0,Vp.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Fp--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),fn(!1,"connection","mqtt","disconnect"),ar.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;vr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await dt.getUser(d.username,d.password.toString(),r),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&kp.notify({username:n?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&kp.error({username:d.username,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),fn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),fn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=pF({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return ar.error(M),s.events.emit("auth-failed",d,e,M),fn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),fn(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,W,z,J)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let ce=M.indexOf("/",1),_e=ce>0?M.slice(0,ce):M;m({cmd:"publish",topic:M,payload:g(W),messageId:z||Math.floor(Math.random()*1e8),qos:J.qos},_e);let de=e._socket??e;return de.writableNeedDrain?new Promise(Ge=>de.once("drain",Ge)):!de.closed}catch(ce){return ar.error(ce),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let T=[];for(let M of d.subscriptions){let W;try{W=(await o.addSubscription(M,M.qos>=1)).qos||0}catch(z){s.events.emit("error",z,e,M,o),ar.error(z),W=c.protocolVersion<5?128:z.statusCode===403?135:z.statusCode===404?143:128}T.push(W)}await o.committed,m({cmd:"suback",granted:T,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let W of d.unsubscriptions)M.push(o.removeSubscription(W)?0:17);m({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let b=d.qos===2?"pubrec":"puback",N=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type"))),v=(d.payload?.length||0)>0?N(d.payload):void 0,q;try{q=await o.publish(d,v)}catch(M){s.events.emit("error",M,e,d,o),ar.warn(M),d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:q===!1?144:0},d.topic);break;case"pubrec":m({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),fn(!0,"connection","mqtt","disconnect"),ar.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),ar.error(T),m({cmd:"disconnect"})}function m(T,b){let N=(0,Vp.generate)(T,c);t(N),vr(N.length,"bytes-sent",b,S(T),"mqtt")}a(m,"sendPacket");function S(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(S,"packetMethodName");function g(T){return Pa(T,r)}a(g,"serialize")}),l.on("error",d=>{ar.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:u}}var Vp,gF,Tl,cr,Hb,RF,kp,ar,AF,SF,Fp,OF=be(()=>{Vp=require("mqtt-packet");mF();gF=G(Lr());jc();Ti();yr();Tl=G(X()),cr=G(L()),Hb=G(k()),RF=require("events"),kp=(0,Hb.loggerWithTag)("auth-event"),ar=(0,Hb.loggerWithTag)("mqtt"),AF=(0,Tl.get)(cr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(gle,"bypassAuth");a(Rle,"start");Fp=0;a(TF,"onSocket")});var Gh={};Ve(Gh,{component_errors:()=>Rl,loadComponent:()=>$p,loadComponentDirectories:()=>PF,setErrorReporter:()=>Nle});function PF(e,t){t&&(qb=t),e&&(Fb=e);let r=[];if((0,tt.existsSync)(xb)){let s=(0,tt.readdirSync)(xb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,at.join)(xb,o);r.push($p(c,qb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push($p(n,qb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{LF=!0})}function Nle(e){ld=e}async function $p(e,t,r,n,s,i){let o=(0,tt.realpathSync)(e);if(!NF.has(o)){NF.set(o,!0),s&&(Fb=s);try{let c;n&&(Rl=new Map);let l=(0,at.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,tt.existsSync)(l)?c=n?(0,DF.getConfigObj)():(0,yF.parseDocument)((0,tt.readFileSync)(l,"utf8"),{simpleKeys:!0}).toJSON():c=kb;let _=(0,at.join)(e,"node_modules","harperdb");try{Va.isMainThread&&(n||(0,tt.existsSync)(_)&&(0,tt.realpathSync)(Ol.PACKAGE_ROOT)!==(0,tt.realpathSync)(_))&&((0,tt.rmSync)(_,{recursive:!0,force:!0}),(0,tt.existsSync)((0,at.join)(e,"node_modules"))||(0,tt.mkdirSync)((0,at.join)(e,"node_modules")),(0,tt.symlinkSync)(Ol.PACKAGE_ROOT,_,"dir"))}catch(E){gl.default.error("Error symlinking harperdb module",E)}let u=[],d=n;for(let E in c){let f=c[E];if(Rl.set(n?E:(0,at.basename)(e),!1),!f)continue;let h,m=f.package;try{if(m){let N=e,U;for(;!(0,tt.existsSync)(U=(0,at.join)(N,"node_modules",E));)if(N=(0,at.dirname)(N),N.length<(0,CF.getHdbBasePath)().length){U=null;break}if(U)h=await $p(U,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${m}`)}else h=ble[E];if(!h)continue;u.push(h);let S=a(N=>(N.origin=r,St(N)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,T=g?.securePort||g?.https&&g.port,b=!g?.https&&g?.port;if(Va.isMainThread&&(h=await h.startOnMainThread?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h,n&&g))for(let N of[b,T])try{if(+N&&!bF.includes(N)){let U=Vb.get(Ol.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&gl.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!Np)&&(bF.push(N),Ob(N,U))}}catch(U){console.error("Error listening on socket",N,U,E)}if(t.isWorker&&(h=await h.start?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h),Fb.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,wF.handleHDBError)("Can not reference parent directories");let N=(0,at.join)(e,f.files).replace(/\\/g,"/"),U=N.indexOf("/*");if(U>-1&&f.files!==kb[E]?.files&&!(0,tt.existsSync)(N.slice(0,U)))throw new Error(`The path '${N.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let v=(0,at.basename)(e),q=f.path||"/";q=q.startsWith("/")?q:q.startsWith("./")?"/"+v+q.slice(2):q==="."?"/"+v:"/"+v+"/"+q;let M,W,z;if(f.root){let ce=f.root;ce.startsWith("/")&&(ce=ce.slice(1)),ce.endsWith("/")&&(ce=ce.slice(0,-1)),ce+="/",W=(0,at.join)(e,ce)}else(z=N.indexOf("/*"))>-1&&(W=N.slice(0,z+1),M=(0,at.relative)(e,W));let J=!1;if(Va.isMainThread&&h.setupDirectory&&(J=await h.setupDirectory?.(q,W,t)),t.isWorker&&h.handleDirectory&&(J=await h.handleDirectory?.(q,W,t)),J)continue;for(let ce of await(0,IF.default)(N,{onlyFiles:!1,objectMode:!0})){let{path:_e,dirent:de}=ce;d=!0;let Ge=(0,at.relative)(e,_e).replace(/\\/g,"/");if(M)if(Ge.startsWith(M))Ge=Ge.slice(M.length+1);else throw new Error(`The root path '${f.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 we=q+(q.endsWith("/")?"":"/")+Ge;try{if(de.isFile()){let xe=await Ole(_e);Va.isMainThread&&await h.setupFile?.(xe,we,_e,t),t.isWorker&&await h.handleFile?.(xe,we,_e,t)}else Va.isMainThread&&await h.setupDirectory?.(we,_e,t),t.isWorker&&await h.handleDirectory?.(we,_e,t)}catch(xe){xe.message=`Could not load ${de.isFile()?"file":"directory"} '${_e}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${xe.message}`,ld?.(xe),((0,Al.getWorkerIndex)()===0?console:gl.default).error(xe),t.set(f.path||"/",new ud(xe)),Rl.set(n?E:(0,at.basename)(e),xe.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,at.basename)(e)}' due to: ${S.message}`,ld?.(S),((0,Al.getWorkerIndex)()===0?console:gl.default).error(S),t.set(f.path||"/",new ud(S),null,!0),Rl.set(n?E:(0,at.basename)(e),S.message)}}if(Va.isMainThread&&!LF&&i&&(0,Al.watchDir)(e,async()=>PF()),c.extensionModule)return await hf((0,at.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;ld?.(new Error(E)),((0,Al.getWorkerIndex)()===0?console:gl.default).error(E),Rl.set((0,at.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,ld?.(c),t.set("",new ud(c))}}}var tt,at,Va,yF,Vb,Ol,IF,Al,gl,wF,CF,Ale,DF,Ole,xb,Fb,LF,qb,Rl,ble,kb,bF,NF,ld,ud,xh=be(()=>{tt=require("fs"),at=require("path"),Va=require("worker_threads"),yF=require("yaml"),Vb=G(X()),Ol=G(L());II();LI();PI();LG();Oq();Cq();IF=G(require("fast-glob")),Al=G(rt()),gl=G(k());AS();yr();wF=G(ie());Mn();Re();Nb();CF=G(X()),Ale=G(nF());Dh();_F();OF();DF=G(Et());yp();({readFile:Ole}=tt.promises),xb=Vb.get(Ol.CONFIG_PARAMS.COMPONENTSROOT),Fb=new Map,Rl=new Map;a(PF,"loadComponentDirectories");ble={REST:np,rest:np,graphqlSchema:RS,jsResource:bS,fastifyRoutes:nb,login:yS,static:sb,operationsApi:Ale,customFunctions:{},http:{},clustering:Lb,authentication:C_,mqtt:Gb},kb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(kb,"static",{value:{files:"web/**"}});bF=[],NF=new Map;a(Nle,"setErrorReporter");a($p,"loadComponent");ud=class extends er{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Lp=R((Eye,UF)=>{var{isMainThread:MF}=require("worker_threads"),{getTables:yle}=(Re(),ae($e)),{loadComponentDirectories:Ile,loadComponent:wle}=(xh(),ae(Gh)),{resetResources:Cle}=(I_(),ae(qB)),Dle=xA(),Lle=Et(),{dirname:Ple}=require("path"),{getConnection:Mle}=gt(),Ule=X(),vle=L(),$b=new Map;async function Ble(e=!1){!MF&&Ule.get(vle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Mle();try{MF&&await Dle()}catch(n){console.error(n)}let t=Cle();yle(),t.isWorker=e,await wle(Ple(Lle.getConfigFilePath()),t,"hdb",!0,$b),await Ile($b,t);let r=[];for(let[n]of $b)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Ble,"loadRootComponents");UF.exports.loadRootComponents=Ble});var rt=R((pye,vo)=>{"use strict";var{Worker:Hle,MessageChannel:Gle,parentPort:js,isMainThread:jb,threadId:xle,workerData:Gi}=require("worker_threads"),{PACKAGE_ROOT:qle}=L(),{join:GF,isAbsolute:Fle,extname:kle}=require("path"),{server:xF}=(yr(),ae(jo)),{watch:Vle,readdir:$le}=require("fs/promises"),{totalmem:vF}=require("os"),_d=L(),qF=X(),xi=k(),{randomBytes:Yle}=require("crypto"),{_assignPackageExport:Kle}=require("../index"),Wle=L(),BF=1024*1024,Uo=[],Kn=[],Qle=50,zb=1e4,jle="restart",FF="request_thread_info",kF="resource_report",VF="thread_info",$F="added-port",zle="ack",Yb;Kle("threads",Kn);vo.exports={startWorker:Kb,restartWorkers:Xb,shutdownWorkers:tue,workers:Uo,setMonitorListener:lue,onMessageFromWorkers:rue,onMessageByType:JF,broadcast:sue,broadcastWithAcknowledgement:oue,setChildListenerByType:eue,getWorkerIndex:YF,getWorkerCount:KF,getTicketKeys:QF,setMainIsWorker:Xle,setTerminateTimeout:Jle,restartNumber:Gi?.restartNumber||1};Kn.onMessageByType=JF;Kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Jb;function Jle(e){zb=e}a(Jle,"setTerminateTimeout");function YF(){return Gi?Gi.workerIndex:Jb?0:void 0}a(YF,"getWorkerIndex");function KF(){return Gi?Gi.workerCount:Jb?1:void 0}a(KF,"getWorkerCount");function Xle(e){Jb=e}a(Xle,"setMainIsWorker");var WF=1,Yp;function QF(){return Yp||(Yp=jb?Yle(48):Gi.ticketKeys,Yp)}a(QF,"getTicketKeys");Object.defineProperty(xF,"workerIndex",{get(){return YF()}});Object.defineProperty(xF,"workerCount",{get(){return KF()}});var jF={[FF](e,t){aue(t)},[kF](e,t){cue(t,e)}};function Kb(e,t={}){let r=process.constrainedMemory?.()||vF();r=Math.min(r,vF(),2e4*BF);let n=qF.get(_d.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/BF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Kn){let _=new Gle;_.existingPort=l,i.push(_),o.push(_.port2)}kle(e)||(e+=".js");let c=new Hle(Fle(e)?e:GF(qle,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:WF=t.threadCount,name:t.name,restartNumber:vo.exports.restartNumber,ticketKeys:QF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:$F,port:l,threadId:c.threadId},[l]);return Wp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Kb(e,t),c.on("error",l=>{xi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Uo.splice(Uo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Qle?(t.unexpectedRestarts=c.unexpectedRestarts+1,Kb(e,t)):xi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{jF[l.type]?.(l,c)}),Uo.push(c),_ue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Kb,"startWorker");var Zle=[_d.THREAD_TYPES.HTTP];async function Xb(e=null,t=Math.max(WF>3,1),r=!0){if(jb){if(r){let{loadRootComponents:o}=Lp();await o()}vo.exports.restartNumber++,t<1&&(t=t*Uo.length);let n=[],s=[];for(let o of Uo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;xi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vo.exports.restartNumber,type:_d.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Zle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),zb*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let E=a(f=>{f.type===Wle.ITC_EVENT_TYPES.CHILD_STARTED&&(xi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",E))},"startListener");xi.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=bo();r&&(e==="http"||!e)&&qF.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else js.postMessage({type:jle,workerType:e})}a(Xb,"restartWorkers");function eue(e,t){jF[e]=t}a(eue,"setChildListenerByType");function tue(e){return Xb(e,1/0,!1)}a(tue,"shutdownWorkers");var zF=[];function rue(e){zF.push(e)}a(rue,"onMessageFromWorkers");var Wb=new Map;function JF(e,t){let r=Wb.get(e);r||Wb.set(e,r=[]),r.push(t)}a(JF,"onMessageByType");var nue=10;async function sue(e){let t=0;for(let r of Kn)try{r.postMessage(e),t++>nue&&(t=0,await new Promise(setImmediate))}catch(n){xi.error("Unable to send message to worker",n)}}a(sue,"broadcast");var Kp=new Map,iue=1;function oue(e){return new Promise(t=>{let r=0;for(let n of Kn)try{let s=iue++,i=a(()=>{Kp.delete(s),--r===0&&t(),n!==js&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Kp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Kp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){xi.error("Unable to send message to worker",s)}r===0&&t()})}a(oue,"broadcastWithAcknowledgement");function aue(e){e.postMessage({type:VF,workers:XF()})}a(aue,"sendThreadInfo");function XF(){let e=Date.now();return Uo.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(XF,"getChildWorkerInfo");function cue(e,t){e.resources=t,e.resources.updated=Date.now()}a(cue,"recordResourceReport");var Qb;function lue(e){Qb=e}a(lue,"setMonitorListener");var uue=1e3,HF=!1;function _ue(){HF||(HF=!0,setInterval(()=>{for(let e of Uo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Qb&&Qb()},uue).unref())}a(_ue,"startMonitoring");var due=1e3;if(js){Wp(js);for(let e=0,t=Gi.addPorts.length;e<t;e++){let r=Gi.addPorts[e];r.threadId=Gi.addThreadIds[e],Wp(r)}setInterval(()=>{let e=process.memoryUsage();js.postMessage({type:kF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},due).unref(),Yb=a(()=>new Promise((e,t)=>{js.on("message",r),js.postMessage({type:FF});function r(n){n.type===VF&&(js.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Yb=XF;vo.exports.getThreadInfo=Yb;function Wp(e,t){Kn.push(e),e.on("message",r=>{if(r.type===$F)r.port.threadId=r.threadId,Wp(r.port);else if(r.type===zle){let n=Kp.get(r.id);n&&n()}else{for(let s of zF)s(r,e);let n=Wb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){xi.error(i)}}}).on("close",()=>{Kn.splice(Kn.indexOf(e),1)}).on("exit",()=>{Kn.splice(Kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Wp,"addPort");if(jb){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await $le(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(GF(s,o.name));try{for await(let{filename:o}of Vle(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Xb(),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");vo.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else js.on("message",async e=>{let{type:t}=e;t===_d.ITC_EVENT_TYPES.SHUTDOWN&&(vo.exports.restartNumber=e.restartNumber,js.unref(),setTimeout(()=>{xi.warn("Thread did not voluntarily terminate",xle),process.exit(0)},zb).unref())})});var MP={};Ve(MP,{AUDIT_STORE_OPTIONS:()=>Ah,createAuditEntry:()=>gf,openAuditStore:()=>Jp,readAuditEntry:()=>Yt,setAuditRetention:()=>Eue,transactionKeyEncoder:()=>ak});function Jp(e){let t=e.auditStore=e.openDB(sk.AUDIT_STORE_NAME,Ah);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Qp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Zb})){if((_[0]&15)===rN){let u=Yt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=fue){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Zb/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,zp.getWorkerIndex)()===(0,zp.getWorkerCount)()-1&&s(Qp),t}function Eue(e,t=Qp){Zb=e,Qp=t}function gf(e,t,r,n,s,i,o){let c=ck[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?bl.setFloat64(0,n):Wn.set(kS),l=9),E(0),E(t),d(r),bl.setFloat64(l,e),l+=8,s?d(s):Wn[l++]=0,Wn[n?8:0]=c;let u=Wn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(f){let h=l;l+=1,l=(0,Nl.writeKey)(f,Wn,l);let m=l-h-1;m>127?m>16383?(sN.error("Key or username was too large for audit entry",f),l=h+1,Wn[h]=0):(Wn.copyWithin(h+2,h+1,l),bl.setUint16(h,m|32768),l++):Wn[h]=m}function E(f){f<128?Wn[l++]=f:f<16384?(bl.setUint16(l,f|32768),l+=2):f<1056964608?(bl.setUint32(l,f|3221225472),l+=4):(Wn[l]=255,bl.setUint32(l+1,f),l+=5)}}function Yt(e){try{let t=e.dataView||(e.dataView=new nN(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:ck[n&7],tableId:i,get recordId(){return nk(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?nk(e,u,d):void 0},getValue(E,f,h){if(n&eN||n&tN&&!f)return E.decoder.decode(e.subarray(t.position));if(n&tN&&h)return iN(E.getEntry(this.recordId),h,E)}}}catch(t){return sN.error("Reading audit entry error",t,e),{}}}function nk(e,t,r){let n=e.subarray(t,r);return(0,Nl.readKey)(n,0,r-t)}var Nl,jp,sk,ik,zp,ok,sN,Wn,bl,ak,Ah,Zb,fue,Qp,eN,tN,ZF,rN,ek,tk,rk,ck,nN,no=be(()=>{Nl=require("ordered-binary"),jp=G(X()),sk=G(_t()),ik=G(L()),zp=G(rt()),ok=G(Y());uu();sN=G(k());Xp();(0,jp.initSync)();Wn=Buffer.alloc(1024),bl=new DataView(Wn.buffer,Wn.byteOffset,1024),ak={writeKey(e,t,r){return e===lu?(t.set(lu,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Nl.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,Nl.readKey)(e,t,r)}},Ah={encoding:"binary",keyEncoder:ak},Zb=(0,ok.convertToMS)((0,jp.get)(ik.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,fue=1e3,Qp=1e4;a(Jp,"openAuditStore");a(Eue,"setAuditRetention");eN=16,tN=32,ZF=1,rN=2,ek=3,tk=4,rk=5,ck={put:ZF|eN,[ZF]:"put",delete:rN,[rN]:"delete",message:ek|eN,[ek]:"message",invalidate:tk,[tk]:"invalidate",patch:rk|tN,[rk]:"patch"};a(gf,"createAuditEntry");a(Yt,"readAuditEntry");nN=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(nk,"readKeySafely")});var oN={};Ve(oN,{add:()=>Zp,applyReverse:()=>lk,getRecordAtTime:()=>iN,rebuildUpdateBefore:()=>em});function Zp(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 em(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,Zp(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function lk(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=hue[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=uk}}function iN(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=Yt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":lk(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===uk&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=Yt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var hue,uk,Xp=be(()=>{no();a(Zp,"add");Zp.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)};hue={add:Zp};a(em,"rebuildUpdateBefore");a(lk,"applyReverse");uk={};a(iN,"getRecordAtTime")});function Tn(e){return e[Pt]||(e[Pt]=Object.create(null))}function im(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="number"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a number, attempt to assign ${d}`);Tn(this)[c]=u},"set");break;case"Int":l=a(function(u){let d=u?.__op__?u.value:u;if(!(d>>0===d||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"Long":l=a(function(u){let d=u?.__op__?u.value:u;if(!(Math.round(d)===u&&Math.abs(d)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="bigint"||u==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be a number, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Qn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Tn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Tn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be an object, attempt to assign ${u}`);Tn(this)[c]=u},"set")}_={get(){let u=this[Pt];if(u&&c in u){let E=u[c];if(E?.__op__){let f=this[pe]?.[c];return E.update(f)}return E}let d=this[pe]?.[c];if(d&&typeof d=="object"){let E=dk(d,o);if(E)return u||(u=this[Pt]=Object.create(null)),u[c]=E}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Pt];return l?.[o]!==void 0?l[o]:this[pe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");Tn(this)[o]=c}),i("deleteProperty",function(o){Tn(this)[o]=void 0}),i("toJSON",function(){let o=this[Pt],c;for(let _ in o){c||(c=Object.assign({},this[pe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[pe])),Object.assign(c,this)),c||this[pe]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function dk(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=s}},im(r,t)),new r(e)):new tm(e);case Array:let n=new nm(e.length);n[pe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=dk(o,t?.elements)),n[s]=o}return n;default:return e}}function _E(e){let t=e[Pt],r;for(let s in t){r||(r=Object.assign({},e[pe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=_E(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[pe])),Object.assign(r,e)),r||e[pe]}function Ya(e,t=e[Pt]){let r;if(_k.call(e,pe)&&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=Ya(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[pe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=oN[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ya(s);r[n]=s}return r?Object.freeze(r):_k.call(e,pe)?e[pe]:e}function rm(e){let t=e[pe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[$a]||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?.[pe]===s){if(rm(i))return!0}else return!0}}else{let r=e[Pt];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[pe]===i){if(rm(s))return!0}else return!0}else return!0}}return!1}var Qn,Pt,tm,_k,$a,nm,sm,dE=be(()=>{Mn();Qn=G(ie());Xp();Pt=Symbol("own-data");a(Tn,"getChanges");a(im,"assignTrackedAccessors");a(dk,"trackObject");tm=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=t}};im(tm,{});a(_E,"collapseData");_k=Object.prototype.hasOwnProperty;a(Ya,"deepFreeze");a(rm,"hasChanges");$a=Symbol.for("has-array-changes"),nm=class extends Array{static{a(this,"TrackedArray")}[$a];constructor(t){super(t)}splice(...t){return this[$a]=!0,super.splice(...t)}push(...t){return this[$a]=!0,super.push(...t)}pop(){return this[$a]=!0,super.pop()}unshift(...t){return this[$a]=!0,super.unshift(...t)}shift(){return this[$a]=!0,super.shift()}};nm.prototype.constructor=Array;sm=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var fg={};Ve(fg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Ss,MultiPartId:()=>il,RECORD_PROPERTY:()=>pe,Resource:()=>er,snake_case:()=>mue,transformForSelect:()=>am});function mue(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function fk(e,t){if(dd=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(dd=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new il;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){dd=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function gn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let m=this.parseQuery(c.slice(f+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return it(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,u,o):f.allowUpdate(o.user,u,o):t.type==="create"?f.allowCreate(o.user,u,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new om(o.user);return typeof u?.then=="function"?u.then(S=>e(f,l,o,S)):e(f,l,o,u)});if(!h)throw new om(o.user)}return typeof u?.then=="function"?u.then(h=>e(f,l,o,h)):e(f,l,o,u)}a(E,"authorizeActionOnResource")}}function Rn(e,t){let r=new pk.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 aN(e,t,r){let n=e[pe];if(n){let s=e[Pt];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 am(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):aN(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(aN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(E=>E&&typeof E=="object"?c(E):E);let _={},u=i(aN(l,r,n)),d;for(let E of e){let f=u(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=am(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var Ek,hk,pk,Ie,Ue,Ss,pe,pue,er,om,dd,il,Mn=be(()=>{Ek=require("crypto");nu();hk=require("../index"),pk=G(ie());dE();ha();tp();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Ss=Symbol("is-collection"),pe=Symbol("stored-record"),pue={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},er=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=gn(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 _=am(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=gn(function(t,r,n,s){if(Array.isArray(s)&&t[Ss]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):Rn(t,"put")},{hasContent:!0,type:"update"});static patch=gn(function(t,r,n,s){return t.patch?t.patch(s,r):Rn(t,"patch")},{hasContent:!0,type:"update"});static delete=gn(function(t,r,n,s){return t.delete?t.delete(r):Rn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Ek.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),it(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):Rn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=gn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Rn(t,"delete")},{hasContent:!1,type:"update"});static post=gn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=gn(function(t,r,n,s){return t.connect?t.connect(s,r):Rn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=gn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Rn(t,"subscribe")},{type:"read"});static publish=gn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):Rn(t,"publish")},{hasContent:!0,type:"create"});static search=gn(function(t,r,n,s){let i=t.search?t.search(r):Rn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=am(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=gn(function(t,r,n,s){return t.search?t.search(s,r):Rn(t,"search")},{hasContent:!0,type:"read"});static copy=gn(function(t,r,n,s){return t.copy?t.copy(s,r):Rn(t,"copy")},{type:"create"});static move=gn(function(t,r,n,s){return t.move?t.move(s,r):Rn(t,"move")},{type:"delete"});post(t){if(this[Ss])return this.constructor.create(this[Ue],t,this[Ie]);Rn(this,"post")}static isCollection(t){return t?.[Ss]}static coerceId(t){return t}static parseQuery(t){return ep(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&&pue[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:fk(t,this),isCollection:dd}}let i=fk(t,this);return dd?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],E=_.get(d);E?E.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Ss]=!0),s}subscribe(t){return new ts}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ts}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Ue]}getContext(){return this[Ie]}};er.prototype[Ie]=null;(0,hk._assignPackageExport)("Resource",er);a(mue,"snake_case");om=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(fk,"pathToId");il=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(gn,"transactional");a(Rn,"missingMethod");a(aN,"selectFromObject");a(am,"transformForSelect")});function Tk(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Sk,Sue(e.primaryStore,e.auditStore)):(c=mk,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{gk(mk[i])})));let l=c[i]||(c[i]=[]);l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now());let _=l[o];_||(_=l[o]=new Map,_.envs=l,_.tableId=o,_.store=e.primaryStore),t=Wc(t);let u=new lN(r);u.startTime=n;let d=_.get(t);return d?d.push(u):(_.set(t,d=[u]),d.tables=_,d.key=t),u.subscriptions=d,u}function gk(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Yt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l,_=Wc(i.recordId),u=0;do{let d=o.get(_);if(d){for(let f of d)if(!(u>0&&!(f.includeDescendants&&!(f.onlyChildren&&u>1)))){if(f.startTime>=n){(0,cN.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,cN.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Sue(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=Sk[s];if(!l)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now(),gk(l),r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var cN,mk,Sk,lN,Rk=be(()=>{cN=G(k());nu();I_();no();mk=Object.create(null),Sk=Object.create(null);a(Tk,"addSubscription");lN=class extends ts{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(gk,"notifyFromTransactionData");a(Sue,"listenToCommits")});var qO={};Ve(qO,{coerceType:()=>cm,makeTable:()=>_m,setServerUtilities:()=>Iue,updateResource:()=>lm});function _m(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]);let g=YS(i,n,l),T=0,b,N,U={},v=Promise.resolve(),q,M,W;for(let Q of S)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(q=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(M=Q),Q.expiresAt&&(W=Q),Q.isPrimaryKey&&(U=Q);let z,J=[],ce=[],_e=1,de=2,Ge={},we={},xe=864e5,Wd,Qd,zi,_y=!1,zm,Jm,cY=i.getRange({start:!1,end:!1}).constructor,lY=10,uY=6;h&&Ey();class je extends er{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=q;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),N=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let D=a(P=>{let y=this.sources.slice(0,-1);if(y=y.filter(B=>B[P]&&(!B[P].reliesOnPrototype||B.prototype[P])),y.length>0)if(y.length===1){let B=y[0];return(F,C,x)=>{if(F?.source!==B)return B[P](C,x,F)}}else return(B,F,C)=>{let x=[];for(let H of y){if(B?.source===H)break;x.push(H[P](F,C,B))}return Promise.all(x)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],I=a(P=>{if(O[P]&&(!O[P].reliesOnPrototype||O.prototype[P]))return(y,B,F)=>{if(!y?.source)return O[P](B,F,y)}},"getApplyToCanonicalSource");return Ge={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},we={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let P=!1,y=a(async(B,F)=>{let C=B.value,x=B.table?ft[c][B.table]:je;if(c===gs.SYSTEM_SCHEMA_NAME&&(B.table===gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||B.table===gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(P=!0),B.id===void 0&&(B.id=C[x.primaryKey],B.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(B));B.source=p;let H=await x.getResource(B.id,F,yl);switch(B.type){case"put":return H._writeUpdate(C,!0,yl);case"patch":return H._writeUpdate(C,!1,yl);case"delete":return H._writeDelete(yl);case"publish":return H._writePublish(C,yl);case"invalidate":return H.invalidate(yl);default:ct.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=p.subscribe;B&&m==null&&(m=!0);let F=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Wa.getWorkerIndex)()):(0,Wa.getWorkerIndex)()===0,C=B&&F&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let x;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){ct.error("Bad subscription event",H);continue}if(H.source=p,x)if(H.beginTxn)x.resolve();else{y(H,x);continue}if(H.type==="end_txn")continue;let fe=it(H,()=>{if(H.type==="transaction"){let se=[];for(let Be of H.writes)try{se.push(y(Be,H))}catch(ue){throw ue.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(H),ue}return Promise.all(se)}else if(H.type==="define_schema"){let se=this.attributes.slice(0),Be;for(let ue of H.attributes)se.find(Pe=>Pe.name===ue.name)||(se.push(ue),Be=!0);Be&&(St({table:s,database:c,attributes:se,origin:"cluster"}),Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(x=H,y(H,H),new Promise(se=>{x.resolve=se})):y(H,H)});P&&(await fe,Td.signalUserChange(new gd.UserEventMsg(process.pid))),H.onCommit&&(fe?.then?fe.then(H.onCommit):H.onCommit())}catch(ee){ct.error("error in subscription handler",ee)}}}catch(B){ct.error(B)}})(),this}static getResource(p,A,D){let O=super.getResource(p,A,D);if(p!=null){ql(p);try{if(O.hasOwnProperty(pe))return O;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let I=!D?.async||i.cache?.get(p),P=Zn(A),y=P.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Xm(p,A,{transaction:y},I,B=>{if(B?lm(O,B):O[pe]=null,A.onlyIfCached&&A.noCacheStore){if(!O.doesExist())throw new An.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let F=Zm(p,B,A,O);if(F)return P?.disregardReadTxn(),O[uN]=!0,dN(F,C=>(lm(O,C),O))}return O})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(p)),I}}return O}ensureLoaded(){let p=Zm(this[Ue],this[Qr],this[Ie]);if(p)return this[uN]=!0,dN(p,A=>{this[Qr]=A,this[pe]=A.value,this[md]=A.version})}static setTTLExpiration(p){if(typeof p=="number")E=p*1e3,f||(f=0);else if(p&&typeof p=="object")E=p.expiration*1e3,f=(p.eviction||0)*1e3,xe=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");xe=xe||(E+f)/4,Jd()}static enableAuditing(p=!0){h=p,p&&Ey(),je.audit=p}static coerceId(p){return p===""?null:cm(p,U)}static async dropTable(){if(delete ft[c][s],c===o){for(let p of S)u.remove(je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(je.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ss])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let A=je.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,A){let D=zd(p);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,I=A?.select;if(O?.length>0||_y&&I){if(A||(A={}),I){let P=O?.length>0&&_N(O,"read");A.select=I.map(y=>{let B=y.name||y;if(!P||P[B]){let F=zi[B]?.definition?.tableClass;if(F){if(y.name||(y={name:y}),!F.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=O.filter(P=>P.read&&!zi[P.attribute_name]).map(P=>P.attribute_name);return A}else return!0}}allowUpdate(p,A){let D=zd(p);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let I=_N(O,"update");for(let P in A)if(!I[P])return!1;for(let P of O){let y=P.attribute_name;!P.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(p,A){if(this[Ss]){let D=zd(p);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let I=_N(O,"insert");for(let P in A)if(!I[P])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return zd(p)?.delete}update(p,A){if(!Zn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let O;return typeof p=="object"&&p&&(A?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[pe]={},this[Pt]=p):(O=this[Pt],O&&(p=Object.assign(O,p)),this[Pt]=O=p)),this._writeUpdate(this[Pt],A),this}addTo(p,A){if(typeof A=="number"||typeof A=="bigint")this[fd]===Ok?this.set(p,(+this.getProperty(p)||0)+A):(this[fd]||this.update(),this.set(p,new sm(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,A){if(typeof A=="number")return this.addTo(p,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Qr]}invalidate(p){let A=this[Ie],D=this[Ue];ql(D),Zn(this[Ie]).addWrite({key:D,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Ie]?.nodeName,before:Ge.invalidate?.bind(this,A,D),beforeIntermediate:we.invalidate?.bind(this,A,D),commit:(I,P)=>{if(P?.version>I)return;let y=null;for(let B in r)y||(y={}),y[B]=this.getProperty(B);g(D,y,this[Qr],I,Ed,h,this[Ie],0,"invalidate")}})}static evict(p,A,D){let O=this.Source,I;if(!((N||h)&&(!A||(I=i.getEntry(p),!I||!A)||I.version!==D))){if(N){if(i.hasLock(p,I.version))return;let P;for(let y in r)P||(P={}),P[y]=A[y];if(P)return g(p,P,I,D,hd,null,null,0,null,!0)}return i.ifVersion(p,D,()=>{jd(p,A,null)}),h?g(p,null,I,D,hd,null,null,0,null,!0):i.remove(p,D)}}lock(){throw new Error("Not yet implemented")}static operation(p,A){return p.table||=s,p.schema||=c,Lk.operation(p,A)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,A,D){let O=this[Ie],I=Zn(O),P=this[Ue];ql(P);let y=this[Qr];this[fd]=A?Ok:bue;let B={key:P,store:i,entry:y,nodeName:O?.nodeName,validate:F=>{p||(p=this[Pt]),A||p&&rm(this[Pt]===p?this:p)?O?.source||(I.checkOverloaded(),this.validate(p,!A),M&&(p[M.name]=M.type==="Date"?new Date(F):M.type==="String"?new Date(F).toISOString():F),A&&(t&&p[t]!==P&&(p[t]=P),q&&(y?.value?p[q.name]=y?.value[q.name]:p[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),p=Ya(p))):I.removeWrite(B)},before:A?Ge.put?()=>Ge.put(O,P,p):null:Ge.patch?()=>Ge.patch(O,P,p):Ge.put?()=>Ge.put(O,P,Ya(this)):null,beforeIntermediate:A?we.put?()=>we.put(O,P,p):null:we.patch?()=>we.patch(O,P,p):we.put?()=>we.put(O,P,Ya(this)):null,commit:(F,C,x)=>{if(x){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Qr]=C,C?.value?.[pe])throw new Error("Can not assign a record to a record, check for circular references");A||(this[pe]=C?.value??null)}this[Pt]=void 0,this[md]=F;let H=C?.value,ee=p;if(this[fd]=0,C?.version>=F)if(h){let ue=C.localTime,Pe=C.version;for(;ee&&(ue>F||Pe>=F&&ue>0);){let re=l.get(ue);if(!re)break;let Z=Yt(re);if(Pe=Z.version,Pe>F){if(Z.type==="patch"){let ge=Z.getValue(i);ee=em(ee,ge)}else if(Z.type==="put"||Z.type==="delete")return}else if(Pe===F)return;ue=Z.previousLocalTime}}else{if(A)return;ee=em(ee,H)}let fe;if(A?fe=ee:(this[pe]=H,fe=A?ee:Ya(this,ee)),this[pe]=fe,fe?.[pe])throw new Error("Can not assign a record to a record, check for circular references");let se;A||(se=p),jd(P,H,fe);let Be=A?"put":"patch";g(P,fe,C,F,0,h,O,O.expiresAt||(E?E+Date.now():0),Be,!1,se),O.expiresAt&&Jd()}};I.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ss]){for await(let A of this.search(p))(await je.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[pe]?this._writeDelete(p):!1}_writeDelete(p){let A=Zn(this[Ie]),D=this[Ue];ql(D);let O=this[Ie];return A.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Ge.delete?.bind(this,O,D),beforeIntermediate:we.delete?.bind(this,O,D),commit:(I,P,y)=>{let B=P?.value;y&&(O&&P?.version>(O.lastModified||0)&&(O.lastModified=P.version),lm(this,P)),!(P?.version>I)&&(jd(this[Ue],B),ct.trace("Write delete entry",D,I),h||m?(g(D,null,this[Qr],I,0,h,this[Ie],0,"delete"),h||Jd()):i.remove(this[Ue]))}}),!0}search(p){let A=this[Ie],D=Zn(A);if(!p)throw new Error("No query provided");let O=p.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(O=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(O));let I,P={};function y(Z,ge){let qe;switch(ge){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let ys=qe&&{},Ji;for(let ze of Z){if(ze.conditions){ze.conditions=y(ze.conditions,ze.operator);continue}let Xt=ze[0]??ze.attribute,Ln=Xt==null?U:Mi(S,Xt);if(Ln){if(qe){let Is=Es(Xt),Zt=ys[Is];Zt?(Zt.push(ze),Ji=!0):ys[Is]=[ze]}(Ln.type||fO[ze.comparator])&&(ze[1]===void 0?ze.value=F(ze.value,Ln):ze[1]=F(ze[1],Ln))}else if(Xt!=null)throw(0,An.handleHDBError)(new Error,`${Xt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Ji)for(let ze in ys){let Xt=ys[ze],Ln=Xt.length;if(Ln>1)for(let Is=0;Is<Ln;Is++){let Zt=Xt[Is];if(Zt.comparator==="ge"||Zt.comparator==="greater_than_equal")for(let Xi=0;Xi<Ln;Xi++){let ac=Xt[Xi];(ac.comparator==="le"||ac.comparator==="less_than_equal")&&(Zt.comparator="between",Zt.value=[Zt.value,ac.value],Z.splice(Z.indexOf(ac),1))}if(Zt.comparator==="equals"||!Zt.comparator){for(let Xi=0;Xi<Ln;Xi++)if(Xi!==Is){let ac=Xt[Xi];Z.splice(Z.indexOf(ac),1)}break}}}return Z}a(y,"prepareConditions");function B(Z,ge){if(p.enforceExecutionOrder)return Z;for(let qe of Z)qe.conditions&&(qe.conditions=B(qe.conditions,qe.operator));return Z.length>1&&ge!=="or"?(0,Ck.sortBy)(Z,Zh(je)):Z}a(B,"orderConditions");function F(Z,ge){return Array.isArray(Z)?Z.map(qe=>cm(qe,ge)):cm(Z,ge)}a(F,"coerceTypedValues");let C=p.operator;(O.length>0||C)&&(O=y(O,C));let x=typeof p.sort=="object"&&p.sort,H;if(x&&C!=="or"){let Z=x.attribute;if(I=O.find(ge=>Es(ge.attribute)===Es(Z)),!I){let ge=Mi(S,Z);if(!ge)throw(0,An.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);if(ge.indexed)I={attribute:Z,comparator:"sort"},O.push(I);else if(O.length===0&&!p.allowFullScan)throw(0,An.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not indexed and not combined with any other conditions`,404)}I&&(I.descending=!!x.descending)}O=B(O,C),x&&(I&&O[0]===I?x.next&&(H={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(I&&O.splice(O.indexOf(I),1),H=x));let ee=p.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:O,operator:C,postOrdering:H,selectApplied:!!ee};let fe=D.useReadTxn(),se=EO(O,C,je,fe,p,A,(Z,ge)=>dy(Z,ee,A,fe,ge),P),Be=p.ensureLoaded!==!1;H||(se=re(se));let ue=je.transformEntryForSelect(ee,A,fe,P,Be,!0),Pe=je.transformToOrderedSelect(se,ee,H,fe,A,ue);function re(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(re,"applyOffset"),H&&(Pe=re(Pe)),Pe.onDone=()=>{Pe.onDone=null,D.doneReadTxn()},Pe.selectApplied=!0,Pe.getColumns=()=>{if(ee){let Z=[];for(let ge of ee)ge==="*"?Z.push(...S.map(qe=>qe.name)):Z.push(ge.name||ge);return Z}return S.map(Z=>Z.name)},Pe}static transformToOrderedSelect(p,A,D,O,I,P){let y=new cY;if(D){p=dy(p,A,O,I,null);let B;y.iterate=function(){let C,x=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),H,ee=D.dbOrderedAttribute,fe,se,Be=!0;function ue(re){let Z=re.next&&ue(re.next),ge=re.descending;return(qe,ys)=>{let Ji=eS(qe,re.attribute,O),ze=eS(ys,re.attribute,O),Xt=ge?(0,Qa.compareKeys)(ze,Ji):(0,Qa.compareKeys)(Ji,ze);return Xt===0?Z?.(qe,ys)||0:Xt}}a(ue,"createComparator");let Pe=ue(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return y.onDone&&y.onDone(),re}else return{value:await P.call(this,re.value)};B=[],fe&&B.push(fe);do if(re=await x.next(),re.done){if(H=!0,B.length)break;return y.onDone&&y.onDone(),re}else{let Z=re.value;if(Z?.then&&(Z=await Z),ee){let ge=eS(Z,ee,O);if(Be)Be=!1,se=ge;else if(ge!==se){se=ge,fe=Z;break}}B.push(Z)}while(!0);return D.isGrouped,B.sort(Pe),C=B[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await P.call(this,re.value)}},return(){y.onDone&&y.onDone(),x.return()},throw(){y.onDone&&y.onDone(),x.throw()}}};let F=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let x=0;x<A.length;x++){let H=A[x],ee;if(H.name===C.attribute[0]){for(ee=H.sort||(H.sort={});ee.next;)ee=ee.next;ee.attribute=C.attribute.slice(1),ee.descending=C.descending}else H===C.attribute[0]&&(A[x]=ee={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(D)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(P);return y}static transformEntryForSelect(p,A,D,O,I,P){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(x=>(A?.transaction?.stale&&(A.transaction.stale=!1),x?.key??x),"transform");return p===t?C:p.asArray?x=>[C(x)]:x=>({[t]:C(x)})}let y;I&&N&&!p?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(y=!0);let B,F=a(function(C){let x;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(zm=C,x=C.value||C.deref?.(),!x&&(C.key===void 0||C.deref)){if(C=Xm(C.key??C,A,{transaction:D,lazy:p?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));x=C?.value}if(y&&C?.metadataFlags&(Ed|hd)||C?.expiresAt&&C?.expiresAt<Date.now()){let H=Zm(C.key??C,C,A);if(H?.then)return H.then(F)}}if(x==null)return P?Ka.SKIP:x;if(p&&!(p[0]==="*"&&p.length===1)){let H,ee=a((se,Be)=>{let ue;typeof se=="object"?ue=se.name:ue=se;let Pe=zi?.[ue],re;if(Pe){let Z=O?.[ue];if(Z)if(Z.hasMappings){let qe=Pe.from?x[Pe.from]:Es(C.key);re=Z.get(qe),re||(re=[])}else re=Z.fromRecord?.(x);else re=Pe(x,A,C);let ge=a(qe=>{if(qe&&typeof qe=="object"){let ys=Pe.definition?.tableClass||je;B||(B={});let Ji=B[ue]||(B[ue]=ys.transformEntryForSelect(ue===se?null:se.select||(Array.isArray(se)?se:null),A,D,Z,I));if(Array.isArray(qe)){let ze=[],Xt=ys.transformToOrderedSelect(qe,se.select,typeof se.sort=="object"&&se.sort,A,D,Ji)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ln=a(Zt=>{for(;!Zt.done;){if(Zt?.then)return Zt.then(Ln);ze.push(Zt.value),Zt=Xt.next()}Be(ze,ue)},"nextValue"),Is=Ln(Xt.next());Is&&(H||(H=[]),H.push(Is));return}else if(qe=Ji.call(this,qe),qe?.then){H||(H=[]),H.push(qe.then(ze=>Be(ze,ue)));return}}Be(qe,ue)},"handleResolvedValue");re?.then?(H||(H=[]),H.push(re.then(ge))):ge(re);return}else re=x[ue],re&&typeof re=="object"&&ue!==se&&(re=je.transformEntryForSelect(se.select||se,A,D,null)({value:re}));Be(re,ue)},"selectAttribute"),fe;if(typeof p=="string")ee(p,se=>{fe=se});else if(Array.isArray(p))if(p.asArray)fe=[],p.forEach((se,Be)=>{se==="*"?p[Be]=x:ee(se,ue=>fe[Be]=ue)});else{fe={};let se=p.forceNulls;for(let Be of p)if(Be==="*")for(let ue in x)fe[ue]=x[ue];else ee(Be,(ue,Pe)=>{ue===void 0&&se&&(ue=null),fe[Pe]=ue})}else throw new An.ClientError("Invalid select"+p);return H?Promise.all(H).then(()=>fe):fe}return x},"transform");return F}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||St({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let A=!p.rawEvents,D=[],O=Tk(je,this[Ue]??null,function(P,y,B,F){try{let C=y.getValue?.(i,A);if(!C&&y.type==="patch"&&A){let H=i.getEntry(P);H?.version===y.version?C=H.value:C=y.getValue?.(i,!0,B),y.type="put"}let x={id:P,timestamp:B,value:C,version:y.version,type:y.type,beginTxn:F};D?D.push(x):this.send(x)}catch(C){ct.error(C)}},p.startTime||0,p),I=(async()=>{this[Ss]&&(O.includeDescendants=!0,p.onlyChildren&&(O.onlyChildren=!0)),p.supportsTransactions&&(O.supportsTransactions=!0);let P=this[Ue],y=p.previousCount;y>1e3&&(y=1e3);let B=p.startTime;if(this[Ss]){if(B){if(y)throw new An.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,value:C}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let x=Yt(C);if(x.tableId!==n)continue;let H=x.recordId;if(P==null||Ik(P,H)){let ee=x.getValue(i,A,F);if(O.send({id:H,timestamp:F,value:ee,version:x.version,type:x.type}),O.queue?.length>Nk&&await O.waitForDrain()===!1)return}O.startTime=F}}else if(y){let F=[];for(let{key:C,value:x}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Yt(x);if(H.tableId!==n)continue;let ee=H.recordId;if(P==null||Ik(P,ee)){let fe=H.getValue(i,A,C);if(F.push({id:ee,timestamp:C,value:fe,version:H.version,type:H.type}),--y<=0)break}}catch(H){ct.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)O.send(F[--C]);F[0]&&(O.startTime=F[0].timestamp)}else if(!p.omitCurrent){for(let{key:F,value:C,version:x,localTime:H}of i.getRange({start:P??!1,end:P==null?void 0:[P,Qa.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:F,timestamp:H,value:C,version:x,type:"put"}),O.queue?.length>Nk&&await O.waitForDrain()===!1))return}}else{y&&!B&&(B=0);let F=this[Qr]?.localTime;if(F===$S&&(i.cache?.delete(P),this[Qr]=i.getEntry(P),ct.trace("re-retrieved record",F,this[Qr]?.localTime),F=this[Qr]?.localTime),ct.trace("Subscription from",B,"from",P,F),B<F){let C=[],x=F;do{let H=l.get(x);if(H){p.omitCurrent=!0;let ee=Yt(H),fe=ee.getValue(i,A,x);A&&(ee.type="put"),C.push({id:P,value:fe,timestamp:x,...ee}),x=ee.previousLocalTime}else break;y&&y--}while(x>B&&y!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=F}!p.omitCurrent&&this.doesExist()&&O.send({id:P,timestamp:F,value:this[pe],version:this[md],type:"put"})}for(let F of D)O.send(F);D=null})();return p.listener&&O.on("data",p.listener),O}doesExist(){return!!(this[pe]||this[fd])}publish(p,A){this._writePublish(p,A)}_writePublish(p,A){let D=Zn(this[Ie]),O=this[Ue]||null;ql(O);let I=this[Ie];D.addWrite({key:O,store:i,entry:this[Qr],nodeName:I?.nodeName,validate:()=>{I?.source||(D.checkOverloaded(),this.validate(p))},before:Ge.publish?.bind(this,I,O,p),beforeIntermediate:we.publish?.bind(this,I,O,p),commit:(P,y,B)=>{y===void 0&&m&&!h&&Jd(),g(O,y?.value??null,y,y?.version||P,0,!0,I,y?.expiresAt,"message",!1,p)}})}validate(p,A){let D,O=a((I,P,y)=>{if(P.type&&I!=null)if(A&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be an object${P.type?" ("+P.type+")":""}`);let B=P.properties;for(let F=0,C=B.length;F<C;F++){let x=B[F],H=O(I[x.name],x,y+"."+x.name);H&&(I[x.name]=H)}if(P.sealed&&I!=null&&typeof I=="object")for(let F in I)B.find(C=>C.name===F)||(D||(D=[])).push(`Property ${F} is not allowed within object in property ${y}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(B=>typeof B=="string")||(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a string`);break;case"Boolean":typeof I!="boolean"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a bigint`)}break;case"Bytes":I instanceof Uint8Array||(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(I)){if(P.elements)for(let B=0,F=I.length;B<F;B++){let C=I[B],x=O(C,P.elements,y+"[*]");x&&(I[B]=x)}}else(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a Buffer or Uint8Array`);break}P.nullable===!1&&I==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=S.length;I<P;I++){let y=S[I];if(!y.relationship&&(!A||y.name in p)){let B=O(p[y.name],y,y.name);B&&(p[y.name]=B)}}if(d)for(let I in p)S.find(P=>P.name===I)||(D||(D=[])).push(`Property ${I} is not allowed`);if(D)throw new An.ClientError(D.join(". "))}getUpdatedTime(){return this[md]}wasLoadedFromSource(){return N?!!this[uN]:void 0}static async addAttributes(p){let A=S.slice(0);for(let D of p){if(!D.name)throw new An.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new An.ClientError("Attribute names cannot include backticks or forward slashes");(0,Dk.validateAttribute)(D.name),A.push(D)}return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static async removeAttributes(p){let A=S.filter(D=>!p.includes(D.name));return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static getRecordCount(p){let A=i.getStats().entryCount,D=1e3/2,O=performance.now(),I=Math.floor(A/2),P=p?.exactCount,y=0,B=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,B++,!P&&B<I&&performance.now()-O>D){F=B;break}if(F){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))re!=null&&y++;let x=F*2,H=(y+C)/x,ee=Math.pow((y-C+1)/F/2,2)+H*(1-H)/x,fe=Math.max(Math.sqrt(ee)*A,1),se=Math.round(H*A),Be=Math.max(se-1.96*fe,y+C),ue=Math.min(se+1.96*fe,A),Pe=Math.pow(10,Math.round(Math.log10(fe)));return Pe>se&&(Pe=Pe/10),y=Math.round(se/Pe)*Pe,{recordCount:y,estimatedRange:[Math.round(Be),Math.round(ue)]}}return{recordCount:y}}static updatedAttributes(){zi=this.propertyResolvers={$id:(p,A,D)=>({value:D.key}),$updatedtime:(p,A,D)=>D.version,$record:(p,A,D)=>D?{value:p}:p};for(let p of this.attributes){p.resolve=null;let A=p.relationship;if(A)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),_y=!0,A.to)p.elements?.definition?(zi[p.name]=p.resolve=(D,O,I)=>{let P=D[A.from?A.from:t],y=p.elements.definition.tableClass;return I?sl({attribute:A.to,value:P},Zn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:A.to,value:P}],O).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,A.from&&(p.resolve.from=A.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(A.from){let D=p.definition||p.elements?.definition;D?(zi[p.name]=p.resolve=(O,I,P)=>{let y=O[A.from];if(y!==void 0){if(p.elements){let B,F=y.map(C=>{let x=P?D.tableClass.primaryStore.getEntry(C,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(C,I);return x?.then&&(B=!0),x});return A.filterMissing?B?Promise.all(F).then(C=>C.filter(wk)):F.filter(wk):B?Promise.all(F):F}return P?D.tableClass.primaryStore.getEntry(y,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(y,I)}},p.set=(O,I)=>{if(Array.isArray(I)){let P=I.map(y=>y[Ue]||y[D.tableClass.primaryKey]);O[A.from]=P}else{let P=I[Ue]||I[D.tableClass.primaryKey];O[A.from]=P}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=A.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`)}im(this,this)}static async deleteHistory(p=0){let A;for(let{key:D,value:O}of l.getRange({start:0,end:p}))await pd(),Yt(O).tableId===n&&(A=l.remove(D));await A}static async*getHistory(p=0,A=1/0){for(let{key:D,value:O}of l.getRange({start:p,end:A})){await pd();let I=Yt(O);I.tableId===n&&(yield{id:I.recordId,localTime:D,version:I.version,type:I.type,value:I.getValue(i,!0,D),user:I.user})}}static async getHistoryOfRecord(p){let A=[];if(p==null)throw new Error("An id is required");let D=i.getEntry(p);if(!D)return A;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let I=0;do{await pd();let P=l.get(O);if(P){let y=Yt(P);A.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(I<1e3&&O);return A.reverse()}static cleanup(){z?.remove()}}je.updatedAttributes();let _Y=je.prototype;return _Y[Oue]=!0,E&&je.setTTLExpiration(E/1e3),W&&dY(),je;function jd(Q,p,A){let D;for(let O in r){let I=r[O],P=I.isIndexing,y=A?.[O],B=p?.[O];if(y===B&&!P)continue;D=!0;let F=I.indexNulls,C=(0,Sd.getIndexedValues)(y,F),x=(0,Sd.getIndexedValues)(B,F);if(x?.length>0){let H=new Set(x);if(C=C?C.filter(ee=>{if(H.has(ee))H.delete(ee);else return!0}):[],x=Array.from(H),(x.length>0||C.length>0)&&Ak){let ee=x.concat(C).map(fe=>({key:fe,value:Q}));I.prefetch(ee,yk)}for(let ee=0,fe=x.length;ee<fe;ee++)I.remove(x[ee],Q)}else C?.length>0&&Ak&&I.prefetch(C.map(H=>({key:H,value:Q})),yk);if(C)for(let H=0,ee=C.length;H<ee;H++)I.put(C[H],Q)}return D}a(jd,"updateIndices");function ql(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>bk)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;case"bigint":if(Q<2n**64n&&Q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,Qa.writeKey)(Q,Nue,0)>bk)throw new Error("Primary key size is too large: "+Q.length);return!0}a(ql,"checkValidId");function Xm(Q,p,A,D,O){let I=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),A.transaction?.isDone)return O(null,Q);let P=i.getEntry(Q,A);return P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),O(P,Q)},"whenPrefetched");return D?I():_e>0?(_e--,I()):new Promise((P,y)=>{_e===0?(_e--,i.prefetch([Q],()=>{B(),F()})):(J.push(Q),ce.push(F),J.length>uY&&(_e--,B()));function B(){if(J.length>0){let C=ce;i.prefetch(J,()=>{_e===-1?B():_e++;for(let x of C)x()}),J=[],ce=[],de>2&&de--}else _e=de,de<lY&&de++}a(B,"prefetch");function F(){try{P(I())}catch(C){y(C)}}a(F,"load")})}a(Xm,"loadLocalRecord");function zd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return yue;let A=p[c],D,O=A?.tables;if(O)return O[s];if(c==="data"&&(D=p[s])&&!D.tables)return D}a(zd,"getTablePermissions");function Zm(Q,p,A,D){if(N){let O;if(A.noCache?O=!0:(p?(!p.value||p.metadataFlags&(Ed|hd)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,fn(!O,"cache-hit",s)),O){let I=fy(Q,p,A).then(P=>(P?.value?.[pe]&&ct.error("Can not assign a record with a record property"),A&&(P?.version>(A.lastModified||0)&&(A.lastModified=P.version),A.lastRefreshed=Date.now()),P));if(A?.onlyIfCached||p?.value&&D?.allowStaleWhileRevalidate?.(p,Q)){if(I.catch(P=>ct.warn(P)),A?.onlyIfCached&&!D.doesExist())throw new An.ServerError("Entry is not cached",504);return}else return I}}else if(p?.value&&p.expiresAt&&p.expiresAt<Date.now())return je.evict(p.key,p.value,p.version),p.value=null,{then(O){return O(p)}}}a(Zm,"ensureLoadedFromSource");function Zn(Q){let p=Q?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let A=p.next;if(!A)return p=p.next=new Ea,p.lmdbDb=i,p;p=A}while(!0)}else return new lE}a(Zn,"txnForContext");function eS(Q,p,A){if(!Q)return;zm=Q;let D=Q.value||Q.deref?.()||(zm=i.getEntry(Q.key))?.value;if(typeof p=="object"){let I=zi,P=D;for(let y=0,B=p.length;y<B;y++){let F=p[y],C=I?.[F];P=C&&P?C(P,A,!0)?.value:P?.[F],I=C?.definition?.tableClass?.propertyResolvers}return P}let O=zi[p];return O?O(D,A):D[p]}a(eS,"getAttributeValue");function dy(Q,p,A,D,O){let I=O?.length,P={transaction:D,lazy:I>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function B(F,C){let x=F?.value;if(!x)return Ka.SKIP;for(let H=0;H<I;H++)if(!y?.includes(H)&&!O[H](x,F))return Ka.SKIP;return C!==void 0&&(F.key=C),F}if(a(B,"processEntry"),I>0||!Q.hasEntries){let F=Q.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return I>0?B(C):C;if(C==null)return Ka.SKIP;for(let x=0;x<I;x++){let ee=O[x].idFilter;if(ee){if(!ee(C))return Ka.SKIP;y||(y=[]),y.push(x)}}return Xm(C,A,P,!1,B)});return Array.isArray(Q)&&(F=F.filter(C=>C!==Ka.SKIP)),F.hasEntries=!0,F}return Q}a(dy,"transformToEntries");async function fy(Q,p,A){let D=p?.metadataFlags,O=p?.version,I,P;if(!i.attemptLock(Q,O,()=>{clearTimeout(P);let C=i.getEntry(Q);!C||!C.value||C.metadataFlags&(Ed|hd)?I(fy(Q,i.getEntry(Q),A)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(Q,O)},Aue)});let y=p?.value,B={requestContext:A,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},F=A?.responseHeaders;return new Promise((C,x)=>{let H;dN(it(B,async ee=>{let fe=performance.now(),se,Be,ue;try{for(let ge of je.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(B.source=ge,se=await ge.get(Q,B),se))break;ue=D&Ed;let re=B.lastModified||ue&&O;Be=ue||re>O||!y,re||(re=(0,Sd.getNextMonotonicTime)());let Z=performance.now()-fe;if(vr(Z,"cache-resolution",s),F&&BA(F,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ee.timestamp=re,E&&!B.expiresAt&&(B.expiresAt=Date.now()+E),se){if(typeof se!="object")throw new Error("Only objects can be cached and stored in tables");typeof se.toJSON=="function"&&(se=se.toJSON()),t&&se[t]!==Q&&(se[t]=Q)}H=!0,C({version:re,value:se})}catch(re){re.message+=` while resolving record ${Q} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),ct.trace(re.message,"(returned stale record)")):x(re),B.transaction.abort();return}if(A?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Zn(B).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:(re,Z)=>{if(Z?.version!==O)return;let ge=jd(Q,y,se);se?(we.put?.(B,Q,se),g(Q,se,Z,re,0,h&&Be||null,B,B.expiresAt,"put",!!ue)):(we.delete?.(B,Q),h||m?g(Q,null,Z,re,0,h&&Be||null,B,0,"delete",!!ue):i.remove(Q,O))}})}),()=>{i.unlock(Q,O)},ee=>{i.unlock(Q,O),H&&ct.error("Error committing cache update",ee)})})}a(fy,"getFromSource");function Jd(){if(xe!==Wd&&(Wd=xe,(0,Wa.getWorkerIndex)()===(0,Wa.getWorkerCount)()-1)){if(Qd&&clearTimeout(Qd),!xe)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/xe)*xe+Q.getTime(),A=a(D=>{ct.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Qd=setTimeout(()=>v=v.then(async()=>{if(A(Math.max(D+xe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qd);return}let O=50,I=new Array(O),P=0;ct.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:B,value:F,version:C,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+Rue<Date.now()?H=i.remove(B,C):x&&x+f<Date.now()&&(H=je.evict(B,F,C),y++),H&&(await I[P],I[P]=H.catch(ee=>{ct.error("Cleanup error",ee)}),++P>=O&&(P=0)),await pd()}ct.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ct.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");A(p)}}a(Jd,"scheduleCleanup");function Ey(){z=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(Ey,"addDeleteRemoval");function dY(){(0,Wa.getWorkerIndex)()===0&&setInterval(async()=>{if(!Jm){Jm=!0;try{let Q=W.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${W} must be indexed`);for(let A of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of p.getValues(A)){let O=i.getEntry(D);O?.value?O.value[Q]<Date.now()&&je.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>p.remove(A,D))}await pd()}}catch(Q){ct.error("Error in evicting old records",Q)}finally{Jm=!1}}},gue).unref()}a(dY,"runRecordExpirationEviction")}function _N(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 yk(){}function Iue(e){Lk=e}function cm(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(wue.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,um.autoCast)(e);default:return e}}function Ik(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function dN(e,t,r){return e?.then?e.then(t,r):t(e)}function lm(e,t){e[Qr]=t,e[pe]=t?.value??null,e[md]=t?.version}function wk(e){return e!=null}function Ts(e){try{return JSON.stringify(e)}catch{return e}}var gs,Ka,Sd,Ck,Dk,Rd,An,Td,gd,ct,Qa,Wa,um,Tue,Lk,gue,Rue,Ak,Aue,md,Oue,Qr,fd,Ok,bue,uN,yl,Ed,hd,Nue,bk,Nk,yue,eIe,wue,pd,hp=be(()=>{gs=G(L()),Ka=require("lmdb"),Sd=G(Nr()),Ck=require("lodash"),Dk=G(ru());Mn();vg();Rd=G(X());Rk();An=G(ie()),Td=G(hi()),gd=G(os());Re();tp();ct=G(k());dE();ha();Qa=require("ordered-binary"),Wa=G(rt());no();um=G(Y());uu();Ti();Xp();w_();Tue=new Uint8Array(9);Tue[8]=192;gue=6e4,Rue=864e5;Rd.initSync();Ak=Rd.get(gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Aue=1e4,md=Symbol.for("version"),Oue=Symbol.for("incremental-update"),Qr=Symbol("entry"),fd=Symbol("is-saving"),Ok=1,bue=2,uN=Symbol("loaded-from-source"),yl={isNotification:!0,ensureLoaded:!1},Ed=1,hd=8,Nue=Buffer.allocUnsafeSlow(8192),bk=1978,Nk=100,yue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},eIe=(0,um.convertToMS)(Rd.get(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(_m,"makeTable");a(_N,"attributesAsObject");a(yk,"noop");a(Iue,"setServerUtilities");wue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(cm,"coerceType");a(Ik,"isDescendantId");pd=a(()=>new Promise(setImmediate),"rest");a(dN,"when");a(lm,"updateResource");a(wk,"exists");a(Ts,"stringify")});var $e={};Ve($e,{database:()=>Ic,databases:()=>ft,dropDatabase:()=>qg,dropTableMeta:()=>Mue,getDatabases:()=>Mr,getDefaultCompression:()=>Oh,getTables:()=>Cue,onUpdatedTable:()=>Pb,readMetaDb:()=>Ad,resetDatabases:()=>R_,table:()=>St,tables:()=>nn});function Cue(){return pm||Mr(),nn||{}}function Mr(){if(pm)return ft;pm=!0,Cl=new Map;let e=(0,Ot.getHdbBasePath)()&&(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),t=(0,Ot.get)(Vt.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,On.existsSync)(e)?e:(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,On.existsSync)(e))for(let r of(0,On.readdirSync)(e,{withFileTypes:!0})){let n=(0,lt.basename)(r.name,".mdb");r.isFile()&&(0,lt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ad((0,lt.join)(e,r.name),null,n)}if((0,On.existsSync)((0,wl.getBaseSchemaPath)())){for(let r of(0,On.readdirSync)((0,wl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,lt.join)((0,wl.getBaseSchemaPath)(),r.name),s=(0,lt.join)((0,wl.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,On.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,lt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,lt.join)(s,i.name);Ad((0,lt.join)(n,i.name),(0,lt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,On.existsSync)(s))for(let o of(0,On.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,lt.extname)(o.name).toLowerCase()===".mdb"&&Ad((0,lt.join)(s,o.name),(0,lt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,lt.join)(c.path,(0,lt.basename)(o+".mdb"));(0,On.existsSync)(l)&&Ad(l,o,r,null,!0)}}for(let r in ft){let n=Cl.get(r);if(n){let s=ft[r];r.includes("delete")&&jn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(jn.trace(`delete table class ${i}`),delete s[i])}else if(delete ft[r],r==="data"){for(let s in nn)delete nn[s];delete nn[mm]}}return Cl=null,ft}}function R_(){pm=!1;for(let[,e]of Bo)e.needsDeletion=!0;Mr();for(let[e,t]of Bo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bo.delete(e));return ft}function Ad(e,t,r=hN,n,s){let i=new fN.default(e,!1);try{let o=Bo.get(e);o?o.needsDeletion=!1:(o=(0,fm.open)(i),Bo.set(e,o));let c=new ja.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(dm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,On.existsSync)(n)&&(i.path=n,_=(0,fm.open)(i),_.isLegacy=!0):_=Jp(o));let u=vk(r),d=u[mm],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[m,S]=f.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let g=E.get(m);g||E.set(m,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:m,primary:S}=h;if(!S){for(let J of m)if(J.is_hash_attribute||J.isPrimaryKey){S=J;break}if(!S){jn.fatal(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(m)}`);continue}}let g=u[f],T={},b=[],N,U,v=typeof S.audit=="boolean"?S.audit:(0,Ot.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,M=S.expiration,W=S.eviction,z=S.sealed;if(g)T=g.indices,b=g.attributes,g.schemaVersion++;else{N=S.tableId,N?N>=(l.get(Il)||0)&&l.putSync(Il,N+1):(S.tableId=N=l.get(Il),N||(N=1),l.putSync(Il,N+1),l.putSync(S.key,S));let J=new ja.default(!S.is_hash_attribute,S.is_hash_attribute);if(J.compression=S.compression,J.compression){let ce=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Uk;J.compression.threshold=ce}U=Rf(o.openDB(S.key,J)),U.rootStore=o,U.tableId=N}for(let J of m){J.attribute=J.name;try{if(!J.is_hash_attribute&&(J.indexed||J.attribute&&!J.name)){if(!T[J.name]){let _e=new ja.default(!J.is_hash_attribute,J.is_hash_attribute);T[J.name]=o.openDB(J.key,_e),T[J.name].indexNulls=J.indexNulls}let ce=b.find(_e=>_e.name===J.name);ce?b.splice(b.indexOf(ce),1,J):b.push(J)}}catch(ce){jn.error("Error trying to update attribute",J,b,T,ce)}}if(!g){g=Bk(u,f,_m({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:M&&M*1e3,evictionMS:W&&W*1e3,trackDeletes:q,tableName:f,tableId:N,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let J of pN)J(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function vk(e){let t=ft[e];if(t||(e==="data"?t=ft[e]=nn:e==="system"?Object.defineProperty(ft,"system",{value:t=Object.create(null),configurable:!0}):t=ft[e]=Object.create(null)),Cl&&!Cl.has(e)){let r=new Set;t[mm]=r,Cl.set(e,r)}return t}function Bk(e,t,r){return e[t]=r,r}function Ic({database:e,table:t}){e||(e=hN),Mr();let r=vk(e),n=(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),s=(0,Ot.get)(Vt.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,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||((0,On.existsSync)(n)?n:(0,lt.join)((0,Ot.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME));let o=(0,lt.join)(n,(i?t:e)+".mdb"),c=Bo.get(o);if(!c){let l=new fN.default(o,!1);c=(0,fm.open)(l),Bo.set(o,c)}return c}async function qg(e){if(!ft[e])throw new Error("Schema does not exist");let t=ft[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bo.delete(r.path),r.status==="open"&&(await r.close(),await Od.remove(r.path));if(r||(r=Ic({database:e,table:null}),r.status==="open"&&(await r.close(),await Od.remove(r.path))),e==="data"){for(let n in nn)delete nn[n];delete nn[mm]}delete ft[e]}function St({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=hN);let d=Ic({database:t,table:e}),E=ft[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,g;_==null&&(_=!0);let T=new ja.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,N;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=Jp(d)),m=i.find(ce=>ce.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=!0,m.schemaDefined=_,m.compression=Oh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,Ot.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),jn.trace(`${e} table loading, opening primary store`);let W=new ja.default(!1,!0);W.compression=m.compression;let z=e+"/",J=Rf(d.openDB(z,W));J.rootStore=d,g=d.dbisDb=d.openDB(dm.INTERNAL_DBIS_NAME,T),J.tableId=g.get(Il),J.tableId||(J.tableId=1),g.putSync(Il,J.tableId+1),m.tableId=J.tableId,f=Bk(E,e,_m({primaryStore:J,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:g})),f.schemaVersion=1,b=!0,q(),g.put(z,m)}S=f.indices,g=g||(d.dbisDb=d.openDB(dm.INTERNAL_DBIS_NAME,T)),f.dbisDB=g;let U=[];for(let{key:M,value:W}of g.getRange({start:!0})){let[z,J]=M.toString().split("/");if(J===""&&(J=W.name),J){if(z!==e)continue}else J=z;let ce=i.find(de=>de.name===J),_e=!ce?.indexed&&W.indexed&&!W.isPrimaryKey;if((!ce||_e)&&(q(),b=!0,ce||g.remove(M),_e)){let de=f.indices[z];de&&U.push(de)}}let v=[];try{for(let M of i||[]){if(M.relationship)continue;let W=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:W,configurable:!0});let z=g.get(W);if(M.isPrimaryKey){if(z=z||g.get(W=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let ce=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),ce.audit=o),r&&(ce.expiration=+r),n&&(ce.eviction=+n),c!==void 0&&(ce.sealed=c),b=!0,q(),g.put(W,ce)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let J=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let ce=new ja.default(!0,!1),_e=d.openDB(W,ce);(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,q(),z=g.get(W),(J||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,_e.isIndexing=!0,Object.defineProperty(M,"dbi",{value:_e}),v.push(M))),g.put(W,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),_e.indexNulls=M.indexNulls,S[M.name]=_e}else J&&(b=!0,q(),g.put(W,M))}}finally{N&&N()}if(b&&(f.schemaVersion++,f.updatedAttributes()),jn.trace(`${e} table loading, running index`),v.length>0||U.length>0?f.indexingOperation=Pue(f,v,U):b&&Em.signalSchemaChange(new hm.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,b)for(let M of pN)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),jn.trace(`${e} table loaded`),f;function q(){N||d.transactionSync(()=>({then(M){N=M}}))}a(q,"startTxn")}async function Pue(e,t,r){try{let n=e.schemaVersion;await Em.signalSchemaChange(new hm.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,m=(0,Pk.getIndexedValues)(u[h]);if(m)for(let S=0,g=m.length;S<g;S++)f.dbi.put(m[S],_)}}),s.then(()=>l--,E=>{l--,jn.error(E)}),bd.workerData&&bd.workerData.restartNumber!==Mk.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Due?await s:l>Lue&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await Em.signalSchemaChange(new hm.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){jn.error("Error in indexing",n)}}function Mue({table:e,database:t}){let r=Ic({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 Pb(e){pN.push(e)}function Oh(){let e=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Uk,n={startingOffset:32};return t&&(n.dictionary=Od.readFileSync(t)),r&&(n.threshold=r),e&&n}var Ot,dm,fm,lt,On,wl,ja,fN,Vt,Od,EN,Pk,Em,hm,bd,jn,Mk,hN,mm,Uk,nn,ft,Il,pN,pm,Bo,Cl,Due,Lue,Re=be(()=>{Ot=G(X()),dm=G(_t()),fm=require("lmdb"),lt=require("path"),On=require("fs"),wl=G(Je());hp();ja=G(_u()),fN=G(du()),Vt=G(L()),Od=G(require("fs-extra")),EN=require("../index"),Pk=G(Nr()),Em=G(hi()),hm=G(os()),bd=require("worker_threads"),jn=G(k()),Mk=G(rt());no();uu();hN="data",mm=Symbol("defined-tables"),Uk=((0,Ot.get)(Vt.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,Ot.initSync)();nn=Object.create(null),ft=Object.create(null);(0,EN._assignPackageExport)("databases",ft);(0,EN._assignPackageExport)("tables",nn);Il=Symbol.for("next-table-id"),pN=[],Bo=new Map;a(Cue,"getTables");a(Mr,"getDatabases");a(R_,"resetDatabases");a(Ad,"readMetaDb");a(vk,"ensureDB");a(Bk,"setTable");a(Ic,"database");a(qg,"dropDatabase");a(St,"table");Due=1e3,Lue=10;a(Pue,"runIndexing");a(Mue,"dropTableMeta");a(Pb,"onUpdatedTable");a(Oh,"getDefaultCompression")});var Y=R((lIe,zk)=>{"use strict";var Ho=require("path"),Fk=require("fs-extra"),jr=k(),Hk=require("fs-extra"),Sm=require("os"),Uue=require("net"),vue=require("recursive-iterator"),mt=L(),Bue=fS(),Gk=require("papaparse"),Tm=require("moment"),{inspect:Hue}=require("util"),xk=require("is-number"),cIe=require("lodash"),Gue=require("minimist"),xue=require("https"),que=require("http"),{hdb_errors:gm}=ie(),Fue=/^((\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)))$/,kk=require("util").promisify(setTimeout),kue=100,Vue=5,$ue="",Yue=4,qk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};zk.exports={isEmpty:bn,isEmptyOrZeroLength:zs,arrayHasEmptyValues:Que,arrayHasEmptyOrZeroLengthValues:jue,buildFolderPath:zue,isBoolean:Vk,errorizeMessage:Kue,stripFileExtension:Xue,autoCast:Zue,autoCastJSON:$k,autoCastJSONDeep:SN,removeDir:e_e,compareVersions:t_e,isCompatibleDataVersion:r_e,escapeRawValue:n_e,unescapeValue:s_e,stringifyProps:i_e,timeoutPromise:a_e,isClusterOperation:l_e,getClusterUser:__e,checkGlobalSchemaTable:u_e,getHomeDir:Kk,getPropsFilePath:o_e,promisifyPapaParse:d_e,removeBOM:Wk,createEventPromise:f_e,checkProcessRunning:E_e,checkSchemaTableExist:h_e,checkSchemaExists:Qk,checkTableExists:jk,getStartOfTomorrowInSeconds:p_e,getLimitKey:m_e,isObject:Jue,isNotEmptyAndHasValue:Wue,autoCasterIsNumberCheck:Yk,backtickASTSchemaItems:S_e,isPortTaken:c_e,createForkArgs:T_e,autoCastBoolean:g_e,async_set_timeout:kk,getTableHashAttribute:R_e,doesSchemaExist:A_e,doesTableExist:O_e,stringifyObj:b_e,ms_to_time:N_e,changeExtension:y_e,getEnvCliRootPath:TN,noBootFile:I_e,httpRequest:w_e,transformReq:C_e,convertToMS:D_e,PACKAGE_ROOT:mt.PACKAGE_ROOT};function Kue(e){return e instanceof Error?e:new Error(e)}a(Kue,"errorizeMessage");function bn(e){return e==null}a(bn,"isEmpty");function Wue(e){return!bn(e)&&(e||e===0||e===""||Vk(e))}a(Wue,"isNotEmptyAndHasValue");function zs(e){return bn(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function Que(e){if(bn(e))return!0;for(let t=0;t<e.length;t++)if(bn(e[t]))return!0;return!1}a(Que,"arrayHasEmptyValues");function jue(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(jue,"arrayHasEmptyOrZeroLengthValues");function zue(...e){try{return e.join(Ho.sep)}catch{console.error(e)}}a(zue,"buildFolderPath");function Vk(e){return bn(e)?!1:e===!0||e===!1}a(Vk,"isBoolean");function Jue(e){return bn(e)?!1:typeof e=="object"}a(Jue,"isObject");function Xue(e){return zs(e)?$ue:e.slice(0,-Yue)}a(Xue,"stripFileExtension");function Zue(e){return bn(e)||e===""||typeof e!="string"?e:qk[e]!==void 0?qk[e]:Yk(e)===!0?Number(e):Fue.test(e)?new Date(e):e}a(Zue,"autoCast");function $k(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a($k,"autoCastJSON");function SN(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=SN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=SN(r);n!==r&&(e[t]=n)}return e}else return $k(e)}a(SN,"autoCastJSONDeep");function Yk(e){if(e.startsWith("0.")&&xk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&xk(e))}a(Yk,"autoCasterIsNumberCheck");async function e_e(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await Hk.emptyDir(e),await Hk.remove(e)}catch(t){throw jr.error(`Error removing files in ${e} -- ${t}`),t}}a(e_e,"removeDir");function t_e(e,t){if(zs(e)){jr.info("Invalid current version sent as parameter.");return}if(zs(t)){jr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(t_e,"compareVersions");function r_e(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(r_e,"isCompatibleDataVersion");function n_e(e){if(bn(e))return e;let t=String(e);return t==="."?mt.UNICODE_PERIOD:t===".."?mt.UNICODE_PERIOD+mt.UNICODE_PERIOD:t.replace(mt.FORWARD_SLASH_REGEX,mt.UNICODE_FORWARD_SLASH)}a(n_e,"escapeRawValue");function s_e(e){if(bn(e))return e;let t=String(e);return t===mt.UNICODE_PERIOD?".":t===mt.UNICODE_PERIOD+mt.UNICODE_PERIOD?"..":String(e).replace(mt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(s_e,"unescapeValue");function i_e(e,t){if(bn(e))return jr.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+Sm.EOL}!zs(n)&&n[0]===";"?r+=" "+n+s+Sm.EOL:zs(n)||(r+=n+"="+s+Sm.EOL)}catch{jr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(i_e,"stringifyProps");function Kk(){let e;try{e=Sm.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Kk,"getHomeDir");function o_e(){let e=Ho.join(Kk(),mt.HDB_HOME_DIR_NAME,mt.BOOT_PROPS_FILE_NAME);return Fk.existsSync(e)||(e=Ho.join(__dirname,"../","hdb_boot_properties.file")),e}a(o_e,"getPropsFilePath");function a_e(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(a_e,"timeoutPromise");async function c_e(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Uue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(c_e,"isPortTaken");function l_e(e){try{return mt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(l_e,"isClusterOperation");function u_e(e,t){let r=(Re(),ae($e)).getDatabases();if(!r[e])return gm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return gm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u_e,"checkGlobalSchemaTable");function __e(e,t){if(bn(t)){jr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(bn(e)||zs(e)){jr.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){jr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){jr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(__e,"getClusterUser");function d_e(){Gk.parsePromise=function(e,t,r){return new Promise(function(n,s){Gk.parse(e,{header:!0,transformHeader:Wk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(d_e,"promisifyPapaParse");function Wk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Wk,"removeBOM");function f_e(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;jr.info(`Got cluster status event response: ${Hue(s)}`);try{i.cancel()}catch{jr.error("Error trying to cancel timeout.")}n(s)})})}a(f_e,"createEventPromise");async function E_e(e){let t=!0,r=0;do await kk(kue*r++),(await Bue.findPs(e)).length>0&&(t=!1);while(t&&r<Vue);if(t)throw new Error(`process ${e} was not started`)}a(E_e,"checkProcessRunning");function h_e(e,t){let r=Qk(e);if(r)return r;let n=jk(e,t);if(n)return n}a(h_e,"checkSchemaTableExist");function Qk(e){let{getDatabases:t}=(Re(),ae($e));if(!t()[e])return gm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Qk,"checkSchemaExists");function jk(e,t){let{getDatabases:r}=(Re(),ae($e));if(!r()[e][t])return gm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(jk,"checkTableExists");function p_e(){let e=Tm().utc().add(1,mt.MOMENT_DAYS_TAG).startOf(mt.MOMENT_DAYS_TAG).unix(),t=Tm().utc().unix();return e-t}a(p_e,"getStartOfTomorrowInSeconds");function m_e(){return Tm().utc().format("DD-MM-YYYY")}a(m_e,"getLimitKey");function S_e(e){try{let t=new vue(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){jr.error("Got an error back ticking items."),jr.error(t)}}a(S_e,"backtickASTSchemaItems");function T_e(e){return[e]}a(T_e,"createForkArgs");function g_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(g_e,"autoCastBoolean");function R_e(e,t){let{getDatabases:r}=(Re(),ae($e)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(R_e,"getTableHashAttribute");function A_e(e){let{getDatabases:t}=(Re(),ae($e));return t()[e]!==void 0}a(A_e,"doesSchemaExist");function O_e(e,t){let{getDatabases:r}=(Re(),ae($e));return r()[e]?.[t]!==void 0}a(O_e,"doesTableExist");function b_e(e){try{return JSON.stringify(e)}catch{return e}}a(b_e,"stringifyObj");function N_e(e){let t=Tm.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(N_e,"ms_to_time");function y_e(e,t){let r=Ho.basename(e,Ho.extname(e));return Ho.join(Ho.dirname(e),r+t)}a(y_e,"changeExtension");function TN(){if(process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Gue(process.argv);if(e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(TN,"getEnvCliRootPath");var mN;function I_e(){if(mN)return mN;let e=TN();if(TN()&&Fk.pathExistsSync(Ho.join(e,mt.HDB_CONFIG_FILE)))return mN=!0,!0}a(I_e,"noBootFile");function w_e(e,t){let r;return e.protocol==="http:"?r=que:r=xue,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(w_e,"httpRequest");function C_e(e){if(!e.schema&&!e.database){e.schema=mt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(C_e,"transformReq");function D_e(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(D_e,"convertToMS")});var X=R((_Ie,tV)=>{"use strict";var gN=require("fs-extra"),za=require("path"),Jk=require("os"),L_e=require("properties-reader"),yd=k(),Nd=Y(),Ee=L(),Rm=Et(),P_e="Error initializing environment manager",Am="BOOT_PROPS_FILE_PATH",Xk=!1,M_e={[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},qi={};tV.exports={BOOT_PROPS_FILE_PATH:Am,getHdbBasePath:U_e,setHdbBasePath:v_e,get:Zk,initSync:H_e,setProperty:ve,initTestEnvironment:x_e,setCloneVar:G_e};function U_e(){return qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(U_e,"getHdbBasePath");function v_e(e){qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(v_e,"setHdbBasePath");function Zk(e){let t=Rm.getConfigValue(e);return t===void 0?qi[e]:t}a(Zk,"get");function ve(e,t){M_e[e]&&(qi[e]=t),Rm.updateConfigObject(e,t)}a(ve,"setProperty");function B_e(){let e;try{e=Nd.getPropsFilePath(),gN.accessSync(e,gN.constants.F_OK|gN.constants.R_OK),Xk=!0;let t=L_e(e);return qi[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ee.HDB_SETTINGS_NAMES.INSTALL_USER),qi[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),qi[Am]=e,!0}catch{return yd.trace(`Environment manager found no properties file at ${e}`),!1}}a(B_e,"doesPropFileExist");function H_e(e=!1){try{(Xk||B_e()||Nd.noBootFile())&&!eV&&(Rm.initConfig(e),qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Rm.getConfigValue(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){yd.error(P_e),yd.error(t),console.error(t),process.exit(1)}}a(H_e,"initSync");var eV=!1;function G_e(e){eV=e}a(G_e,"setCloneVar");function x_e(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=za.join(__dirname,"../../","unitTests");qi[Am]=za.join(l,"hdb_boot_properties.file"),ve(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,za.join(l,"settings.test")),ve(Ee.HDB_SETTINGS_NAMES.INSTALL_USER,Jk.userInfo()?Jk.userInfo().username:void 0),ve(Ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(Ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,za.join(l,"envDir","log")),ve(Ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,za.join(l,"envDir")),ve(Ee.CONFIG_PARAMS.STORAGE_PATH,za.join(l,"envDir")),s&&(ve(Ee.CONFIG_PARAMS.HTTP_SECUREPORT,Zk(Ee.CONFIG_PARAMS.HTTP_PORT)),ve(Ee.CONFIG_PARAMS.HTTP_PORT,null)),ve(Ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(Ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(Ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Nd.isEmpty(i)?!1:i),ve(Ee.CONFIG_PARAMS.HTTP_CORS,Nd.isEmpty(i)?!1:i),ve(Ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(Ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(Ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Nd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(Ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(Ee.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(Ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(Ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Am}. Please check your boot props and settings files`;yd.fatal(r),yd.error(t)}}a(x_e,"initTestEnvironment")});var sV=R((fIe,nV)=>{"use strict";var bm=X();bm.initSync();var Om=L(),{httpRequest:q_e}=Y(),F_e=require("path"),rV=require("fs-extra"),k_e=require("yaml"),V_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};nV.exports={cliOperations:Y_e,buildRequest:$_e};function $_e(){let e={};for(let t of process.argv){if(V_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a($_e,"buildRequest");async function Y_e(e){await rV.exists(F_e.join(bm.get(Om.CONFIG_PARAMS.ROOTPATH),Om.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await rV.exists(bm.get(Om.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await q_e({method:"POST",protocol:"http:",socketPath:bm.get(Om.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(k_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(Y_e,"cliOperations")});var aV=R((hIe,oV)=>{"use strict";var iV=require("semver/functions/major"),K_e=ma(),RN=process.versions&&process.versions.node?process.versions.node:void 0;oV.exports=W_e;function W_e(){let e=K_e.engines["minimum-node"];if(RN&&iV(RN)<iV(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${RN}. Please install a version of Node.js that is withing the defined range.`}}a(W_e,"checkNodeVersion")});var ON=R((mIe,cV)=>{"use strict";var Id=X();Id.initSync();var Dl=require("fs-extra"),AN=require("path"),Ll=L(),Q_e=require("crypto"),j_e=require("uuid").v4;cV.exports=z_e;function z_e(){if(Id.getHdbBasePath()!==void 0){let e=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Dl.accessSync(r),Dl.accessSync(e),Dl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=j_e(),i=Q_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Dl.writeFileSync(r,s),Dl.writeFileSync(e,i.privateKey),Dl.writeFileSync(t,i.publicKey)}else throw n}}}a(z_e,"checkJWTTokenExist")});var uV=R((TIe,lV)=>{"use strict";var bN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};lV.exports={HdbInfoInsertObject:bN}});var fV=R((RIe,dV)=>{"use strict";var _V=L(),NN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[_V.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[_V.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};dV.exports={UpgradeObject:NN}});var Nm=R((OIe,hV)=>{"use strict";var zn=require("prompt"),Pl=require("chalk"),EV=k(),Rs=require("os"),yN=to(),IN=["yes","y"];async function J_e(e){let t=`${Rs.EOL}`+Pl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Rs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Rs.EOL}${Rs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Rs.EOL}`;zn.override=yN(["CONFIRM_UPGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pl.magenta(`${Rs.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 zn.get([r])}catch(s){return EV.error("There was an error when prompting user about an upgrade."),EV.error(s),!1}return IN.includes(n.CONFIRM_UPGRADE)}a(J_e,"forceUpdatePrompt");async function X_e(e){let t=`${Rs.EOL}`+Pl.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.${Rs.EOL}`);zn.override=yN(["CONFIRM_DOWNGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pl.magenta(`${Rs.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 zn.get([r]);return IN.includes(n.CONFIRM_DOWNGRADE)}a(X_e,"forceDowngradePrompt");async function Z_e(){let e=`${Rs.EOL}`+Pl.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");zn.override=yN(["GENERATE_CERTS"]),zn.start(),zn.message=e;let t={properties:{GENERATE_CERTS:{description:Pl.magenta(`${Rs.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 zn.get([t]);return IN.includes(r.GENERATE_CERTS)}a(Z_e,"upgradeCertsPrompt");hV.exports={forceUpdatePrompt:J_e,forceDowngradePrompt:X_e,upgradeCertsPrompt:Z_e}});var CN=R((NIe,pV)=>{"use strict";var wN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};pV.exports=wN});var SV=R((LIe,mV)=>{"use strict";var ede=Y(),tde=Et(),IIe=k(),wIe=require("path"),CIe=require("fs"),DIe=L();mV.exports={getOldPropsValue:rde};function rde(e,t,r=!1){let n=t.getRaw(e);return ede.isNotEmptyAndHasValue(n)?n:r?tde.getDefaultConfig(e):""}a(rde,"getOldPropsValue")});var AV=R((MIe,RV)=>{"use strict";var Go=require("path"),xo=require("fs-extra"),nde=require("properties-reader"),sde=CN(),Mt=k(),{getOldPropsValue:Qe}=SV(),{HDB_SETTINGS_NAMES:oe,CONFIG_PARAMS:Ja}=L(),Xa=Et(),ym=X(),TV=Y(),Js=L(),DN=new sde("3.1.0"),gV=[];function ide(){let e=nde(ym.get(oe.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Mt.info(t);let r=` ;Settings for the HarperDB process.
34
+ `))}},25).unref()}o.close?.(()=>{if(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&sd()==0)try{Lq(ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ip),o.cantCleanupProperly||kt.warn("Had to forcefully exit the thread",Ip),process.exit(0)},5e3).unref()})}if(qq||process.env.DEV_MODE)try{require("inspector").close()}catch(i){kt.info("Could not close debugger",i)}}}).ref();let e=[];if(Mq&&!Cce)for(let t in Ws){let r=Ws[t];if(isNaN(t)&&sd()==0){Tce(t)&&Lq(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),kt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=ke.get(pt.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=sd();if(o<i[0]||o>i[1])continue}let s;try{s=Mq(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),kt.trace("Listening on port "+t,Ip)}).on("error",o)}))}Promise.all(e).then(()=>{nd?.postMessage({type:pt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(Fq,"startServers");_b||Fq();function Eb(e,t,r){let n=e?.read?e:new fce({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Ws[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=Ws[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(kt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(Eb,"deliverSocket");var Uq=new Map;function Pce(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Uq.get(s),r){case"connection":i=Eb(void 0,t),Uq.set(s,i),i.write=(c,l,_)=>(nd.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(nd.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),nd.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(Pce,"proxyRequest");function hb(e,t,r=!0){!+t&&t!==ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(ke.get(pt.CONFIG_PARAMS.HTTP_PORT),10));let n=Ws[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",vq),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Ws[t]=e;e.on("unhandled",vq)}a(hb,"registerServer");function kq(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],ke.get(pt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_PORT),secure:ke.get(pt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:ke.get(pt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:ke.get(pt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(kq,"getPorts");function pb(e,t){for(let{port:r,secure:n}of kq(t))$q(r,n,t?.isOperationsServer),typeof e=="function"?db[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,hb(e,r,!1)),Cp[r]=fb(db,r),Dce=fb(Lce,r)}a(pb,"httpServer");function $q(e,t,r){if(!Bi[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:ke.get(n+"_keepAliveTimeout"),headersTimeout:ke.get(n+"_headersTimeout"),requestTimeout:ke.get(n+"_timeout")},i=ke.get(n+"_mtls"),o=ke.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let l=ke.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:Bq(),maxHeaderSize:ke.get(pt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:mb(l)})}let c=Nce();Bi[e]=(t?mce:hce)(s,async(l,_)=>{try{let d=performance.now(),E=new Gq(l,_);r&&(E.isOperationsServer=!0);let f=await Cp[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=Vq(E)}if(c?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let U of f.headers||[])_.setHeader(U[0],U[1]);return l.baseRequest=E,_.baseResponse=f,Bi[e].emit("unhandled",l,_)}let h=f.status||200,m=performance.now(),S=m-d,g=f.body,T;if(!f.handlesHeaders){let U=f.headers||new Hq;g?g.length>=0&&(typeof g=="string"?U.set("Content-Length",Buffer.byteLength(g)):U.set("Content-Length",g.length),T=!0):(U.set("Content-Length","0"),T=!0);let v=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(v+=", miss"),bce(U,"Server-Timing",v,!0),_.writeHead(h,U&&(U[Symbol.iterator]?Array.from(U):U)),T&&_.end(g)}let b=E.handlerPath,N=E.method;if(rd(S,"duration",b,N,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Pq(h<400,"success",b,N),Pq(1,"response_"+h,b,N),!T)if(g?.pipe){g.pipe(_),g.destroy&&_.on("close",()=>{g.destroy()});let U=0;g.on("data",v=>{U+=v.length}),g.on("end",()=>{rd(performance.now()-m,"transfer",b,N),rd(U,"bytes-sent",b,N)})}else g?.then?g.then(U=>{_.end(U)},u):_.end(g)}catch(d){u(d)}function u(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?kt.warn(d):kt.info(d):kt.error(d)}a(u,"onError")}),i&&(Bi[e].mtlsConfig=i),t&&(Bi[e].on("secureConnection",l=>{l._parent.startTime&&rd(performance.now()-l._parent.startTime,"tls-handshake",e),rd(l.isSessionReused(),"tls-reused",e)}),Bi[e].isSecure=!0,s.SNICallback(null,(l,_)=>{try{dl=_,_&&Bi[e].setSecureContext(_.options)}finally{dl=null}})),hb(Bi[e],e)}return Bi[e]}a($q,"getHTTPServer");function fb(e,t){let r=Vq;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(fb,"makeCallbackChain");function Vq(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Hq}}a(Vq,"unhandled");function Mce(e,t){pb(e,{requestOnly:!0,...t})}a(Mce,"onRequest");function Uce(e,t){let r;if(t.securePort){let n=Object.assign({},ke.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:mb(n)};r=Ace(s,e),s.SNICallback(null,(i,o)=>{try{dl=o,o&&r.setSecureContext(o.options)}finally{dl=null}}),Ws[t.securePort]=r}return t.port&&(r=Ece({noDelay:!0},e),Ws[t.port]=r),r}a(Uce,"onSocket");Object.defineProperty(pce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function vce(e,t){let r;for(let{port:n,secure:s}of kq(t)){wp[n]||(wp[n]=new gce({server:r=$q(n,s)}),wp[n].on("connection",async(c,l)=>{try{let _=new Gq(l);_.isWebSocket=!0;let u=Cp[n](_),d=l.headers["sec-websocket-protocol"]||"",E=lb[n];if(d){let f;for(let h=0;h<E.length;h++){let m=E[h];m.protocol===d&&(f=!0,m.listener(c,_,u))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,u)}}catch(_){kt.warn("Error handling WebSocket connection",_)}}),wp[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=lb[n];o||(o=lb[n]=[]),o.push({listener:e,protocol:i}),Cp[n]=fb(db,n)}return r}a(vce,"onWebSocket");function vq(e,t){t.writeHead(404),t.end(`Not found
35
+ `)}a(vq,"defaultNotFound");function ub(e){return e.startsWith("-----BEGIN")?e:Sce(e)}a(ub,"readPEM");function mb(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=ub(i.privateKey),c=ub(i.certificate),l=i.certificateAuthority&&ub(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:l,ticketKeys:Bq()},u=Rce(_);u.options=_,_.instantiatedContext=u,u.context.setCert(c),u.context.setKey(o,void 0),_.cert=c,_.key=o,u.certStart=c.slice(0,100).toString(),n||(n=u);let d=new yce(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,u)):kt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let l=r.get(c);if(l)return kt.debug("Found certificate for",i,l.certStart),o(null,l);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}kt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(mb,"createSNICallback")});var Zq={};$e(Zq,{startHTTPThreads:()=>Hce,startSocketServer:()=>Ob,updateWorkerIdleness:()=>Xq});async function Hce(e=2,t){if(t)Rb(0,1,!0);else{let{loadRootComponents:r}=Lp();if(e===0)return(0,Qs.setMainIsWorker)(!0),await Sb().startServers(),Promise.resolve([]);await r()}Jq();for(let r=0;r<e;r++)Rb(r,e);return Promise.all(zq)}function Jq(){let e=(0,Qq.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),gb=setInterval(()=>{Up.notify(e)},Bce).unref())}function Rb(e,t=1,r){if(Tb++,(0,Qs.startWorker)("server/threads/threadServer.js",{name:ml.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===ml.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});zq.push(s),await s,fl.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Mp.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=fl.indexOf(n);o>-1&&fl.splice(o,1)}if(a(i,"removeWorker"),El){let o=El;El=[];for(let c of o)jq[c.localPort](null,c)}}}),r){let n=setInterval(()=>{Ab?Ab=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Qs.shutdownWorkers)(),Tb=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Ob(e=0,t){if(typeof e=="string")try{(0,vp.existsSync)(e)&&(0,vp.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Gce:r=xce(t):r=bb;let n=(0,hl.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=jq[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),Ab=!0,r(o,(c,l)=>{if(!c){if(Yq){let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});Yq.deliverSocket(u,e,l),u.resume()}else Tb>0?(El.length===0&&setTimeout(()=>{El.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,El.push(o)):(console.log("start up a dynamic thread to handle request"),Rb(0));vr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new hl.Socket({handle:o,writable:!0,readable:!0});kce(u,c,e)}vr(!0,"socket-routed")})};let s=ma();Up.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 bb(e,t){let r,n=0;for(let s of fl){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Pp)return Pp=i,t(r);n=i}Pp=0,t(r)}function Gce(e,t){let r={};e.getpeername(r);let n=r.address,s=pl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);bb(e,o=>{pl.set(n,{worker:o,lastUsed:i}),t(o)})}function xce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new hl.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=pl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);bb(n,d=>{pl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function Xq(){Pp=0;for(let e of fl)e.expectedIdle=e.recentELU.idle+qce,e.requests=1;fl.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function kce(e,t,r){let n=Fce++;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(),Mp.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")),Mp.delete(n)),s.event=="destroy"&&(e.destroy(),Mp.delete(n))})}var Qs,hl,ml,Up,vp,Wq,Qq,fl,El,jq,Yq,Tb,zq,gb,Bce,Ab,Pp,Kq,pl,qce,Mp,Fce,Nb=be(()=>{Qs=G(rt()),hl=require("net"),ml=G(L()),Up=G(k()),vp=require("fs");Ti();Wq=require("worker_threads"),Qq=G(la()),fl=[],El=[],jq=[],Tb=0,zq=[];Wq.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Qs.onMessageFromWorkers)(e=>{e.type===ml.ITC_EVENT_TYPES.RESTART&&gb&&(clearInterval(gb),Jq())}));Bce=6e5;a(Hce,"startHTTPThreads");a(Jq,"licenseWarning");a(Rb,"startHTTPWorker");a(Ob,"startSocketServer");Pp=0;a(bb,"findMostIdleWorker");Kq=36e5,pl=new Map;a(Gce,"findByRemoteAddressAffinity");a(xce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of pl)r.lastUsed+Kq<e&&pl.delete(t)},Kq).unref();qce=1e3;a(Xq,"updateWorkerIdleness");(0,Qs.setMonitorListener)(Xq);Mp=new Map,Fce=1;a(kce,"proxySocket")});var nF=R((FNe,rF)=>{"use strict";var $ce=require("cluster"),ka=J();ka.initSync();var tF=L(),BNe=require("util"),Hi=k(),HNe=require("fs"),Vce=require("fastify"),GNe=ma(),Yce=require("@fastify/cors"),Kce=require("@fastify/compress"),Wce=require("@fastify/static"),Qce=OO(),jce=require("path"),{PACKAGE_ROOT:zce}=L(),Jce=Bn(),Xce=Y(),Zce=Lr(),ele=la(),{server:tle}=(yr(),ae(jo)),{node_request_key:xNe}=(yp(),ae(cb)),{authHandler:rle,handlePostRequest:nle,serverErrorHandler:sle,reqBodyValidationHandler:ile}=bp(),qNe=require("net"),{registerContentHandlers:ole}=(jc(),ae(SG)),ale=6e4,cle=1024*1024*1024,lle="TRUE",{CONFIG_PARAMS:id}=tF,Sl;rF.exports={hdbServer:eF,start:eF};async function eF(e){try{Hi.info("In Fastify server"+process.cwd()),Hi.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Hi.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=$ce.isMaster,await ule();let t=e.securePort>0;Sl=_le(t),await Sl.ready(),e||(e={}),e.isOperationsServer=!0;try{tle.http(Sl.server,e),Sl.server.closeIdleConnections||await Sl.listen({port:0,host:"::"})}catch(r){throw Sl.close(),Hi.error(r),Hi.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Hi.fatal(t),process.exit(1)}}a(eF,"operationsServer");async function ule(){Hi.trace("Configuring HarperDB process."),Jce.setSchemaDataToGlobal(),await Zce.setUsersToGlobal(),await ele.getLicense()}a(ule,"setUp");function _le(e){Hi.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=dle(e),r=Vce(t);r.server.headersTimeout=Ele(),r.setErrorHandler(sle);let n=fle();n&&r.register(Yce,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(Qce),r.register(Kce),r.register(Wce,{root:jce.join(zce,"studio/build-local")}),ole(r);let s=ka.get(tF.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Xce.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ile,rle],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),nle(i,o)}),r.get("/health",()=>"HarperDB is running."),Hi.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(_le,"buildServer");function dle(e){let t=ka.get(id.OPERATIONSAPI_NETWORK_TIMEOUT),r=ka.get(id.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:cle,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(dle,"getServerOptions");function fle(){let e=ka.get(id.OPERATIONSAPI_NETWORK_CORS),t=ka.get(id.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===lle)&&(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(fle,"getCORSOpts");function Ele(){return ka.get(id.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??ale}a(Ele,"getHeaderTimeoutConfig")});var Lb={};$e(Lb,{disableNATS:()=>ple,publishToStream:()=>Gp,setNATSReplicator:()=>yb,setPublishToStream:()=>mle,setSubscription:()=>Db,start:()=>hle});function hle(){od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Tle()}function ple(e=!0){cF=e}function mle(e,t){Gp=e,Db=t}function Tle(){if(cF||process.env._DISABLE_NATS)return;let e=Mr(),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];yb(s,r,i)}}Pb((r,n)=>{yb(r.tableName,r.databaseName,r),n&&uF(r)}),!sF&&(sF=!0)}function yb(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends er{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ue],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ue]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ue],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Ue],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ue]})}static defineSchema(i){uF(i)}static subscribe(){let i=new ts;return Db(t,e,i),i}static subscribeOnThisThread(i){return i<(od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Sle)}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 Bp(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=lF;return i}a(n,"getNATSTransaction")}function uF(e){let t=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Gp(`${wb.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Cb.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 iF,wb,Cb,oF,aF,od,ad,Hp,cF,Gp,Db,Sle,lF,sF,Bp,Ib,_F=be(()=>{Re();Mn();iF=G(gt()),wb=G(Ze()),Cb=G(fi());nu();oF=G(rR()),aF=G(Nr()),od=G(J()),ad=G(L()),Hp=G(k());a(hle,"start");a(ple,"disableNATS");Gp=iF.publishToStream,Db=oF.setSubscription;a(mle,"setPublishToStream");Sle=2;a(Tle,"assignReplicationSource");a(yb,"setNATSReplicator");a(uF,"publishSchema");Bp=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=od.default.get(ad.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,E=u.operation=="put"?"upsert":u.operation;l||(Hp.trace(`Sending transaction event ${E}`),_=l={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===E?(o.push(u.record),c.push(u.id)):_=_.next={operation:E,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Gp(`${wb.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,Cb.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Hp.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},Ib=class extends Bp{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,aF.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};lF=new Ib});async function pF({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await Mb.get(e,{returnNonexistent:!0});i=new Bb(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await Mb.get(e);o&&o.delete()}i=new qp(e,t)}return n&&(n.id=e,n.user={username:t?.username},cd.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function Ub(){return xp++,xp>65500&&(xp=1),xp}function vb(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=No.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return it(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var fF,Mo,EF,hF,dF,Mb,cd,xp,qp,Bb,mF=be(()=>{Re();I_();fF=G(Nr()),Mo=G(k());ha();EF=G(rt()),hF=G(Sb());yr();dF=100,Mb=St({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"}]}}]}),cd=St({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,EF.getWorkerIndex)()===0&&(async()=>{await hF.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of cd.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await dt.getUser(r.user.username));try{await vb(r,t,r)}catch{(0,Mo.warn)("Failed to publish will",t)}cd.delete(e.id)}})();a(pF,"getSession");xp=1;a(Ub,"getNextMessageId");qp=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,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(g=>g.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Mo.trace)("Resuming subscription from",s,"from",o);let f=No.getMatch(_);if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let T=g.split("/"),b;for(let v=0;v<T.length;v++)if(T[v].indexOf("+")>-1)if(T[v]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let N=!0;T[T.length-1]==="#"&&(T.length--,N=!1),b&&(n=a(v=>{let q=v.id;if(!Array.isArray(q)||N&&q.length!==T.length)return!1;for(let M=0;M<T.length;M++)if(T[M]!=="+"&&T[M]!==q[M])return!1;return!0},"filter"));let U=T.indexOf("+");E.url="/"+(U>-1?T.slice(0,U):T).concat("").join("/")}}let h=f.path,m=f.Resource,S=await it(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let T=await m.subscribe(E,g);if(!T)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!T[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let b=(async()=>{for await(let N of T)try{let U;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"&&N.type!=="patch"||n&&!n(N))continue;r?(N.topic=s,U=this.needsAcknowledge(N)):(N.acknowledge?.(),U=Ub());let v=N.id;if(Array.isArray(v)&&(v=Wc(v)),v==null&&(v=""),await this.listener(h+"/"+v,N.value,U,t)===!1)break;this.awaitingAcks?.size>dF?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-dF)):await new Promise(setImmediate)}catch(U){(0,Mo.warn)(U)}})();return T});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=Ub();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return vb(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();it(r,async()=>{try{if(!t){let n=await cd.get(this.sessionId);n?.doesExist()&&await vb(n,n.data,r)}}finally{await cd.delete(this.sessionId)}}).catch(n=>{(0,Mo.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(vb,"publish");Bb=class extends qp{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=Ub(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);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,Mo.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,fF.getNextMonotonicTime)()),(0,Mo.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),Mb.put(this.sessionRecord)}}});var Gb={};$e(Gb,{bypassAuth:()=>gle,start:()=>Rle});function gle(){AF=!0}function Rle({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new RF.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),ar.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=TF(_,h=>{_.send(h)},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{ar.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let u;if(o.events.emit("connection",_),ar.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),l){if(_.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{u=await e.getUser(f,null,null),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&kp.notify({username:u?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&kp.error({username:f,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else ar.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),ar.error(f)}else if(l.required)return ar.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!u&&AF&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,gF.getSuperUser)(),ar.debug("Auto-authorizing local connection",u?.username));let{onMessage:d,onClose:E}=TF(_,f=>_.write(f),null,u,o);_.on("data",d),_.on("close",E),_.on("error",f=>{ar.info("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function TF(e,t,r,n,s){SF||(SF=!0,Yu(d=>{Fp>0&&d.push({metric:"mqtt-connections",connections:Fp,byThread:!0})}));let i;Fp++;let o,c={protocolVersion:4},l=(0,$p.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Fp--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),En(!1,"connection","mqtt","disconnect"),ar.debug("MQTT connection was closed",e.remoteAddress))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;vr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await dt.getUser(d.username,d.password.toString(),r),(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&kp.notify({username:n?.username,status:cr.AUTH_AUDIT_STATUS.SUCCESS,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,Tl.get)(cr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&kp.error({username:d.username,status:cr.AUTH_AUDIT_STATUS.FAILURE,type:cr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=pF({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return ar.error(M),s.events.emit("auth-failed",d,e,M),En(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),En(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,W,z,X)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let ce=M.indexOf("/",1),_e=ce>0?M.slice(0,ce):M;m({cmd:"publish",topic:M,payload:g(W),messageId:z||Math.floor(Math.random()*1e8),qos:X.qos},_e);let de=e._socket??e;return de.writableNeedDrain?new Promise(Ge=>de.once("drain",Ge)):!de.closed}catch(ce){return ar.error(ce),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let T=[];for(let M of d.subscriptions){let W;try{W=(await o.addSubscription(M,M.qos>=1)).qos||0}catch(z){s.events.emit("error",z,e,M,o),ar.error(z),W=c.protocolVersion<5?128:z.statusCode===403?135:z.statusCode===404?143:128}T.push(W)}await o.committed,m({cmd:"suback",granted:T,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let W of d.unsubscriptions)M.push(o.removeSubscription(W)?0:17);m({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let b=d.qos===2?"pubrec":"puback",N=e.deserialize||(e.deserialize=Ba(r?.headers.get?.("content-type"))),v=(d.payload?.length||0)>0?N(d.payload):void 0,q;try{q=await o.publish(d,v)}catch(M){s.events.emit("error",M,e,d,o),ar.warn(M),d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&m({cmd:b,messageId:d.messageId,reasonCode:q===!1?144:0},d.topic);break;case"pubrec":m({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),En(!0,"connection","mqtt","disconnect"),ar.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(T){s.events.emit("error",T,e,d,o),ar.error(T),m({cmd:"disconnect"})}function m(T,b){let N=(0,$p.generate)(T,c);t(N),vr(N.length,"bytes-sent",b,S(T),"mqtt")}a(m,"sendPacket");function S(T){return T.qos>0?T.cmd+",qos="+T.qos:T.cmd}a(S,"packetMethodName");function g(T){return Pa(T,r)}a(g,"serialize")}),l.on("error",d=>{ar.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:u}}var $p,gF,Tl,cr,Hb,RF,kp,ar,AF,SF,Fp,OF=be(()=>{$p=require("mqtt-packet");mF();gF=G(Lr());jc();Ti();yr();Tl=G(J()),cr=G(L()),Hb=G(k()),RF=require("events"),kp=(0,Hb.loggerWithTag)("auth-event"),ar=(0,Hb.loggerWithTag)("mqtt"),AF=(0,Tl.get)(cr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(gle,"bypassAuth");a(Rle,"start");Fp=0;a(TF,"onSocket")});var Gh={};$e(Gh,{component_errors:()=>Rl,loadComponent:()=>Vp,loadComponentDirectories:()=>PF,setErrorReporter:()=>Nle});function PF(e,t){t&&(qb=t),e&&(Fb=e);let r=[];if((0,tt.existsSync)(xb)){let s=(0,tt.readdirSync)(xb,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,at.join)(xb,o);r.push(Vp(c,qb,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Vp(n,qb,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{LF=!0})}function Nle(e){ld=e}async function Vp(e,t,r,n,s,i){let o=(0,tt.realpathSync)(e);if(!NF.has(o)){NF.set(o,!0),s&&(Fb=s);try{let c;n&&(Rl=new Map);let l=(0,at.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,tt.existsSync)(l)?c=n?(0,DF.getConfigObj)():(0,yF.parseDocument)((0,tt.readFileSync)(l,"utf8"),{simpleKeys:!0}).toJSON():c=kb;let _=(0,at.join)(e,"node_modules","harperdb");try{$a.isMainThread&&(n||(0,tt.existsSync)(_)&&(0,tt.realpathSync)(Ol.PACKAGE_ROOT)!==(0,tt.realpathSync)(_))&&((0,tt.rmSync)(_,{recursive:!0,force:!0}),(0,tt.existsSync)((0,at.join)(e,"node_modules"))||(0,tt.mkdirSync)((0,at.join)(e,"node_modules")),(0,tt.symlinkSync)(Ol.PACKAGE_ROOT,_,"dir"))}catch(E){gl.default.error("Error symlinking harperdb module",E)}let u=[],d=n;for(let E in c){let f=c[E];if(Rl.set(n?E:(0,at.basename)(e),!1),!f)continue;let h,m=f.package;try{if(m){let N=e,U;for(;!(0,tt.existsSync)(U=(0,at.join)(N,"node_modules",E));)if(N=(0,at.dirname)(N),N.length<(0,CF.getHdbBasePath)().length){U=null;break}if(U)h=await Vp(U,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${m}`)}else h=ble[E];if(!h)continue;u.push(h);let S=a(N=>(N.origin=r,St(N)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,T=g?.securePort||g?.https&&g.port,b=!g?.https&&g?.port;if($a.isMainThread&&(h=await h.startOnMainThread?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h,n&&g))for(let N of[b,T])try{if(+N&&!bF.includes(N)){let U=$b.get(Ol.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&gl.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!Np)&&(bF.push(N),Ob(N,U))}}catch(U){console.error("Error listening on socket",N,U,E)}if(t.isWorker&&(h=await h.start?.({server:dt,ensureTable:S,port:b,securePort:T,resources:t,...f})||h),Fb.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,wF.handleHDBError)("Can not reference parent directories");let N=(0,at.join)(e,f.files).replace(/\\/g,"/"),U=N.indexOf("/*");if(U>-1&&f.files!==kb[E]?.files&&!(0,tt.existsSync)(N.slice(0,U)))throw new Error(`The path '${N.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let v=(0,at.basename)(e),q=f.path||"/";q=q.startsWith("/")?q:q.startsWith("./")?"/"+v+q.slice(2):q==="."?"/"+v:"/"+v+"/"+q;let M,W,z;if(f.root){let ce=f.root;ce.startsWith("/")&&(ce=ce.slice(1)),ce.endsWith("/")&&(ce=ce.slice(0,-1)),ce+="/",W=(0,at.join)(e,ce)}else(z=N.indexOf("/*"))>-1&&(W=N.slice(0,z+1),M=(0,at.relative)(e,W));let X=!1;if($a.isMainThread&&h.setupDirectory&&(X=await h.setupDirectory?.(q,W,t)),t.isWorker&&h.handleDirectory&&(X=await h.handleDirectory?.(q,W,t)),X)continue;for(let ce of await(0,IF.default)(N,{onlyFiles:!1,objectMode:!0})){let{path:_e,dirent:de}=ce;d=!0;let Ge=(0,at.relative)(e,_e).replace(/\\/g,"/");if(M)if(Ge.startsWith(M))Ge=Ge.slice(M.length+1);else throw new Error(`The root path '${f.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 we=q+(q.endsWith("/")?"":"/")+Ge;try{if(de.isFile()){let xe=await Ole(_e);$a.isMainThread&&await h.setupFile?.(xe,we,_e,t),t.isWorker&&await h.handleFile?.(xe,we,_e,t)}else $a.isMainThread&&await h.setupDirectory?.(we,_e,t),t.isWorker&&await h.handleDirectory?.(we,_e,t)}catch(xe){xe.message=`Could not load ${de.isFile()?"file":"directory"} '${_e}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${xe.message}`,ld?.(xe),((0,Al.getWorkerIndex)()===0?console:gl.default).error(xe),t.set(f.path||"/",new ud(xe)),Rl.set(n?E:(0,at.basename)(e),xe.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,at.basename)(e)}' due to: ${S.message}`,ld?.(S),((0,Al.getWorkerIndex)()===0?console:gl.default).error(S),t.set(f.path||"/",new ud(S),null,!0),Rl.set(n?E:(0,at.basename)(e),S.message)}}if($a.isMainThread&&!LF&&i&&(0,Al.watchDir)(e,async()=>PF()),c.extensionModule)return await hf((0,at.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;ld?.(new Error(E)),((0,Al.getWorkerIndex)()===0?console:gl.default).error(E),Rl.set((0,at.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,ld?.(c),t.set("",new ud(c))}}}var tt,at,$a,yF,$b,Ol,IF,Al,gl,wF,CF,Ale,DF,Ole,xb,Fb,LF,qb,Rl,ble,kb,bF,NF,ld,ud,xh=be(()=>{tt=require("fs"),at=require("path"),$a=require("worker_threads"),yF=require("yaml"),$b=G(J()),Ol=G(L());II();LI();PI();LG();Oq();Cq();IF=G(require("fast-glob")),Al=G(rt()),gl=G(k());AS();yr();wF=G(ie());Mn();Re();Nb();CF=G(J()),Ale=G(nF());Dh();_F();OF();DF=G(Et());yp();({readFile:Ole}=tt.promises),xb=$b.get(Ol.CONFIG_PARAMS.COMPONENTSROOT),Fb=new Map,Rl=new Map;a(PF,"loadComponentDirectories");ble={REST:np,rest:np,graphqlSchema:RS,jsResource:bS,fastifyRoutes:nb,login:yS,static:sb,operationsApi:Ale,customFunctions:{},http:{},clustering:Lb,authentication:C_,mqtt:Gb},kb={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(kb,"static",{value:{files:"web/**"}});bF=[],NF=new Map;a(Nle,"setErrorReporter");a(Vp,"loadComponent");ud=class extends er{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Lp=R((Eye,UF)=>{var{isMainThread:MF}=require("worker_threads"),{getTables:yle}=(Re(),ae(Ve)),{loadComponentDirectories:Ile,loadComponent:wle}=(xh(),ae(Gh)),{resetResources:Cle}=(I_(),ae(qB)),Dle=xA(),Lle=Et(),{dirname:Ple}=require("path"),{getConnection:Mle}=gt(),Ule=J(),vle=L(),Vb=new Map;async function Ble(e=!1){!MF&&Ule.get(vle.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Mle();try{MF&&await Dle()}catch(n){console.error(n)}let t=Cle();yle(),t.isWorker=e,await wle(Ple(Lle.getConfigFilePath()),t,"hdb",!0,Vb),await Ile(Vb,t);let r=[];for(let[n]of Vb)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Ble,"loadRootComponents");UF.exports.loadRootComponents=Ble});var rt=R((pye,vo)=>{"use strict";var{Worker:Hle,MessageChannel:Gle,parentPort:js,isMainThread:jb,threadId:xle,workerData:Gi}=require("worker_threads"),{PACKAGE_ROOT:qle}=L(),{join:GF,isAbsolute:Fle,extname:kle}=require("path"),{server:xF}=(yr(),ae(jo)),{watch:$le,readdir:Vle}=require("fs/promises"),{totalmem:vF}=require("os"),_d=L(),qF=J(),xi=k(),{randomBytes:Yle}=require("crypto"),{_assignPackageExport:Kle}=require("../index"),Wle=L(),BF=1024*1024,Uo=[],Kn=[],Qle=50,zb=1e4,jle="restart",FF="request_thread_info",kF="resource_report",$F="thread_info",VF="added-port",zle="ack",Yb;Kle("threads",Kn);vo.exports={startWorker:Kb,restartWorkers:Xb,shutdownWorkers:tue,workers:Uo,setMonitorListener:lue,onMessageFromWorkers:rue,onMessageByType:JF,broadcast:sue,broadcastWithAcknowledgement:oue,setChildListenerByType:eue,getWorkerIndex:YF,getWorkerCount:KF,getTicketKeys:QF,setMainIsWorker:Xle,setTerminateTimeout:Jle,restartNumber:Gi?.restartNumber||1};Kn.onMessageByType=JF;Kn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Kn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var Jb;function Jle(e){zb=e}a(Jle,"setTerminateTimeout");function YF(){return Gi?Gi.workerIndex:Jb?0:void 0}a(YF,"getWorkerIndex");function KF(){return Gi?Gi.workerCount:Jb?1:void 0}a(KF,"getWorkerCount");function Xle(e){Jb=e}a(Xle,"setMainIsWorker");var WF=1,Yp;function QF(){return Yp||(Yp=jb?Yle(48):Gi.ticketKeys,Yp)}a(QF,"getTicketKeys");Object.defineProperty(xF,"workerIndex",{get(){return YF()}});Object.defineProperty(xF,"workerCount",{get(){return KF()}});var jF={[FF](e,t){aue(t)},[kF](e,t){cue(t,e)}};function Kb(e,t={}){let r=process.constrainedMemory?.()||vF();r=Math.min(r,vF(),2e4*BF);let n=qF.get(_d.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/BF/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Kn){let _=new Gle;_.existingPort=l,i.push(_),o.push(_.port2)}kle(e)||(e+=".js");let c=new Hle(Fle(e)?e:GF(qle,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:WF=t.threadCount,name:t.name,restartNumber:vo.exports.restartNumber,ticketKeys:QF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:VF,port:l,threadId:c.threadId},[l]);return Wp(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Kb(e,t),c.on("error",l=>{xi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Uo.splice(Uo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Qle?(t.unexpectedRestarts=c.unexpectedRestarts+1,Kb(e,t)):xi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{jF[l.type]?.(l,c)}),Uo.push(c),_ue(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Kb,"startWorker");var Zle=[_d.THREAD_TYPES.HTTP];async function Xb(e=null,t=Math.max(WF>3,1),r=!0){if(jb){if(r){let{loadRootComponents:o}=Lp();await o()}vo.exports.restartNumber++,t<1&&(t=t*Uo.length);let n=[],s=[];for(let o of Uo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;xi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vo.exports.restartNumber,type:_d.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Zle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),zb*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let E=a(f=>{f.type===Wle.ITC_EVENT_TYPES.CHILD_STARTED&&(xi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",E))},"startListener");xi.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=bo();r&&(e==="http"||!e)&&qF.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else js.postMessage({type:jle,workerType:e})}a(Xb,"restartWorkers");function eue(e,t){jF[e]=t}a(eue,"setChildListenerByType");function tue(e){return Xb(e,1/0,!1)}a(tue,"shutdownWorkers");var zF=[];function rue(e){zF.push(e)}a(rue,"onMessageFromWorkers");var Wb=new Map;function JF(e,t){let r=Wb.get(e);r||Wb.set(e,r=[]),r.push(t)}a(JF,"onMessageByType");var nue=10;async function sue(e){let t=0;for(let r of Kn)try{r.postMessage(e),t++>nue&&(t=0,await new Promise(setImmediate))}catch(n){xi.error("Unable to send message to worker",n)}}a(sue,"broadcast");var Kp=new Map,iue=1;function oue(e){return new Promise(t=>{let r=0;for(let n of Kn)try{let s=iue++,i=a(()=>{Kp.delete(s),--r===0&&t(),n!==js&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Kp.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Kp)o.port===n&&o()})),n.postMessage(e),r++}catch(s){xi.error("Unable to send message to worker",s)}r===0&&t()})}a(oue,"broadcastWithAcknowledgement");function aue(e){e.postMessage({type:$F,workers:XF()})}a(aue,"sendThreadInfo");function XF(){let e=Date.now();return Uo.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(XF,"getChildWorkerInfo");function cue(e,t){e.resources=t,e.resources.updated=Date.now()}a(cue,"recordResourceReport");var Qb;function lue(e){Qb=e}a(lue,"setMonitorListener");var uue=1e3,HF=!1;function _ue(){HF||(HF=!0,setInterval(()=>{for(let e of Uo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Qb&&Qb()},uue).unref())}a(_ue,"startMonitoring");var due=1e3;if(js){Wp(js);for(let e=0,t=Gi.addPorts.length;e<t;e++){let r=Gi.addPorts[e];r.threadId=Gi.addThreadIds[e],Wp(r)}setInterval(()=>{let e=process.memoryUsage();js.postMessage({type:kF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},due).unref(),Yb=a(()=>new Promise((e,t)=>{js.on("message",r),js.postMessage({type:FF});function r(n){n.type===$F&&(js.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Yb=XF;vo.exports.getThreadInfo=Yb;function Wp(e,t){Kn.push(e),e.on("message",r=>{if(r.type===VF)r.port.threadId=r.threadId,Wp(r.port);else if(r.type===zle){let n=Kp.get(r.id);n&&n()}else{for(let s of zF)s(r,e);let n=Wb.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){xi.error(i)}}}).on("close",()=>{Kn.splice(Kn.indexOf(e),1)}).on("exit",()=>{Kn.splice(Kn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Wp,"addPort");if(jb){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await Vle(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(GF(s,o.name));try{for await(let{filename:o}of $le(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Xb(),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");vo.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else js.on("message",async e=>{let{type:t}=e;t===_d.ITC_EVENT_TYPES.SHUTDOWN&&(vo.exports.restartNumber=e.restartNumber,js.unref(),setTimeout(()=>{xi.warn("Thread did not voluntarily terminate",xle),process.exit(0)},zb).unref())})});var MP={};$e(MP,{AUDIT_STORE_OPTIONS:()=>Ah,createAuditEntry:()=>gf,openAuditStore:()=>Jp,readAuditEntry:()=>Yt,setAuditRetention:()=>Eue,transactionKeyEncoder:()=>ak});function Jp(e){let t=e.auditStore=e.openDB(sk.AUDIT_STORE_NAME,Ah);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=Qp){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:l,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-Zb})){if((_[0]&15)===rN){let u=Yt(_),d=u.tableId;r[d]?.(u.recordId)}if(c=t.remove(l),await new Promise(setImmediate),++o>=fue){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,Zb/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,zp.getWorkerIndex)()===(0,zp.getWorkerCount)()-1&&s(Qp),t}function Eue(e,t=Qp){Zb=e,Qp=t}function gf(e,t,r,n,s,i,o){let c=ck[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let l=1;n&&(n>1?bl.setFloat64(0,n):Wn.set(kS),l=9),E(0),E(t),d(r),bl.setFloat64(l,e),l+=8,s?d(s):Wn[l++]=0,Wn[n?8:0]=c;let u=Wn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(f){let h=l;l+=1,l=(0,Nl.writeKey)(f,Wn,l);let m=l-h-1;m>127?m>16383?(sN.error("Key or username was too large for audit entry",f),l=h+1,Wn[h]=0):(Wn.copyWithin(h+2,h+1,l),bl.setUint16(h,m|32768),l++):Wn[h]=m}function E(f){f<128?Wn[l++]=f:f<16384?(bl.setUint16(l,f|32768),l+=2):f<1056964608?(bl.setUint32(l,f|3221225472),l+=4):(Wn[l]=255,bl.setUint32(l+1,f),l+=5)}}function Yt(e){try{let t=e.dataView||(e.dataView=new nN(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:ck[n&7],tableId:i,get recordId(){return nk(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?nk(e,u,d):void 0},getValue(E,f,h){if(n&eN||n&tN&&!f)return E.decoder.decode(e.subarray(t.position));if(n&tN&&h)return iN(E.getEntry(this.recordId),h,E)}}}catch(t){return sN.error("Reading audit entry error",t,e),{}}}function nk(e,t,r){let n=e.subarray(t,r);return(0,Nl.readKey)(n,0,r-t)}var Nl,jp,sk,ik,zp,ok,sN,Wn,bl,ak,Ah,Zb,fue,Qp,eN,tN,ZF,rN,ek,tk,rk,ck,nN,no=be(()=>{Nl=require("ordered-binary"),jp=G(J()),sk=G(_t()),ik=G(L()),zp=G(rt()),ok=G(Y());uu();sN=G(k());Xp();(0,jp.initSync)();Wn=Buffer.alloc(1024),bl=new DataView(Wn.buffer,Wn.byteOffset,1024),ak={writeKey(e,t,r){return e===lu?(t.set(lu,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Nl.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,Nl.readKey)(e,t,r)}},Ah={encoding:"binary",keyEncoder:ak},Zb=(0,ok.convertToMS)((0,jp.get)(ik.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,fue=1e3,Qp=1e4;a(Jp,"openAuditStore");a(Eue,"setAuditRetention");eN=16,tN=32,ZF=1,rN=2,ek=3,tk=4,rk=5,ck={put:ZF|eN,[ZF]:"put",delete:rN,[rN]:"delete",message:ek|eN,[ek]:"message",invalidate:tk,[tk]:"invalidate",patch:rk|tN,[rk]:"patch"};a(gf,"createAuditEntry");a(Yt,"readAuditEntry");nN=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(nk,"readKeySafely")});var oN={};$e(oN,{add:()=>Zp,applyReverse:()=>lk,getRecordAtTime:()=>iN,rebuildUpdateBefore:()=>em});function Zp(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 em(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,Zp(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function lk(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=hue[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=uk}}function iN(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let l=n.get(i),_=Yt(l);switch(_.type){case"put":s=_.getValue(r);break;case"patch":lk(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let l in s)s[l]===uk&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),_=Yt(l),u;switch(_.type){case"put":u=_.getValue(r);break;case"patch":u=_.getValue(r);break}for(let d in u)o[d]&&(s[d]=u[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var hue,uk,Xp=be(()=>{no();a(Zp,"add");Zp.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)};hue={add:Zp};a(em,"rebuildUpdateBefore");a(lk,"applyReverse");uk={};a(iN,"getRecordAtTime")});function gn(e){return e[Pt]||(e[Pt]=Object.create(null))}function im(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,_;if(o.resolve)_={get(){return o.resolve(this,this[Ie])},set(u){return o.set(this,u)},configurable:!0};else{switch(o.type){case"String":l=a(function(u){if(!(typeof u=="string"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a string, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="number"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a number, attempt to assign ${d}`);gn(this)[c]=u},"set");break;case"Int":l=a(function(u){let d=u?.__op__?u.value:u;if(!(d>>0===d||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Long":l=a(function(u){let d=u?.__op__?u.value:u;if(!(Math.round(d)===u&&Math.abs(d)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"BigInt":l=a(function(u){let d=u?.__op__?u.value:u;if(!(typeof d=="bigint"||u==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),u?.__op__?u.value=d:u=d;else throw new Qn.ClientError(`${c} must be a number, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new Qn.ClientError(`${c} must be a Date, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);gn(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){gn(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new Qn.ClientError(`${c} must be an object, attempt to assign ${u}`);gn(this)[c]=u},"set")}_={get(){let u=this[Pt];if(u&&c in u){let E=u[c];if(E?.__op__){let f=this[pe]?.[c];return E.update(f)}return E}let d=this[pe]?.[c];if(d&&typeof d=="object"){let E=dk(d,o);if(E)return u||(u=this[Pt]=Object.create(null)),u[c]=E}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[Pt];return l?.[o]!==void 0?l[o]:this[pe]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Qn.ClientError("Can not add a property to a sealed table schema");gn(this)[o]=c}),i("deleteProperty",function(o){gn(this)[o]=void 0}),i("toJSON",function(){let o=this[Pt],c;for(let _ in o){c||(c=Object.assign({},this[pe]));let u=o[_];if(u?.__op__){let d=c[_];u=u.update(d)}c[_]=u}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[pe])),Object.assign(c,this)),c||this[pe]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function dk(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=s}},im(r,t)),new r(e)):new tm(e);case Array:let n=new nm(e.length);n[pe]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=dk(o,t?.elements)),n[s]=o}return n;default:return e}}function _E(e){let t=e[Pt],r;for(let s in t){r||(r=Object.assign({},e[pe]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=_E(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[pe])),Object.assign(r,e)),r||e[pe]}function Ya(e,t=e[Pt]){let r;if(_k.call(e,pe)&&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=Ya(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[pe]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=oN[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ya(s);r[n]=s}return r?Object.freeze(r):_k.call(e,pe)?e[pe]:e}function rm(e){let t=e[pe];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Va]||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?.[pe]===s){if(rm(i))return!0}else return!0}}else{let r=e[Pt];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[pe]===i){if(rm(s))return!0}else return!0}else return!0}}return!1}var Qn,Pt,tm,_k,Va,nm,sm,dE=be(()=>{Mn();Qn=G(ie());Xp();Pt=Symbol("own-data");a(gn,"getChanges");a(im,"assignTrackedAccessors");a(dk,"trackObject");tm=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[pe])throw new Error("Can not track an already tracked object, check for circular references");this[pe]=t}};im(tm,{});a(_E,"collapseData");_k=Object.prototype.hasOwnProperty;a(Ya,"deepFreeze");a(rm,"hasChanges");Va=Symbol.for("has-array-changes"),nm=class extends Array{static{a(this,"TrackedArray")}[Va];constructor(t){super(t)}splice(...t){return this[Va]=!0,super.splice(...t)}push(...t){return this[Va]=!0,super.push(...t)}pop(){return this[Va]=!0,super.pop()}unshift(...t){return this[Va]=!0,super.unshift(...t)}shift(){return this[Va]=!0,super.shift()}};nm.prototype.constructor=Array;sm=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var fg={};$e(fg,{CONTEXT:()=>Ie,ID_PROPERTY:()=>Ue,IS_COLLECTION:()=>Ss,MultiPartId:()=>il,RECORD_PROPERTY:()=>pe,Resource:()=>er,snake_case:()=>mue,transformForSelect:()=>am});function mue(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function fk(e,t){if(dd=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(dd=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new il;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){dd=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function Rn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,_,u;if(r?(o?(u=i,o=o[Ie]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Ie]||i):u=i:(u=s,c=u[Ue]??u[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[Ie]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let m=this.parseQuery(c.slice(f+1));l?l=Object.assign(m,l):l=m,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return it(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,u,o):f.allowUpdate(o.user,u,o):t.type==="create"?f.allowCreate(o.user,u,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(m=>{if(!m)throw new om(o.user);return typeof u?.then=="function"?u.then(S=>e(f,l,o,S)):e(f,l,o,u)});if(!h)throw new om(o.user)}return typeof u?.then=="function"?u.then(h=>e(f,l,o,h)):e(f,l,o,u)}a(E,"authorizeActionOnResource")}}function An(e,t){let r=new pk.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 aN(e,t,r){let n=e[pe];if(n){let s=e[Pt];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 am(e,t){let r=t?.propertyResolvers,n=t[Ie],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):aN(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let _=[],u=i(aN(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(E=>E&&typeof E=="object"?c(E):E);let _={},u=i(aN(l,r,n)),d;for(let E of e){let f=u(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=am(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var Ek,hk,pk,Ie,Ue,Ss,pe,pue,er,om,dd,il,Mn=be(()=>{Ek=require("crypto");nu();hk=require("../index"),pk=G(ie());dE();ha();tp();Ie=Symbol.for("context"),Ue=Symbol.for("primary-key"),Ss=Symbol("is-collection"),pe=Symbol("stored-record"),pue={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},er=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ue]=t;let n=r?.[Ie];this[Ie]=n!==void 0?n:r||null}static get=Rn(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 _=am(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Rn(function(t,r,n,s){if(Array.isArray(s)&&t[Ss]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,_=l.getResource(c[l.primaryKey],n,{async:!0});_.then?i.push(_.then(u=>u.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):An(t,"put")},{hasContent:!0,type:"update"});static patch=Rn(function(t,r,n,s){return t.patch?t.patch(s,r):An(t,"patch")},{hasContent:!0,type:"update"});static delete=Rn(function(t,r,n,s){return t.delete?t.delete(r):An(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Ek.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),it(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):An(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=Rn(function(t,r,n,s){return t.invalidate?t.invalidate(r):An(t,"delete")},{hasContent:!1,type:"update"});static post=Rn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=Rn(function(t,r,n,s){return t.connect?t.connect(s,r):An(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Rn(function(t,r,n,s){return t.subscribe?t.subscribe(r):An(t,"subscribe")},{type:"read"});static publish=Rn(function(t,r,n,s){return t[Ue]!=null&&t.update?.(),t.publish?t.publish(s,r):An(t,"publish")},{hasContent:!0,type:"create"});static search=Rn(function(t,r,n,s){let i=t.search?t.search(r):An(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=am(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=Rn(function(t,r,n,s){return t.search?t.search(s,r):An(t,"search")},{hasContent:!0,type:"read"});static copy=Rn(function(t,r,n,s){return t.copy?t.copy(s,r):An(t,"copy")},{type:"create"});static move=Rn(function(t,r,n,s){return t.move?t.move(s,r):An(t,"move")},{type:"delete"});post(t){if(this[Ss])return this.constructor.create(this[Ue],t,this[Ie]);An(this,"post")}static isCollection(t){return t?.[Ss]}static coerceId(t){return t}static parseQuery(t){return ep(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&&pue[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:fk(t,this),isCollection:dd}}let i=fk(t,this);return dd?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Ie],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let _=l.asMap.get(t);if(s=_?.find(u=>u.constructor===c),s)return s;_||l.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=l.find(_=>_[Ue]===t&&_.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let _=new Map;for(let u of l){let d=u[Ue],E=_.get(d);E?E.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Ss]=!0),s}subscribe(t){return new ts}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ts}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Ue]}getContext(){return this[Ie]}};er.prototype[Ie]=null;(0,hk._assignPackageExport)("Resource",er);a(mue,"snake_case");om=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(fk,"pathToId");il=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(Rn,"transactional");a(An,"missingMethod");a(aN,"selectFromObject");a(am,"transformForSelect")});function Tk(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Sk,Sue(e.primaryStore,e.auditStore)):(c=mk,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{gk(mk[i])})));let l=c[i]||(c[i]=[]);l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now());let _=l[o];_||(_=l[o]=new Map,_.envs=l,_.tableId=o,_.store=e.primaryStore),t=Wc(t);let u=new lN(r);u.startTime=n;let d=_.get(t);return d?d.push(u):(_.set(t,d=[u]),d.tables=_,d.key=t),u.subscriptions=d,u}function gk(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Yt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l,_=Wc(i.recordId),u=0;do{let d=o.get(_);if(d){for(let f of d)if(!(u>0&&!(f.includeDescendants&&!(f.onlyChildren&&u>1)))){if(f.startTime>=n){(0,cN.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,cN.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Sue(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=Sk[s];if(!l)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now(),gk(l),r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var cN,mk,Sk,lN,Rk=be(()=>{cN=G(k());nu();I_();no();mk=Object.create(null),Sk=Object.create(null);a(Tk,"addSubscription");lN=class extends ts{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(gk,"notifyFromTransactionData");a(Sue,"listenToCommits")});var qO={};$e(qO,{coerceType:()=>cm,makeTable:()=>_m,setServerUtilities:()=>Iue,updateResource:()=>lm});function _m(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:m}=e,{attributes:S}=e;S||(S=[]);let g=YS(i,n,l),T=0,b,N,U={},v=Promise.resolve(),q,M,W;for(let Q of S)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(q=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(M=Q),Q.expiresAt&&(W=Q),Q.isPrimaryKey&&(U=Q);let z,X=[],ce=[],_e=1,de=2,Ge={},we={},xe=864e5,Wd,Qd,zi,_y=!1,zm,Jm,cY=i.getRange({start:!1,end:!1}).constructor,lY=10,uY=6;h&&Ey();class je extends er{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=q;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=u;static schemaDefined=_;static sourcedFrom(p,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),N=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let D=a(P=>{let y=this.sources.slice(0,-1);if(y=y.filter(B=>B[P]&&(!B[P].reliesOnPrototype||B.prototype[P])),y.length>0)if(y.length===1){let B=y[0];return(F,C,x)=>{if(F?.source!==B)return B[P](C,x,F)}}else return(B,F,C)=>{let x=[];for(let H of y){if(B?.source===H)break;x.push(H[P](F,C,B))}return Promise.all(x)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],I=a(P=>{if(O[P]&&(!O[P].reliesOnPrototype||O.prototype[P]))return(y,B,F)=>{if(!y?.source)return O[P](B,F,y)}},"getApplyToCanonicalSource");return Ge={put:I("put"),patch:I("patch"),delete:I("delete"),publish:I("publish")},we={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let P=!1,y=a(async(B,F)=>{let C=B.value,x=B.table?ft[c][B.table]:je;if(c===gs.SYSTEM_SCHEMA_NAME&&(B.table===gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||B.table===gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(P=!0),B.id===void 0&&(B.id=C[x.primaryKey],B.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(B));B.source=p;let H=await x.getResource(B.id,F,yl);switch(B.type){case"put":return H._writeUpdate(C,!0,yl);case"patch":return H._writeUpdate(C,!1,yl);case"delete":return H._writeDelete(yl);case"publish":return H._writePublish(C,yl);case"invalidate":return H.invalidate(yl);default:ct.error("Unknown operation",B.type,B.id)}},"writeUpdate");try{let B=p.subscribe;B&&m==null&&(m=!0);let F=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Wa.getWorkerIndex)()):(0,Wa.getWorkerIndex)()===0,C=B&&F&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let x;for await(let H of C)try{if(!(H.type==="transaction"?H.writes[0]:H)){ct.error("Bad subscription event",H);continue}if(H.source=p,x)if(H.beginTxn)x.resolve();else{y(H,x);continue}if(H.type==="end_txn")continue;let fe=it(H,()=>{if(H.type==="transaction"){let se=[];for(let Be of H.writes)try{se.push(y(Be,H))}catch(ue){throw ue.message+=" writing "+JSON.stringify(Be)+" of event "+JSON.stringify(H),ue}return Promise.all(se)}else if(H.type==="define_schema"){let se=this.attributes.slice(0),Be;for(let ue of H.attributes)se.find(Pe=>Pe.name===ue.name)||(se.push(ue),Be=!0);Be&&(St({table:s,database:c,attributes:se,origin:"cluster"}),Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return H.beginTxn?(x=H,y(H,H),new Promise(se=>{x.resolve=se})):y(H,H)});P&&(await fe,Td.signalUserChange(new gd.UserEventMsg(process.pid))),H.onCommit&&(fe?.then?fe.then(H.onCommit):H.onCommit())}catch(ee){ct.error("error in subscription handler",ee)}}}catch(B){ct.error(B)}})(),this}static getResource(p,A,D){let O=super.getResource(p,A,D);if(p!=null){ql(p);try{if(O.hasOwnProperty(pe))return O;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let I=!D?.async||i.cache?.get(p),P=Zn(A),y=P.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Xm(p,A,{transaction:y},I,B=>{if(B?lm(O,B):O[pe]=null,A.onlyIfCached&&A.noCacheStore){if(!O.doesExist())throw new jr.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let F=Zm(p,B,A,O);if(F)return P?.disregardReadTxn(),O[uN]=!0,dN(F,C=>(lm(O,C),O))}return O})}catch(I){throw I.message.includes("Unable to serialize object")&&(I.message+=": "+JSON.stringify(p)),I}}return O}ensureLoaded(){let p=Zm(this[Ue],this[Qr],this[Ie]);if(p)return this[uN]=!0,dN(p,A=>{this[Qr]=A,this[pe]=A.value,this[md]=A.version})}static setTTLExpiration(p){if(typeof p=="number")E=p*1e3,f||(f=0);else if(p&&typeof p=="object")E=p.expiration*1e3,f=(p.eviction||0)*1e3,xe=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");xe=xe||(E+f)/4,Jd()}static enableAuditing(p=!0){h=p,p&&Ey(),je.audit=p}static coerceId(p){return p===""?null:cm(p,U)}static async dropTable(){if(delete ft[c][s],c===o){for(let p of S)u.remove(je.tableName+"/"+p.name),r[p.name]?.drop();u.remove(je.tableName+"/"),i.drop(),await u.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Td.signalSchemaChange(new gd.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ss])return this.search(p);if(this[Ue]===null){if(p?.conditions)return this.search(p);let A=je.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Ie]?.returnNonexistent)return this}allowRead(p,A){let D=zd(p);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,I=A?.select;if(O?.length>0||_y&&I){if(A||(A={}),I){let P=O?.length>0&&_N(O,"read");A.select=I.map(y=>{let B=y.name||y;if(!P||P[B]){let F=zi[B]?.definition?.tableClass;if(F){if(y.name||(y={name:y}),!F.prototype.allowRead.call(null,p,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=O.filter(P=>P.read&&!zi[P.attribute_name]).map(P=>P.attribute_name);return A}else return!0}}allowUpdate(p,A){let D=zd(p);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let I=_N(O,"update");for(let P in A)if(!I[P])return!1;for(let P of O){let y=P.attribute_name;!P.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(p,A){if(this[Ss]){let D=zd(p);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let I=_N(O,"insert");for(let P in A)if(!I[P])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return zd(p)?.delete}update(p,A){if(!Zn(this[Ie]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let O;return typeof p=="object"&&p&&(A?(Object.isFrozen(p)&&(p=Object.assign({},p)),this[pe]={},this[Pt]=p):(O=this[Pt],O&&(p=Object.assign(O,p)),this[Pt]=O=p)),this._writeUpdate(this[Pt],A),this}addTo(p,A){if(typeof A=="number"||typeof A=="bigint")this[fd]===Ok?this.set(p,(+this.getProperty(p)||0)+A):(this[fd]||this.update(),this.set(p,new sm(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,A){if(typeof A=="number")return this.addTo(p,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Qr]}invalidate(p){let A=this[Ie],D=this[Ue];ql(D),Zn(this[Ie]).addWrite({key:D,store:i,invalidated:!0,entry:this[Qr],nodeName:this[Ie]?.nodeName,before:Ge.invalidate?.bind(this,A,D),beforeIntermediate:we.invalidate?.bind(this,A,D),commit:(I,P)=>{if(P?.version>I)return;let y=null;for(let B in r)y||(y={}),y[B]=this.getProperty(B);g(D,y,this[Qr],I,Ed,h,this[Ie],0,"invalidate")}})}static evict(p,A,D){let O=this.Source,I;if(!((N||h)&&(!A||(I=i.getEntry(p),!I||!A)||I.version!==D))){if(N){if(i.hasLock(p,I.version))return;let P;for(let y in r)P||(P={}),P[y]=A[y];if(P)return g(p,P,I,D,hd,null,null,0,null,!0)}return i.ifVersion(p,D,()=>{jd(p,A,null)}),h?g(p,null,I,D,hd,null,null,0,null,!0):i.remove(p,D)}}lock(){throw new Error("Not yet implemented")}static operation(p,A){return p.table||=s,p.schema||=c,Lk.operation(p,A)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,A,D){let O=this[Ie],I=Zn(O),P=this[Ue];ql(P);let y=this[Qr];this[fd]=A?Ok:bue;let B={key:P,store:i,entry:y,nodeName:O?.nodeName,validate:F=>{p||(p=this[Pt]),A||p&&rm(this[Pt]===p?this:p)?O?.source||(I.checkOverloaded(),this.validate(p,!A),M&&(p[M.name]=M.type==="Date"?new Date(F):M.type==="String"?new Date(F).toISOString():F),A&&(t&&p[t]!==P&&(p[t]=P),q&&(y?.value?p[q.name]=y?.value[q.name]:p[q.name]=q.type==="Date"?new Date(F):q.type==="String"?new Date(F).toISOString():F),p=Ya(p))):I.removeWrite(B)},before:A?Ge.put?()=>Ge.put(O,P,p):null:Ge.patch?()=>Ge.patch(O,P,p):Ge.put?()=>Ge.put(O,P,Ya(this)):null,beforeIntermediate:A?we.put?()=>we.put(O,P,p):null:we.patch?()=>we.patch(O,P,p):we.put?()=>we.put(O,P,Ya(this)):null,commit:(F,C,x)=>{if(x){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Qr]=C,C?.value?.[pe])throw new Error("Can not assign a record to a record, check for circular references");A||(this[pe]=C?.value??null)}this[Pt]=void 0,this[md]=F;let H=C?.value,ee=p;if(this[fd]=0,C?.version>=F)if(h){let ue=C.localTime,Pe=C.version;for(;ee&&(ue>F||Pe>=F&&ue>0);){let re=l.get(ue);if(!re)break;let Z=Yt(re);if(Pe=Z.version,Pe>F){if(Z.type==="patch"){let ge=Z.getValue(i);ee=em(ee,ge)}else if(Z.type==="put"||Z.type==="delete")return}else if(Pe===F)return;ue=Z.previousLocalTime}}else{if(A)return;ee=em(ee,H)}let fe;if(A?fe=ee:(this[pe]=H,fe=A?ee:Ya(this,ee)),this[pe]=fe,fe?.[pe])throw new Error("Can not assign a record to a record, check for circular references");let se;A||(se=p),jd(P,H,fe);let Be=A?"put":"patch";g(P,fe,C,F,0,h,O,O.expiresAt||(E?E+Date.now():0),Be,!1,se),O.expiresAt&&Jd()}};I.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ss]){for await(let A of this.search(p))(await je.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[pe]?this._writeDelete(p):!1}_writeDelete(p){let A=Zn(this[Ie]),D=this[Ue];ql(D);let O=this[Ie];return A.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Ge.delete?.bind(this,O,D),beforeIntermediate:we.delete?.bind(this,O,D),commit:(I,P,y)=>{let B=P?.value;y&&(O&&P?.version>(O.lastModified||0)&&(O.lastModified=P.version),lm(this,P)),!(P?.version>I)&&(jd(this[Ue],B),ct.trace("Write delete entry",D,I),h||m?(g(D,null,this[Qr],I,0,h,this[Ie],0,"delete"),h||Jd()):i.remove(this[Ue]))}}),!0}search(p){let A=this[Ie],D=Zn(A);if(!p)throw new Error("No query provided");let O=p.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ue]&&(O=[{attribute:null,comparator:"prefix",value:this[Ue]}].concat(O));let I,P={};function y(Z,ge){let qe;switch(ge){case"and":case void 0:if(Z.length<1)throw new Error('An "and" operator requires at least one condition');qe=!0;break;case"or":if(Z.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}let ys=qe&&{},Ji;for(let ze of Z){if(ze.conditions){ze.conditions=y(ze.conditions,ze.operator);continue}let Xt=ze[0]??ze.attribute,Ln=Xt==null?U:Mi(S,Xt);if(Ln){if(qe){let Is=Es(Xt),Zt=ys[Is];Zt?(Zt.push(ze),Ji=!0):ys[Is]=[ze]}(Ln.type||fO[ze.comparator])&&(ze[1]===void 0?ze.value=F(ze.value,Ln):ze[1]=F(ze[1],Ln))}else if(Xt!=null)throw(0,jr.handleHDBError)(new Error,`${Xt} is not a defined attribute`,404)}if(p.enforceExecutionOrder)return Z;if(Ji)for(let ze in ys){let Xt=ys[ze],Ln=Xt.length;if(Ln>1)for(let Is=0;Is<Ln;Is++){let Zt=Xt[Is];if(Zt.comparator==="ge"||Zt.comparator==="greater_than_equal")for(let Xi=0;Xi<Ln;Xi++){let ac=Xt[Xi];(ac.comparator==="le"||ac.comparator==="less_than_equal")&&(Zt.comparator="between",Zt.value=[Zt.value,ac.value],Z.splice(Z.indexOf(ac),1))}if(Zt.comparator==="equals"||!Zt.comparator){for(let Xi=0;Xi<Ln;Xi++)if(Xi!==Is){let ac=Xt[Xi];Z.splice(Z.indexOf(ac),1)}break}}}return Z}a(y,"prepareConditions");function B(Z,ge){if(p.enforceExecutionOrder)return Z;for(let qe of Z)qe.conditions&&(qe.conditions=B(qe.conditions,qe.operator));return Z.length>1&&ge!=="or"?(0,Ck.sortBy)(Z,Zh(je)):Z}a(B,"orderConditions");function F(Z,ge){return Array.isArray(Z)?Z.map(qe=>cm(qe,ge)):cm(Z,ge)}a(F,"coerceTypedValues");let C=p.operator;(O.length>0||C)&&(O=y(O,C));let x=typeof p.sort=="object"&&p.sort,H;if(x&&C!=="or"){let Z=x.attribute;if(Z==null)throw new jr.ClientError("Sort requires an attribute");if(I=O.find(ge=>Es(ge.attribute)===Es(Z)),!I){let ge=Mi(S,Z);if(!ge)throw(0,jr.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not a defined attribute`,404);if(ge.indexed)I={attribute:Z,comparator:"sort"},O.push(I);else if(O.length===0&&!p.allowFullScan)throw(0,jr.handleHDBError)(new Error,`${Array.isArray(Z)?Z.join("."):Z} is not indexed and not combined with any other conditions`,404)}I&&(I.descending=!!x.descending)}O=B(O,C),x&&(I&&O[0]===I?x.next&&(H={dbOrderedAttribute:x.attribute,attribute:x.next.attribute,descending:x.next.descending,next:x.next.next}):(I&&O.splice(O.indexOf(I),1),H=x));let ee=p.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:O,operator:C,postOrdering:H,selectApplied:!!ee};let fe=D.useReadTxn(),se=EO(O,C,je,fe,p,A,(Z,ge)=>dy(Z,ee,A,fe,ge),P),Be=p.ensureLoaded!==!1;H||(se=re(se));let ue=je.transformEntryForSelect(ee,A,fe,P,Be,!0),Pe=je.transformToOrderedSelect(se,ee,H,fe,A,ue);function re(Z){return p.offset||p.limit!==void 0?Z.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):Z}return a(re,"applyOffset"),H&&(Pe=re(Pe)),Pe.onDone=()=>{Pe.onDone=null,D.doneReadTxn()},Pe.selectApplied=!0,Pe.getColumns=()=>{if(ee){let Z=[];for(let ge of ee)ge==="*"?Z.push(...S.map(qe=>qe.name)):Z.push(ge.name||ge);return Z}return S.map(Z=>Z.name)},Pe}static transformToOrderedSelect(p,A,D,O,I,P){let y=new cY;if(D){p=dy(p,A,O,I,null);let B;y.iterate=function(){let C,x=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),H,ee=D.dbOrderedAttribute,fe,se,Be=!0;function ue(re){let Z=re.next&&ue(re.next),ge=re.descending;return(qe,ys)=>{let Ji=eS(qe,re.attribute,O),ze=eS(ys,re.attribute,O),Xt=ge?(0,Qa.compareKeys)(ze,Ji):(0,Qa.compareKeys)(Ji,ze);return Xt===0?Z?.(qe,ys)||0:Xt}}a(ue,"createComparator");let Pe=ue(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(H)return y.onDone&&y.onDone(),re}else return{value:await P.call(this,re.value)};B=[],fe&&B.push(fe);do if(re=await x.next(),re.done){if(H=!0,B.length)break;return y.onDone&&y.onDone(),re}else{let Z=re.value;if(Z?.then&&(Z=await Z),ee){let ge=eS(Z,ee,O);if(Be)Be=!1,se=ge;else if(ge!==se){se=ge,fe=Z;break}}B.push(Z)}while(!0);return D.isGrouped,B.sort(Pe),C=B[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await P.call(this,re.value)}},return(){y.onDone&&y.onDone(),x.return()},throw(){y.onDone&&y.onDone(),x.throw()}}};let F=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let x=0;x<A.length;x++){let H=A[x],ee;if(H.name===C.attribute[0]){for(ee=H.sort||(H.sort={});ee.next;)ee=ee.next;ee.attribute=C.attribute.slice(1),ee.descending=C.descending}else H===C.attribute[0]&&(A[x]=ee={name:H,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&F(C.next)},"applySortingOnSelect");F(D)}else y.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),y=y.map(P);return y}static transformEntryForSelect(p,A,D,O,I,P){if(p&&(p===t||p?.length===1&&p[0]===t)){let C=a(x=>(A?.transaction?.stale&&(A.transaction.stale=!1),x?.key??x),"transform");return p===t?C:p.asArray?x=>[C(x)]:x=>({[t]:C(x)})}let y;I&&N&&!p?.every(C=>{let x;return typeof C=="object"?x=C.name:x=C,r[x]||x===t})&&(y=!0);let B,F=a(function(C){let x;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(zm=C,x=C.value||C.deref?.(),!x&&(C.key===void 0||C.deref)){if(C=Xm(C.key??C,A,{transaction:D,lazy:p?.length<4},this?.isSync,H=>H),C?.then)return C.then(F.bind(this));x=C?.value}if(y&&C?.metadataFlags&(Ed|hd)||C?.expiresAt&&C?.expiresAt<Date.now()){if(A.onlyIfCached&&A.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let H=Zm(C.key??C,C,A);if(H?.then)return H.then(F)}}if(x==null)return P?Ka.SKIP:x;if(p&&!(p[0]==="*"&&p.length===1)){let H,ee=a((se,Be)=>{let ue;typeof se=="object"?ue=se.name:ue=se;let Pe=zi?.[ue],re;if(Pe){let Z=O?.[ue];if(Z)if(Z.hasMappings){let qe=Pe.from?x[Pe.from]:Es(C.key);re=Z.get(qe),re||(re=[])}else re=Z.fromRecord?.(x);else re=Pe(x,A,C);let ge=a(qe=>{if(qe&&typeof qe=="object"){let ys=Pe.definition?.tableClass||je;B||(B={});let Ji=B[ue]||(B[ue]=ys.transformEntryForSelect(ue===se?null:se.select||(Array.isArray(se)?se:null),A,D,Z,I));if(Array.isArray(qe)){let ze=[],Xt=ys.transformToOrderedSelect(qe,se.select,typeof se.sort=="object"&&se.sort,A,D,Ji)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ln=a(Zt=>{for(;!Zt.done;){if(Zt?.then)return Zt.then(Ln);ze.push(Zt.value),Zt=Xt.next()}Be(ze,ue)},"nextValue"),Is=Ln(Xt.next());Is&&(H||(H=[]),H.push(Is));return}else if(qe=Ji.call(this,qe),qe?.then){H||(H=[]),H.push(qe.then(ze=>Be(ze,ue)));return}}Be(qe,ue)},"handleResolvedValue");re?.then?(H||(H=[]),H.push(re.then(ge))):ge(re);return}else re=x[ue],re&&typeof re=="object"&&ue!==se&&(re=je.transformEntryForSelect(se.select||se,A,D,null)({value:re}));Be(re,ue)},"selectAttribute"),fe;if(typeof p=="string")ee(p,se=>{fe=se});else if(Array.isArray(p))if(p.asArray)fe=[],p.forEach((se,Be)=>{se==="*"?p[Be]=x:ee(se,ue=>fe[Be]=ue)});else{fe={};let se=p.forceNulls;for(let Be of p)if(Be==="*")for(let ue in x)fe[ue]=x[ue];else ee(Be,(ue,Pe)=>{ue===void 0&&se&&(ue=null),fe[Pe]=ue})}else throw new jr.ClientError("Invalid select"+p);return H?Promise.all(H).then(()=>fe):fe}return x},"transform");return F}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");h||St({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),p||(p={});let A=!p.rawEvents,D=[],O=Tk(je,this[Ue]??null,function(P,y,B,F){try{let C=y.getValue?.(i,A);if(!C&&y.type==="patch"&&A){let H=i.getEntry(P);H?.version===y.version?C=H.value:C=y.getValue?.(i,!0,B),y.type="put"}let x={id:P,timestamp:B,value:C,version:y.version,type:y.type,beginTxn:F};D?D.push(x):this.send(x)}catch(C){ct.error(C)}},p.startTime||0,p),I=(async()=>{this[Ss]&&(O.includeDescendants=!0,p.onlyChildren&&(O.onlyChildren=!0)),p.supportsTransactions&&(O.supportsTransactions=!0);let P=this[Ue],y=p.previousCount;y>1e3&&(y=1e3);let B=p.startTime;if(this[Ss]){if(B){if(y)throw new jr.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,value:C}of l.getRange({start:B,exclusiveStart:!0,snapshot:!1})){let x=Yt(C);if(x.tableId!==n)continue;let H=x.recordId;if(P==null||Ik(P,H)){let ee=x.getValue(i,A,F);if(O.send({id:H,timestamp:F,value:ee,version:x.version,type:x.type}),O.queue?.length>Nk&&await O.waitForDrain()===!1)return}O.startTime=F}}else if(y){let F=[];for(let{key:C,value:x}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Yt(x);if(H.tableId!==n)continue;let ee=H.recordId;if(P==null||Ik(P,ee)){let fe=H.getValue(i,A,C);if(F.push({id:ee,timestamp:C,value:fe,version:H.version,type:H.type}),--y<=0)break}}catch(H){ct.error("Error getting history entry",C,H)}for(let C=F.length;C>0;)O.send(F[--C]);F[0]&&(O.startTime=F[0].timestamp)}else if(!p.omitCurrent){for(let{key:F,value:C,version:x,localTime:H}of i.getRange({start:P??!1,end:P==null?void 0:[P,Qa.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:F,timestamp:H,value:C,version:x,type:"put"}),O.queue?.length>Nk&&await O.waitForDrain()===!1))return}}else{y&&!B&&(B=0);let F=this[Qr]?.localTime;if(F===VS&&(i.cache?.delete(P),this[Qr]=i.getEntry(P),ct.trace("re-retrieved record",F,this[Qr]?.localTime),F=this[Qr]?.localTime),ct.trace("Subscription from",B,"from",P,F),B<F){let C=[],x=F;do{let H=l.get(x);if(H){p.omitCurrent=!0;let ee=Yt(H),fe=ee.getValue(i,A,x);A&&(ee.type="put"),C.push({id:P,value:fe,timestamp:x,...ee}),x=ee.previousLocalTime}else break;y&&y--}while(x>B&&y!==0);for(let H=C.length;H>0;)O.send(C[--H]);O.startTime=F}!p.omitCurrent&&this.doesExist()&&O.send({id:P,timestamp:F,value:this[pe],version:this[md],type:"put"})}for(let F of D)O.send(F);D=null})();return p.listener&&O.on("data",p.listener),O}doesExist(){return!!(this[pe]||this[fd])}publish(p,A){this._writePublish(p,A)}_writePublish(p,A){let D=Zn(this[Ie]),O=this[Ue]||null;ql(O);let I=this[Ie];D.addWrite({key:O,store:i,entry:this[Qr],nodeName:I?.nodeName,validate:()=>{I?.source||(D.checkOverloaded(),this.validate(p))},before:Ge.publish?.bind(this,I,O,p),beforeIntermediate:we.publish?.bind(this,I,O,p),commit:(P,y,B)=>{y===void 0&&m&&!h&&Jd(),g(O,y?.value??null,y,y?.version||P,0,!0,I,y?.expiresAt,"message",!1,p)}})}validate(p,A){let D,O=a((I,P,y)=>{if(P.type&&I!=null)if(A&&I.__op__&&(I=I.value),P.properties){typeof I!="object"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be an object${P.type?" ("+P.type+")":""}`);let B=P.properties;for(let F=0,C=B.length;F<C;F++){let x=B[F],H=O(I[x.name],x,y+"."+x.name);H&&(I[x.name]=H)}if(P.sealed&&I!=null&&typeof I=="object")for(let F in I)B.find(C=>C.name===F)||(D||(D=[])).push(`Property ${F} is not allowed within object in property ${y}`)}else switch(P.type){case"Int":(typeof I!="number"||I>>0!==I)&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof I!="number"||!(Math.floor(I)===I&&Math.abs(I)<=9007199254740992))&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof I!="number"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a number`);break;case"ID":typeof I=="string"||I?.length>0&&I.every?.(B=>typeof B=="string")||(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof I!="string"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a string`);break;case"Boolean":typeof I!="boolean"&&(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a boolean`);break;case"Date":if(!(I instanceof Date)){if(typeof I=="string"||typeof I=="number")return new Date(I);(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof I!="bigint"){if(typeof I=="string"||typeof I=="number")return BigInt(I);(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a bigint`)}break;case"Bytes":I instanceof Uint8Array||(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(I)){if(P.elements)for(let B=0,F=I.length;B<F;B++){let C=I[B],x=O(C,P.elements,y+"[*]");x&&(I[B]=x)}}else(D||(D=[])).push(`Value ${Ts(I)} in property ${y} must be a Buffer or Uint8Array`);break}P.nullable===!1&&I==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let I=0,P=S.length;I<P;I++){let y=S[I];if(!y.relationship&&(!A||y.name in p)){let B=O(p[y.name],y,y.name);B&&(p[y.name]=B)}}if(d)for(let I in p)S.find(P=>P.name===I)||(D||(D=[])).push(`Property ${I} is not allowed`);if(D)throw new jr.ClientError(D.join(". "))}getUpdatedTime(){return this[md]}wasLoadedFromSource(){return N?!!this[uN]:void 0}static async addAttributes(p){let A=S.slice(0);for(let D of p){if(!D.name)throw new jr.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new jr.ClientError("Attribute names cannot include backticks or forward slashes");(0,Dk.validateAttribute)(D.name),A.push(D)}return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static async removeAttributes(p){let A=S.filter(D=>!p.includes(D.name));return St({table:s,database:c,schemaDefined:_,attributes:A}),je.indexingOperation}static getRecordCount(p){let A=i.getStats().entryCount,D=1e3/2,O=performance.now(),I=Math.floor(A/2),P=p?.exactCount,y=0,B=0,F;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,B++,!P&&B<I&&performance.now()-O>D){F=B;break}if(F){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F}))re!=null&&y++;let x=F*2,H=(y+C)/x,ee=Math.pow((y-C+1)/F/2,2)+H*(1-H)/x,fe=Math.max(Math.sqrt(ee)*A,1),se=Math.round(H*A),Be=Math.max(se-1.96*fe,y+C),ue=Math.min(se+1.96*fe,A),Pe=Math.pow(10,Math.round(Math.log10(fe)));return Pe>se&&(Pe=Pe/10),y=Math.round(se/Pe)*Pe,{recordCount:y,estimatedRange:[Math.round(Be),Math.round(ue)]}}return{recordCount:y}}static updatedAttributes(){zi=this.propertyResolvers={$id:(p,A,D)=>({value:D.key}),$updatedtime:(p,A,D)=>D.version,$record:(p,A,D)=>D?{value:p}:p};for(let p of this.attributes){p.resolve=null;let A=p.relationship;if(A)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),_y=!0,A.to)p.elements?.definition?(zi[p.name]=p.resolve=(D,O,I)=>{let P=D[A.from?A.from:t],y=p.elements.definition.tableClass;return I?sl({attribute:A.to,value:P},Zn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:A.to,value:P}],O).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,A.from&&(p.resolve.from=A.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(A.from){let D=p.definition||p.elements?.definition;D?(zi[p.name]=p.resolve=(O,I,P)=>{let y=O[A.from];if(y!==void 0){if(p.elements){let B,F=y.map(C=>{let x=P?D.tableClass.primaryStore.getEntry(C,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(C,I);return x?.then&&(B=!0),x});return A.filterMissing?B?Promise.all(F).then(C=>C.filter(wk)):F.filter(wk):B?Promise.all(F):F}return P?D.tableClass.primaryStore.getEntry(y,{transaction:Zn(I).getReadTxn()}):D.tableClass.get(y,I)}},p.set=(O,I)=>{if(Array.isArray(I)){let P=I.map(y=>y[Ue]||y[D.tableClass.primaryKey]);O[A.from]=P}else{let P=I[Ue]||I[D.tableClass.primaryKey];O[A.from]=P}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=A.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`)}im(this,this)}static async deleteHistory(p=0){let A;for(let{key:D,value:O}of l.getRange({start:0,end:p}))await pd(),Yt(O).tableId===n&&(A=l.remove(D));await A}static async*getHistory(p=0,A=1/0){for(let{key:D,value:O}of l.getRange({start:p,end:A})){await pd();let I=Yt(O);I.tableId===n&&(yield{id:I.recordId,localTime:D,version:I.version,type:I.type,value:I.getValue(i,!0,D),user:I.user})}}static async getHistoryOfRecord(p){let A=[];if(p==null)throw new Error("An id is required");let D=i.getEntry(p);if(!D)return A;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let I=0;do{await pd();let P=l.get(O);if(P){let y=Yt(P);A.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(I<1e3&&O);return A.reverse()}static cleanup(){z?.remove()}}je.updatedAttributes();let _Y=je.prototype;return _Y[Oue]=!0,E&&je.setTTLExpiration(E/1e3),W&&dY(),je;function jd(Q,p,A){let D;for(let O in r){let I=r[O],P=I.isIndexing,y=A?.[O],B=p?.[O];if(y===B&&!P)continue;D=!0;let F=I.indexNulls,C=(0,Sd.getIndexedValues)(y,F),x=(0,Sd.getIndexedValues)(B,F);if(x?.length>0){let H=new Set(x);if(C=C?C.filter(ee=>{if(H.has(ee))H.delete(ee);else return!0}):[],x=Array.from(H),(x.length>0||C.length>0)&&Ak){let ee=x.concat(C).map(fe=>({key:fe,value:Q}));I.prefetch(ee,yk)}for(let ee=0,fe=x.length;ee<fe;ee++)I.remove(x[ee],Q)}else C?.length>0&&Ak&&I.prefetch(C.map(H=>({key:H,value:Q})),yk);if(C)for(let H=0,ee=C.length;H<ee;H++)I.put(C[H],Q)}return D}a(jd,"updateIndices");function ql(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>bk)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;case"bigint":if(Q<2n**64n&&Q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,Qa.writeKey)(Q,Nue,0)>bk)throw new Error("Primary key size is too large: "+Q.length);return!0}a(ql,"checkValidId");function Xm(Q,p,A,D,O){let I=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),A.transaction?.isDone)return O(null,Q);let P=i.getEntry(Q,A);return P&&p&&(P?.version>(p.lastModified||0)&&(p.lastModified=P.version),P?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=P.localTime)),O(P,Q)},"whenPrefetched");return D?I():_e>0?(_e--,I()):new Promise((P,y)=>{_e===0?(_e--,i.prefetch([Q],()=>{B(),F()})):(X.push(Q),ce.push(F),X.length>uY&&(_e--,B()));function B(){if(X.length>0){let C=ce;i.prefetch(X,()=>{_e===-1?B():_e++;for(let x of C)x()}),X=[],ce=[],de>2&&de--}else _e=de,de<lY&&de++}a(B,"prefetch");function F(){try{P(I())}catch(C){y(C)}}a(F,"load")})}a(Xm,"loadLocalRecord");function zd(Q){if(!Q?.role)return;let p=Q.role.permission;if(p.super_user)return yue;let A=p[c],D,O=A?.tables;if(O)return O[s];if(c==="data"&&(D=p[s])&&!D.tables)return D}a(zd,"getTablePermissions");function Zm(Q,p,A,D){if(N){let O;if(A.noCache?O=!0:(p?(!p.value||p.metadataFlags&(Ed|hd)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,En(!O,"cache-hit",s)),O){let I=fy(Q,p,A).then(P=>(P?.value?.[pe]&&ct.error("Can not assign a record with a record property"),A&&(P?.version>(A.lastModified||0)&&(A.lastModified=P.version),A.lastRefreshed=Date.now()),P));if(A?.onlyIfCached||p?.value&&D?.allowStaleWhileRevalidate?.(p,Q)){if(I.catch(P=>ct.warn(P)),A?.onlyIfCached&&!D.doesExist())throw new jr.ServerError("Entry is not cached",504);return}else return I}}else if(p?.value&&p.expiresAt&&p.expiresAt<Date.now())return je.evict(p.key,p.value,p.version),p.value=null,{then(O){return O(p)}}}a(Zm,"ensureLoadedFromSource");function Zn(Q){let p=Q?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let A=p.next;if(!A)return p=p.next=new Ea,p.lmdbDb=i,p;p=A}while(!0)}else return new lE}a(Zn,"txnForContext");function eS(Q,p,A){if(!Q)return;zm=Q;let D=Q.value||Q.deref?.()||(zm=i.getEntry(Q.key))?.value;if(typeof p=="object"){let I=zi,P=D;for(let y=0,B=p.length;y<B;y++){let F=p[y],C=I?.[F];P=C&&P?C(P,A,!0)?.value:P?.[F],I=C?.definition?.tableClass?.propertyResolvers}return P}let O=zi[p];return O?O(D,A):D[p]}a(eS,"getAttributeValue");function dy(Q,p,A,D,O){let I=O?.length,P={transaction:D,lazy:I>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},y;function B(F,C){let x=F?.value;if(!x)return Ka.SKIP;for(let H=0;H<I;H++)if(!y?.includes(H)&&!O[H](x,F))return Ka.SKIP;return C!==void 0&&(F.key=C),F}if(a(B,"processEntry"),I>0||!Q.hasEntries){let F=Q.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return I>0?B(C):C;if(C==null)return Ka.SKIP;for(let x=0;x<I;x++){let ee=O[x].idFilter;if(ee){if(!ee(C))return Ka.SKIP;y||(y=[]),y.push(x)}}return Xm(C,A,P,!1,B)});return Array.isArray(Q)&&(F=F.filter(C=>C!==Ka.SKIP)),F.hasEntries=!0,F}return Q}a(dy,"transformToEntries");async function fy(Q,p,A){let D=p?.metadataFlags,O=p?.version,I,P;if(!i.attemptLock(Q,O,()=>{clearTimeout(P);let C=i.getEntry(Q);!C||!C.value||C.metadataFlags&(Ed|hd)?I(fy(Q,i.getEntry(Q),A)):I(C)}))return new Promise(C=>{I=C,P=setTimeout(()=>{i.unlock(Q,O)},Aue)});let y=p?.value,B={requestContext:A,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},F=A?.responseHeaders;return new Promise((C,x)=>{let H;dN(it(B,async ee=>{let fe=performance.now(),se,Be,ue;try{for(let ge of je.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)&&(B.source=ge,se=await ge.get(Q,B),se))break;ue=D&Ed;let re=B.lastModified||ue&&O;Be=ue||re>O||!y,re||(re=(0,Sd.getNextMonotonicTime)());let Z=performance.now()-fe;if(vr(Z,"cache-resolution",s),F&&BA(F,"Server-Timing",`cache-resolve;dur=${Z.toFixed(2)}`,!0),ee.timestamp=re,E&&!B.expiresAt&&(B.expiresAt=Date.now()+E),se){if(typeof se!="object")throw new Error("Only objects can be cached and stored in tables");typeof se.toJSON=="function"&&(se=se.toJSON()),t&&se[t]!==Q&&(se[t]=Q)}H=!0,C({version:re,value:se})}catch(re){re.message+=` while resolving record ${Q} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),ct.trace(re.message,"(returned stale record)")):x(re),B.transaction.abort();return}if(A?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Zn(B).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:(re,Z)=>{if(Z?.version!==O)return;let ge=jd(Q,y,se);se?(we.put?.(B,Q,se),g(Q,se,Z,re,0,h&&Be||null,B,B.expiresAt,"put",!!ue)):(we.delete?.(B,Q),h||m?g(Q,null,Z,re,0,h&&Be||null,B,0,"delete",!!ue):i.remove(Q,O))}})}),()=>{i.unlock(Q,O)},ee=>{i.unlock(Q,O),H&&ct.error("Error committing cache update",ee)})})}a(fy,"getFromSource");function Jd(){if(xe!==Wd&&(Wd=xe,(0,Wa.getWorkerIndex)()===(0,Wa.getWorkerCount)()-1)){if(Qd&&clearTimeout(Qd),!xe)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/xe)*xe+Q.getTime(),A=a(D=>{ct.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),Qd=setTimeout(()=>v=v.then(async()=>{if(A(Math.max(D+xe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qd);return}let O=50,I=new Array(O),P=0;ct.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:B,value:F,version:C,expiresAt:x}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let H;F===null&&!h&&C+Rue<Date.now()?H=i.remove(B,C):x&&x+f<Date.now()&&(H=je.evict(B,F,C),y++),H&&(await I[P],I[P]=H.catch(ee=>{ct.error("Cleanup error",ee)}),++P>=O&&(P=0)),await pd()}ct.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){ct.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");A(p)}}a(Jd,"scheduleCleanup");function Ey(){z=l?.addDeleteRemovalCallback(n,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(Ey,"addDeleteRemoval");function dY(){(0,Wa.getWorkerIndex)()===0&&setInterval(async()=>{if(!Jm){Jm=!0;try{let Q=W.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${W} must be indexed`);for(let A of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of p.getValues(A)){let O=i.getEntry(D);O?.value?O.value[Q]<Date.now()&&je.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>p.remove(A,D))}await pd()}}catch(Q){ct.error("Error in evicting old records",Q)}finally{Jm=!1}}},gue).unref()}a(dY,"runRecordExpirationEviction")}function _N(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 yk(){}function Iue(e){Lk=e}function cm(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(wue.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,um.autoCast)(e);default:return e}}function Ik(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function dN(e,t,r){return e?.then?e.then(t,r):t(e)}function lm(e,t){e[Qr]=t,e[pe]=t?.value??null,e[md]=t?.version}function wk(e){return e!=null}function Ts(e){try{return JSON.stringify(e)}catch{return e}}var gs,Ka,Sd,Ck,Dk,Rd,jr,Td,gd,ct,Qa,Wa,um,Tue,Lk,gue,Rue,Ak,Aue,md,Oue,Qr,fd,Ok,bue,uN,yl,Ed,hd,Nue,bk,Nk,yue,eIe,wue,pd,hp=be(()=>{gs=G(L()),Ka=require("lmdb"),Sd=G(Nr()),Ck=require("lodash"),Dk=G(ru());Mn();vg();Rd=G(J());Rk();jr=G(ie()),Td=G(hi()),gd=G(os());Re();tp();ct=G(k());dE();ha();Qa=require("ordered-binary"),Wa=G(rt());no();um=G(Y());uu();Ti();Xp();w_();Tue=new Uint8Array(9);Tue[8]=192;gue=6e4,Rue=864e5;Rd.initSync();Ak=Rd.get(gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Aue=1e4,md=Symbol.for("version"),Oue=Symbol.for("incremental-update"),Qr=Symbol("entry"),fd=Symbol("is-saving"),Ok=1,bue=2,uN=Symbol("loaded-from-source"),yl={isNotification:!0,ensureLoaded:!1},Ed=1,hd=8,Nue=Buffer.allocUnsafeSlow(8192),bk=1978,Nk=100,yue={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},eIe=(0,um.convertToMS)(Rd.get(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(_m,"makeTable");a(_N,"attributesAsObject");a(yk,"noop");a(Iue,"setServerUtilities");wue=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(cm,"coerceType");a(Ik,"isDescendantId");pd=a(()=>new Promise(setImmediate),"rest");a(dN,"when");a(lm,"updateResource");a(wk,"exists");a(Ts,"stringify")});var Ve={};$e(Ve,{database:()=>Ic,databases:()=>ft,dropDatabase:()=>qg,dropTableMeta:()=>Mue,getDatabases:()=>Mr,getDefaultCompression:()=>Oh,getTables:()=>Cue,onUpdatedTable:()=>Pb,readMetaDb:()=>Ad,resetDatabases:()=>R_,table:()=>St,tables:()=>sn});function Cue(){return pm||Mr(),sn||{}}function Mr(){if(pm)return ft;pm=!0,Cl=new Map;let e=(0,Ot.getHdbBasePath)()&&(0,lt.join)((0,Ot.getHdbBasePath)(),$t.DATABASES_DIR_NAME),t=(0,Ot.get)($t.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,On.existsSync)(e)?e:(0,lt.join)((0,Ot.getHdbBasePath)(),$t.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,On.existsSync)(e))for(let r of(0,On.readdirSync)(e,{withFileTypes:!0})){let n=(0,lt.basename)(r.name,".mdb");r.isFile()&&(0,lt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ad((0,lt.join)(e,r.name),null,n)}if((0,On.existsSync)((0,wl.getBaseSchemaPath)())){for(let r of(0,On.readdirSync)((0,wl.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,lt.join)((0,wl.getBaseSchemaPath)(),r.name),s=(0,lt.join)((0,wl.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,On.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,lt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,lt.join)(s,i.name);Ad((0,lt.join)(n,i.name),(0,lt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,On.existsSync)(s))for(let o of(0,On.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,lt.extname)(o.name).toLowerCase()===".mdb"&&Ad((0,lt.join)(s,o.name),(0,lt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,lt.join)(c.path,(0,lt.basename)(o+".mdb"));(0,On.existsSync)(l)&&Ad(l,o,r,null,!0)}}for(let r in ft){let n=Cl.get(r);if(n){let s=ft[r];r.includes("delete")&&jn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(jn.trace(`delete table class ${i}`),delete s[i])}else if(delete ft[r],r==="data"){for(let s in sn)delete sn[s];delete sn[mm]}}return Cl=null,ft}}function R_(){pm=!1;for(let[,e]of Bo)e.needsDeletion=!0;Mr();for(let[e,t]of Bo)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bo.delete(e));return ft}function Ad(e,t,r=hN,n,s){let i=new fN.default(e,!1);try{let o=Bo.get(e);o?o.needsDeletion=!1:(o=(0,fm.open)(i),Bo.set(e,o));let c=new ja.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(dm.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,On.existsSync)(n)&&(i.path=n,_=(0,fm.open)(i),_.isLegacy=!0):_=Jp(o));let u=vk(r),d=u[mm],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[m,S]=f.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let g=E.get(m);g||E.set(m,g={attributes:[]}),(S==null||h.is_hash_attribute)&&(g.primary=h),S!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:m,primary:S}=h;if(!S){for(let X of m)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S){jn.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(m)}`);continue}}let g=u[f],T={},b=[],N,U,v=typeof S.audit=="boolean"?S.audit:(0,Ot.get)($t.CONFIG_PARAMS.LOGGING_AUDITLOG),q=S.trackDeletes,M=S.expiration,W=S.eviction,z=S.sealed;if(g)T=g.indices,b=g.attributes,g.schemaVersion++;else{N=S.tableId,N?N>=(l.get(Il)||0)&&l.putSync(Il,N+1):(S.tableId=N=l.get(Il),N||(N=1),l.putSync(Il,N+1),l.putSync(S.key,S));let X=new ja.default(!S.is_hash_attribute,S.is_hash_attribute);if(X.compression=S.compression,X.compression){let ce=(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Uk;X.compression.threshold=ce}U=Rf(o.openDB(S.key,X)),U.rootStore=o,U.tableId=N}for(let X of m){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!T[X.name]){let _e=new ja.default(!X.is_hash_attribute,X.is_hash_attribute);T[X.name]=o.openDB(X.key,_e),T[X.name].indexNulls=X.indexNulls}let ce=b.find(_e=>_e.name===X.name);ce?b.splice(b.indexOf(ce),1,X):b.push(X)}}catch(ce){jn.error("Error trying to update attribute",X,b,T,ce)}}if(!g){g=Bk(u,f,_m({primaryStore:U,auditStore:_,audit:v,sealed:z,expirationMS:M&&M*1e3,evictionMS:W&&W*1e3,trackDeletes:q,tableName:f,tableId:N,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:T,attributes:m,schemaDefined:S.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let X of pN)X(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function vk(e){let t=ft[e];if(t||(e==="data"?t=ft[e]=sn:e==="system"?Object.defineProperty(ft,"system",{value:t=Object.create(null),configurable:!0}):t=ft[e]=Object.create(null)),Cl&&!Cl.has(e)){let r=new Set;t[mm]=r,Cl.set(e,r)}return t}function Bk(e,t,r){return e[t]=r,r}function Ic({database:e,table:t}){e||(e=hN),Mr();let r=vk(e),n=(0,lt.join)((0,Ot.getHdbBasePath)(),$t.DATABASES_DIR_NAME),s=(0,Ot.get)($t.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_PATH)||((0,On.existsSync)(n)?n:(0,lt.join)((0,Ot.getHdbBasePath)(),$t.LEGACY_DATABASES_DIR_NAME));let o=(0,lt.join)(n,(i?t:e)+".mdb"),c=Bo.get(o);if(!c){let l=new fN.default(o,!1);c=(0,fm.open)(l),Bo.set(o,c)}return c}async function qg(e){if(!ft[e])throw new Error("Schema does not exist");let t=ft[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bo.delete(r.path),r.status==="open"&&(await r.close(),await Od.remove(r.path));if(r||(r=Ic({database:e,table:null}),r.status==="open"&&(await r.close(),await Od.remove(r.path))),e==="data"){for(let n in sn)delete sn[n];delete sn[mm]}delete ft[e]}function St({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:l,schemaDefined:_,origin:u}){t||(t=hN);let d=Ic({database:t,table:e}),E=ft[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,m,S,g;_==null&&(_=!0);let T=new ja.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,N;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=Jp(d)),m=i.find(ce=>ce.isPrimaryKey)||{},h=m.name,m.is_hash_attribute=m.isPrimaryKey=!0,m.schemaDefined=_,m.compression=Oh(),l&&(m.trackDeletes=!0),o=m.audit=typeof o=="boolean"?o:(0,Ot.get)($t.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(m.expiration=r),n&&(m.eviction=n),typeof c=="boolean"&&(m.sealed=c),u&&(m.origins?m.origins.includes(u)||m.origins.push(u):m.origins=[u]),jn.trace(`${e} table loading, opening primary store`);let W=new ja.default(!1,!0);W.compression=m.compression;let z=e+"/",X=Rf(d.openDB(z,W));X.rootStore=d,g=d.dbisDb=d.openDB(dm.INTERNAL_DBIS_NAME,T),X.tableId=g.get(Il),X.tableId||(X.tableId=1),g.putSync(Il,X.tableId+1),m.tableId=X.tableId,f=Bk(E,e,_m({primaryStore:X,auditStore:M,audit:o,sealed:c,trackDeletes:l,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:X.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:g})),f.schemaVersion=1,b=!0,q(),g.put(z,m)}S=f.indices,g=g||(d.dbisDb=d.openDB(dm.INTERNAL_DBIS_NAME,T)),f.dbisDB=g;let U=[];for(let{key:M,value:W}of g.getRange({start:!0})){let[z,X]=M.toString().split("/");if(X===""&&(X=W.name),X){if(z!==e)continue}else continue;let ce=i.find(de=>de.name===X),_e=!ce?.indexed&&W.indexed&&!W.isPrimaryKey;if((!ce||_e)&&(q(),b=!0,ce||g.remove(M),_e)){let de=f.indices[z];de&&U.push(de)}}let v=[];try{for(let M of i||[]){if(M.relationship)continue;let W=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:W,configurable:!0});let z=g.get(W);if(M.isPrimaryKey){if(z=z||g.get(W=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+z.expiration||void 0)||(+n||void 0)!==(+z.eviction||void 0)){let ce=Object.assign({},z);typeof o=="boolean"&&(o&&f.enableAuditing(o),ce.audit=o),r&&(ce.expiration=+r),n&&(ce.eviction=+n),c!==void 0&&(ce.sealed=c),b=!0,q(),g.put(W,ce)}continue}z?.attribute&&!z.name&&(z.indexed=!0);let X=!z||z.type!==M.type||z.indexed!==M.indexed||z.nullable!==M.nullable||JSON.stringify(z.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(z.elements)!==JSON.stringify(M.elements);if(M.indexed){let ce=new ja.default(!0,!1),_e=d.openDB(W,ce);(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,q(),z=g.get(W),(X||z.indexingPID&&z.indexingPID!==process.pid||z.restartNumber<bd.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=z?.lastIndexedKey||!1,M.indexingPID=process.pid,_e.isIndexing=!0,Object.defineProperty(M,"dbi",{value:_e}),v.push(M))),g.put(W,M)),z?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),_e.indexNulls=M.indexNulls,S[M.name]=_e}else X&&(b=!0,q(),g.put(W,M))}}finally{N&&N()}if(b&&(f.schemaVersion++,f.updatedAttributes()),jn.trace(`${e} table loading, running index`),v.length>0||U.length>0?f.indexingOperation=Pue(f,v,U):b&&Em.signalSchemaChange(new hm.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=u,b)for(let M of pN)M(f,u!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),jn.trace(`${e} table loaded`),f;function q(){N||d.transactionSync(()=>({then(M){N=M}}))}a(q,"startTxn")}async function Pue(e,t,r){try{let n=e.schemaVersion;await Em.signalSchemaChange(new hm.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,m=(0,Pk.getIndexedValues)(u[h]);if(m)for(let S=0,g=m.length;S<g;S++)f.dbi.put(m[S],_)}}),s.then(()=>l--,E=>{l--,jn.error(E)}),bd.workerData&&bd.workerData.restartNumber!==Mk.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}l>Due?await s:l>Lue&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await Em.signalSchemaChange(new hm.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){jn.error("Error in indexing",n)}}function Mue({table:e,database:t}){let r=Ic({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 Pb(e){pN.push(e)}function Oh(){let e=(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,Ot.get)($t.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||Uk,n={startingOffset:32};return t&&(n.dictionary=Od.readFileSync(t)),r&&(n.threshold=r),e&&n}var Ot,dm,fm,lt,On,wl,ja,fN,$t,Od,EN,Pk,Em,hm,bd,jn,Mk,hN,mm,Uk,sn,ft,Il,pN,pm,Bo,Cl,Due,Lue,Re=be(()=>{Ot=G(J()),dm=G(_t()),fm=require("lmdb"),lt=require("path"),On=require("fs"),wl=G(Je());hp();ja=G(_u()),fN=G(du()),$t=G(L()),Od=G(require("fs-extra")),EN=require("../index"),Pk=G(Nr()),Em=G(hi()),hm=G(os()),bd=require("worker_threads"),jn=G(k()),Mk=G(rt());no();uu();hN="data",mm=Symbol("defined-tables"),Uk=((0,Ot.get)($t.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,Ot.initSync)();sn=Object.create(null),ft=Object.create(null);(0,EN._assignPackageExport)("databases",ft);(0,EN._assignPackageExport)("tables",sn);Il=Symbol.for("next-table-id"),pN=[],Bo=new Map;a(Cue,"getTables");a(Mr,"getDatabases");a(R_,"resetDatabases");a(Ad,"readMetaDb");a(vk,"ensureDB");a(Bk,"setTable");a(Ic,"database");a(qg,"dropDatabase");a(St,"table");Due=1e3,Lue=10;a(Pue,"runIndexing");a(Mue,"dropTableMeta");a(Pb,"onUpdatedTable");a(Oh,"getDefaultCompression")});var Y=R((lIe,zk)=>{"use strict";var Ho=require("path"),Fk=require("fs-extra"),zr=k(),Hk=require("fs-extra"),Sm=require("os"),Uue=require("net"),vue=require("recursive-iterator"),mt=L(),Bue=fS(),Gk=require("papaparse"),Tm=require("moment"),{inspect:Hue}=require("util"),xk=require("is-number"),cIe=require("lodash"),Gue=require("minimist"),xue=require("https"),que=require("http"),{hdb_errors:gm}=ie(),Fue=/^((\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)))$/,kk=require("util").promisify(setTimeout),kue=100,$ue=5,Vue="",Yue=4,qk={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};zk.exports={isEmpty:bn,isEmptyOrZeroLength:zs,arrayHasEmptyValues:Que,arrayHasEmptyOrZeroLengthValues:jue,buildFolderPath:zue,isBoolean:$k,errorizeMessage:Kue,stripFileExtension:Xue,autoCast:Zue,autoCastJSON:Vk,autoCastJSONDeep:SN,removeDir:e_e,compareVersions:t_e,isCompatibleDataVersion:r_e,escapeRawValue:n_e,unescapeValue:s_e,stringifyProps:i_e,timeoutPromise:a_e,isClusterOperation:l_e,getClusterUser:__e,checkGlobalSchemaTable:u_e,getHomeDir:Kk,getPropsFilePath:o_e,promisifyPapaParse:d_e,removeBOM:Wk,createEventPromise:f_e,checkProcessRunning:E_e,checkSchemaTableExist:h_e,checkSchemaExists:Qk,checkTableExists:jk,getStartOfTomorrowInSeconds:p_e,getLimitKey:m_e,isObject:Jue,isNotEmptyAndHasValue:Wue,autoCasterIsNumberCheck:Yk,backtickASTSchemaItems:S_e,isPortTaken:c_e,createForkArgs:T_e,autoCastBoolean:g_e,async_set_timeout:kk,getTableHashAttribute:R_e,doesSchemaExist:A_e,doesTableExist:O_e,stringifyObj:b_e,ms_to_time:N_e,changeExtension:y_e,getEnvCliRootPath:TN,noBootFile:I_e,httpRequest:w_e,transformReq:C_e,convertToMS:D_e,PACKAGE_ROOT:mt.PACKAGE_ROOT};function Kue(e){return e instanceof Error?e:new Error(e)}a(Kue,"errorizeMessage");function bn(e){return e==null}a(bn,"isEmpty");function Wue(e){return!bn(e)&&(e||e===0||e===""||$k(e))}a(Wue,"isNotEmptyAndHasValue");function zs(e){return bn(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function Que(e){if(bn(e))return!0;for(let t=0;t<e.length;t++)if(bn(e[t]))return!0;return!1}a(Que,"arrayHasEmptyValues");function jue(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(jue,"arrayHasEmptyOrZeroLengthValues");function zue(...e){try{return e.join(Ho.sep)}catch{console.error(e)}}a(zue,"buildFolderPath");function $k(e){return bn(e)?!1:e===!0||e===!1}a($k,"isBoolean");function Jue(e){return bn(e)?!1:typeof e=="object"}a(Jue,"isObject");function Xue(e){return zs(e)?Vue:e.slice(0,-Yue)}a(Xue,"stripFileExtension");function Zue(e){return bn(e)||e===""||typeof e!="string"?e:qk[e]!==void 0?qk[e]:Yk(e)===!0?Number(e):Fue.test(e)?new Date(e):e}a(Zue,"autoCast");function Vk(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Vk,"autoCastJSON");function SN(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=SN(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=SN(r);n!==r&&(e[t]=n)}return e}else return Vk(e)}a(SN,"autoCastJSONDeep");function Yk(e){if(e.startsWith("0.")&&xk(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&xk(e))}a(Yk,"autoCasterIsNumberCheck");async function e_e(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await Hk.emptyDir(e),await Hk.remove(e)}catch(t){throw zr.error(`Error removing files in ${e} -- ${t}`),t}}a(e_e,"removeDir");function t_e(e,t){if(zs(e)){zr.info("Invalid current version sent as parameter.");return}if(zs(t)){zr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let _=0;_<l;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(t_e,"compareVersions");function r_e(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(r_e,"isCompatibleDataVersion");function n_e(e){if(bn(e))return e;let t=String(e);return t==="."?mt.UNICODE_PERIOD:t===".."?mt.UNICODE_PERIOD+mt.UNICODE_PERIOD:t.replace(mt.FORWARD_SLASH_REGEX,mt.UNICODE_FORWARD_SLASH)}a(n_e,"escapeRawValue");function s_e(e){if(bn(e))return e;let t=String(e);return t===mt.UNICODE_PERIOD?".":t===mt.UNICODE_PERIOD+mt.UNICODE_PERIOD?"..":String(e).replace(mt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(s_e,"unescapeValue");function i_e(e,t){if(bn(e))return zr.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+Sm.EOL}!zs(n)&&n[0]===";"?r+=" "+n+s+Sm.EOL:zs(n)||(r+=n+"="+s+Sm.EOL)}catch{zr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(i_e,"stringifyProps");function Kk(){let e;try{e=Sm.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Kk,"getHomeDir");function o_e(){let e=Ho.join(Kk(),mt.HDB_HOME_DIR_NAME,mt.BOOT_PROPS_FILE_NAME);return Fk.existsSync(e)||(e=Ho.join(__dirname,"../","hdb_boot_properties.file")),e}a(o_e,"getPropsFilePath");function a_e(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(a_e,"timeoutPromise");async function c_e(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Uue.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(c_e,"isPortTaken");function l_e(e){try{return mt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){zr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(l_e,"isClusterOperation");function u_e(e,t){let r=(Re(),ae(Ve)).getDatabases();if(!r[e])return gm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return gm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(u_e,"checkGlobalSchemaTable");function __e(e,t){if(bn(t)){zr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(bn(e)||zs(e)){zr.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){zr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){zr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(__e,"getClusterUser");function d_e(){Gk.parsePromise=function(e,t,r){return new Promise(function(n,s){Gk.parse(e,{header:!0,transformHeader:Wk,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(d_e,"promisifyPapaParse");function Wk(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Wk,"removeBOM");function f_e(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;zr.info(`Got cluster status event response: ${Hue(s)}`);try{i.cancel()}catch{zr.error("Error trying to cancel timeout.")}n(s)})})}a(f_e,"createEventPromise");async function E_e(e){let t=!0,r=0;do await kk(kue*r++),(await Bue.findPs(e)).length>0&&(t=!1);while(t&&r<$ue);if(t)throw new Error(`process ${e} was not started`)}a(E_e,"checkProcessRunning");function h_e(e,t){let r=Qk(e);if(r)return r;let n=jk(e,t);if(n)return n}a(h_e,"checkSchemaTableExist");function Qk(e){let{getDatabases:t}=(Re(),ae(Ve));if(!t()[e])return gm.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Qk,"checkSchemaExists");function jk(e,t){let{getDatabases:r}=(Re(),ae(Ve));if(!r()[e][t])return gm.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(jk,"checkTableExists");function p_e(){let e=Tm().utc().add(1,mt.MOMENT_DAYS_TAG).startOf(mt.MOMENT_DAYS_TAG).unix(),t=Tm().utc().unix();return e-t}a(p_e,"getStartOfTomorrowInSeconds");function m_e(){return Tm().utc().format("DD-MM-YYYY")}a(m_e,"getLimitKey");function S_e(e){try{let t=new vue(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){zr.error("Got an error back ticking items."),zr.error(t)}}a(S_e,"backtickASTSchemaItems");function T_e(e){return[e]}a(T_e,"createForkArgs");function g_e(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(g_e,"autoCastBoolean");function R_e(e,t){let{getDatabases:r}=(Re(),ae(Ve)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(R_e,"getTableHashAttribute");function A_e(e){let{getDatabases:t}=(Re(),ae(Ve));return t()[e]!==void 0}a(A_e,"doesSchemaExist");function O_e(e,t){let{getDatabases:r}=(Re(),ae(Ve));return r()[e]?.[t]!==void 0}a(O_e,"doesTableExist");function b_e(e){try{return JSON.stringify(e)}catch{return e}}a(b_e,"stringifyObj");function N_e(e){let t=Tm.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(N_e,"ms_to_time");function y_e(e,t){let r=Ho.basename(e,Ho.extname(e));return Ho.join(Ho.dirname(e),r+t)}a(y_e,"changeExtension");function TN(){if(process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Gue(process.argv);if(e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[mt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(TN,"getEnvCliRootPath");var mN;function I_e(){if(mN)return mN;let e=TN();if(TN()&&Fk.pathExistsSync(Ho.join(e,mt.HDB_CONFIG_FILE)))return mN=!0,!0}a(I_e,"noBootFile");function w_e(e,t){let r;return e.protocol==="http:"?r=que:r=xue,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",l=>{c.body+=l}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(w_e,"httpRequest");function C_e(e){if(!e.schema&&!e.database){e.schema=mt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(C_e,"transformReq");function D_e(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(D_e,"convertToMS")});var J=R((_Ie,t$)=>{"use strict";var gN=require("fs-extra"),za=require("path"),Jk=require("os"),L_e=require("properties-reader"),yd=k(),Nd=Y(),Ee=L(),Rm=Et(),P_e="Error initializing environment manager",Am="BOOT_PROPS_FILE_PATH",Xk=!1,M_e={[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},qi={};t$.exports={BOOT_PROPS_FILE_PATH:Am,getHdbBasePath:U_e,setHdbBasePath:v_e,get:Zk,initSync:H_e,setProperty:ve,initTestEnvironment:x_e,setCloneVar:G_e};function U_e(){return qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(U_e,"getHdbBasePath");function v_e(e){qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(v_e,"setHdbBasePath");function Zk(e){let t=Rm.getConfigValue(e);return t===void 0?qi[e]:t}a(Zk,"get");function ve(e,t){M_e[e]&&(qi[e]=t),Rm.updateConfigObject(e,t)}a(ve,"setProperty");function B_e(){let e;try{e=Nd.getPropsFilePath(),gN.accessSync(e,gN.constants.F_OK|gN.constants.R_OK),Xk=!0;let t=L_e(e);return qi[Ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ee.HDB_SETTINGS_NAMES.INSTALL_USER),qi[Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),qi[Am]=e,!0}catch{return yd.trace(`Environment manager found no properties file at ${e}`),!1}}a(B_e,"doesPropFileExist");function H_e(e=!1){try{(Xk||B_e()||Nd.noBootFile())&&!e$&&(Rm.initConfig(e),qi[Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Rm.getConfigValue(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){yd.error(P_e),yd.error(t),console.error(t),process.exit(1)}}a(H_e,"initSync");var e$=!1;function G_e(e){e$=e}a(G_e,"setCloneVar");function x_e(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=za.join(__dirname,"../../","unitTests");qi[Am]=za.join(l,"hdb_boot_properties.file"),ve(Ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,za.join(l,"settings.test")),ve(Ee.HDB_SETTINGS_NAMES.INSTALL_USER,Jk.userInfo()?Jk.userInfo().username:void 0),ve(Ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ve(Ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,za.join(l,"envDir","log")),ve(Ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ve(Ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,za.join(l,"envDir")),ve(Ee.CONFIG_PARAMS.STORAGE_PATH,za.join(l,"envDir")),s&&(ve(Ee.CONFIG_PARAMS.HTTP_SECUREPORT,Zk(Ee.CONFIG_PARAMS.HTTP_PORT)),ve(Ee.CONFIG_PARAMS.HTTP_PORT,null)),ve(Ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ve(Ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ve(Ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Nd.isEmpty(i)?!1:i),ve(Ee.CONFIG_PARAMS.HTTP_CORS,Nd.isEmpty(i)?!1:i),ve(Ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ve(Ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ve(Ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ve(Ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Nd.isEmpty(c)?!1:c),o&&(ve("CORS_ACCESSLIST",o),ve(Ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ve(Ee.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ve(Ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ve(Ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ve(Ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Am}. Please check your boot props and settings files`;yd.fatal(r),yd.error(t)}}a(x_e,"initTestEnvironment")});var s$=R((fIe,n$)=>{"use strict";var bm=J();bm.initSync();var Om=L(),{httpRequest:q_e}=Y(),F_e=require("path"),r$=require("fs-extra"),k_e=require("yaml"),$_e={describe_table:!0,describe_all:!0,describe_database:!0,list_users:!0,list_roles:!0,drop_role:!0,add_user:!0,alter_user:!0,drop_user:!0,restart_service:!0,restart:!0,create_database:!0,drop_database:!0,create_table:!0,drop_table:!0,create_attribute:!0,drop_attribute:!0,search_by_id:!0,delete:!0,search_by_value:!0,csv_file_load:!0,csv_url_load:!0,cluster_get_routes:!0,cluster_network:!0,cluster_status:!0,remove_node:!0,add_component:!0,deploy_component:!0,package_component:!0,drop_component:!0,get_components:!0,get_component_file:!0,set_component_file:!0,registration_info:!0,get_fingerprint:!0,set_license:!0,get_job:!0,search_jobs_by_start_date:!0,read_log:!0,read_transaction_log:!0,read_audit_log:!0,delete_transaction_logs_before:!0,purge_stream:!0,delete_records_before:!0,install_node_modules:!0,set_configuration:!0,get_configuration:!0,create_authentication_tokens:!0,refresh_operation_token:!0,system_information:!0,sql:!0};n$.exports={cliOperations:Y_e,buildRequest:V_e};function V_e(){let e={};for(let t of process.argv){if($_e[t]){e.operation=t;continue}if(t.includes("=")){let[r,...n]=t.split("=");n=n.join("=");try{n=JSON.parse(n)}catch{}e[r]=n}}return e}a(V_e,"buildRequest");async function Y_e(e){await r$.exists(F_e.join(bm.get(Om.CONFIG_PARAMS.ROOTPATH),Om.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await r$.exists(bm.get(Om.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await q_e({method:"POST",protocol:"http:",socketPath:bm.get(Om.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),headers:{"Content-Type":"application/json"}},e);t=JSON.parse(t.body),e.json?console.log(JSON.stringify(t,null,2)):console.log(k_e.stringify(t).trim())}catch(t){let r="Error: ";t?.response?.data?.error?r+=t.response.data.error:t?.response?.data?r+=t?.response?.data:r+=t.message,console.error(r)}}a(Y_e,"cliOperations")});var a$=R((hIe,o$)=>{"use strict";var i$=require("semver/functions/major"),K_e=ma(),RN=process.versions&&process.versions.node?process.versions.node:void 0;o$.exports=W_e;function W_e(){let e=K_e.engines["minimum-node"];if(RN&&i$(RN)<i$(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${RN}. Please install a version of Node.js that is withing the defined range.`}}a(W_e,"checkNodeVersion")});var ON=R((mIe,c$)=>{"use strict";var Id=J();Id.initSync();var Dl=require("fs-extra"),AN=require("path"),Ll=L(),Q_e=require("crypto"),j_e=require("uuid").v4;c$.exports=z_e;function z_e(){if(Id.getHdbBasePath()!==void 0){let e=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=AN.join(Id.getHdbBasePath(),Ll.LICENSE_KEY_DIR_NAME,Ll.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Dl.accessSync(r),Dl.accessSync(e),Dl.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=j_e(),i=Q_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Dl.writeFileSync(r,s),Dl.writeFileSync(e,i.privateKey),Dl.writeFileSync(t,i.publicKey)}else throw n}}}a(z_e,"checkJWTTokenExist")});var u$=R((TIe,l$)=>{"use strict";var bN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};l$.exports={HdbInfoInsertObject:bN}});var f$=R((RIe,d$)=>{"use strict";var _$=L(),NN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[_$.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[_$.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};d$.exports={UpgradeObject:NN}});var Nm=R((OIe,h$)=>{"use strict";var zn=require("prompt"),Pl=require("chalk"),E$=k(),Rs=require("os"),yN=to(),IN=["yes","y"];async function J_e(e){let t=`${Rs.EOL}`+Pl.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Rs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Rs.EOL}${Rs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Rs.EOL}`;zn.override=yN(["CONFIRM_UPGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Pl.magenta(`${Rs.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 zn.get([r])}catch(s){return E$.error("There was an error when prompting user about an upgrade."),E$.error(s),!1}return IN.includes(n.CONFIRM_UPGRADE)}a(J_e,"forceUpdatePrompt");async function X_e(e){let t=`${Rs.EOL}`+Pl.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.${Rs.EOL}`);zn.override=yN(["CONFIRM_DOWNGRADE"]),zn.start(),zn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Pl.magenta(`${Rs.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 zn.get([r]);return IN.includes(n.CONFIRM_DOWNGRADE)}a(X_e,"forceDowngradePrompt");async function Z_e(){let e=`${Rs.EOL}`+Pl.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");zn.override=yN(["GENERATE_CERTS"]),zn.start(),zn.message=e;let t={properties:{GENERATE_CERTS:{description:Pl.magenta(`${Rs.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 zn.get([t]);return IN.includes(r.GENERATE_CERTS)}a(Z_e,"upgradeCertsPrompt");h$.exports={forceUpdatePrompt:J_e,forceDowngradePrompt:X_e,upgradeCertsPrompt:Z_e}});var CN=R((NIe,p$)=>{"use strict";var wN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};p$.exports=wN});var S$=R((LIe,m$)=>{"use strict";var ede=Y(),tde=Et(),IIe=k(),wIe=require("path"),CIe=require("fs"),DIe=L();m$.exports={getOldPropsValue:rde};function rde(e,t,r=!1){let n=t.getRaw(e);return ede.isNotEmptyAndHasValue(n)?n:r?tde.getDefaultConfig(e):""}a(rde,"getOldPropsValue")});var A$=R((MIe,R$)=>{"use strict";var Go=require("path"),xo=require("fs-extra"),nde=require("properties-reader"),sde=CN(),Mt=k(),{getOldPropsValue:Qe}=S$(),{HDB_SETTINGS_NAMES:oe,CONFIG_PARAMS:Ja}=L(),Xa=Et(),ym=J(),T$=Y(),Js=L(),DN=new sde("3.1.0"),g$=[];function ide(){let e=nde(ym.get(oe.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Mt.info(t);let r=` ;Settings for the HarperDB process.
36
36
 
37
37
  ;The directory selected during install where the database files reside.
38
38
  ${oe.HDB_ROOT_KEY} = ${Qe(oe.HDB_ROOT_KEY,e)}
@@ -101,12 +101,12 @@ ${oe.CUSTOM_FUNCTIONS_PORT_KEY} = ${Xa.getDefaultConfig(Ja.HTTP_PORT)}
101
101
  ${oe.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Go.join(Qe(oe.HDB_ROOT_KEY,e),"custom_functions")}
102
102
  ;Set the max number of processes HarperDB will start for the Custom Functions server
103
103
  ${oe.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Xa.getDefaultConfig(Ja.HTTP_THREADS)}
104
- `,n=ym.get("settings_path"),s=Go.dirname(n),i=Go.join(s,"3_1_0_upgrade_settings.bak");try{Mt.info(`Backing up old settings file to: ${i}`),xo.copySync(n,i)}catch(c){throw Mt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Mt.info("New settings file values for 3.1.0 upgrade:",r),Mt.info(`Creating new/upgraded settings file at '${n}'`),xo.writeFileSync(n,r),Mt.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."),Mt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Mt.error(c),xo.copySync(i,n),c}ym.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Mt.info(o),o}a(ide,"updateSettingsFile_3_1_0");function ode(){let e=Go.join(TV.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),t=Go.join(TV.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.REG_KEY_FILE_NAME),r=Go.join(ym.getHdbBasePath(),Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),n=Go.join(r,Js.LICENSE_FILE_NAME),s=Go.join(r,Js.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Mt.info(i);let o="Creating .license directory";console.log(o),Mt.info(o),xo.mkdirpSync(r);try{xo.accessSync(e);try{let c="Moving licence file";console.log(c),Mt.info(c),xo.moveSync(e,n);let l="License file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving license file failed";console.error(l),Mt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Mt.warn(l)}try{xo.accessSync(t);try{let c="Moving registration file";console.log(c),Mt.info(c),xo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving registration file failed";console.error(l),Mt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Mt.warn(l)}}a(ode,"moveLicenseFiles");DN.sync_functions.push(ide);DN.sync_functions.push(ode);gV.push(DN);RV.exports=gV});var IV=R((vIe,yV)=>{"use strict";var Nn=Ye(),{insertRecords:ade}=Zo(),cde=Nr(),qo=_t(),lde=Y(),Fi=k(),ude=Y(),Xs=require("fs-extra"),ki=require("path"),_de=require("cli-progress"),wd=require("assert"),dde=require("pino"),fde=X();yV.exports=Ede;var Im,OV,wm,LN,Tr,Cd=!1;async function Ede(e=!0){return Im=fde.getHdbBasePath(),OV=ki.join(Im,"schema"),wm=ki.join(Im,"4_0_0_upgrade_tmp"),LN=ki.join(Im,"transactions"),console.info("Reindexing upgrade started for schemas"),Fi.notify("Reindexing upgrade started for schemas"),await bV(OV,!1,e),await Xs.pathExists(LN)&&(console.info(`
104
+ `,n=ym.get("settings_path"),s=Go.dirname(n),i=Go.join(s,"3_1_0_upgrade_settings.bak");try{Mt.info(`Backing up old settings file to: ${i}`),xo.copySync(n,i)}catch(c){throw Mt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Mt.info("New settings file values for 3.1.0 upgrade:",r),Mt.info(`Creating new/upgraded settings file at '${n}'`),xo.writeFileSync(n,r),Mt.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."),Mt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Mt.error(c),xo.copySync(i,n),c}ym.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Mt.info(o),o}a(ide,"updateSettingsFile_3_1_0");function ode(){let e=Go.join(T$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),t=Go.join(T$.getHomeDir(),Js.HDB_HOME_DIR_NAME,Js.LICENSE_KEY_DIR_NAME,Js.REG_KEY_FILE_NAME),r=Go.join(ym.getHdbBasePath(),Js.LICENSE_KEY_DIR_NAME,Js.LICENSE_FILE_NAME),n=Go.join(r,Js.LICENSE_FILE_NAME),s=Go.join(r,Js.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Mt.info(i);let o="Creating .license directory";console.log(o),Mt.info(o),xo.mkdirpSync(r);try{xo.accessSync(e);try{let c="Moving licence file";console.log(c),Mt.info(c),xo.moveSync(e,n);let l="License file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving license file failed";console.error(l),Mt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Mt.warn(l)}try{xo.accessSync(t);try{let c="Moving registration file";console.log(c),Mt.info(c),xo.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Mt.info(l)}catch{let l="moving registration file failed";console.error(l),Mt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Mt.warn(l)}}a(ode,"moveLicenseFiles");DN.sync_functions.push(ide);DN.sync_functions.push(ode);g$.push(DN);R$.exports=g$});var I$=R((vIe,y$)=>{"use strict";var Nn=Ye(),{insertRecords:ade}=Zo(),cde=Nr(),qo=_t(),lde=Y(),Fi=k(),ude=Y(),Xs=require("fs-extra"),ki=require("path"),_de=require("cli-progress"),wd=require("assert"),dde=require("pino"),fde=J();y$.exports=Ede;var Im,O$,wm,LN,Tr,Cd=!1;async function Ede(e=!0){return Im=fde.getHdbBasePath(),O$=ki.join(Im,"schema"),wm=ki.join(Im,"4_0_0_upgrade_tmp"),LN=ki.join(Im,"transactions"),console.info("Reindexing upgrade started for schemas"),Fi.notify("Reindexing upgrade started for schemas"),await b$(O$,!1,e),await Xs.pathExists(LN)&&(console.info(`
105
105
 
106
- Reindexing upgrade started for transaction logs`),Fi.notify("Reindexing upgrade started for transaction logs"),await bV(LN,!0,e)),Fi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Cd?", but errors occurred":"")}a(Ede,"reindexUpgrade");async function bV(e,t,r){let n=await Xs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=ki.join(e,o.toString());if(o===".DS_Store")continue;let l=await Xs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Xs.statSync(ki.join(c,d)).isDirectory())try{await hde(o,d,t),Tr.info(`Reindexing started for ${o}.${d}`),Fi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await mde(o,d,c,t,r),Tr.info(`Reindexing completed for ${o}.${d}`),Fi.notify(`Reindexing completed for ${o}.${d}`)}catch(E){Cd=!0,E.schema_path=c,E.table_name=d,Fi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Fi.error(E),Tr.error(E),console.error(E)}}}if(!Cd)try{await Xs.rm(wm,{recursive:!0})}catch{}}a(bV,"processTables");async function hde(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ki.join(wm,s);await Xs.ensureDir(wm),await Xs.writeFile(i,""),Tr=dde({level:"debug",formatters:{bindings(){}}},i)}a(hde,"initPinoLogger");var pde=20;async function mde(e,t,r,n,s){let i;try{i=await Nn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Fi.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`),Tr.error(T);return}throw T}let o=gde(i.dbis),c=Nn.openDBI(i,o),l=Object.keys(i.dbis),_=Nn.statDBI(i,o);Tr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new _de.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await Nn.createEnvironment(r,t,!1);Nn.createDBI(d,o,!1,!0);let E=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),E.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),E.length>pde&&await f();await f()}catch(T){throw Cd=!0,Tr.error(T),T}async function f(){let T,b=E.map(({value:U})=>U);n?T=await Promise.all(b.map(U=>Sde(d,U))):T=await ade(d,o,l.filter(U=>U!=="__blob__"),b,!1);for(let U=0,v=E.length;U<v;U++){let{key:q,value:M}=E[U];Tr.info(`Record hash value: ${q} hash: ${o}`);let W;n?W=T[U]:W=T.written_hashes.indexOf(q)>-1,wd(W,!0),Tde(d,o,M[o],n),Tr.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}E=[],u.value/u.total*100%10===0&&Fi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),Tr.info(`${u.value}/${u.total} records inserted`)}a(f,"finishOutstanding"),u.stop();let h=Nn.statDBI(i,o),m=Nn.statDBI(d,o);if(Tr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),wd.deepStrictEqual(h.entryCount,m.entryCount),await Nn.closeEnvironment(i),await Nn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=ki.join(r,t),b=ki.join(T,"data.mdb"),N=ki.join(T,"lock.mdb");await Xs.unlink(b),await Xs.unlink(N),await Xs.rmdir(T),Tr.info(`Deleted old environment files from schema folder: ${b}, ${N}`)}let S=await Nn.openEnvironment(r,t),g=Nn.statDBI(S,o);Tr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(g)}`),wd.deepStrictEqual(g.entryCount,m.entryCount),await Nn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(mde,"processTable");async function Sde(e,t){Nn.initializeDBIs(e,qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),ude.isEmpty(t.user_name)||e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Sde,"insertTransaction");function Tde(e,t,r,n){let i=e.dbis[t].get(r);wd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qo.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&&!lde.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];NV(e,c,d,r)}else NV(e,c,l,r)}a(Tde,"validateIndices");function NV(e,t,r,n){try{let s=!1,i=cde.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||Tr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),wd.deepStrictEqual(s,!0)}catch(s){Cd=!0,Tr.error(s),console.error(s)}}a(NV,"validateIndex");function gde(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(gde,"getHashDBI")});var Dm=R((HIe,CV)=>{"use strict";var Rde=require("mkcert"),Cm=require("path"),PN=require("fs-extra"),MN=k(),Ade=X(),UN=L(),Ml=wT(),Ode=to(),bde=Et();CV.exports={generateKeys:Nde,updateConfigCert:wV};async function Nde(){let e=Ade.getHdbBasePath(),t=Cm.join(e,UN.LICENSE_KEY_DIR_NAME),r=await Rde.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Ml.CERTIFICATE_VALUES.key,caCert:Ml.CERTIFICATE_VALUES.cert}),n=Cm.join(t,Ml.CERTIFICATE_PEM_NAME),s=Cm.join(t,Ml.PRIVATEKEY_PEM_NAME),i=Cm.join(t,Ml.CA_PEM_NAME);try{await PN.writeFile(n,r.cert)}catch(o){throw MN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await PN.writeFile(s,r.key)}catch(o){throw MN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await PN.writeFile(i,Ml.CERTIFICATE_VALUES.cert)}catch(o){throw MN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}wV(n,s,i)}a(Nde,"generateKeys");function wV(e,t,r){let n=Ode(Object.keys(UN.CONFIG_PARAM_MAP),!0),s=UN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),bde.updateConfigValue(void 0,void 0,i,!1,!0)}a(wV,"updateConfigCert")});var UV=R((qIe,MV)=>{"use strict";var Lm=require("path"),Fo=require("fs-extra"),yde=CN(),Za=k(),DV=Et(),vN=X(),As=L(),Pm=Y(),Ide=require("properties-reader"),wde=as(),Cde=xE(),Dde=ur(),xIe=require("util"),Lde=Dde.searchByValue,Pde=Cr(),Mde=oh(),Ude=Ze(),vde=IV(),LV=Dm(),Bde=Nm(),Pd=new yde("4.0.0"),PV=[],Dd,Ld;async function Hde(){try{if(await Bde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Dd){let t=Pm.changeExtension(Dd,".bak");await Fo.move(Dd,t)}if(Ld){let t=Pm.changeExtension(Ld,".bak");await Fo.move(Ld,t)}await LV.generateKeys()}else console.log("Using existing certificates."),LV.updateConfigCert(Dd,Ld,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Hde,"generateNewKeys");async function Gde(){console.log("Updating HarperDB nodes."),Za.info("Updating HarperDB nodes.");let e=[];try{let t=new wde(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Lde(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Ude.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let E=c.subscriptions[u],f=E.channel.split(":");_.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:As.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Pm.isEmptyOrZeroLength(n))return;let s=new Cde(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Pde.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Mde.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(Gde,"updateNodes");async function xde(){let e=vN.get(As.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Lm.join("config","settings.js"))){Za.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),Za.info(t);let r=Lm.dirname(e),n=vN.get(As.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Lm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Lm.join(n,As.HDB_CONFIG_FILE);try{Za.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Fo.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{Za.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Za.info("Updating env variables with new settings values");let d=DV.initOldConfig(e);Dd=d[As.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Ld=d[As.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],DV.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=Pm.getPropsFilePath();Fo.accessSync(o,Fo.constants.F_OK|Fo.constants.R_OK);let l=Ide(o).get(As.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
107
- install_user = ${l}`;try{Fo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{vN.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Fo.removeSync(r),console.log(u),Za.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(xde,"updateSettingsFile_4_0_0");Pd.async_functions.push(xde);Pd.async_functions.push(Hde);Pd.async_functions.push(vde);Pd.async_functions.push(Gde);PV.push(Pd);MV.exports=PV});var BN=R((kIe,GV)=>{"use strict";var ec=Y(),qde=L(),vV=k(),{DATA_VERSION:Fde,UPGRADE_VERSION:kde}=qde.UPGRADE_JSON_FIELD_NAMES_ENUM,BV=AV(),Mm=UV(),tc=new Map;BV&&BV.forEach(e=>{tc.set(e.version,e)});Mm&&Mm.forEach(e=>{tc.set(e.version,e)});Mm&&Mm.forEach(e=>{tc.set(e.version,e)});function Vde(){return[...tc.keys()].sort(ec.compareVersions)}a(Vde,"getSortedVersions");function HV(e){let t=e[Fde],r=e[kde];return ec.isEmptyOrZeroLength(t)||ec.isEmptyOrZeroLength(r)?(vV.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),vV.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."),[]):[...tc.keys()].sort(ec.compareVersions).filter(function(n){return ec.compareVersions(n,t)>0&&ec.compareVersions(n,r)<=0})}a(HV,"getVersionsForUpgrade");function $de(e){return HV(e).length>0}a($de,"hasUpgradesRequired");function Yde(e){return ec.isEmptyOrZeroLength(e)?null:tc.has(e)?tc.get(e):null}a(Yde,"getDirectiveByVersion");GV.exports={getSortedVersions:Vde,getDirectiveByVersion:Yde,getVersionsForUpgrade:HV,hasUpgradesRequired:$de}});var Md=R(($Ie,VV)=>{"use strict";var Kde=require("util"),HN=require("chalk"),Wde=require("os"),qV=Cr(),Qde=ur(),yn=L(),FV=uV(),xN=OT(),{UpgradeObject:xV}=fV(),{forceDowngradePrompt:jde}=Nm(),zde=Ri(),Um=k(),Ul=Y(),qN=Bn(),Jde=(Re(),ae($e)),Xde=BN(),Zde=Kde.promisify(qN.setSchemaDataToGlobal),efe=Qde.searchByValue,tfe="info_id",rfe="2.9.9",nfe="3.0.0";async function sfe(e){let t=new FV.HdbInfoInsertObject(1,e,e),r=new xN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return qN.setSchemaDataToGlobal(),qV.insert(r)}a(sfe,"insertHdbInstallInfo");async function GN(e){let t,r=await kV(),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 FV.HdbInfoInsertObject(i,e,e);let o=new xN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Zde(),qV.insert(o)}a(GN,"insertHdbUpgradeInfo");async function kV(){let e=new xN.NoSQLSeachObject(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,tfe,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await efe(e))}catch(r){console.error(r)}return t}a(kV,"getAllHdbInfoRecords");async function ife(){let e=await kV();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(ife,"getLatestHdbInfoRecord");async function ofe(){Um.info("Checking if HDB software has been updated");try{let e=zde.version(),t=await ife(),r;if(Ul.isEmpty(t))r=rfe;else if(r=t.data_version_num,Ul.compareVersions(r.toString(),e.toString())>0){if(!Ul.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(HN.yellow(`This instance's data was last run on version ${r}`)),console.error(HN.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.${Wde.EOL}${yn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Ul.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(HN.yellow(`This instance's data was last run on version ${r}`)),await jde(new xV(r,e))?await GN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(qN.setSchemaDataToGlobal(),afe(r),e.toString()===r.toString())return;let n=new xV(r,e);if(Xde.hasUpgradesRequired(n))return n;Ul.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await GN(n.upgrade_version),Um.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Um.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Um.fatal(e),e}}a(ofe,"getVersionUpdateInfo");function afe(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 ${yn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Jde.databases.system))throw console.log(t),new Error(t);if(!Ul.isEmpty(e)&&e<nfe)throw console.log(t),new Error(t)}a(afe,"checkIfInstallIsSupported");VV.exports={insertHdbInstallInfo:sfe,insertHdbUpgradeInfo:GN,getVersionUpdateInfo:ofe}});var QV=R((KIe,WV)=>{"use strict";var FN=require("joi"),{boolean:cfe,string:$V,number:lfe}=FN.types(),YV=require("fs-extra"),Ud=L(),KV=require("path"),ufe=nt();WV.exports=_fe;function _fe(e){let t=$V.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=FN.object({[Ud.INSTALL_PROMPTS.ROOTPATH]:FN.custom(dfe),[Ud.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:lfe.min(0).allow("null",null),[Ud.INSTALL_PROMPTS.TC_AGREEMENT]:$V.valid("yes","YES","Yes"),[Ud.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ud.INSTALL_PROMPTS.CLUSTERING_ENABLED]:cfe});return ufe.validateBySchema(e,r)}a(_fe,"installValidator");function dfe(e,t){if(YV.existsSync(KV.join(e,"system/hdb_user/data.mdb"))||YV.existsSync(KV.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(dfe,"validateRootAvailable")});var $N=R((QIe,jV)=>{"use strict";var{mkdirpSync:ffe}=require("fs-extra"),Zs=require("path"),vl=L(),VN=k(),Efe=Hn(),kN=_i(),hfe=Je();jV.exports=pfe;async function pfe(e){VN.trace("Mounting HarperDB"),Os(e),Os(Zs.join(e,"backup")),Os(Zs.join(e,"trash")),Os(Zs.join(e,"keys")),Os(Zs.join(e,"keys",vl.LICENSE_FILE_NAME)),Os(Zs.join(e,"log")),Os(Zs.join(e,"doc")),Os(Zs.join(e,"database")),Os(Zs.join(e,vl.TRANSACTIONS_DIR_NAME)),Os(Zs.join(e,"clustering","leaf")),Os(Zs.join(e,"components")),await mfe()}a(pfe,"mountHdb");async function mfe(){let e=Uu(),t=Object.keys(kN);for(let r=0;r<t.length;r++){let n=t[r],s=kN[n].hash_attribute;try{hfe.initSystemSchemaPaths(vl.SYSTEM_SCHEMA_NAME,n);let i=new e(vl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=kN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Efe.createTable(n,i)}catch(i){throw VN.error(`issue creating environment for ${vl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(mfe,"createLMDBTables");function Os(e){ffe(e,{mode:vl.HDB_FILE_PERMISSIONS}),VN.info(`Directory ${e} created`)}a(Os,"makeDirectory")});var Bm=R((zIe,a$)=>{"use strict";var KN=require("os"),ZV=require("inquirer"),Jn=require("fs-extra"),Sfe=require("properties-reader"),rc=require("chalk"),ri=require("path"),Tfe=require("human-readable-ids").hri,gfe=require("ora"),Rfe=require("yaml"),Ut=k(),$o=X(),vd=Y(),vm=to(),e$=Md(),t$=Ri(),ne=L(),Afe=QV(),Ofe=$N(),WN=Et(),bfe=Lr(),Nfe=BE(),yfe=ON(),Ife=Bn(),wfe=require("util").promisify,Cfe=wfe(Ife.setSchemaDataToGlobal),Dfe=Dm(),Bl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),gr=a(e=>rc.magenta.bold(e),"HDB_PROMPT_MSG"),Lfe="https://harperdb.io/legal/end-user-license-agreement",Yo=KN.EOL,ko="",Pfe="yes",zV="Starting HarperDB install...",JV="HarperDB installation was successful.",XV="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Mfe="An out of date version of HarperDB is already installed.",YN="It appears that HarperDB is already installed. Exiting install...",Ufe="Aborting install",vfe=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])$/),Bfe=new RegExp(/^[^\s.,*>]+$/),Hfe=KN.homedir(),Gfe=ri.join(Hfe,ne.HDB_ROOT_DIR_NAME),xfe=9925,qfe="HDB_ADMIN",Ffe="CLUSTER_USER",zr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Ko=vm([ne.INSTALL_PROMPTS.HDB_CONFIG]),ti,r$=!1,n$=!1;a$.exports={install:s$,updateConfigEnv:Xfe,setIgnoreExisting:Zfe};s$.createSuperUser=o$;async function s$(){console.log(gr(Yo+zV+Yo)),Ut.notify(zV);let e;Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=kfe());let t=$fe();Object.assign(t,e);let r=Afe(t);if(r)throw r.message;await Yfe(),await Kfe(t);let n=await Vfe(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),ti=n[ne.INSTALL_PROMPTS.ROOTPATH],Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&ri.dirname(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG])===ti&&(r$=!0),!Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Jn.pathExists(ri.join(ti,ne.HDB_CONFIG_FILE))&&(console.error(YN),process.exit());let s=gfe({prefixText:gr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),vd.isEmpty(ti))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");$o.setHdbBasePath(ti),await Ofe(ti),await Wfe(),await Qfe(n),Ut.initLogSettings(!0),await o$(n),await zfe(n),await Dfe.generateKeys(),await Jfe(),yfe(),s.stop(),console.log(gr(Yo+JV+Yo)),Ut.notify(JV)}a(s$,"install");function kfe(){let e=Rfe.parseDocument(Jn.readFileSync(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=WN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(kfe,"getConfigFromFile");async function Vfe(e){Ut.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Bl,when:Vo(e[ne.INSTALL_PROMPTS.ROOTPATH],zr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:ko,default:Gfe,validate:async s=>ei(s)?ei(s):await Jn.pathExists(ri.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:gr(zr.DESTINATION)},{type:"input",transformer:Bl,when:Vo(e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],zr.HDB_PORT),name:ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ko,default:xfe,validate:s=>vfe.test(s)?!0:"Invalid port.",message:gr(zr.HDB_PORT)},{type:"input",transformer:Bl,when:Vo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],zr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ko,default:qfe,validate:s=>ei(s)?ei(s):(t=s,!0),message:gr(zr.HDB_USERNAME)},{type:"password",when:Vo(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],zr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ko,validate:s=>ei(s)?ei(s):!0,message:gr(zr.HDB_PASS)}];if(vd.autoCastBoolean(e[ne.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Bl,when:Vo(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],zr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ko,default:Tfe.random(),validate:i=>Bfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:gr(zr.NODE_NAME)},{type:"input",transformer:Bl,when:Vo(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],zr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ko,default:Ffe,validate:i=>ei(i)?ei(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:gr(zr.CLUSTER_USERNAME)},{type:"password",when:Vo(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],zr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ko,validate:i=>ei(i)?ei(i):!0,message:gr(zr.CLUSTER_PASS)}];r.push(...s)}let n=await ZV.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(Vfe,"installPrompts");function Vo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${gr(t)} ${rc.gray("[hidden]")}`),Ut.trace(`${gr(t)} [hidden]`)):(console.log(`${gr(t)} ${e}`),Ut.trace(`${gr(t)} ${e}`)),!1):!0}a(Vo,"displayCmdEnvVar");function ei(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ei,"checkForEmptyValue");function $fe(){let e=Object.keys(ne.INSTALL_PROMPTS),t=vm(e),r=vm(Object.keys(ne.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ne.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a($fe,"checkForPromptOverride");async function Yfe(){Ut.trace("Checking for existing install.");let e=vd.getPropsFilePath(),t=await Jn.pathExists(e),r;if(t){Ut.trace(`Install found an existing boot prop file at:${e}`);let n=Sfe(e),s=WN.getConfigValue(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Jn.pathExists(s)}if(!t&&vd.noBootFile()&&(r=!0),r&&!n$){if(Ut.trace(`Install found existing HDB config at:${e}`),await e$.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${t$.version()}. Exiting install...`;console.log(Yo+rc.magenta.bold(Mfe)),console.log(rc.magenta.bold(s)),Ut.error(s)}else console.log(Yo+rc.magenta.bold(YN)),Ut.error(YN);process.exit(0)}}a(Yfe,"checkForExistingInstall");async function Kfe(e){Ut.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Lfe}${Yo}and can be viewed by typing or copying and pasting the URL into your web browser.${Yo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:ko,transformer:Bl,when:Vo(e[ne.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ne.INSTALL_PROMPTS.TC_AGREEMENT,message:gr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:rc.yellow("Please enter 'yes' or 'no'")},n=await ZV.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Pfe&&(console.log(rc.yellow(XV)),Ut.error(XV),process.exit(0))}a(Kfe,"termsAgreement");async function Wfe(){let e=ri.join(ti,ne.HDB_CONFIG_FILE),t;try{t=KN.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}
108
- install_user = ${t}`,n=vd.getHomeDir(),s=ri.join(n,ne.HDB_HOME_DIR_NAME),i=ri.join(s,ne.LICENSE_KEY_DIR_NAME);try{Jn.mkdirpSync(s,{mode:ne.HDB_FILE_PERMISSIONS}),Jn.mkdirpSync(i,{mode:ne.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ne.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=ri.join(s,ne.BOOT_PROPS_FILE_NAME);try{await Jn.writeFile(o,r)}catch(c){throw Ut.error(`There was an error creating the boot file at path: ${o}`),c}$o.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),$o.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),$o.setProperty($o.BOOT_PROPS_FILE_PATH,o)}}a(Wfe,"createBootPropertiesFile");async function Qfe(e){Ut.trace("Creating HarperDB config file");let t=vm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]||WN.createConfigFile(t),$o.initSync()}catch(r){jfe(r)}}a(Qfe,"createConfigFile");function jfe(e){Ut.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Ufe);let t=ri.resolve($o.get($o.BOOT_PROPS_FILE_PATH),"../");t&&Jn.removeSync(t),ti&&(r$?Jn.readdirSync(ti,{withFileTypes:!0}).forEach(n=>{let s=ri.join(n.path,n.name);s!==Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Jn.removeSync(s)}):Jn.removeSync(ti)),process.exit(1)}a(jfe,"rollbackInstall");async function i$(e,t){Ut.trace("Creating admin user"),await Cfe();let r;try{r=await Nfe.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 bfe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(i$,"createAdminUser");async function o$(e){Ut.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await i$(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(o$,"createSuperUser");async function zfe(e){Ut.trace("Creating Cluster user.");let t;e[ne.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ne.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await i$({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(zfe,"createClusterUser");async function Jfe(){let e=t$.version();if(e)await e$.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Jfe,"insertHdbVersionInfo");function Xfe(e){Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Xfe,"updateConfigEnv");function Zfe(e){n$=e}a(Zfe,"setIgnoreExisting")});var u$=R((XIe,l$)=>{"use strict";var QN=Y(),In=k(),c$=BN();l$.exports={processDirectives:eEe};async function eEe(e){console.log("Starting upgrade process...");let t=c$.getVersionsForUpgrade(e),r=nEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;In.notify(c),console.log(c);let l=[],_=[];try{l=tEe(o.sync_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await rEe(o.async_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(eEe,"processDirectives");function tEe(e){if(QN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(In.info(`Running function ${r.name}`),!(r instanceof Function)){In.info("Variable being processed is not a function");continue}let n=r();In.info(n),t.push(n)}return t}a(tEe,"runSyncFunctions");async function rEe(e){if(QN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(In.info(`Running function ${s.name}`),!(s instanceof Function)){In.info("Variable being processed is not a function");continue}let i=await s();In.info(i),t.push(i)}return t}a(rEe,"runAsyncFunctions");function nEe(e){if(QN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=c$.getDirectiveByVersion(r);n&&t.push(n)}return t}a(nEe,"getUpgradeDirectivesToInstall")});var JN=R((ewe,p$)=>{"use strict";var Hm=X();Hm.initSync();var E$=require("chalk"),_$=require("fs-extra"),$i=k(),Vi=L(),d$=Ri(),sEe=u$(),jN=Y(),h$=Md(),iEe=Nm(),f$=fS(),oEe=Bn(),aEe=require("util").promisify,cEe=aEe(oEe.setSchemaDataToGlobal),zN,{UPGRADE_VERSION:Gm}=Vi.UPGRADE_JSON_FIELD_NAMES_ENUM;p$.exports={upgrade:lEe};async function lEe(e){await cEe(),zN===void 0&&(zN=Yc()),_$.existsSync(Hm.get(Hm.BOOT_PROPS_FILE_PATH))||(Bd("The hdb_boot_properties file was not found. Please install HDB.",Vi.LOG_LEVELS.ERROR),process.exit(1)),_$.existsSync(Hm.get(Vi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Bd("The hdb settings file was not found. Please make sure HDB is installed.",Vi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await h$.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Bd(`This version of HarperDB is ${d$.version()}`,Vi.LOG_LEVELS.INFO);let r=t[Gm]?t[Gm]:d$.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Vi.HDB_SUPPORT_ADDRESS}`),$i.notify("Missing new version field from upgrade info object"),process.exit(1)),await uEe();let n,s=0;try{n=await iEe.forceUpdatePrompt(t)}catch(i){$i.error("There was an error when prompting user about upgrade."),$i.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),$i.info(`Starting upgrade to version ${r}`),await _Ee(t),Bd(`HarperDB was successfully upgraded to version ${t[Gm]}`,Vi.LOG_LEVELS.INFO)}a(lEe,"upgrade");async function uEe(){let e=!1,t=await f$.findPs(Vi.HDB_PROC_NAME);if(jN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await f$.findPs("hdb_express");jN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await zN.list();jN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(E$.red(r)),$i.error(r),process.exit(1)}}a(uEe,"checkIfRunning");async function _Ee(e){try{await sEe.processDirectives(e)}catch(t){throw Bd("There was an error during the data upgrade. Please check the logs.",Vi.LOG_LEVELS.ERROR),t}try{await h$.insertHdbUpgradeInfo(e[Gm])}catch(t){$i.error("Error updating the 'hdb_info' system table."),$i.error(t)}}a(_Ee,"runUpgrade");function Bd(e,t=void 0){t||(t=$i.info),$i[t](e),console.log(E$.magenta(e))}a(Bd,"printToLogAndConsole")});var R$=R((rwe,g$)=>{"use strict";var{promises:ZN,createReadStream:dEe,createWriteStream:fEe}=require("fs"),{createGzip:EEe}=require("zlib"),{promisify:hEe}=require("util"),{pipeline:pEe}=require("stream"),mEe=hEe(pEe),SEe=require("path"),sc=X();sc.initSync();var nc=k(),{CONFIG_PARAMS:Hd,ITC_EVENT_TYPES:TEe}=L(),{onMessageFromWorkers:gEe}=rt(),REe=6e4,AEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",OEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",XN,S$;g$.exports=T$;gEe(e=>{e.type===TEe.RESTART&&(sc.initSync(!0),clearInterval(S$),sc.get(Hd.LOGGING_ROTATION_ENABLED)&&T$())});async function T$(){try{let e=nc.getLogFilePath(),t=sc.get(Hd.LOGGING_ROTATION_MAXSIZE),r=sc.get(Hd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){nc.error(AEe);return}let n=sc.get(Hd.LOGGING_ROTATION_PATH);if(!n){nc.error(OEe);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}XN=Date.now()/6e4,nc.trace("Log rotate enabled, maxSize:",t,"interval:",r),S$=setInterval(async()=>{if(s){let o;o=await ZN.stat(e),o.size>=s&&await m$(e,n)}i&&Date.now()/6e4-XN>=i&&(await m$(e,n),XN=Date.now()/6e4)},REe).unref()}catch(e){nc.error(e)}}a(T$,"logRotator");async function m$(e,t){let r=sc.get(Hd.LOGGING_ROTATION_COMPRESS),n=SEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await mEe(dEe(e),EEe(),fEe(n)),await ZN.unlink(e)):await ZN.rename(e,n),nc.closeLogFile(),nc.notify(`hdb.log rotated, old log moved to ${n}`)}a(m$,"moveLogFile")});var ic=R((dwe,C$)=>{"use strict";var Jr=X();Jr.initSync();var swe=bo(),bt=L(),si=k(),Yi=require("fs-extra"),Wo=require("path"),bEe=require("systeminformation"),NEe=ON(),{install:yEe}=Bm(),ey=require("chalk"),IEe=ma(),Ki=Y(),O$=Et(),b$=to(),A$=fh(),wEe=JN(),CEe=R$(),{compactOnStart:DEe}=(Rh(),ae(gh)),LEe=require("minimist"),{PACKAGE_ROOT:PEe}=L(),{startHTTPThreads:MEe,startSocketServer:iwe,mostIdleRouting:owe,remoteAffinityRouting:awe}=(Nb(),ae(Zq)),UEe=Md(),{isMainThread:vEe}=require("worker_threads"),cwe=_i(),lwe=Ei(),uwe=Sg(),_we=Uu(),xm=L(),ni,Hl,N$=!1,BEe="Upgrade complete. Starting HarperDB.",HEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",GEe="HarperDB not found, starting install process.",xEe="There was an error during install, check install_log.log for more details. Exiting.",qEe="HarperDB successfully started.";function FEe(){if(!N$){let e=a(()=>{Yi.removeSync(Wo.join(Jr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.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(FEe,"addExitListeners");async function y$(e=!1,t=!1){if(console.log(ey.magenta("Starting HarperDB...")),await w$()===!1){console.log(GEe);try{await yEe()}catch(o){console.error(xEe,o),si.error(o),process.exit(1)}}if(!e){let o=b$(Object.keys(bt.CONFIG_PARAM_MAP),!0);!Ki.isEmpty(o)&&!Ki.isEmptyOrZeroLength(Object.keys(o))&&O$.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Hl?.service==="clustering";Hl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Yi.readFile(Wo.join(Jr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE),"utf8")),c=await bEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ni===void 0&&(ni=Yc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Jr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await A$.generateNatsConfig(),await ni.startClusteringProcesses(!0),process.exit()),FEe(),await Yi.writeFile(Wo.join(Jr.get(xm.CONFIG_PARAMS.ROOTPATH),xm.HDB_PID_FILE),`${process.pid}`),si.info("HarperDB PID",process.pid);let s;try{let o=await UEe.getVersionUpdateInfo();o!==void 0&&(s=o[bt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await wEe.upgrade(o),console.log(BEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),si.error(o)):(console.error(HEe,o),si.error(o)),process.exit(1)}NEe(),$Ee(),Ki.autoCastBoolean(Jr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&vEe&&await A$.generateNatsConfig(t)}a(y$,"initialize");async function kEe(e=!1){try{Hl=LEe(process.argv),Hl.ROOTPATH&&O$.updateConfigObject("settings_path",Wo.join(Hl.ROOTPATH,bt.HDB_CONFIG_FILE)),await y$(e,!0),Jr.get(bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await DEe();let t=process.env.IS_SCRIPTED_SERVICE&&!Hl.service;Ki.autoCastBoolean(Jr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ni.startClusteringProcesses(),await ni.startClusteringThreads()),await MEe(process.env.DEV_MODE?1:Jr.get(xm.CONFIG_PARAMS.THREADS_COUNT)??Jr.get(xm.CONFIG_PARAMS.THREADS)),Jr.get(bt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await CEe(),t||I$()}catch(t){console.error(t),si.error(t),process.exit(1)}}a(kEe,"main");function I$(){si.suppressLogging(()=>{console.log(ey.magenta(""+Yi.readFileSync(Wo.join(PEe,"utility/install/ascii_logo.txt")))),console.log(ey.magenta(`|------------- HarperDB ${IEe.version} successfully started ------------|`))}),si.notify(qEe)}a(I$,"started");async function VEe(e=!0){N$=!e;try{ni===void 0&&(ni=Yc()),ni.enterPM2Mode(),await y$(),Ki.autoCastBoolean(Jr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ni.startClusteringProcesses(),await ni.startService(bt.PROCESS_DESCRIPTORS.HDB),I$(),e&&process.exit(0)}catch(t){console.error(t),si.error(t),process.exit(1)}}a(VEe,"launch");function $Ee(){let e=Wo.join(Jr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.LICENSE_KEY_DIR_NAME,bt.LICENSE_FILE_NAME),t=Wo.join(e,bt.LICENSE_FILE_NAME),r=Wo.join(e,bt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=b$(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ki.isEmpty(n)||Ki.isEmpty(s))return;Yi.mkdirpSync(e),Yi.writeFileSync(r,n),Yi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),si.error(s)}}a($Ee,"writeLicenseFromVars");C$.exports={launch:VEe,main:kEe,isHdbInstalled:w$};async function w$(){try{await Yi.stat(Ki.getPropsFilePath()),await Yi.stat(Jr.get(bt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ki.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw si.error(`Error checking for HDB install - ${e}`),e}return!0}a(w$,"isHdbInstalled")});var iy=R((Ewe,K$)=>{"use strict";var D$=require("os"),km=require("https"),L$=require("http"),$t=require("fs-extra"),P$=require("yaml"),YEe=require("human-readable-ids").hri,{pipeline:M$}=require("stream/promises"),{createWriteStream:Vm,ensureDir:$m}=require("fs-extra"),{join:Cn}=require("path"),q$=require("lodash"),KEe=require("minimist"),kd=require("path"),WEe=require("properties-reader"),bs=X(),QEe=gi(),F$=k(),ty=Et(),{restart:jEe}=bo(),Ym=Y(),zEe=to(),U$=gt(),JEe=Bn(),{main:k$,launch:XEe}=ic(),{install:ZEe,updateConfigEnv:ehe,setIgnoreExisting:ny}=Bm(),V$=$N(),Xr=L(),the=Ri(),rhe=Md(),{SYSTEM_TABLE_NAMES:v$,SYSTEM_SCHEMA_NAME:nhe,CONFIG_PARAMS:Gd,OPERATIONS_ENUM:Dn}=Xr,she=1e4,ihe="clone-node-config.yaml",sy=[v$.ROLE_TABLE_NAME,v$.USER_TABLE_NAME],ohe={clustering_nodename:!0,clustering_leafserver_streams_path:!0,clustering_tls_certificate:!0,clustering_tls_privatekey:!0,clustering_tls_certificateauthority:!0,logging_file:!0,logging_root:!0,logging_rotation_path:!0,operationsapi_network_domainsocket:!0,operationsapi_tls_certificate:!0,operationsapi_tls_privatekey:!0,operationsapi_tls_certificateauthority:!0,rootpath:!0,storage_path:!0,storage_audit_path:!0,databases:!0,mqtt_network_mtls_certificateauthority:!0,componentsroot:!0,tls_certificate:!0,tls_privatekey:!0,tls_certificateauthority:!0},lr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_CLONE_CLUSTERING_HOST:"HDB_CLONE_CLUSTERING_HOST",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP",CLUSTERING_NODENAME:"CLUSTERING_NODENAME"},ji=KEe(process.argv),xd=ji[lr.HDB_LEADER_USERNAME]??process.env[lr.HDB_LEADER_USERNAME],qd=ji[lr.HDB_LEADER_PASSWORD]??process.env[lr.HDB_LEADER_PASSWORD],Fd=ji[lr.HDB_LEADER_URL]??process.env[lr.HDB_LEADER_URL],Fm=ji[lr.HDB_LEADER_CLUSTERING_HOST]??process.env[lr.HDB_LEADER_CLUSTERING_HOST],B$=ji[lr.HDB_CLONE_CLUSTERING_HOST]??process.env[lr.HDB_CLONE_CLUSTERING_HOST],ahe=(ji[lr.HDB_FULLY_CONNECTED]??process.env[lr.HDB_FULLY_CONNECTED])==="true",$$=(ji[lr.HDB_CLONE_OVERTOP]??process.env[lr.HDB_CLONE_OVERTOP])==="true",H$=ji[lr.CLUSTERING_NODENAME]??process.env[lr.CLUSTERING_NODENAME],che=ji[Gd.CLONED.toUpperCase()]??process.env[Gd.CLONED.toUpperCase()],ry,Zr,Qi={},G$,Wi,ii={},ut,Gl,vt,wn,Ns,xl=!1,Wm=!1;K$.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Fd}`),delete process.env.HDB_LEADER_URL,vt=Ym.getEnvCliRootPath(),!vt)try{let s=Cn(D$.homedir(),Xr.HDB_HOME_DIR_NAME,Xr.BOOT_PROPS_FILE_NAME);if(await $t.pathExists(s)){let i=WEe(s);vt=kd.parse(i.get(Xr.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)).dir}}catch{throw new Error("There was an error setting the clone default root path. Please set ROOTPATH using an environment or CLI variable.")}vt?await $t.pathExists(vt)?console.log(`Existing HarperDB install found at ${vt}. Clone node will only clone items that do not already exist on clone.`):(console.log(`No HarperDB install found at ${vt} starting fresh clone`),xl=!0):(console.log("No HarperDB install found, starting fresh clone"),xl=!0),vt||(vt=Cn(D$.homedir(),Xr.HDB_ROOT_DIR_NAME),console.log("Using default root path",vt));let r;try{r=Cn(vt,ihe),Zr=P$.parseDocument(await $t.readFile(r,"utf8"),{simpleKeys:!0}).toJSON(),console.log("Clone config file found")}catch{}let n=Cn(vt,Xr.HDB_CONFIG_FILE);if(await $t.pathExists(n))try{G$=P$.parseDocument(await $t.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Qi=ty.flattenConfig(G$)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(Qi?.cloned&&che!=="false")return console.log("Instance marked as cloned, clone will not run"),bs.setCloneVar(!1),bs.initSync(),k$();H$?Gl=H$:Qi[Xr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?Gl=Qi[Xr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:Gl=Zr?.clustering?.nodeName??YEe.random(),await lhe(),bs.setCloneVar(!1),bs.setHdbBasePath(vt),$t.ensureDir(bs.get(Xr.CONFIG_PARAMS.LOGGING_ROOT)),F$.initLogSettings(),await uhe(),Wm||await _he(),await Ehe(t),ry&&Fm&&await hhe(),console.info(`
109
- Successfully cloned node: `+Fd),t&&process.exit()},"cloneNode");async function lhe(){console.info("Cloning configuration"),Wi=await Km({operation:Dn.GET_CONFIGURATION}),Wi=await JSON.parse(Wi.body),ry=Wi?.clustering?.enabled,ii=ty.flattenConfig(Wi);let e=Wi?.clustering?.hubServer?.cluster?.network?.port,t=Zr?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:Gl,rootpath:vt};for(let s in ii)if(!(ii[s]!==null&&typeof ii[s]=="object"&&!(ii[s]instanceof Array)||ohe[s])){if(s.includes("_package")||s.includes("_port")){if(ii[s]?.includes?.("hdb/components"))continue;if(t){let i=!1;for(let o of t)if(s.includes(o.name)){i=!0;break}if(i)continue}}Qi[s]||(s==="clustering_hubserver_cluster_network_routes"&&Fm&&e&&(Array.isArray(ii[s])||(ii[s]=[]),ii[s].push({host:Fm,port:e})),r[s]=ii[s])}for(let s in Qi)s!=="databases"&&typeof Qi[s]=="object"&&!(Qi[s]instanceof Array)||(r[s]=Qi[s]);let n=zEe(Object.keys(Xr.CONFIG_PARAM_MAP),!0);if(Object.assign(r,n),ty.createConfigFile(r,!0),bs.initSync(!0),ry&&Fm&&B$){let s={host:B$,port:bs.get(Gd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT)};console.log("Setting clustering route on leader:",s),await Km({operation:"cluster_set_routes",server:"hub",routes:[s]})}}a(lhe,"cloneConfig");async function uhe(){process.env.HDB_FETCH==="true"?(await fhe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await dhe()}a(uhe,"cloneDatabases");async function _he(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=vt,!xd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=xd,!qd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=qd,process.env.OPERATIONSAPI_NETWORK_PORT=bs.get(Gd.OPERATIONSAPI_NETWORK_PORT),ehe(kd.join(vt,Xr.HDB_CONFIG_FILE)),ny(!0),await ZEe()}a(_he,"installHDB");function oi(e){return bs.get(Xr.CONFIG_PARAMS.DATABASES)?.[e]?.path||bs.get(Gd.STORAGE_PATH)||kd.join(vt,Xr.DATABASES_DIR_NAME)}a(oi,"getDBPath");async function dhe(){let e=oi("system"),t=Cn(e,"system.mdb");if(xl||!await $t.exists(t)||$$){console.info("Cloning system database"),await $m(e);let r=Vm(t,{overwrite:!0}),n={operation:Dn.GET_BACKUP,database:"system",tables:sy},s=await x$(n,r);await $t.utimes(t,Date.now(),new Date(s.date)),xl||(await V$(vt),await Y$(),ny(!0))}else Wm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Km({operation:Dn.DESCRIBE_ALL}),ut=await JSON.parse(ut.body),wn=Zr?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await $t.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);Ns=Zr?.databaseConfig?.excludeTables,Ns=Ns?Ns.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(q$.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])Ns[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i={operation:Dn.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:Dn.GET_BACKUP,database:r});let o=oi(r);await $m(o);let c=Cn(o,r+".mdb"),l=Vm(c,{overwrite:!0}),_=await x$(i,l);await $t.utimes(c,Date.now(),new Date(_.date))}}a(dhe,"cloneTablesHttp");async function fhe(){let e=oi("system"),t=Cn(e,"system.mdb");if(xl||!await $t.exists(t)||$$){console.info("Cloning system database using fetch");let r={operation:Dn.GET_BACKUP,database:"system",tables:sy},n=await qm(r,!0),s=oi("system");await $m(s);let i=Cn(s,"system.mdb");await M$(n.body,Vm(i,{overwrite:!0})),await $t.utimes(i,Date.now(),new Date(n.headers.get("date"))),xl||(await V$(vt),await Y$(),ny(!0))}else Wm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await qm({operation:Dn.DESCRIBE_ALL}),ut=await ut.json(),wn=Zr?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await $t.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);Ns=Zr?.databaseConfig?.excludeTables,Ns=Ns?Ns.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(q$.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])Ns[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i=await qm({operation:Dn.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await qm({operation:Dn.GET_BACKUP,database:r},!0));let o=oi(r);await $m(o);let c=new Date(i.headers.get("date")),l=Cn(o,`${c.getTime()}-${r}.mdb`);await M$(i.body,Vm(l,{overwrite:!0}));let _=Cn(o,r+".mdb");await $t.rename(l,_),await $t.utimes(_,Date.now(),c)}}a(fhe,"cloneTablesFetch");async function qm(e,t=!1){let r=Zr?.httpsRejectUnauthorized??!1,n=new km.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(xd+":"+qd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Fd,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(qm,"leaderHttpReqFetch");async function Ehe(e){let t=await QEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await XEe(!1):await k$():(console.info(await jEe({operation:Dn.RESTART})),await Ym.async_set_timeout(she)),e&&await Ym.async_set_timeout(2e3)}a(Ehe,"startHDB");async function hhe(){console.info("Clustering cloned tables");let e=Zr?.clusteringConfig?.subscribeToLeaderNode!==!1,t=Zr?.clusteringConfig?.publishToLeaderNode!==!1;await JEe.setSchemaDataToGlobalAsync();let r=c_(),n=await Km({operation:Dn.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!Wm){let l=await $t.stat(Cn(oi("system"),"system.mdb"));for(let _ of sy)s.push({schema:nhe,table:_,subscribe:e,publish:t,start_time:l.mtime.toISOString()})}let i=Zr?.clusteringConfig?.excludeDatabases;i=i?i.reduce((l,_)=>({...l,[_.database]:!0}),{}):{};let o=Zr?.clusteringConfig?.excludeTables;o=o?o.reduce((l,_)=>({...l,[_.database==null?null:_.database+_.table]:!0}),{}):{};for(let l in ut){if(ut[l]==="excluded"||i[l])continue;let _=await $t.stat(Cn(oi(l),l+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let u in ut[l])ut[l][u]==="excluded"||o[l+u]||s.push({schema:l,table:u,subscribe:e,publish:t,start_time:_.mtime.toISOString()})}await U$.createTableStreams(s),F$.info("Sending add_node request to node:",Wi?.clustering?.nodeName,"with subscriptions:",s);let c;if(ahe&&n.connections.length>0){let l=eh(),_=[{node_name:Wi?.clustering?.nodeName,subscriptions:s}],u=!1;Gl=bs.get(Xr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===Gl)continue;let E={node_name:d.node_name,subscriptions:[]};for(let f of d.subscriptions){if(wn[f.schema]||Ns[f.schema+f.table]||i[f.schema]||o[f.schema+f.table])continue;u=!0;let h=await $t.stat(Cn(oi(f.schema),f.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),f.start_time=h.mtime.toISOString(),E.subscriptions.push(f)}_.push(E)}u&&(c=await l({operation:Dn.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:Dn.ADD_NODE,node_name:Wi?.clustering?.nodeName,subscriptions:s},!0),await U$.closeConnection()}a(hhe,"clusterTables");async function Km(e){let t=new km.Agent({rejectUnauthorized:Zr?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(xd+":"+qd).toString("base64"),"Content-Type":"application/json"},s=new URL(Fd),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await Ym.httpRequest(i,e)}a(Km,"leaderHttpReq");async function x$(e,t){let r=new km.Agent({rejectUnauthorized:Zr?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(xd+":"+qd).toString("base64"),"Content-Type":"application/json"},i=new URL(Fd),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,L$=km),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=L$.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(x$,"leaderHttpStream");async function Y$(){let e=the.version();if(e)await rhe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Y$,"insertHdbVersionInfo")});var Q$=R((pwe,W$)=>{var phe=Bm(),mhe=k();W$.exports=She;async function She(){try{await phe.install()}catch(e){console.error("There was an error during the install."),console.error(e),mhe.error(e),process.exit(1)}}a(She,"install")});var J$=R((Swe,z$)=>{"use strict";var The=ch(),ghe=k(),j$="Registration failed.";async function Rhe(){let e;try{e=await The.register()}catch(t){return ghe.error(`Registration error ${t}`),j$}return e||j$}a(Rhe,"register");z$.exports={register:Rhe}});var tY=R((gwe,eY)=>{"use strict";var Ahe=k(),Ohe=L(),bhe=require("util"),Nhe=require("child_process"),X$=bhe.promisify(Nhe.exec),yhe=gi(),Vd=Yc(),Z$="Stopping HarperDB.";eY.exports=Ihe;async function Ihe(){if(console.log(Z$),Ahe.notify(Z$),await Vd.isServiceRegistered(Ohe.HDB_PROC_DESCRIPTOR)){Vd.enterPM2Mode();let r=await Vd.getUniqueServicesList();for(let n in r)await Vd.stop(n)}await Vd.kill();let t=await yhe.getHDBProcessInfo();t.clustering.forEach(r=>{X$(`kill ${r.pid}`)}),t.core.forEach(r=>{X$(`kill ${r.pid}`)})}a(Ihe,"stop")});var iY=R((Awe,sY)=>{"use strict";var ay=require("fs-extra"),cy=require("path"),oy=require("yaml"),$d=gt(),Yd=L(),rY=Ze(),ly=k(),whe=Lr(),Che=sh(),Dhe=rh(),Lhe=gi(),nY=X(),{isHdbInstalled:Phe}=ic();nY.initSync();var Xn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},en={LEAF:"leaf server",HUB:"hub server"},Qm;sY.exports=Mhe;async function Mhe(){let e={harperdb:{status:Xn.STOPPED}};if(!await Phe()){e.harperdb.status=Xn.NOT_INSTALLED,console.log(oy.stringify(e));return}Qm=nY.get(Yd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await ay.readFile(cy.join(Qm,Yd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Yd.NODE_ERROR_CODES.ENOENT){ly.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Xn.STOPPED,console.log(oy.stringify(e));return}throw n}let r=await Lhe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Xn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await Uhe(r),e.clustering[en.HUB].status===Xn.RUNNING&&e.clustering[en.LEAF].status===Xn.RUNNING){let n=[],s=await Che({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await Dhe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await $d.closeConnection()}console.log(oy.stringify(e)),process.exit()}a(Mhe,"status");async function Uhe(e){let t={[en.HUB]:{},[en.LEAF]:{}};if(e.clustering.length===0)return t[en.HUB].status=Xn.STOPPED,t[en.LEAF].status=Xn.STOPPED,t;let{port:r}=$d.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await whe.getClusterUser();try{(await $d.createConnection(r,n,s,!1)).close(),t[en.HUB].status=Xn.RUNNING}catch{t[en.HUB].status=Xn.ERRORED}let{port:i}=$d.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await $d.createConnection(i,n,s,!1)).close(),t[en.LEAF].status=Xn.RUNNING}catch{t[en.LEAF].status=Xn.ERRORED}try{t[en.HUB].pid=Number.parseInt(await ay.readFile(cy.join(Qm,"clustering",rY.PID_FILES.HUB),"utf8"))}catch(o){ly.error(o),t[en.HUB].pid=void 0}try{t[en.LEAF].pid=Number.parseInt(await ay.readFile(cy.join(Qm,"clustering",rY.PID_FILES.LEAF),"utf8"))}catch(o){ly.error(o),t[en.LEAF].pid=void 0}return t}a(Uhe,"getHubLeafStatus")});var jm=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");jm&&X().setCloneVar(!0);var Kd=require("fs"),oY=require("path"),oc=k(),aY=sV(),vhe=Ri(),Bhe=aV(),uy=L(),{SERVICE_ACTIONS_ENUM:Rr,PACKAGE_ROOT:Hhe}=uy;Ghe();function Ghe(){let e=Bhe();if(e)if(e.error){console.error(e.error),oc.error(e.error);return}else e.warn&&(console.warn(e.warn),oc.warn(e.warn));let t;Kd.readdir(oY.join(Hhe,"bin"),r=>{if(r)return oc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;jm||(n=aY.buildRequest(),n.operation&&(t=Rr.OPERATION));let s;switch(t){case Rr.OPERATION:oc.trace("calling cli operations with:",n),aY.cliOperations(n).then();break;case Rr.DEV:process.env.DEV_MODE=!0;case Rr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Kd.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Kd.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),i=Kd.realpathSync(i),Kd.existsSync(oY.join(i,uy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),ic().main();break;case Rr.START:jm?iy()(!0).catch(S=>{console.log(S)}):s=ic().launch();break;case Rr.INSTALL:Q$()().then(()=>ic().main(!0)).catch(m=>{console.error(m)});break;case Rr.REGISTER:J$().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case Rr.STOP:tY()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case Rr.RESTART:bo().restart({}).then().catch(m=>{oc.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case Rr.VERSION:vhe.printVersion();break;case Rr.UPGRADE:oc.setLogLevel(uy.LOG_LEVELS.INFO),JN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{oc.error(`Got an error during upgrade ${m}`)});break;case Rr.STATUS:iY()().then().catch(m=>{console.error(m)});break;case Rr.RENEWCERTS:let{generateKeys:E}=Dm();E().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case Rr.COPYDB:let f=process.argv[3],h=process.argv[4];(Rh(),ae(gh)).copyDb(f,h);break;case void 0:jm?iy()().catch(S=>{console.log(S)}):ic().main();break;default:console.warn(`The "${t}" command is not understood.`);case Rr.HELP:console.log(`
106
+ Reindexing upgrade started for transaction logs`),Fi.notify("Reindexing upgrade started for transaction logs"),await b$(LN,!0,e)),Fi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Cd?", but errors occurred":"")}a(Ede,"reindexUpgrade");async function b$(e,t,r){let n=await Xs.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=ki.join(e,o.toString());if(o===".DS_Store")continue;let l=await Xs.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&Xs.statSync(ki.join(c,d)).isDirectory())try{await hde(o,d,t),Tr.info(`Reindexing started for ${o}.${d}`),Fi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await mde(o,d,c,t,r),Tr.info(`Reindexing completed for ${o}.${d}`),Fi.notify(`Reindexing completed for ${o}.${d}`)}catch(E){Cd=!0,E.schema_path=c,E.table_name=d,Fi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Fi.error(E),Tr.error(E),console.error(E)}}}if(!Cd)try{await Xs.rm(wm,{recursive:!0})}catch{}}a(b$,"processTables");async function hde(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ki.join(wm,s);await Xs.ensureDir(wm),await Xs.writeFile(i,""),Tr=dde({level:"debug",formatters:{bindings(){}}},i)}a(hde,"initPinoLogger");var pde=20;async function mde(e,t,r,n,s){let i;try{i=await Nn.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Fi.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`),Tr.error(T);return}throw T}let o=gde(i.dbis),c=Nn.openDBI(i,o),l=Object.keys(i.dbis),_=Nn.statDBI(i,o);Tr.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new _de.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await Nn.createEnvironment(r,t,!1);Nn.createDBI(d,o,!1,!0);let E=[];try{for(let T of c.getRange({start:!1}))T.value=Object.assign({},T.value),E.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),E.length>pde&&await f();await f()}catch(T){throw Cd=!0,Tr.error(T),T}async function f(){let T,b=E.map(({value:U})=>U);n?T=await Promise.all(b.map(U=>Sde(d,U))):T=await ade(d,o,l.filter(U=>U!=="__blob__"),b,!1);for(let U=0,v=E.length;U<v;U++){let{key:q,value:M}=E[U];Tr.info(`Record hash value: ${q} hash: ${o}`);let W;n?W=T[U]:W=T.written_hashes.indexOf(q)>-1,wd(W,!0),Tde(d,o,M[o],n),Tr.info(`Insert success, written hashes: ${T.written_hashes}`),u.increment()}E=[],u.value/u.total*100%10===0&&Fi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),Tr.info(`${u.value}/${u.total} records inserted`)}a(f,"finishOutstanding"),u.stop();let h=Nn.statDBI(i,o),m=Nn.statDBI(d,o);if(Tr.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),wd.deepStrictEqual(h.entryCount,m.entryCount),await Nn.closeEnvironment(i),await Nn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let T=ki.join(r,t),b=ki.join(T,"data.mdb"),N=ki.join(T,"lock.mdb");await Xs.unlink(b),await Xs.unlink(N),await Xs.rmdir(T),Tr.info(`Deleted old environment files from schema folder: ${b}, ${N}`)}let S=await Nn.openEnvironment(r,t),g=Nn.statDBI(S,o);Tr.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(g)}`),wd.deepStrictEqual(g.entryCount,m.entryCount),await Nn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(mde,"processTable");async function Sde(e,t){Nn.initializeDBIs(e,qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,qo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),ude.isEmpty(t.user_name)||e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[qo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Sde,"insertTransaction");function Tde(e,t,r,n){let i=e.dbis[t].get(r);wd.deepStrictEqual(typeof i,"object");let o;if(n){let c={[qo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[qo.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&&!lde.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];N$(e,c,d,r)}else N$(e,c,l,r)}a(Tde,"validateIndices");function N$(e,t,r,n){try{let s=!1,i=cde.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||Tr.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),wd.deepStrictEqual(s,!0)}catch(s){Cd=!0,Tr.error(s),console.error(s)}}a(N$,"validateIndex");function gde(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(gde,"getHashDBI")});var Dm=R((HIe,C$)=>{"use strict";var Rde=require("mkcert"),Cm=require("path"),PN=require("fs-extra"),MN=k(),Ade=J(),UN=L(),Ml=wT(),Ode=to(),bde=Et();C$.exports={generateKeys:Nde,updateConfigCert:w$};async function Nde(){let e=Ade.getHdbBasePath(),t=Cm.join(e,UN.LICENSE_KEY_DIR_NAME),r=await Rde.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:Ml.CERTIFICATE_VALUES.key,caCert:Ml.CERTIFICATE_VALUES.cert}),n=Cm.join(t,Ml.CERTIFICATE_PEM_NAME),s=Cm.join(t,Ml.PRIVATEKEY_PEM_NAME),i=Cm.join(t,Ml.CA_PEM_NAME);try{await PN.writeFile(n,r.cert)}catch(o){throw MN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await PN.writeFile(s,r.key)}catch(o){throw MN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await PN.writeFile(i,Ml.CERTIFICATE_VALUES.cert)}catch(o){throw MN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}w$(n,s,i)}a(Nde,"generateKeys");function w$(e,t,r){let n=Ode(Object.keys(UN.CONFIG_PARAM_MAP),!0),s=UN.CONFIG_PARAMS,i={[s.CLUSTERING_TLS_CERTIFICATE]:n[s.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?n[s.CLUSTERING_TLS_CERTIFICATE]:e,[s.CLUSTERING_TLS_PRIVATEKEY]:n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?n[s.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[s.CLUSTERING_TLS_CERT_AUTH]:n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?n[s.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[s.TLS_CERTIFICATE]:n[s.TLS_CERTIFICATE.toLowerCase()]?n[s.TLS_CERTIFICATE.toLowerCase()]:e,[s.TLS_PRIVATEKEY]:n[s.TLS_PRIVATEKEY.toLowerCase()]?n[s.TLS_PRIVATEKEY.toLowerCase()]:t,[s.TLS_CERTIFICATEAUTHORITY]:n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?n[s.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATE]=n[s.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_PRIVATEKEY]=n[s.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=n[s.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),bde.updateConfigValue(void 0,void 0,i,!1,!0)}a(w$,"updateConfigCert")});var U$=R((qIe,M$)=>{"use strict";var Lm=require("path"),Fo=require("fs-extra"),yde=CN(),Za=k(),D$=Et(),vN=J(),As=L(),Pm=Y(),Ide=require("properties-reader"),wde=as(),Cde=xE(),Dde=ur(),xIe=require("util"),Lde=Dde.searchByValue,Pde=Cr(),Mde=oh(),Ude=Ze(),vde=I$(),L$=Dm(),Bde=Nm(),Pd=new yde("4.0.0"),P$=[],Dd,Ld;async function Hde(){try{if(await Bde.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Dd){let t=Pm.changeExtension(Dd,".bak");await Fo.move(Dd,t)}if(Ld){let t=Pm.changeExtension(Ld,".bak");await Fo.move(Ld,t)}await L$.generateKeys()}else console.log("Using existing certificates."),L$.updateConfigCert(Dd,Ld,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Hde,"generateNewKeys");async function Gde(){console.log("Updating HarperDB nodes."),Za.info("Updating HarperDB nodes.");let e=[];try{let t=new wde(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Lde(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Ude.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let E=c.subscriptions[u],f=E.channel.split(":");_.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:As.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Pm.isEmptyOrZeroLength(n))return;let s=new Cde(As.SYSTEM_SCHEMA_NAME,As.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Pde.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Mde.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(Gde,"updateNodes");async function xde(){let e=vN.get(As.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Lm.join("config","settings.js"))){Za.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),Za.info(t);let r=Lm.dirname(e),n=vN.get(As.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Lm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Lm.join(n,As.HDB_CONFIG_FILE);try{Za.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Fo.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{Za.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Za.info("Updating env variables with new settings values");let d=D$.initOldConfig(e);Dd=d[As.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],Ld=d[As.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],D$.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=Pm.getPropsFilePath();Fo.accessSync(o,Fo.constants.F_OK|Fo.constants.R_OK);let l=Ide(o).get(As.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
107
+ install_user = ${l}`;try{Fo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{vN.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let u="New settings file for 4.0.0 upgrade successfully created.";try{Fo.removeSync(r),console.log(u),Za.info(u)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(xde,"updateSettingsFile_4_0_0");Pd.async_functions.push(xde);Pd.async_functions.push(Hde);Pd.async_functions.push(vde);Pd.async_functions.push(Gde);P$.push(Pd);M$.exports=P$});var BN=R((kIe,G$)=>{"use strict";var ec=Y(),qde=L(),v$=k(),{DATA_VERSION:Fde,UPGRADE_VERSION:kde}=qde.UPGRADE_JSON_FIELD_NAMES_ENUM,B$=A$(),Mm=U$(),tc=new Map;B$&&B$.forEach(e=>{tc.set(e.version,e)});Mm&&Mm.forEach(e=>{tc.set(e.version,e)});Mm&&Mm.forEach(e=>{tc.set(e.version,e)});function $de(){return[...tc.keys()].sort(ec.compareVersions)}a($de,"getSortedVersions");function H$(e){let t=e[Fde],r=e[kde];return ec.isEmptyOrZeroLength(t)||ec.isEmptyOrZeroLength(r)?(v$.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),v$.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."),[]):[...tc.keys()].sort(ec.compareVersions).filter(function(n){return ec.compareVersions(n,t)>0&&ec.compareVersions(n,r)<=0})}a(H$,"getVersionsForUpgrade");function Vde(e){return H$(e).length>0}a(Vde,"hasUpgradesRequired");function Yde(e){return ec.isEmptyOrZeroLength(e)?null:tc.has(e)?tc.get(e):null}a(Yde,"getDirectiveByVersion");G$.exports={getSortedVersions:$de,getDirectiveByVersion:Yde,getVersionsForUpgrade:H$,hasUpgradesRequired:Vde}});var Md=R((VIe,$$)=>{"use strict";var Kde=require("util"),HN=require("chalk"),Wde=require("os"),q$=Cr(),Qde=ur(),yn=L(),F$=u$(),xN=OT(),{UpgradeObject:x$}=f$(),{forceDowngradePrompt:jde}=Nm(),zde=Ri(),Um=k(),Ul=Y(),qN=Bn(),Jde=(Re(),ae(Ve)),Xde=BN(),Zde=Kde.promisify(qN.setSchemaDataToGlobal),efe=Qde.searchByValue,tfe="info_id",rfe="2.9.9",nfe="3.0.0";async function sfe(e){let t=new F$.HdbInfoInsertObject(1,e,e),r=new xN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return qN.setSchemaDataToGlobal(),q$.insert(r)}a(sfe,"insertHdbInstallInfo");async function GN(e){let t,r=await k$(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new F$.HdbInfoInsertObject(i,e,e);let o=new xN.InsertObject(yn.OPERATIONS_ENUM.INSERT,yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Zde(),q$.insert(o)}a(GN,"insertHdbUpgradeInfo");async function k$(){let e=new xN.NoSQLSeachObject(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,tfe,yn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await efe(e))}catch(r){console.error(r)}return t}a(k$,"getAllHdbInfoRecords");async function ife(){let e=await k$();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(ife,"getLatestHdbInfoRecord");async function ofe(){Um.info("Checking if HDB software has been updated");try{let e=zde.version(),t=await ife(),r;if(Ul.isEmpty(t))r=rfe;else if(r=t.data_version_num,Ul.compareVersions(r.toString(),e.toString())>0){if(!Ul.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(HN.yellow(`This instance's data was last run on version ${r}`)),console.error(HN.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.${Wde.EOL}${yn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Ul.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(HN.yellow(`This instance's data was last run on version ${r}`)),await jde(new x$(r,e))?await GN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(qN.setSchemaDataToGlobal(),afe(r),e.toString()===r.toString())return;let n=new x$(r,e);if(Xde.hasUpgradesRequired(n))return n;Ul.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await GN(n.upgrade_version),Um.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Um.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Um.fatal(e),e}}a(ofe,"getVersionUpdateInfo");function afe(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 ${yn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Jde.databases.system))throw console.log(t),new Error(t);if(!Ul.isEmpty(e)&&e<nfe)throw console.log(t),new Error(t)}a(afe,"checkIfInstallIsSupported");$$.exports={insertHdbInstallInfo:sfe,insertHdbUpgradeInfo:GN,getVersionUpdateInfo:ofe}});var Q$=R((KIe,W$)=>{"use strict";var FN=require("joi"),{boolean:cfe,string:V$,number:lfe}=FN.types(),Y$=require("fs-extra"),Ud=L(),K$=require("path"),ufe=nt();W$.exports=_fe;function _fe(e){let t=V$.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=FN.object({[Ud.INSTALL_PROMPTS.ROOTPATH]:FN.custom(dfe),[Ud.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:lfe.min(0).allow("null",null),[Ud.INSTALL_PROMPTS.TC_AGREEMENT]:V$.valid("yes","YES","Yes"),[Ud.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Ud.INSTALL_PROMPTS.CLUSTERING_ENABLED]:cfe});return ufe.validateBySchema(e,r)}a(_fe,"installValidator");function dfe(e,t){if(Y$.existsSync(K$.join(e,"system/hdb_user/data.mdb"))||Y$.existsSync(K$.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(dfe,"validateRootAvailable")});var VN=R((QIe,j$)=>{"use strict";var{mkdirpSync:ffe}=require("fs-extra"),Zs=require("path"),vl=L(),$N=k(),Efe=Hn(),kN=_i(),hfe=Je();j$.exports=pfe;async function pfe(e){$N.trace("Mounting HarperDB"),Os(e),Os(Zs.join(e,"backup")),Os(Zs.join(e,"trash")),Os(Zs.join(e,"keys")),Os(Zs.join(e,"keys",vl.LICENSE_FILE_NAME)),Os(Zs.join(e,"log")),Os(Zs.join(e,"doc")),Os(Zs.join(e,"database")),Os(Zs.join(e,vl.TRANSACTIONS_DIR_NAME)),Os(Zs.join(e,"clustering","leaf")),Os(Zs.join(e,"components")),await mfe()}a(pfe,"mountHdb");async function mfe(){let e=Uu(),t=Object.keys(kN);for(let r=0;r<t.length;r++){let n=t[r],s=kN[n].hash_attribute;try{hfe.initSystemSchemaPaths(vl.SYSTEM_SCHEMA_NAME,n);let i=new e(vl.SYSTEM_SCHEMA_NAME,n,s);i.attributes=kN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await Efe.createTable(n,i)}catch(i){throw $N.error(`issue creating environment for ${vl.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(mfe,"createLMDBTables");function Os(e){ffe(e,{mode:vl.HDB_FILE_PERMISSIONS}),$N.info(`Directory ${e} created`)}a(Os,"makeDirectory")});var Bm=R((zIe,aV)=>{"use strict";var KN=require("os"),Z$=require("inquirer"),Jn=require("fs-extra"),Sfe=require("properties-reader"),rc=require("chalk"),ri=require("path"),Tfe=require("human-readable-ids").hri,gfe=require("ora"),Rfe=require("yaml"),Ut=k(),Vo=J(),vd=Y(),vm=to(),eV=Md(),tV=Ri(),ne=L(),Afe=Q$(),Ofe=VN(),WN=Et(),bfe=Lr(),Nfe=BE(),yfe=ON(),Ife=Bn(),wfe=require("util").promisify,Cfe=wfe(Ife.setSchemaDataToGlobal),Dfe=Dm(),Bl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),gr=a(e=>rc.magenta.bold(e),"HDB_PROMPT_MSG"),Lfe="https://harperdb.io/legal/end-user-license-agreement",Yo=KN.EOL,ko="",Pfe="yes",z$="Starting HarperDB install...",J$="HarperDB installation was successful.",X$="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Mfe="An out of date version of HarperDB is already installed.",YN="It appears that HarperDB is already installed. Exiting install...",Ufe="Aborting install",vfe=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])$/),Bfe=new RegExp(/^[^\s.,*>]+$/),Hfe=KN.homedir(),Gfe=ri.join(Hfe,ne.HDB_ROOT_DIR_NAME),xfe=9925,qfe="HDB_ADMIN",Ffe="CLUSTER_USER",Jr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Ko=vm([ne.INSTALL_PROMPTS.HDB_CONFIG]),ti,rV=!1,nV=!1;aV.exports={install:sV,updateConfigEnv:Xfe,setIgnoreExisting:Zfe};sV.createSuperUser=oV;async function sV(){console.log(gr(Yo+z$+Yo)),Ut.notify(z$);let e;Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&(e=kfe());let t=Vfe();Object.assign(t,e);let r=Afe(t);if(r)throw r.message;await Yfe(),await Kfe(t);let n=await $fe(t);n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT]&&(n[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]=null),ti=n[ne.INSTALL_PROMPTS.ROOTPATH],Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&ri.dirname(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG])===ti&&(rV=!0),!Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&await Jn.pathExists(ri.join(ti,ne.HDB_CONFIG_FILE))&&(console.error(YN),process.exit());let s=gfe({prefixText:gr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),vd.isEmpty(ti))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Vo.setHdbBasePath(ti),await Ofe(ti),await Wfe(),await Qfe(n),Ut.initLogSettings(!0),await oV(n),await zfe(n),await Dfe.generateKeys(),await Jfe(),yfe(),s.stop(),console.log(gr(Yo+J$+Yo)),Ut.notify(J$)}a(sV,"install");function kfe(){let e=Rfe.parseDocument(Jn.readFileSync(Ko[ne.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=WN.flattenConfig(e.toJSON());return t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ne.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(kfe,"getConfigFromFile");async function $fe(e){Ut.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.ROOTPATH],Jr.DESTINATION),name:ne.INSTALL_PROMPTS.ROOTPATH,prefix:ko,default:Gfe,validate:async s=>ei(s)?ei(s):await Jn.pathExists(ri.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:gr(Jr.DESTINATION)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]??e[ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_SECUREPORT],Jr.HDB_PORT),name:ne.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ko,default:xfe,validate:s=>vfe.test(s)?!0:"Invalid port.",message:gr(Jr.HDB_PORT)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Jr.HDB_USERNAME),name:ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ko,default:qfe,validate:s=>ei(s)?ei(s):(t=s,!0),message:gr(Jr.HDB_USERNAME)},{type:"password",when:$o(e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Jr.HDB_PASS),name:ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ko,validate:s=>ei(s)?ei(s):!0,message:gr(Jr.HDB_PASS)}];if(vd.autoCastBoolean(e[ne.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_NODENAME],Jr.NODE_NAME),name:ne.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ko,default:Tfe.random(),validate:i=>Bfe.test(i)?!0:"Invalid node name, must not contain ., * or >",message:gr(Jr.NODE_NAME)},{type:"input",transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_USER],Jr.CLUSTER_USERNAME),name:ne.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ko,default:Ffe,validate:i=>ei(i)?ei(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:gr(Jr.CLUSTER_USERNAME)},{type:"password",when:$o(e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Jr.CLUSTER_PASS),name:ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ko,validate:i=>ei(i)?ei(i):!0,message:gr(Jr.CLUSTER_PASS)}];r.push(...s)}let n=await Z$.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($fe,"installPrompts");function $o(e,t){return e!==void 0?(t.includes("password")?(console.log(`${gr(t)} ${rc.gray("[hidden]")}`),Ut.trace(`${gr(t)} [hidden]`)):(console.log(`${gr(t)} ${e}`),Ut.trace(`${gr(t)} ${e}`)),!1):!0}a($o,"displayCmdEnvVar");function ei(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(ei,"checkForEmptyValue");function Vfe(){let e=Object.keys(ne.INSTALL_PROMPTS),t=vm(e),r=vm(Object.keys(ne.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ne.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(Vfe,"checkForPromptOverride");async function Yfe(){Ut.trace("Checking for existing install.");let e=vd.getPropsFilePath(),t=await Jn.pathExists(e),r;if(t){Ut.trace(`Install found an existing boot prop file at:${e}`);let n=Sfe(e),s=WN.getConfigValue(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ne.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Jn.pathExists(s)}if(!t&&vd.noBootFile()&&(r=!0),r&&!nV){if(Ut.trace(`Install found existing HDB config at:${e}`),await eV.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${tV.version()}. Exiting install...`;console.log(Yo+rc.magenta.bold(Mfe)),console.log(rc.magenta.bold(s)),Ut.error(s)}else console.log(Yo+rc.magenta.bold(YN)),Ut.error(YN);process.exit(0)}}a(Yfe,"checkForExistingInstall");async function Kfe(e){Ut.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Lfe}${Yo}and can be viewed by typing or copying and pasting the URL into your web browser.${Yo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:ko,transformer:Bl,when:$o(e[ne.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ne.INSTALL_PROMPTS.TC_AGREEMENT,message:gr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:rc.yellow("Please enter 'yes' or 'no'")},n=await Z$.prompt([r]);n[ne.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ne.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Pfe&&(console.log(rc.yellow(X$)),Ut.error(X$),process.exit(0))}a(Kfe,"termsAgreement");async function Wfe(){let e=ri.join(ti,ne.HDB_CONFIG_FILE),t;try{t=KN.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}
108
+ install_user = ${t}`,n=vd.getHomeDir(),s=ri.join(n,ne.HDB_HOME_DIR_NAME),i=ri.join(s,ne.LICENSE_KEY_DIR_NAME);try{Jn.mkdirpSync(s,{mode:ne.HDB_FILE_PERMISSIONS}),Jn.mkdirpSync(i,{mode:ne.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ne.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=ri.join(s,ne.BOOT_PROPS_FILE_NAME);try{await Jn.writeFile(o,r)}catch(c){throw Ut.error(`There was an error creating the boot file at path: ${o}`),c}Vo.setProperty(ne.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Vo.setProperty(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Vo.setProperty(Vo.BOOT_PROPS_FILE_PATH,o)}}a(Wfe,"createBootPropertiesFile");async function Qfe(e){Ut.trace("Creating HarperDB config file");let t=vm(Object.keys(ne.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]||WN.createConfigFile(t),Vo.initSync()}catch(r){jfe(r)}}a(Qfe,"createConfigFile");function jfe(e){Ut.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Ufe);let t=ri.resolve(Vo.get(Vo.BOOT_PROPS_FILE_PATH),"../");t&&Jn.removeSync(t),ti&&(rV?Jn.readdirSync(ti,{withFileTypes:!0}).forEach(n=>{let s=ri.join(n.path,n.name);s!==Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]&&Jn.removeSync(s)}):Jn.removeSync(ti)),process.exit(1)}a(jfe,"rollbackInstall");async function iV(e,t){Ut.trace("Creating admin user"),await Cfe();let r;try{r=await Nfe.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 bfe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(iV,"createAdminUser");async function oV(e){Ut.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await iV(t,r),delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ne.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(oV,"createSuperUser");async function zfe(e){Ut.trace("Creating Cluster user.");let t;e[ne.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ne.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await iV({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ne.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ne.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(zfe,"createClusterUser");async function Jfe(){let e=tV.version();if(e)await eV.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Jfe,"insertHdbVersionInfo");function Xfe(e){Ko[ne.INSTALL_PROMPTS.HDB_CONFIG]=e}a(Xfe,"updateConfigEnv");function Zfe(e){nV=e}a(Zfe,"setIgnoreExisting")});var uV=R((XIe,lV)=>{"use strict";var QN=Y(),In=k(),cV=BN();lV.exports={processDirectives:eEe};async function eEe(e){console.log("Starting upgrade process...");let t=cV.getVersionsForUpgrade(e),r=nEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;In.notify(c),console.log(c);let l=[],_=[];try{l=tEe(o.sync_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await rEe(o.async_functions)}catch(u){throw In.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(eEe,"processDirectives");function tEe(e){if(QN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(In.info(`Running function ${r.name}`),!(r instanceof Function)){In.info("Variable being processed is not a function");continue}let n=r();In.info(n),t.push(n)}return t}a(tEe,"runSyncFunctions");async function rEe(e){if(QN.isEmptyOrZeroLength(e))return In.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return In.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(In.info(`Running function ${s.name}`),!(s instanceof Function)){In.info("Variable being processed is not a function");continue}let i=await s();In.info(i),t.push(i)}return t}a(rEe,"runAsyncFunctions");function nEe(e){if(QN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=cV.getDirectiveByVersion(r);n&&t.push(n)}return t}a(nEe,"getUpgradeDirectivesToInstall")});var JN=R((ewe,pV)=>{"use strict";var Hm=J();Hm.initSync();var EV=require("chalk"),_V=require("fs-extra"),Vi=k(),$i=L(),dV=Ri(),sEe=uV(),jN=Y(),hV=Md(),iEe=Nm(),fV=fS(),oEe=Bn(),aEe=require("util").promisify,cEe=aEe(oEe.setSchemaDataToGlobal),zN,{UPGRADE_VERSION:Gm}=$i.UPGRADE_JSON_FIELD_NAMES_ENUM;pV.exports={upgrade:lEe};async function lEe(e){await cEe(),zN===void 0&&(zN=Yc()),_V.existsSync(Hm.get(Hm.BOOT_PROPS_FILE_PATH))||(Bd("The hdb_boot_properties file was not found. Please install HDB.",$i.LOG_LEVELS.ERROR),process.exit(1)),_V.existsSync(Hm.get($i.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Bd("The hdb settings file was not found. Please make sure HDB is installed.",$i.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await hV.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Bd(`This version of HarperDB is ${dV.version()}`,$i.LOG_LEVELS.INFO);let r=t[Gm]?t[Gm]:dV.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${$i.HDB_SUPPORT_ADDRESS}`),Vi.notify("Missing new version field from upgrade info object"),process.exit(1)),await uEe();let n,s=0;try{n=await iEe.forceUpdatePrompt(t)}catch(i){Vi.error("There was an error when prompting user about upgrade."),Vi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Vi.info(`Starting upgrade to version ${r}`),await _Ee(t),Bd(`HarperDB was successfully upgraded to version ${t[Gm]}`,$i.LOG_LEVELS.INFO)}a(lEe,"upgrade");async function uEe(){let e=!1,t=await fV.findPs($i.HDB_PROC_NAME);if(jN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await fV.findPs("hdb_express");jN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await zN.list();jN.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(EV.red(r)),Vi.error(r),process.exit(1)}}a(uEe,"checkIfRunning");async function _Ee(e){try{await sEe.processDirectives(e)}catch(t){throw Bd("There was an error during the data upgrade. Please check the logs.",$i.LOG_LEVELS.ERROR),t}try{await hV.insertHdbUpgradeInfo(e[Gm])}catch(t){Vi.error("Error updating the 'hdb_info' system table."),Vi.error(t)}}a(_Ee,"runUpgrade");function Bd(e,t=void 0){t||(t=Vi.info),Vi[t](e),console.log(EV.magenta(e))}a(Bd,"printToLogAndConsole")});var RV=R((rwe,gV)=>{"use strict";var{promises:ZN,createReadStream:dEe,createWriteStream:fEe}=require("fs"),{createGzip:EEe}=require("zlib"),{promisify:hEe}=require("util"),{pipeline:pEe}=require("stream"),mEe=hEe(pEe),SEe=require("path"),sc=J();sc.initSync();var nc=k(),{CONFIG_PARAMS:Hd,ITC_EVENT_TYPES:TEe}=L(),{onMessageFromWorkers:gEe}=rt(),REe=6e4,AEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",OEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",XN,SV;gV.exports=TV;gEe(e=>{e.type===TEe.RESTART&&(sc.initSync(!0),clearInterval(SV),sc.get(Hd.LOGGING_ROTATION_ENABLED)&&TV())});async function TV(){try{let e=nc.getLogFilePath(),t=sc.get(Hd.LOGGING_ROTATION_MAXSIZE),r=sc.get(Hd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){nc.error(AEe);return}let n=sc.get(Hd.LOGGING_ROTATION_PATH);if(!n){nc.error(OEe);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}XN=Date.now()/6e4,nc.trace("Log rotate enabled, maxSize:",t,"interval:",r),SV=setInterval(async()=>{if(s){let o;o=await ZN.stat(e),o.size>=s&&await mV(e,n)}i&&Date.now()/6e4-XN>=i&&(await mV(e,n),XN=Date.now()/6e4)},REe).unref()}catch(e){nc.error(e)}}a(TV,"logRotator");async function mV(e,t){let r=sc.get(Hd.LOGGING_ROTATION_COMPRESS),n=SEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await mEe(dEe(e),EEe(),fEe(n)),await ZN.unlink(e)):await ZN.rename(e,n),nc.closeLogFile(),nc.notify(`hdb.log rotated, old log moved to ${n}`)}a(mV,"moveLogFile")});var ic=R((dwe,CV)=>{"use strict";var Xr=J();Xr.initSync();var swe=bo(),bt=L(),si=k(),Yi=require("fs-extra"),Wo=require("path"),bEe=require("systeminformation"),NEe=ON(),{install:yEe}=Bm(),ey=require("chalk"),IEe=ma(),Ki=Y(),OV=Et(),bV=to(),AV=fh(),wEe=JN(),CEe=RV(),{compactOnStart:DEe}=(Rh(),ae(gh)),LEe=require("minimist"),{PACKAGE_ROOT:PEe}=L(),{startHTTPThreads:MEe,startSocketServer:iwe,mostIdleRouting:owe,remoteAffinityRouting:awe}=(Nb(),ae(Zq)),UEe=Md(),{isMainThread:vEe}=require("worker_threads"),cwe=_i(),lwe=Ei(),uwe=Sg(),_we=Uu(),xm=L(),ni,Hl,NV=!1,BEe="Upgrade complete. Starting HarperDB.",HEe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",GEe="HarperDB not found, starting install process.",xEe="There was an error during install, check install_log.log for more details. Exiting.",qEe="HarperDB successfully started.";function FEe(){if(!NV){let e=a(()=>{Yi.removeSync(Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.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(FEe,"addExitListeners");async function yV(e=!1,t=!1){if(console.log(ey.magenta("Starting HarperDB...")),await wV()===!1){console.log(GEe);try{await yEe()}catch(o){console.error(xEe,o),si.error(o),process.exit(1)}}if(!e){let o=bV(Object.keys(bt.CONFIG_PARAM_MAP),!0);!Ki.isEmpty(o)&&!Ki.isEmptyOrZeroLength(Object.keys(o))&&OV.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=Hl?.service==="clustering";Hl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Yi.readFile(Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE),"utf8")),c=await bEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ni===void 0&&(ni=Yc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await AV.generateNatsConfig(),await ni.startClusteringProcesses(!0),process.exit()),FEe(),await Yi.writeFile(Wo.join(Xr.get(xm.CONFIG_PARAMS.ROOTPATH),xm.HDB_PID_FILE),`${process.pid}`),si.info("HarperDB PID",process.pid);let s;try{let o=await UEe.getVersionUpdateInfo();o!==void 0&&(s=o[bt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await wEe.upgrade(o),console.log(BEe))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),si.error(o)):(console.error(HEe,o),si.error(o)),process.exit(1)}NEe(),VEe(),Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&vEe&&await AV.generateNatsConfig(t)}a(yV,"initialize");async function kEe(e=!1){try{Hl=LEe(process.argv),Hl.ROOTPATH&&OV.updateConfigObject("settings_path",Wo.join(Hl.ROOTPATH,bt.HDB_CONFIG_FILE)),await yV(e,!0),Xr.get(bt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await DEe();let t=process.env.IS_SCRIPTED_SERVICE&&!Hl.service;Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ni.startClusteringProcesses(),await ni.startClusteringThreads()),await MEe(process.env.DEV_MODE?1:Xr.get(xm.CONFIG_PARAMS.THREADS_COUNT)??Xr.get(xm.CONFIG_PARAMS.THREADS)),Xr.get(bt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await CEe(),t||IV()}catch(t){console.error(t),si.error(t),process.exit(1)}}a(kEe,"main");function IV(){si.suppressLogging(()=>{console.log(ey.magenta(""+Yi.readFileSync(Wo.join(PEe,"utility/install/ascii_logo.txt")))),console.log(ey.magenta(`|------------- HarperDB ${IEe.version} successfully started ------------|`))}),si.notify(qEe)}a(IV,"started");async function $Ee(e=!0){NV=!e;try{ni===void 0&&(ni=Yc()),ni.enterPM2Mode(),await yV(),Ki.autoCastBoolean(Xr.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ni.startClusteringProcesses(),await ni.startService(bt.PROCESS_DESCRIPTORS.HDB),IV(),e&&process.exit(0)}catch(t){console.error(t),si.error(t),process.exit(1)}}a($Ee,"launch");function VEe(){let e=Wo.join(Xr.get(bt.CONFIG_PARAMS.ROOTPATH),bt.LICENSE_KEY_DIR_NAME,bt.LICENSE_FILE_NAME),t=Wo.join(e,bt.LICENSE_FILE_NAME),r=Wo.join(e,bt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=bV(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ki.isEmpty(n)||Ki.isEmpty(s))return;Yi.mkdirpSync(e),Yi.writeFileSync(r,n),Yi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),si.error(s)}}a(VEe,"writeLicenseFromVars");CV.exports={launch:$Ee,main:kEe,isHdbInstalled:wV};async function wV(){try{await Yi.stat(Ki.getPropsFilePath()),await Yi.stat(Xr.get(bt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ki.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw si.error(`Error checking for HDB install - ${e}`),e}return!0}a(wV,"isHdbInstalled")});var iy=R((Ewe,KV)=>{"use strict";var DV=require("os"),km=require("https"),LV=require("http"),Vt=require("fs-extra"),PV=require("yaml"),YEe=require("human-readable-ids").hri,{pipeline:MV}=require("stream/promises"),{createWriteStream:$m,ensureDir:Vm}=require("fs-extra"),{join:Cn}=require("path"),qV=require("lodash"),KEe=require("minimist"),kd=require("path"),WEe=require("properties-reader"),bs=J(),QEe=gi(),FV=k(),ty=Et(),{restart:jEe}=bo(),Ym=Y(),zEe=to(),UV=gt(),JEe=Bn(),{main:kV,launch:XEe}=ic(),{install:ZEe,updateConfigEnv:ehe,setIgnoreExisting:ny}=Bm(),$V=VN(),Zr=L(),the=Ri(),rhe=Md(),{SYSTEM_TABLE_NAMES:vV,SYSTEM_SCHEMA_NAME:nhe,CONFIG_PARAMS:Gd,OPERATIONS_ENUM:Dn}=Zr,she=1e4,ihe="clone-node-config.yaml",sy=[vV.ROLE_TABLE_NAME,vV.USER_TABLE_NAME],ohe={clustering_nodename:!0,clustering_leafserver_streams_path:!0,clustering_tls_certificate:!0,clustering_tls_privatekey:!0,clustering_tls_certificateauthority:!0,logging_file:!0,logging_root:!0,logging_rotation_path:!0,operationsapi_network_domainsocket:!0,operationsapi_tls_certificate:!0,operationsapi_tls_privatekey:!0,operationsapi_tls_certificateauthority:!0,rootpath:!0,storage_path:!0,storage_audit_path:!0,databases:!0,mqtt_network_mtls_certificateauthority:!0,componentsroot:!0,tls_certificate:!0,tls_privatekey:!0,tls_certificateauthority:!0},lr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_CLONE_CLUSTERING_HOST:"HDB_CLONE_CLUSTERING_HOST",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP",CLUSTERING_NODENAME:"CLUSTERING_NODENAME"},ji=KEe(process.argv),xd=ji[lr.HDB_LEADER_USERNAME]??process.env[lr.HDB_LEADER_USERNAME],qd=ji[lr.HDB_LEADER_PASSWORD]??process.env[lr.HDB_LEADER_PASSWORD],Fd=ji[lr.HDB_LEADER_URL]??process.env[lr.HDB_LEADER_URL],Fm=ji[lr.HDB_LEADER_CLUSTERING_HOST]??process.env[lr.HDB_LEADER_CLUSTERING_HOST],BV=ji[lr.HDB_CLONE_CLUSTERING_HOST]??process.env[lr.HDB_CLONE_CLUSTERING_HOST],ahe=(ji[lr.HDB_FULLY_CONNECTED]??process.env[lr.HDB_FULLY_CONNECTED])==="true",VV=(ji[lr.HDB_CLONE_OVERTOP]??process.env[lr.HDB_CLONE_OVERTOP])==="true",HV=ji[lr.CLUSTERING_NODENAME]??process.env[lr.CLUSTERING_NODENAME],che=ji[Gd.CLONED.toUpperCase()]??process.env[Gd.CLONED.toUpperCase()],ry,en,Qi={},GV,Wi,ii={},ut,Gl,vt,wn,Ns,xl=!1,Wm=!1;KV.exports=a(async function(t=!1){if(console.info(`Starting clone node form leader node: ${Fd}`),delete process.env.HDB_LEADER_URL,vt=Ym.getEnvCliRootPath(),!vt)try{let s=Cn(DV.homedir(),Zr.HDB_HOME_DIR_NAME,Zr.BOOT_PROPS_FILE_NAME);if(await Vt.pathExists(s)){let i=WEe(s);vt=kd.parse(i.get(Zr.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)).dir}}catch{throw new Error("There was an error setting the clone default root path. Please set ROOTPATH using an environment or CLI variable.")}vt?await Vt.pathExists(vt)?console.log(`Existing HarperDB install found at ${vt}. Clone node will only clone items that do not already exist on clone.`):(console.log(`No HarperDB install found at ${vt} starting fresh clone`),xl=!0):(console.log("No HarperDB install found, starting fresh clone"),xl=!0),vt||(vt=Cn(DV.homedir(),Zr.HDB_ROOT_DIR_NAME),console.log("Using default root path",vt));let r;try{r=Cn(vt,ihe),en=PV.parseDocument(await Vt.readFile(r,"utf8"),{simpleKeys:!0}).toJSON(),console.log("Clone config file found")}catch{}let n=Cn(vt,Zr.HDB_CONFIG_FILE);if(await Vt.pathExists(n))try{GV=PV.parseDocument(await Vt.readFile(n,"utf8"),{simpleKeys:!0}).toJSON(),Qi=ty.flattenConfig(GV)}catch(s){console.error("Error reading existing harperdb-config.yaml on clone",s)}if(Qi?.cloned&&che!=="false")return console.log("Instance marked as cloned, clone will not run"),bs.setCloneVar(!1),bs.initSync(),kV();HV?Gl=HV:Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]?Gl=Qi[Zr.CONFIG_PARAMS.CLUSTERING_NODENAME.toLowerCase()]:Gl=en?.clustering?.nodeName??YEe.random(),await lhe(),bs.setCloneVar(!1),bs.setHdbBasePath(vt),Vt.ensureDir(bs.get(Zr.CONFIG_PARAMS.LOGGING_ROOT)),FV.initLogSettings(),await uhe(),Wm||await _he(),await Ehe(t),ry&&Fm&&await hhe(),console.info(`
109
+ Successfully cloned node: `+Fd),t&&process.exit()},"cloneNode");async function lhe(){console.info("Cloning configuration"),Wi=await Km({operation:Dn.GET_CONFIGURATION}),Wi=await JSON.parse(Wi.body),ry=Wi?.clustering?.enabled,ii=ty.flattenConfig(Wi);let e=Wi?.clustering?.hubServer?.cluster?.network?.port,t=en?.componentConfig?.exclude,r={cloned:!0,clustering_nodename:Gl,rootpath:vt};for(let s in ii)if(!(ii[s]!==null&&typeof ii[s]=="object"&&!(ii[s]instanceof Array)||ohe[s])){if(s.includes("_package")||s.includes("_port")){if(ii[s]?.includes?.("hdb/components"))continue;if(t){let i=!1;for(let o of t)if(s.includes(o.name)){i=!0;break}if(i)continue}}Qi[s]||(s==="clustering_hubserver_cluster_network_routes"&&Fm&&e&&(Array.isArray(ii[s])||(ii[s]=[]),ii[s].push({host:Fm,port:e})),r[s]=ii[s])}for(let s in Qi)s!=="databases"&&typeof Qi[s]=="object"&&!(Qi[s]instanceof Array)||(r[s]=Qi[s]);let n=zEe(Object.keys(Zr.CONFIG_PARAM_MAP),!0);if(Object.assign(r,n),ty.createConfigFile(r,!0),bs.initSync(!0),ry&&Fm&&BV){let s={host:BV,port:bs.get(Gd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT)};console.log("Setting clustering route on leader:",s),await Km({operation:"cluster_set_routes",server:"hub",routes:[s]})}}a(lhe,"cloneConfig");async function uhe(){process.env.HDB_FETCH==="true"?(await fhe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await dhe()}a(uhe,"cloneDatabases");async function _he(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=vt,!xd)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=xd,!qd)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=qd,process.env.OPERATIONSAPI_NETWORK_PORT=bs.get(Gd.OPERATIONSAPI_NETWORK_PORT),ehe(kd.join(vt,Zr.HDB_CONFIG_FILE)),ny(!0),await ZEe()}a(_he,"installHDB");function oi(e){return bs.get(Zr.CONFIG_PARAMS.DATABASES)?.[e]?.path||bs.get(Gd.STORAGE_PATH)||kd.join(vt,Zr.DATABASES_DIR_NAME)}a(oi,"getDBPath");async function dhe(){let e=oi("system"),t=Cn(e,"system.mdb");if(xl||!await Vt.exists(t)||VV){console.info("Cloning system database"),await Vm(e);let r=$m(t,{overwrite:!0}),n={operation:Dn.GET_BACKUP,database:"system",tables:sy},s=await xV(n,r);await Vt.utimes(t,Date.now(),new Date(s.date)),xl||(await $V(vt),await YV(),ny(!0))}else Wm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await Km({operation:Dn.DESCRIBE_ALL}),ut=await JSON.parse(ut.body),wn=en?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await Vt.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);Ns=en?.databaseConfig?.excludeTables,Ns=Ns?Ns.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(qV.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])Ns[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i={operation:Dn.GET_BACKUP,database:r,tables:n}):(console.info(`Cloning database: ${r}`),i={operation:Dn.GET_BACKUP,database:r});let o=oi(r);await Vm(o);let c=Cn(o,r+".mdb"),l=$m(c,{overwrite:!0}),_=await xV(i,l);await Vt.utimes(c,Date.now(),new Date(_.date))}}a(dhe,"cloneTablesHttp");async function fhe(){let e=oi("system"),t=Cn(e,"system.mdb");if(xl||!await Vt.exists(t)||VV){console.info("Cloning system database using fetch");let r={operation:Dn.GET_BACKUP,database:"system",tables:sy},n=await qm(r,!0),s=oi("system");await Vm(s);let i=Cn(s,"system.mdb");await MV(n.body,$m(i,{overwrite:!0})),await Vt.utimes(i,Date.now(),new Date(n.headers.get("date"))),xl||(await $V(vt),await YV(),ny(!0))}else Wm=!0,console.log("Not cloning system database due to it already existing on clone");ut=await qm({operation:Dn.DESCRIBE_ALL}),ut=await ut.json(),wn=en?.databaseConfig?.excludeDatabases,wn=wn?wn.reduce((r,n)=>({...r,[n.database]:!0}),{}):{};for(let r in ut)await Vt.exists(kd.join(oi(r),r+".mdb"))&&(console.log(`Not cloning database ${r} due to it already existing on clone`),wn[r]=!0);Ns=en?.databaseConfig?.excludeTables,Ns=Ns?Ns.reduce((r,n)=>({...r,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let r in ut){if(wn[r]){ut[r]="excluded";continue}if(qV.isEmpty(ut[r]))continue;let n=[],s=!1;for(let u in ut[r])Ns[r+u]?(s=!0,ut[r][u]="excluded"):n.push(u);if(n.length===0)return;let i;s?(console.info(`Cloning database: ${r} tables: ${n}`),i=await qm({operation:Dn.GET_BACKUP,database:r,tables:n},!0)):(console.info(`Cloning database: ${r}`),i=await qm({operation:Dn.GET_BACKUP,database:r},!0));let o=oi(r);await Vm(o);let c=new Date(i.headers.get("date")),l=Cn(o,`${c.getTime()}-${r}.mdb`);await MV(i.body,$m(l,{overwrite:!0}));let _=Cn(o,r+".mdb");await Vt.rename(l,_),await Vt.utimes(_,Date.now(),c)}}a(fhe,"cloneTablesFetch");async function qm(e,t=!1){let r=en?.httpsRejectUnauthorized??!1,n=new km.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(xd+":"+qd).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Fd,{method:"POST",headers:i,body:JSON.stringify(e),agent:n,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(qm,"leaderHttpReqFetch");async function Ehe(e){let t=await QEe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await XEe(!1):await kV():(console.info(await jEe({operation:Dn.RESTART})),await Ym.async_set_timeout(she)),e&&await Ym.async_set_timeout(2e3)}a(Ehe,"startHDB");async function hhe(){console.info("Clustering cloned tables");let e=en?.clusteringConfig?.subscribeToLeaderNode!==!1,t=en?.clusteringConfig?.publishToLeaderNode!==!1;await JEe.setSchemaDataToGlobalAsync();let r=c_(),n=await Km({operation:Dn.CLUSTER_STATUS});n=await JSON.parse(n.body);let s=[];if(!Wm){let l=await Vt.stat(Cn(oi("system"),"system.mdb"));for(let _ of sy)s.push({schema:nhe,table:_,subscribe:e,publish:t,start_time:l.mtime.toISOString()})}let i=en?.clusteringConfig?.excludeDatabases;i=i?i.reduce((l,_)=>({...l,[_.database]:!0}),{}):{};let o=en?.clusteringConfig?.excludeTables;o=o?o.reduce((l,_)=>({...l,[_.database==null?null:_.database+_.table]:!0}),{}):{};for(let l in ut){if(ut[l]==="excluded"||i[l])continue;let _=await Vt.stat(Cn(oi(l),l+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let u in ut[l])ut[l][u]==="excluded"||o[l+u]||s.push({schema:l,table:u,subscribe:e,publish:t,start_time:_.mtime.toISOString()})}await UV.createTableStreams(s),FV.info("Sending add_node request to node:",Wi?.clustering?.nodeName,"with subscriptions:",s);let c;if(ahe&&n.connections.length>0){let l=eh(),_=[{node_name:Wi?.clustering?.nodeName,subscriptions:s}],u=!1;Gl=bs.get(Zr.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===Gl)continue;let E={node_name:d.node_name,subscriptions:[]};for(let f of d.subscriptions){if(wn[f.schema]||Ns[f.schema+f.table]||i[f.schema]||o[f.schema+f.table])continue;u=!0;let h=await Vt.stat(Cn(oi(f.schema),f.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),f.start_time=h.mtime.toISOString(),E.subscriptions.push(f)}_.push(E)}u&&(c=await l({operation:Dn.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}!c&&s.length>0&&await r({operation:Dn.ADD_NODE,node_name:Wi?.clustering?.nodeName,subscriptions:s},!0),await UV.closeConnection()}a(hhe,"clusterTables");async function Km(e){let t=new km.Agent({rejectUnauthorized:en?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(xd+":"+qd).toString("base64"),"Content-Type":"application/json"},s=new URL(Fd),i={protocol:s.protocol,host:s.hostname,method:"POST",headers:n};return s.protocol==="https:"&&(i.agent=t),s.port&&(i.port=s.port),await Ym.httpRequest(i,e)}a(Km,"leaderHttpReq");async function xV(e,t){let r=new km.Agent({rejectUnauthorized:en?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(xd+":"+qd).toString("base64"),"Content-Type":"application/json"},i=new URL(Fd),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,LV=km),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=LV.request(o,u=>{u.statusCode!==200&&l("Request to leader node failed with code: "+u.statusCode),u.pipe(t),u.on("end",()=>{t.close(),c(u.headers)})});_.on("error",u=>{l(u)}),_.write(JSON.stringify(e)),_.end()})}a(xV,"leaderHttpStream");async function YV(){let e=the.version();if(e)await rhe.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(YV,"insertHdbVersionInfo")});var QV=R((pwe,WV)=>{var phe=Bm(),mhe=k();WV.exports=She;async function She(){try{await phe.install()}catch(e){console.error("There was an error during the install."),console.error(e),mhe.error(e),process.exit(1)}}a(She,"install")});var JV=R((Swe,zV)=>{"use strict";var The=ch(),ghe=k(),jV="Registration failed.";async function Rhe(){let e;try{e=await The.register()}catch(t){return ghe.error(`Registration error ${t}`),jV}return e||jV}a(Rhe,"register");zV.exports={register:Rhe}});var tY=R((gwe,eY)=>{"use strict";var Ahe=k(),Ohe=L(),bhe=require("util"),Nhe=require("child_process"),XV=bhe.promisify(Nhe.exec),yhe=gi(),$d=Yc(),ZV="Stopping HarperDB.";eY.exports=Ihe;async function Ihe(){if(console.log(ZV),Ahe.notify(ZV),await $d.isServiceRegistered(Ohe.HDB_PROC_DESCRIPTOR)){$d.enterPM2Mode();let r=await $d.getUniqueServicesList();for(let n in r)await $d.stop(n)}await $d.kill();let t=await yhe.getHDBProcessInfo();t.clustering.forEach(r=>{XV(`kill ${r.pid}`)}),t.core.forEach(r=>{XV(`kill ${r.pid}`)})}a(Ihe,"stop")});var iY=R((Awe,sY)=>{"use strict";var ay=require("fs-extra"),cy=require("path"),oy=require("yaml"),Vd=gt(),Yd=L(),rY=Ze(),ly=k(),whe=Lr(),Che=sh(),Dhe=rh(),Lhe=gi(),nY=J(),{isHdbInstalled:Phe}=ic();nY.initSync();var Xn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},tn={LEAF:"leaf server",HUB:"hub server"},Qm;sY.exports=Mhe;async function Mhe(){let e={harperdb:{status:Xn.STOPPED}};if(!await Phe()){e.harperdb.status=Xn.NOT_INSTALLED,console.log(oy.stringify(e));return}Qm=nY.get(Yd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await ay.readFile(cy.join(Qm,Yd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Yd.NODE_ERROR_CODES.ENOENT){ly.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=Xn.STOPPED,console.log(oy.stringify(e));return}throw n}let r=await Lhe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=Xn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await Uhe(r),e.clustering[tn.HUB].status===Xn.RUNNING&&e.clustering[tn.LEAF].status===Xn.RUNNING){let n=[],s=await Che({});for(let o of s.nodes){let c={};for(let l in o)c[l.replace("_"," ")]=o[l];n.push(c)}e.clustering.network=n;let i=await Dhe.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await Vd.closeConnection()}console.log(oy.stringify(e)),process.exit()}a(Mhe,"status");async function Uhe(e){let t={[tn.HUB]:{},[tn.LEAF]:{}};if(e.clustering.length===0)return t[tn.HUB].status=Xn.STOPPED,t[tn.LEAF].status=Xn.STOPPED,t;let{port:r}=Vd.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await whe.getClusterUser();try{(await Vd.createConnection(r,n,s,!1)).close(),t[tn.HUB].status=Xn.RUNNING}catch{t[tn.HUB].status=Xn.ERRORED}let{port:i}=Vd.getServerConfig(Yd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Vd.createConnection(i,n,s,!1)).close(),t[tn.LEAF].status=Xn.RUNNING}catch{t[tn.LEAF].status=Xn.ERRORED}try{t[tn.HUB].pid=Number.parseInt(await ay.readFile(cy.join(Qm,"clustering",rY.PID_FILES.HUB),"utf8"))}catch(o){ly.error(o),t[tn.HUB].pid=void 0}try{t[tn.LEAF].pid=Number.parseInt(await ay.readFile(cy.join(Qm,"clustering",rY.PID_FILES.LEAF),"utf8"))}catch(o){ly.error(o),t[tn.LEAF].pid=void 0}return t}a(Uhe,"getHubLeafStatus")});var jm=process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL");jm&&J().setCloneVar(!0);var Kd=require("fs"),oY=require("path"),oc=k(),aY=s$(),vhe=Ri(),Bhe=a$(),uy=L(),{SERVICE_ACTIONS_ENUM:Rr,PACKAGE_ROOT:Hhe}=uy;Ghe();function Ghe(){let e=Bhe();if(e)if(e.error){console.error(e.error),oc.error(e.error);return}else e.warn&&(console.warn(e.warn),oc.warn(e.warn));let t;Kd.readdir(oY.join(Hhe,"bin"),r=>{if(r)return oc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n;jm||(n=aY.buildRequest(),n.operation&&(t=Rr.OPERATION));let s;switch(t){case Rr.OPERATION:oc.trace("calling cli operations with:",n),aY.cliOperations(n).then();break;case Rr.DEV:process.env.DEV_MODE=!0;case Rr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(Kd.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),Kd.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),i=Kd.realpathSync(i),Kd.existsSync(oY.join(i,uy.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),ic().main();break;case Rr.START:jm?iy()(!0).catch(S=>{console.log(S)}):s=ic().launch();break;case Rr.INSTALL:QV()().then(()=>ic().main(!0)).catch(m=>{console.error(m)});break;case Rr.REGISTER:JV().register().then(m=>{console.log(m)}).catch(m=>{console.error(m)});break;case Rr.STOP:tY()().then(()=>{process.exit(0)}).catch(m=>{console.error(m)});break;case Rr.RESTART:bo().restart({}).then().catch(m=>{oc.error(m),console.error(`There was an error restarting HarperDB. ${m}`),process.exit(1)});break;case Rr.VERSION:vhe.printVersion();break;case Rr.UPGRADE:oc.setLogLevel(uy.LOG_LEVELS.INFO),JN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(m=>{oc.error(`Got an error during upgrade ${m}`)});break;case Rr.STATUS:iY()().then().catch(m=>{console.error(m)});break;case Rr.RENEWCERTS:let{generateKeys:E}=Dm();E().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case Rr.COPYDB:let f=process.argv[3],h=process.argv[4];(Rh(),ae(gh)).copyDb(f,h);break;case void 0:jm?iy()().catch(S=>{console.log(S)}):ic().main();break;default:console.warn(`The "${t}" command is not understood.`);case Rr.HELP:console.log(`
110
110
  Usage: harperdb [command]
111
111
 
112
112
  With no command, harperdb will simply run HarperDB (in the foreground)