harperdb 4.2.7 → 4.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +1 -1
  2. package/bin/harperdb.js +57 -63
  3. package/bin/lite.js +18 -26
  4. package/config/yaml/defaultConfig.yaml +2 -0
  5. package/launchServiceScripts/launchInstallNATSServer.js +3 -3
  6. package/launchServiceScripts/launchNatsIngestService.js +17 -21
  7. package/launchServiceScripts/launchNatsReplyService.js +17 -21
  8. package/launchServiceScripts/launchUpdateNodes4-0-0.js +17 -21
  9. package/npm-shrinkwrap.json +631 -983
  10. package/package.json +19 -17
  11. package/resources/DatabaseTransaction.d.ts +4 -2
  12. package/resources/Resource.d.ts +2 -16
  13. package/resources/Table.d.ts +18 -27
  14. package/resources/databases.d.ts +9 -27
  15. package/resources/search.d.ts +6 -21
  16. package/resources/transactionBroadcast.d.ts +1 -1
  17. package/server/Server.d.ts +1 -1
  18. package/server/jobs/jobProcess.js +17 -21
  19. package/server/threads/threadServer.js +18 -26
  20. package/studio/build-local/asset-manifest.json +53 -0
  21. package/studio/build-local/fontawesome/fa-brands-400.eot +0 -0
  22. package/studio/build-local/fontawesome/fa-brands-400.svg +3717 -0
  23. package/studio/build-local/fontawesome/fa-brands-400.ttf +0 -0
  24. package/studio/build-local/fontawesome/fa-brands-400.woff +0 -0
  25. package/studio/build-local/fontawesome/fa-brands-400.woff2 +0 -0
  26. package/studio/build-local/fontawesome/fa-regular-400.eot +0 -0
  27. package/studio/build-local/fontawesome/fa-regular-400.svg +801 -0
  28. package/studio/build-local/fontawesome/fa-regular-400.ttf +0 -0
  29. package/studio/build-local/fontawesome/fa-regular-400.woff +0 -0
  30. package/studio/build-local/fontawesome/fa-regular-400.woff2 +0 -0
  31. package/studio/build-local/fontawesome/fa-solid-900.eot +0 -0
  32. package/studio/build-local/fontawesome/fa-solid-900.svg +5034 -0
  33. package/studio/build-local/fontawesome/fa-solid-900.ttf +0 -0
  34. package/studio/build-local/fontawesome/fa-solid-900.woff +0 -0
  35. package/studio/build-local/fontawesome/fa-solid-900.woff2 +0 -0
  36. package/studio/build-local/fontawesome/fontawesome.css +5 -0
  37. package/studio/build-local/fontawesome/fontawesome.js +5 -0
  38. package/studio/build-local/images/favicon_akamai.png +0 -0
  39. package/studio/build-local/images/favicon_dark.png +0 -0
  40. package/studio/build-local/images/favicon_light.png +0 -0
  41. package/studio/build-local/images/favicon_lumen.png +0 -0
  42. package/studio/build-local/images/favicon_purple.png +0 -0
  43. package/studio/build-local/images/favicon_verizon.png +0 -0
  44. package/studio/build-local/images/logo_circle.png +0 -0
  45. package/studio/build-local/images/logo_manifest.png +0 -0
  46. package/studio/build-local/index.html +1 -0
  47. package/studio/build-local/js/kissmetrics.js +24 -0
  48. package/studio/build-local/js/linkedin.js +33 -0
  49. package/studio/build-local/manifest.json +20 -0
  50. package/studio/build-local/robots.txt +3 -0
  51. package/studio/{running.html → build-local/running.html} +2 -2
  52. package/studio/build-local/static/css/main.038ec116.css +13 -0
  53. package/studio/build-local/static/js/110.ca4244a6.chunk.js +2 -0
  54. package/studio/build-local/static/js/110.ca4244a6.chunk.js.LICENSE.txt +1 -0
  55. package/studio/build-local/static/js/228.302d7db9.chunk.js +1 -0
  56. package/studio/build-local/static/js/287.21477cf9.chunk.js +1 -0
  57. package/studio/build-local/static/js/409.17daa4fe.chunk.js +2 -0
  58. package/studio/build-local/static/js/409.17daa4fe.chunk.js.LICENSE.txt +8 -0
  59. package/studio/build-local/static/js/424.7d57284b.chunk.js +1 -0
  60. package/studio/build-local/static/js/446.5237e847.chunk.js +2 -0
  61. package/studio/build-local/static/js/446.5237e847.chunk.js.LICENSE.txt +13 -0
  62. package/studio/build-local/static/js/662.02ce7b65.chunk.js +1 -0
  63. package/studio/build-local/static/js/718.74e9355d.chunk.js +1 -0
  64. package/studio/build-local/static/js/723.36068040.chunk.js +2 -0
  65. package/studio/build-local/static/js/723.36068040.chunk.js.LICENSE.txt +5 -0
  66. package/studio/build-local/static/js/731.8a941eb3.chunk.js +1 -0
  67. package/studio/build-local/static/js/807.3473ab0a.chunk.js +2 -0
  68. package/studio/build-local/static/js/807.3473ab0a.chunk.js.LICENSE.txt +5 -0
  69. package/studio/build-local/static/js/926.88d6f9ce.chunk.js +1 -0
  70. package/studio/build-local/static/js/browse-csvupload.5e77eb8a.chunk.js +1 -0
  71. package/studio/build-local/static/js/browse-datatable.cd71d518.chunk.js +1 -0
  72. package/studio/build-local/static/js/browse-entitymanager.09237801.chunk.js +1 -0
  73. package/studio/build-local/static/js/browse-jsonviewer.fcccabdc.chunk.js +1 -0
  74. package/studio/build-local/static/js/custom-functions.98af4a5e.chunk.js +1 -0
  75. package/studio/build-local/static/js/instance-charts.f1a1969d.chunk.js +1 -0
  76. package/studio/build-local/static/js/instance-cluster.0dc3ac1b.chunk.js +1 -0
  77. package/studio/build-local/static/js/instance-config.19223fab.chunk.js +1 -0
  78. package/studio/build-local/static/js/instance-query.ed7e59f5.chunk.js +1 -0
  79. package/studio/build-local/static/js/instance-roles.9c3f140d.chunk.js +1 -0
  80. package/studio/build-local/static/js/instance-status.1687cd77.chunk.js +1 -0
  81. package/studio/build-local/static/js/instance-users-datatable.ced7813f.chunk.js +1 -0
  82. package/studio/build-local/static/js/instance-users-edit.436e0908.chunk.js +1 -0
  83. package/studio/build-local/static/js/instance-users.12c0c117.chunk.js +1 -0
  84. package/studio/build-local/static/js/instance.b8863754.chunk.js +1 -0
  85. package/studio/build-local/static/js/instances.5bd051eb.chunk.js +1 -0
  86. package/studio/build-local/static/js/main.46136087.js +2 -0
  87. package/studio/{hdb.js.LICENSE.txt → build-local/static/js/main.46136087.js.LICENSE.txt} +41 -35
  88. package/studio/build-local/static/js/offline-app.b3ad12ac.chunk.js +1 -0
  89. package/studio/build-local/static/js/online-app.2ac03c15.chunk.js +1 -0
  90. package/studio/build-local/static/js/organization-billing.a8014c6f.chunk.js +1 -0
  91. package/studio/build-local/static/js/organization-users.523136d9.chunk.js +1 -0
  92. package/studio/build-local/static/js/organization.0abc89ca.chunk.js +1 -0
  93. package/studio/build-local/static/js/organizations.e536b86f.chunk.js +1 -0
  94. package/studio/build-local/static/js/profile.92f9be59.chunk.js +1 -0
  95. package/studio/build-local/static/js/resetPassword.8fdfba77.chunk.js +1 -0
  96. package/studio/build-local/static/js/roles-jsonviewer.5fe72bc9.chunk.js +1 -0
  97. package/studio/build-local/static/js/signIn.97bded2f.chunk.js +1 -0
  98. package/studio/build-local/static/js/signUp.482f9fe4.chunk.js +1 -0
  99. package/studio/build-local/static/js/structure-reloader.9322abd3.chunk.js +1 -0
  100. package/studio/build-local/static/js/topnav.5e7913a5.chunk.js +1 -0
  101. package/studio/build-local/static/js/updatePassword.e23019c7.chunk.js +1 -0
  102. package/utility/scripts/restartHdb.js +17 -21
  103. package/dependencies/nats-server.zip +0 -0
  104. package/studio/fonts/FontAwesome.otf +0 -0
  105. package/studio/fonts/fontawesome-webfont.eot +0 -0
  106. package/studio/fonts/fontawesome-webfont.svg +0 -2671
  107. package/studio/fonts/fontawesome-webfont.ttf +0 -0
  108. package/studio/fonts/fontawesome-webfont.woff +0 -0
  109. package/studio/fonts/fontawesome-webfont.woff2 +0 -0
  110. package/studio/hdb.css +0 -4
  111. package/studio/hdb.js +0 -2
  112. package/studio/images/logo.png +0 -0
  113. package/studio/index.html +0 -1
  114. package/studio/processCSV.worker.js +0 -1
package/bin/harperdb.js CHANGED
@@ -1,112 +1,104 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var Ak=Object.create;var Zc=Object.defineProperty;var Ok=Object.getOwnPropertyDescriptor;var Nk=Object.getOwnPropertyNames;var bk=Object.getPrototypeOf,yk=Object.prototype.hasOwnProperty;var a=(e,t)=>Zc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Zc(e,r,{get:t[r],enumerable:!0})},LN=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Nk(t))!yk.call(e,n)&&n!==r&&Zc(e,n,{get:()=>t[n],enumerable:!(s=Ok(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?Ak(bk(e)):{},LN(t||!e||!e.__esModule?Zc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>LN(Zc({},"__esModule",{value:!0}),e);var MN=T((Mde,PN)=>{var Ik=require("fast-glob"),{statSync:vm,existsSync:Bm,readFileSync:wk,writeFileSync:Ck}=require("fs"),{spawnSync:Lk,spawn:Dk,execFileSync:Pde}=require("child_process"),{isMainThread:Pk}=require("worker_threads"),{join:yi,relative:DN}=require("path"),{PACKAGE_ROOT:Is}=R(),{tmpdir:Mk,platform:Uk}=require("os");require("source-map-support").install();var vk=["resources","server","dataLayer","components"],eu="ts-build",Hm,Bk=__filename.endsWith("tsBuild.js");if(Bk){if(Pk){let r;try{vm(yi(Is,eu)),r=!0}catch{}if(r)for(let s of Ik.sync(vk.map(n=>n+"/**/*.ts"),{cwd:Is})){let n=0,i=0;try{n=vm(yi(Is,s)).mtimeMs-5e3,i=vm(yi(Is,eu,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Hm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Hm=!0;if(Hm){let s=yi(Is,"node_modules/.bin/tsc");Uk()==="win32"&&(s+=".cmd");let n=Lk(s,{cwd:Is});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=yi(Mk(),"harperdb-tsc.pid"),o;if(Bm(i))try{process.kill(+wk(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Dk(s,["--watch"],{cwd:Is,detached:!0,stdio:"ignore"});Ck(i,c.pid.toString()),c.unref()}}}}let e=PN.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Is)&&!s[0].includes("node_modules")){let i=DN(Is,s[0]),o;i.startsWith(eu)?o=yi(Is,DN(eu,i)):o=yi(Is,eu,i);let c=yi(o,r),u=c+".js";if(Bm(u))return u;if(c.includes(".")&&Bm(c))return c}return t(r,s,n)}}});var R=T((Bde,WN)=>{"use strict";var ts=require("path"),Hk=require("fs"),{relative:Ude,join:vde}=ts,{existsSync:qk}=Hk;function Gk(){let e=__dirname;for(;!qk(ts.join(e,"package.json"));){let t=ts.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Gk,"getHDBPackageRoot");var Ii=Gk(),UN="js",Q_=UN,Fk="harperdb-config.yaml",xk="defaultConfig.yaml",kk="hdb",vN=`harperdb.${Q_}`,BN=`customFunctionsServer.${Q_}`,$k=`restartHdb.${Q_}`,Gm="HarperDB",W_="Custom Functions",j_="Clustering Hub",z_="Clustering Leaf",Vk="Clustering Ingest Service",Yk="Clustering Reply Service",Kk="foreground.pid",Wk="hdb.pid",Qk="data",jk={HDB:Gm,CLUSTERING_HUB:j_,CLUSTERING_LEAF:z_,CLUSTERING_INGEST_SERVICE:Vk,CLUSTERING_REPLY_SERVICE:Yk,CUSTOM_FUNCTIONS:W_,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"},zk={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Jk={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Xk={harperdb:Gm,"clustering hub":j_,"clustering leaf":z_,"custom functions":W_,custom_functions:W_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Zk={CLUSTERING_HUB_PROC_DESCRIPTOR:j_,CLUSTERING_LEAF_PROC_DESCRIPTOR:z_},qm={HDB:ts.join(Ii,"server/harperdb"),CUSTOM_FUNCTIONS:ts.join(Ii,"server/customFunctions"),CLUSTERING_HUB:ts.join(Ii,"server/nats"),CLUSTERING_LEAF:ts.join(Ii,"server/nats")},e$={HDB:ts.join(qm.HDB,vN),CUSTOM_FUNCTIONS:ts.join(qm.CUSTOM_FUNCTIONS,BN)},t$={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:ts.join(Ii,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ts.join(Ii,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ts.join(Ii,"launchServiceScripts/launchUpdateNodes4-0-0.js")},r$={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},HN="support@harperdb.io",s$="customer-success@harperdb.io",qN=1,n$=4141,GN="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",i$="https://www.harperdb.io/product",o$=`For support, please submit a request at ${GN} or contact ${HN}`,FN=`For license support, please contact ${s$}`,a$="None of the specified records were found.",c$="hash attribute not found",u$=`Your current license only supports ${qN} role. ${FN}`,l$="Your current license only supports 3 connections to a node.",_$="127.0.0.1",d$=1,f$=/^\.$/,E$=/^\.\.$/,h$="U+002E",m$=/\//g,p$="U+002F",S$=/U\+002F/g,T$=/^U\+002E$/,g$=/^U\+002EU\+002E$/,R$="d",A$=999999,O$="*",N$="--max-old-space-size=",b$="system",y$="__hdb_hash",I$=".harperdb",w$=".hdb",C$="keys",L$="hdb_boot_properties.file",D$=".updateConfig.json",P$="SIGTSTP",M$=24,U$=6e4,v$=448,B$="blob",H$="trash",q$="database",G$="schema",F$="transactions",x$=".count",k$="id",$$="PROCESS_NAME",xN={SETTINGS_PATH_KEY:"settings_path"},kN=require("lodash"),V$={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Y$={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},K$={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},W$={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"},Q$={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"},Dr="hdb_internal:",j$={CREATE_SCHEMA:Dr+"create_schema",CREATE_TABLE:Dr+"create_table",CREATE_ATTRIBUTE:Dr+"create_attribute",ADD_USER:Dr+"add_user",ALTER_USER:Dr+"alter_user",DROP_USER:Dr+"drop_user",HDB_NODES:Dr+"hdb_nodes",HDB_USERS:Dr+"hdb_users",HDB_WORKERS:Dr+"hdb_workers",CATCHUP:Dr+"catchup",SCHEMA_CATCHUP:Dr+"schema_catchup",WORKER_ROOM:Dr+"cluster_workers"},z$={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"},J$="060493.ks",X$=".license",Z$={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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"},eV={CSV:".csv",JSON:".json"},tV={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},rV={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},tu={};tu[J.INSERT]=J.INSERT;tu[J.UPDATE]=J.UPDATE;tu[J.UPSERT]=J.UPSERT;tu[J.DELETE]=J.DELETE;var we=Object.create(null);we[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;we[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;we[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;we[J.READ_LOG]=J.READ_LOG;we[J.ADD_NODE]=J.ADD_NODE;we[J.LIST_USERS]=J.LIST_USERS;we[J.LIST_ROLES]=J.LIST_ROLES;we[J.USER_INFO]=J.USER_INFO;we[J.SQL]=J.SQL;we[J.GET_JOB]=J.GET_JOB;we[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;we[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;we[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;we[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;we[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;we[J.REMOVE_NODE]=J.REMOVE_NODE;we[J.RESTART]=J.RESTART;we[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;we[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;we[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;we[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;we[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;we[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;we[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;we[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;we[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var sV={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},nV={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},$N={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"},iV=kN.invert($N),oV={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"},y={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},VN={settings_path:xN.SETTINGS_PATH_KEY,hdb_root_key:y.ROOTPATH,hdb_root:y.ROOTPATH,rootpath:y.ROOTPATH,server_port_key:y.OPERATIONSAPI_NETWORK_PORT,server_port:y.OPERATIONSAPI_NETWORK_PORT,cert_key:y.TLS_CERTIFICATE,certificate:y.TLS_CERTIFICATE,private_key_key:y.TLS_PRIVATEKEY,private_key:y.TLS_PRIVATEKEY,http_secure_enabled_key:y.OPERATIONSAPI_NETWORK_HTTPS,https_on:y.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:y.OPERATIONSAPI_NETWORK_CORS,cors_on:y.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:y.LOGGING_LEVEL,log_level:y.LOGGING_LEVEL,log_path_key:y.LOGGING_ROOT,log_path:y.LOGGING_ROOT,clustering_node_name_key:y.CLUSTERING_NODENAME,node_name:y.CLUSTERING_NODENAME,clustering_enabled_key:y.CLUSTERING_ENABLED,clustering:y.CLUSTERING_ENABLED,max_http_threads:y.THREADS,max_hdb_processes:y.THREADS,server_timeout_key:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:y.LOGGING_AUDITLOG,disable_transaction_log:y.LOGGING_AUDITLOG,operation_token_timeout_key:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:y.HTTP_PORT,custom_functions_port:y.HTTP_PORT,custom_functions_directory_key:y.COMPONENTSROOT,custom_functions_directory:y.COMPONENTSROOT,max_custom_function_processes:y.THREADS,log_to_file:y.LOGGING_FILE,log_to_stdstreams:y.LOGGING_STDSTREAMS,local_studio_on:y.LOCALSTUDIO_ENABLED,clustering_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:y.CLUSTERING_USER,clustering_enabled:y.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:y.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:y.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:y.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:y.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:y.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:y.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:y.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:y.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:y.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:y.CLUSTERING_NODENAME,clustering_tls_certificate:y.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:y.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:y.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:y.CLUSTERING_TLS_INSECURE,clustering_tls_verify:y.CLUSTERING_TLS_VERIFY,clustering_loglevel:y.CLUSTERING_LOGLEVEL,clustering_republishmessages:y.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:y.CLUSTERING_DATABASELEVEL,customfunctions_network_port:y.HTTP_PORT,customfunctions_tls_certificate:y.TLS_CERTIFICATE,customfunctions_network_cors:y.HTTP_CORS,customfunctions_network_corsaccesslist:y.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:y.HTTP_HEADERSTIMEOUT,customfunctions_network_https:y.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:y.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:y.HTTP_TIMEOUT,http_threads:y.THREADS,threads:y.THREADS,http_session_affinity:y.HTTP_SESSIONAFFINITY,http_compressionthreshold:y.HTTP_COMPRESSIONTHRESHOLD,http_cors:y.HTTP_CORS,http_corsaccesslist:y.HTTP_CORSACCESSLIST,http_headerstimeout:y.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,http_timeout:y.HTTP_TIMEOUT,http_port:y.HTTP_PORT,http_secureport:y.HTTP_SECUREPORT,customfunctions_processes:y.THREADS,customfunctions_root:y.COMPONENTSROOT,localstudio_enabled:y.LOCALSTUDIO_ENABLED,logging_file:y.LOGGING_FILE,logging_level:y.LOGGING_LEVEL,logging_root:y.LOGGING_ROOT,logging_rotation_enabled:y.LOGGING_ROTATION_ENABLED,logging_rotation_compress:y.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:y.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:y.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:y.LOGGING_ROTATION_PATH,logging_stdstreams:y.LOGGING_STDSTREAMS,logging_auditlog:y.LOGGING_AUDITLOG,logging_auditretention:y.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:y.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:y.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:y.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:y.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:y.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:y.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:y.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:y.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:y.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:y.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:y.ROOTPATH,databases:y.DATABASES,storage_path:y.STORAGE_PATH,ignorescripts:y.IGNORE_SCRIPTS,mqtt_network_port:y.MQTT_NETWORK_PORT,mqtt_websocket:y.MQTT_WEBSOCKET,mqtt_network_secureport:y.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:y.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:y.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:y.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:y.AUTHENTICATION_CACHETTL,authentication_enablesessions:y.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:y.COMPONENTSROOT,tls_certificate:y.TLS_CERTIFICATE,tls_privatekey:y.TLS_PRIVATEKEY,tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY};for(let e in y){let t=y[e];VN[t.toLowerCase()]=t}var aV={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},cV={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},uV={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"},lV={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},_V={VERSION_DEFAULT:"2.2.0"},dV={DEVELOPMENT:8192,DEFAULT:512},fV={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"},EV={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"},hV={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},YN={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},mV=Symbol("metadata"),pV="__clustering__",SV=Object.values(YN),TV=15984864e5,KN={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},gV=kN.invert(KN),RV={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"},AV=111,OV=`\r
3
- `,NV={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},bV=["*","%"],yV="unauthorized_access",IV="func_val",wV={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},CV={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},LV={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"},DV={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},PV={HTTP:"http"},MV={STOPPED:"stopped",ONLINE:"online"},UV="3.x.x",vV={SUCCESS:"success",FAILURE:"failure"},BV={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};WN.exports={LOCAL_HARPERDB_OPERATIONS:we,HDB_SUPPORT_ADDRESS:HN,HDB_SUPPORT_URL:GN,HDB_PRICING_URL:i$,SUPPORT_HELP_MSG:o$,LICENSE_HELP_MSG:FN,HDB_PROC_NAME:vN,HDB_PROC_DESCRIPTOR:Gm,CLUSTERING_LEAF_PROC_DESCRIPTOR:z_,CLUSTERING_HUB_PROC_DESCRIPTOR:j_,SYSTEM_SCHEMA_NAME:b$,HASH_FOLDER_NAME:y$,HDB_HOME_DIR_NAME:I$,UPDATE_FILE_NAME:D$,LICENSE_KEY_DIR_NAME:C$,BOOT_PROPS_FILE_NAME:L$,JOB_TYPE_ENUM:cV,JOB_STATUS_ENUM:Z$,SYSTEM_TABLE_NAMES:W$,SYSTEM_TABLE_HASH_ATTRIBUTES:Q$,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:eV,S3_BUCKET_AUTH_KEYS:tV,VALID_SQL_OPS_ENUM:rV,GEO_CONVERSION_ENUM:nV,HDB_SETTINGS_NAMES:$N,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:iV,SERVICE_ACTIONS_ENUM:sV,CLUSTER_MESSAGE_TYPE_ENUM:uV,CLUSTER_CONNECTION_DIRECTION_ENUM:lV,CLUSTER_EVENTS_DEFS_ENUM:fV,PERIOD_REGEX:f$,DOUBLE_PERIOD_REGEX:E$,UNICODE_PERIOD:h$,FORWARD_SLASH_REGEX:m$,UNICODE_FORWARD_SLASH:p$,ESCAPED_FORWARD_SLASH_REGEX:S$,ESCAPED_PERIOD_REGEX:T$,ESCAPED_DOUBLE_PERIOD_REGEX:g$,REG_KEY_FILE_NAME:J$,RESTART_TIMEOUT_MS:U$,HDB_FILE_PERMISSIONS:v$,DATABASES_DIR_NAME:q$,LEGACY_DATABASES_DIR_NAME:G$,TRANSACTIONS_DIR_NAME:F$,LIMIT_COUNT_NAME:x$,ID_ATTRIBUTE_STRING:k$,INSERT_MODULE_ENUM:Y$,UPGRADE_JSON_FIELD_NAMES_ENUM:K$,RESTART_CODE:P$,RESTART_CODE_NUM:M$,CLUSTER_OPERATIONS:tu,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:z$,HDB_INTERNAL_SC_CHANNEL_PREFIX:Dr,INTERNAL_SC_CHANNELS:j$,CLUSTERING_MESSAGE_TYPES:RV,HDB_FILE_SUFFIX:w$,BLOB_FOLDER_NAME:B$,HDB_TRASH_DIR:H$,ORIGINATOR_SET_VALUE:AV,LICENSE_VALUES:_V,RAM_ALLOCATION_ENUM:dV,TIME_STAMP_NAMES_ENUM:YN,TIME_STAMP_NAMES:SV,PERMS_UPDATE_RELEASE_TIMESTAMP:TV,SEARCH_NOT_FOUND_MESSAGE:a$,SEARCH_ATTRIBUTE_NOT_FOUND:c$,LICENSE_ROLE_DENIED_RESPONSE:u$,LICENSE_MAX_CONNS_REACHED:l$,BASIC_LICENSE_MAX_NON_CU_ROLES:qN,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:n$,VALUE_SEARCH_COMPARATORS:KN,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:gV,LICENSE_FILE_NAME:X$,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:EV,NEW_LINE:OV,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:d$,MOMENT_DAYS_TAG:R$,API_TURNOVER_SEC:A$,LOOPBACK:_$,CODE_EXTENSION:Q_,WILDCARD_SEARCH_VALUE:O$,NODE_ERROR_CODES:hV,JAVASCRIPT_EXTENSION:UN,PERMS_CRUD_ENUM:NV,UNAUTHORIZED_PERMISSION_NAME:yV,SEARCH_WILDCARDS:bV,FUNC_VAL:IV,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:wV,JWT_ENUM:CV,CLUSTERING_FLAG:pV,ITC_EVENT_TYPES:LV,CUSTOM_FUNCTION_PROC_NAME:BN,CUSTOM_FUNCTION_PROC_DESCRIPTOR:W_,SERVICES:DV,THREAD_TYPES:PV,MEM_SETTING_KEY:N$,HDB_RESTART_SCRIPT:$k,PROCESS_DESCRIPTORS:jk,SERVICE_SERVERS:e$,SERVICE_SERVERS_CWD:qm,PROCESS_DESCRIPTORS_VALIDATE:Xk,LAUNCH_SERVICE_SCRIPTS:t$,LOG_LEVELS:Jk,PROCESS_NAME_ENV_PROP:$$,LOG_NAMES:zk,PM2_PROCESS_STATUSES:MV,CONFIG_PARAM_MAP:VN,CONFIG_PARAMS:y,HDB_CONFIG_FILE:Fk,HDB_DEFAULT_CONFIG_FILE:xk,ROLE_TYPES_ENUM:r$,BOOT_PROP_PARAMS:xN,INSTALL_PROMPTS:V$,HDB_ROOT_DIR_NAME:kk,CLUSTERING_PROCESSES:Zk,FOREGROUND_PID_FILE:Kk,PACKAGE_ROOT:Ii,PRE_4_0_0_VERSION:UV,DATABASES_PARAM_CONFIG:aV,METADATA_PROPERTY:mV,AUTH_AUDIT_STATUS:vV,AUTH_AUDIT_TYPES:BV,HDB_PID_FILE:Wk,DEFAULT_DATABASE_NAME:Qk,LEGACY_CONFIG_PARAMS:oV};MN()});var po=T((qde,zN)=>{"use strict";var QN=require("minimist");zN.exports=HV;function HV(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=jN(process.env),s=jN(QN(process.argv))):(r=process.env,s=QN(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(HV,"assignCMDENVVariables");function jN(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(jN,"objKeysToLowerCase")});var U=T((Fde,Km)=>{"use strict";var So=require("fs-extra"),{workerData:qV,threadId:GV}=require("worker_threads"),qn=require("path"),ZN=require("yaml"),eb=require("properties-reader"),St=R(),JN=po(),FV=require("os"),{PACKAGE_ROOT:xm}=R(),{_assignPackageExport:xV}=require("../index"),su={};for(let e in console)su[e]||(su[e]=console[e]);var nr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},tb={STDOUT:"stdOut",STDERR:"stdErr"},kV=qn.join(xm,"logs"),$V=qn.join(xm,"config/yaml/",St.HDB_DEFAULT_CONFIG_FILE),VV=1e4,Hn,sn,sr,J_,X_,nu,Ra,ru;ru===void 0&&rb();Km.exports={notify:ib,fatal:ob,error:iu,warn:Ym,info:Z_,debug:Vm,trace:$m,setLogLevel:JV,log_level:sr,loggerWithTag:YV,suppressLogging:KV,initLogSettings:rb,setupConsoleLogging:sb,logCustomLevel:jV,closeLogFile:km,getLogFilePath:()=>nu,OUTPUTS:tb,AuthAuditLog:eY};xV("logger",Km.exports);function rb(e=!1){try{if(ru===void 0||e){km();let t=zV(),r=JN(["ROOTPATH"]);try{ru=eb(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!So.pathExistsSync(qn.join(r.ROOTPATH,St.HDB_CONFIG_FILE)))throw s}({level:sr,config_log_path:X_,to_file:Hn,to_stream:sn}=XV(r.ROOTPATH?qn.join(r.ROOTPATH,St.HDB_CONFIG_FILE):ru.get("settings_path"))),J_=St.LOG_NAMES.HDB,nu=qn.join(X_,J_)}}catch(t){if(ru=void 0,t.code===St.NODE_ERROR_CODES.ENOENT){let r=JN(Object.keys(St.CONFIG_PARAM_MAP),!0);for(let o in r){let c=St.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===St.CONFIG_PARAMS.LOGGING_LEVEL){sr=u;continue}if(c===St.CONFIG_PARAMS.LOGGING_STDSTREAMS){sn=u;continue}c===St.CONFIG_PARAMS.LOGGING_FILE&&(Hn=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=ZV();Hn=Hn===void 0?n:Hn,Hn=XN(Hn),sn=sn===void 0?i:sn,sn=XN(sn),sr=sr===void 0?s:sr,X_=kV,J_=St.LOG_NAMES.INSTALL,nu=qn.join(X_,J_);return}throw iu("Error initializing log settings"),iu(t),t}process.env.DEV_MODE&&(sn=!0),sb()}a(rb,"initLogSettings");var Fm=!0;function sb(){ga("error",iu),ga("warn",Ym),ga("log",Z_),ga("info",Z_),ga("debug",Vm),ga("trace",$m)}a(sb,"setupConsoleLogging");function ga(e,t){console[e]=function(...r){if(Fm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return su[e](...r)}}a(ga,"logConsole");function YV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(ib),fatal:r(ob),error:r(iu),warn:r(Ym),info:r(Z_),debug:r(Vm),trace:r($m)};function r(s){return function(...n){return s(t,...n)}}}a(YV,"loggerWithTag");function KV(e){try{Fm=!1,e()}finally{Fm=!0}}a(KV,"suppressLogging");var WV=qV?.name?.replace(/ /g,"-")||"main";function Gn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||WV+"/"+GV);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
4
- `}a(Gn,"createLogRecord");function ou(e){Hn&&nb(e),sn&&process.stdout.write(e)}a(ou,"logStdOut");function ed(e){Hn&&nb(e),sn&&process.stderr.write(e)}a(ed,"logStdErr");function nb(e){QV(),Ra?So.appendFileSync(Ra,e):su.log(e)}a(nb,"logToFile");function km(){try{So.closeSync(Ra)}catch{}Ra=null}a(km,"closeLogFile");function QV(){if(!Ra){try{if(!nu)debugger;Ra=So.openSync(nu,"a")}catch(e){su.error(e)}setTimeout(()=>{km()},VV).unref()}}a(QV,"openLogFile");function Z_(...e){nr[sr]<=nr.info&&ou(Gn("info",e))}a(Z_,"info");function $m(...e){nr[sr]<=nr.trace&&ou(Gn("trace",e))}a($m,"trace");function iu(...e){nr[sr]<=nr.error&&ed(Gn("error",e))}a(iu,"error");function Vm(...e){nr[sr]<=nr.debug&&ou(Gn("debug",e))}a(Vm,"debug");function ib(...e){nr[sr]<=nr.notify&&ou(Gn("notify",e))}a(ib,"notify");function ob(...e){nr[sr]<=nr.fatal&&ed(Gn("fatal",e))}a(ob,"fatal");function Ym(...e){nr[sr]<=nr.warn&&ed(Gn("warn",e))}a(Ym,"warn");function jV(e,t,...r){t===tb.STDERR?ed(Gn(e,r)):ou(Gn(e,r))}a(jV,"logCustomLevel");function zV(){let e;try{e=FV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qn.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return So.existsSync(t)||(t=qn.join(xm,"utility/hdb_boot_properties.file")),t}a(zV,"getPropsFilePath");function JV(e){sr=e}a(JV,"setLogLevel");function XN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(XN,"autoCastBoolean");function XV(e){try{if(e.includes("config/settings.js")){let o=eb(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qn.dirname(o.get(St.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=ZN.parseDocument(So.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===St.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(XV,"getLogConfig");function ZV(){try{let e=ZN.parseDocument(So.readFileSync($V,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(ZV,"getDefaultConfig");function eY(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(eY,"AuthAuditLog")});var To=T((kde,tY)=>{tY.exports={name:"harperdb",version:"4.2.7",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var go=T(($de,ab)=>{"use strict";ab.exports={version:rY,printVersion:sY};var td=To();function rY(){if(td)return td.version}a(rY,"version");function sY(){td&&console.log(`HarperDB Version ${td.version}`)}a(sY,"printVersion")});var lb=T((Yde,ub)=>{"use strict";var cb=require("semver/functions/major"),nY=To(),Wm=process.versions&&process.versions.node?process.versions.node:void 0;ub.exports=iY;function iY(){let e=nY.engines["minimum-node"];if(Wm&&cb(Wm)<cb(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Wm}. Please install a version of Node.js that is withing the defined range.`}}a(iY,"checkNodeVersion")});var Ro={};Fe(Ro,{server:()=>Tt});var _b,Tt,Pr=Re(()=>{_b=require("../index"),Tt={};(0,_b._assignPackageExport)("server",Tt)});var Qm=T((Wde,db)=>{"use strict";var oY=require("util"),aY=require("path"),cY=require("child_process"),uY=oY.promisify(cY.execFile),lY=1e3*1e3*10;db.exports={findPs:_Y};async function _Y(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await uY("ps",["wwxo",`pid,${r}`],{maxBuffer:lY});for(let n of s.trim().split(`
5
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:aY.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(_Y,"findPs")});var Ke=T((jde,Eb)=>{"use strict";var dY="__dbis__",fY="__txns__",EY="__environment_name__",hY="__dbi_defintion__",mY={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"},pY=["__createdtime__","__updatedtime__"],SY="\uFFFF",fb={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},TY=Object.values(fb);Eb.exports={AUDIT_STORE_NAME:fY,INTERNAL_DBIS_NAME:dY,DBI_DEFINITION_NAME:hY,SEARCH_TYPES:mY,TIMESTAMP_NAMES:pY,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:EY,TRANSACTIONS_DBI_NAMES_ENUM:fb,TRANSACTIONS_DBIS:TY,OVERFLOW_MARKER:SY}});var Mr=T((zde,Ob)=>{"use strict";var hb=R(),mb=Ke(),pb={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},Sb=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Tb={500:Sb("There was an error processing your request."),400:"Invalid request"},gY=Tb[pb.INTERNAL_SERVER_ERROR],RY={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.`},AY={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},OY={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"},NY={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 ${mb.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${mb.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"},bY={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${hb.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 ${hb.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"},gb={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"},yY={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."},IY={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`},wY={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"},CY={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},LY={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`},Rb={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.`},Ab={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}`},DY={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."},PY={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},MY={...gb,...OY,...RY,...yY,...IY,...wY,...CY,...LY,...bY,...Rb,...Ab,...DY,...PY,...AY};Ob.exports={CHECK_LOGS_WRAPPER:Sb,HDB_ERROR_MSGS:MY,DEFAULT_ERROR_MSGS:Tb,DEFAULT_ERROR_RESP:gY,HTTP_STATUS_CODES:pb,LMDB_ERRORS_ENUM:NY,AUTHENTICATION_ERROR_MSGS:gb,VALIDATION_ERROR_MSGS:Rb,ITC_ERRORS:Ab}});var Z=T((Xde,yb)=>{"use strict";var Aa=Mr(),UY=U(),vY=R(),rd=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Nb),this.statusCode=s||Aa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Aa.DEFAULT_ERROR_MSGS[s]?Aa.DEFAULT_ERROR_MSGS[s]:Aa.DEFAULT_ERROR_MSGS[Aa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&UY[n](i)}},jm=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},zm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Nb(e,t,r,s=vY.LOG_LEVELS.ERROR,n=null,i=!1){if(bb(e))return e;let o=new rd(e,t,r,s,n);return i&&delete o.stack,o}a(Nb,"handleHDBError");function bb(e){return e.__proto__.constructor.name===rd.name}a(bb,"isHDBError");yb.exports={isHDBError:bb,handleHDBError:Nb,ClientError:jm,ServerError:zm,hdb_errors:Aa}});var He=T((efe,Mb)=>{"use strict";var _u=R(),BY=G(),ir=j(),du=require("path"),HY=require("minimist"),Ib=require("fs-extra"),wb=require("lodash");ir.initSync();var{CONFIG_PARAMS:wi,DATABASES_PARAM_CONFIG:au,SYSTEM_SCHEMA_NAME:sd}=_u,cu,uu,lu;function Cb(){if(cu!==void 0)return cu;if(ir.getHdbBasePath()!==void 0)return cu=ir.get(wi.STORAGE_PATH)||du.join(ir.getHdbBasePath(),_u.DATABASES_DIR_NAME),cu}a(Cb,"getBaseSchemaPath");function Lb(){if(uu!==void 0)return uu;if(ir.getHdbBasePath()!==void 0)return uu=Pb(sd),uu}a(Lb,"getSystemSchemaPath");function Db(){if(lu!==void 0)return lu;if(ir.getHdbBasePath()!==void 0)return lu=ir.get(_u.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||du.join(ir.getHdbBasePath(),_u.TRANSACTIONS_DIR_NAME),lu}a(Db,"getTransactionAuditStoreBasePath");function qY(e,t){let r=ir.get(wi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||du.join(Db(),e.toString())}a(qY,"getTransactionAuditStorePath");function Pb(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(_u.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||du.join(Cb(),e)}a(Pb,"getSchemaPath");function GY(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,HY(process.argv));let s=r[wi.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!BY.isObject(s))throw o;i=s}for(let o of i){let c=o[sd];if(!c)continue;let u=ir.get(wi.DATABASES);u=u??{};let _=c?.tables?.[t]?.[au.PATH];if(_)return wb.set(u,[sd,au.TABLES,t,au.PATH],_),ir.setProperty(wi.DATABASES,u),_;let l=c?.[au.PATH];if(l)return wb.set(u,[sd,au.PATH],l),ir.setProperty(wi.DATABASES,u),l}}let n=r[wi.STORAGE_PATH.toUpperCase()];if(n){if(!Ib.pathExistsSync(n))throw new Error(n+" does not exist");let i=du.join(n,e);return Ib.mkdirsSync(i),ir.setProperty(wi.STORAGE_PATH,n),i}return Lb()}a(GY,"initSystemSchemaPaths");function FY(){cu=void 0,uu=void 0,lu=void 0}a(FY,"resetPaths");Mb.exports={getBaseSchemaPath:Cb,getSystemSchemaPath:Lb,getTransactionAuditStorePath:qY,getTransactionAuditStoreBasePath:Db,getSchemaPath:Pb,initSystemSchemaPaths:GY,resetPaths:FY}});var or=T((nfe,qb)=>{"use strict";var xY=Mr().LMDB_ERRORS_ENUM,rfe=require("lmdb"),kY=Ke(),sfe=require("buffer").Buffer,{OVERFLOW_MARKER:Ub,MAX_SEARCH_KEY_LENGTH:nd}=kY,vb=["number","string","symbol","boolean","bigint"];function $Y(e){if(e=e?.primaryStore||e,!e)throw new Error(xY.ENV_REQUIRED)}a($Y,"validateEnv");function VY(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(VY,"stringifyData");function YY(e){return e instanceof Date?e.valueOf():e}a(YY,"convertKeyValueToWrite");function KY(e){if(e==null)return;if(vb.includes(typeof e))return e.length>nd?[e.slice(0,nd)+Ub]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(vb.includes(typeof n))n.length>nd?t.push(n.slice(0,nd)+Ub):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(KY,"getIndexedValues");var id=0,Bb=0;function Hb(){Bb=Date.now()-performance.now()}a(Hb,"adjustStartTime");Hb();var WY=6e4;setInterval(Hb,WY).unref();function QY(){let e=performance.now()+Bb;return e>id?(id=e,e):(id+=488e-6,id)}a(QY,"getNextMonotonicTime");qb.exports={validateEnv:$Y,stringifyData:VY,convertKeyValueToWrite:YY,getNextMonotonicTime:QY,getIndexedValues:KY}});var Gb,ws,Jm,fu=Re(()=>{Gb=require("events"),ws=class extends Gb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Jm;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Jm=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function rs(e){return e[Kt]||(e[Kt]=Object.create(null))}function ud(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a string, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a string, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a number, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new Cs.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new Cs.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a boolean, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new Cs.ClientError(`${c} must be a Date, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){rs(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be an object, attempt to assign ${l}`);rs(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Kt];if(l&&c in l)return l[c];let d=this[Ae]?.[c];if(d&&typeof d=="object"){let f=Fb(d,o);if(f)return l||(l=this[Kt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Kt];return u?.[o]!==void 0?u[o]:this[Ae]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Cs.ClientError("Can not add a property to a sealed table schema");rs(this)[o]=c}),i("deleteProperty",function(o){rs(this)[o]=void 0}),i("toJSON",function(){let o=this[Kt],c;for(let _ in o)c||(c=Object.assign({},this[Ae])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ae])),Object.assign(c,this)),c||this[Ae]}),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 Fb(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Ae]=n}},ud(r,t)),new r(e)):new od(e);case Array:let s=new cd(e.length);s[Ae]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Fb(o,t?.elements)),s[n]=o}return s}}function ld(e){let t=e[Kt],r;for(let n in t){r||(r=Object.assign({},e[Ae]));let i=t[n];i&&typeof i=="object"&&(i=ld(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ae])),Object.assign(r,e)),r||e[Ae]}function Eu(e){let t;if(e[Ae]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Eu(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Kt];for(let s in r){t||(t=Object.assign({},e[Ae]));let n=r[s];n&&typeof n=="object"&&(n=Eu(n)),t[s]=n}return t?Object.freeze(t):e[Ae]||(e.buffer?e:Object.freeze(e))}function ad(e){let t=e[Ae];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ao]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Ae]===n){if(ad(i))return!0}else return!0}}else{let r=e[Kt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Ae]===i){if(ad(n))return!0}else return!0}else return!0}}return!1}var Cs,Kt,od,Ao,cd,_d=Re(()=>{Ls();Cs=D(Z()),Kt=Symbol("own-data");a(rs,"getChanges");a(ud,"assignTrackedAccessors");a(Fb,"trackObject");od=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ae]=t}};ud(od,{});a(ld,"collapseData");a(Eu,"deepFreeze");a(ad,"hasChanges");Ao=Symbol.for("has-array-changes"),cd=class extends Array{static{a(this,"TrackedArray")}[Ao];constructor(t){super(t)}splice(...t){return this[Ao]=!0,super.splice(...t)}push(...t){return this[Ao]=!0,super.push(...t)}pop(){return this[Ao]=!0,super.pop()}unshift(...t){return this[Ao]=!0,super.unshift(...t)}shift(){return this[Ao]=!0,super.shift()}};cd.prototype.constructor=Array});function XY(){JY=setInterval(function(){for(let e of Xm)if(e.stale){let t=e[Se]?.url;xb.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},zY).unref()}var Zm,xb,jY,Xm,Oo,dd,zY,JY,ep=Re(()=>{Zm=D(or()),xb=D(U());Ls();jY=100,Xm=new Set,Oo=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),Xm.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(Xm.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){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,Zm.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<jY>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},dd=class extends Oo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Zm.getNextMonotonicTime)())}getReadTxn(){}},zY=3e4;a(XY,"startMonitoringTxns");XY()});function We(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new Oo;e.timestamp&&(s.timestamp=e.timestamp),s[Se]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var kb,No=Re(()=>{kb=require("../index");Ls();ep();a(We,"transaction");(0,kb._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function rp(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new Oa.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(Yb[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=on.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case It.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new Oa.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new Oa.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=sp(e);if(!S)throw new Oa.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:g})=>new Promise((N,V)=>setImmediate(()=>{try{N(g&&S(g)?A:Vb.SKIP)}catch($){V($)}})))}let m={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(m):h.getRange(m).map(({value:S})=>S)}function sp(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),Yb[t]||t){case It.SEARCH_TYPES.EQUALS:case void 0:return nn(r,n=>n===s);case It.SEARCH_TYPES.CONTAINS:return nn(r,n=>n?.toString().includes(s));case It.SEARCH_TYPES.ENDS_WITH:case It.SEARCH_TYPES._ENDS_WITH:return nn(r,n=>n?.toString().endsWith(s));case It.SEARCH_TYPES.STARTS_WITH:case It.SEARCH_TYPES._STARTS_WITH:return nn(r,n=>typeof n=="string"&&n.startsWith(s));case It.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),nn(r,n=>(0,on.compareKeys)(n,s[0])>=0&&(0,on.compareKeys)(n,s[1])<=0);case"gt":case It.SEARCH_TYPES.GREATER_THAN:case It.SEARCH_TYPES._GREATER_THAN:return nn(r,n=>(0,on.compareKeys)(n,s)>0);case"ge":case It.SEARCH_TYPES.GREATER_THAN_EQUAL:case It.SEARCH_TYPES._GREATER_THAN_EQUAL:return nn(r,n=>(0,on.compareKeys)(n,s)>=0);case It.SEARCH_TYPES.LESS_THAN:case"lt":case It.SEARCH_TYPES._LESS_THAN:return nn(r,n=>(0,on.compareKeys)(n,s)<0);case"le":case It.SEARCH_TYPES.LESS_THAN_EQUAL:case It.SEARCH_TYPES._LESS_THAN_EQUAL:return nn(r,n=>(0,on.compareKeys)(n,s)<=0);case"ne":return nn(r,n=>(0,on.compareKeys)(n,s)!==0);default:throw new Oa.ClientError(`Unknown query comparator "${t}"`)}}function nn(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function fd(e){if(!e)return;let t=new tp,r,s,n,i,o,c=$b;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=ZY[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?e1:$b,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var Oa,It,on,Vb,ZY,Yb,$b,e1,tp,Ed=Re(()=>{Oa=D(Z()),It=D(Ke()),on=require("ordered-binary"),Vb=require("lmdb"),ZY={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(rp,"idsForCondition");Yb={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(sp,"filterByType");a(nn,"attributeComparator");$b=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,e1=/([^&|*=]+)([&|*=]*)/g;a(fd,"parseQuery");tp=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var op={};Fe(op,{CONTEXT:()=>Se,ID_PROPERTY:()=>Ce,IS_COLLECTION:()=>Ds,RECORD_PROPERTY:()=>Ae,Resource:()=>Ut,SAVE_UPDATES_PROPERTY:()=>Jb,snake_case:()=>r1});function r1(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Kb(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new ip(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function ss(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[Se]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[Se]||i):_=i:(_=n,c=_[Ce]??_[this.primaryKey]??null):i?o=i[Se]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return We(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[Jb]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new hd(o.user);return typeof _?.then=="function"?_.then(m=>e(f,u,o,m)):e(f,u,o,_)});if(!E)throw new hd(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function ns(e,t){let r=new zb.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function np(e){let t=e[Ae];if(t){let r=e[Kt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function Wb(e){if(typeof e=="string")return t=>np(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=np(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=np(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var Qb,jb,zb,Se,Ce,Ds,Jb,Ae,t1,Ut,hd,ip,Ls=Re(()=>{Qb=require("crypto");fu();jb=require("../index"),zb=D(Z());_d();No();Ed();Se=Symbol.for("context"),Ce=Symbol.for("primary-key"),Ds=Symbol("is-collection"),Jb=Symbol("save-updates"),Ae=Symbol("stored-record"),t1={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ut=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Ce]=t;let s=r?.[Se];this[Se]=s!==void 0?s:r||null}static get=ss(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=Wb(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=ss(function(t,r,s,n){if(Array.isArray(n)&&t[Ds]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):ns(t,"put")},{hasContent:!0,type:"update"});static delete=ss(function(t,r,s,n){return t.delete?t.delete(r):ns(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Qb.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ns(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=ss(function(t,r,s,n){return t.invalidate?t.invalidate(r):ns(t,"delete")},{hasContent:!1,type:"update"});static post=ss(function(t,r,s,n){return t[Ce]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=ss(function(t,r,s,n){return t.connect?t.connect(n,r):ns(t,"connect")},{hasContent:!0,type:"read"});static subscribe=ss(function(t,r,s,n){return t.subscribe?t.subscribe(r):ns(t,"subscribe")},{type:"read"});static publish=ss(function(t,r,s,n){return t[Ce]!=null&&t.update?.(),t.publish?t.publish(n,r):ns(t,"publish")},{hasContent:!0,type:"create"});static search=ss(function(t,r,s,n){let i=t.search?t.search(r):ns(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Wb(o);return i.map(c)}return i},{type:"read"});static query=ss(function(t,r,s,n){return t.search?t.search(n,r):ns(t,"search")},{hasContent:!0,type:"read"});static copy=ss(function(t,r,s,n){return t.copy?t.copy(n,r):ns(t,"copy")},{type:"create"});static move=ss(function(t,r,s,n){return t.move?t.move(n,r):ns(t,"move")},{type:"delete"});post(t){if(this[Ds])return this.constructor.create(this[Ce],t,this[Se]);ns(this,"post")}static isCollection(t){return t?.[Ds]}static coerceId(t){return t}static parseQuery(t){return fd(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&t1[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:Kb(t,this)}}return Kb(t,this)}static getResource(t,r,s){let n,i=r[Se],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Ce]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Ce],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[Ds]=!0),n}subscribe(t){return new ws}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ws}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[Ce]}getContext(){return this[Se]}};Ut.prototype[Se]=null;(0,jb._assignPackageExport)("Resource",Ut);a(r1,"snake_case");hd=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(Kb,"pathToId");ip=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(ss,"transactional");a(ns,"missingMethod");a(np,"selectFromObject");a(Wb,"transformForSelect")});var Xb={};Fe(Xb,{Resources:()=>md,keyArrayToString:()=>Na,resetResources:()=>s1,resources:()=>Ci});function s1(){return Ci=new md}function Na(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var md,Ci,hu=Re(()=>{No();md=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(s1,"resetResources");a(Na,"keyArrayToString")});var ny={};Fe(ny,{HAS_EXPIRATION:()=>fp,LAST_TIMESTAMP_PLACEHOLDER:()=>pu,LOCAL_TIMESTAMP:()=>n1,METADATA:()=>mu,NO_TIMESTAMP:()=>ap,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>dp,RecordEncoder:()=>_p,TIMESTAMP_ASSIGN_LAST:()=>o1,TIMESTAMP_ASSIGN_NEW:()=>ty,TIMESTAMP_ASSIGN_PREVIOUS:()=>ry,TIMESTAMP_PLACEHOLDER:()=>pd,TIMESTAMP_RECORD_PREVIOUS:()=>cp,getUpdateRecord:()=>Ep,handleLocalTimeForGets:()=>Rd});function sy(){return ya[0]=ya[0]^64,i1.getFloat64(0)}function Rd(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[mu];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[mu]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[mu];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=a1.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(ya,0,d),l.timestampBytes=null,l.localTime=sy())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,bo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<bo.length;u++){let _=bo[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&bo.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function Ep(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ba=i?.localTime?cp|ry:ap:ba=u?i?.localTime?cp|16384:ty|16384:ap,l>0&&(c|=fp),Td=c,lp=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ba>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=up,A.timestampOffset=up.start||0))}if(u){let A=_?.user?.username;if(E&&(Sd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,N=r.get(g);if(N){let V=Ur(N).previousLocalTime;return r.put(g,gd(o,t,s,V,A,d,Sd),{ifVersion:m}),S}}r.put(pu,gd(o,t,s,i?.localTime?1:0,A,d,Sd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var Zb,ey,pd,pu,dp,n1,mu,ya,i1,ap,ty,o1,ry,cp,fp,up,Sd,ba,Td,lp,_p,a1,bo,Su=Re(()=>{Zb=require("msgpackr");Ia();ey=D(U()),pd=new Uint8Array([1,1,1,1,4,64,0,0]),pu=new Uint8Array([1,1,1,1,1,0,0,0]),dp=new Uint8Array([1,1,1,1,3,64,0,0]),n1=Symbol("local-timestamp"),mu=Symbol("metadata"),ya=new Uint8Array(8),i1=new DataView(ya.buffer,0,8),ap=0,ty=0,o1=1,ry=3,cp=4,fp=16,ba=0,Td=-1,lp=0,_p=class extends Zb.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ba||Td>=0){let i=0,o=ba;o&&(i+=8,ba=0);let c=Td,u=lp;c>=0&&(i+=2,Td=-1,u&&(i+=8,lp=0));let _=up=r.call(this,s,n|2048|i);Sd=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(pd[4]=o,pd[5]=o>>8,_.set(pd,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(ya,0,c),c+=8;else for(let d=0;d<8;d++)ya[d]=t[c++];u=sy(),i=t[c]}let _;i<32&&(o=i,c+=2,o&fp&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[mu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(sy,"getTimestamp");a1=Map.prototype.get;a(Rd,"handleLocalTimeForGets");bo=[];setInterval(()=>{for(let e=0;e<bo.length;e++){let t=bo[e].deref();!t||t.isDone||t.isCommitted?bo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&ey.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(Ep,"getUpdateRecord")});var my={};Fe(my,{AUDIT_STORE_OPTIONS:()=>Ey,createAuditEntry:()=>gd,openAuditStore:()=>Od,readAuditEntry:()=>Ur,setAuditRetention:()=>c1,transactionKeyEncoder:()=>fy});function Od(e){let t=e.auditStore=e.openDB(uy.AUDIT_STORE_NAME,Ey);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,_y.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Tu||(Tu=setTimeout(()=>{if(Tu=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-hp})){if((n[0]&15)===pp){let i=Ur(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},hp/10).unref())}),t}function c1(e){clearTimeout(Tu),Tu=null,hp=e}function gd(e,t,r,s,n,i,o){let c=hy[i],u=1;s&&(s>1?wa.setFloat64(0,s):is.set(dp),u=9),f(0),f(t),d(r),wa.setFloat64(u,e),u+=8,n?d(n):is[u++]=0,is[s?8:0]=c;let l=is.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Ca.writeKey)(E,is,u);let m=u-h-1;m>127?m>16383?(Tp.error("Key or username was too large for audit entry",E),u=h+1,is[h]=0):(is.copyWithin(h+2,h+1,u),wa.setUint16(h,m|32768),u++):is[h]=m}function f(E){E<128?is[u++]=E:E<16384?(wa.setUint16(u,E|32768),u+=2):E<1056964608?(wa.setUint32(u,E|3221225472),u+=4):(is[u]=255,wa.setUint32(u+1,E),u+=5)}}function Ur(e){try{let t=e.dataView||(e.dataView=new Sp(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:hy[s&7],tableId:i,get recordId(){return cy(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?cy(e,l,d):void 0},getValue(f){return s&mp?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return Tp.error("Reading audit entry error",e),{}}}function cy(e,t,r){let s=e.subarray(t,r);return(0,Ca.readKey)(s,0,r-t)}var Ca,Ad,uy,ly,_y,dy,Tp,is,wa,fy,Ey,hp,Tu,mp,iy,pp,oy,ay,hy,Sp,Ia=Re(()=>{Ca=require("ordered-binary"),Ad=D(j()),uy=D(Ke()),ly=D(R()),_y=D(Qe()),dy=D(G());Su();Tp=D(U());(0,Ad.initSync)();is=Buffer.alloc(1024),wa=new DataView(is.buffer,is.byteOffset,1024),fy={writeKey(e,t,r){return e===pu?(t.set(pu,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ca.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,Ca.readKey)(e,t,r)}},Ey={encoding:"binary",keyEncoder:fy},hp=(0,dy.convertToMS)((0,Ad.get)(ly.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Tu=null;a(Od,"openAuditStore");a(c1,"setAuditRetention");mp=16,iy=1,pp=2,oy=3,ay=4,hy={put:iy|mp,[iy]:"put",delete:pp,[pp]:"delete",message:oy|mp,[oy]:"message",invalidate:ay,[ay]:"invalidate"};a(gd,"createAuditEntry");a(Ur,"readAuditEntry");Sp=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(cy,"readKeySafely")});function Sy(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;La||((0,Ru.onMessageByType)(py,d=>{Ty(d.path)}),(0,Ru.onMessageByType)(u1,d=>{(0,gu.trace)("confirming to proceed with txn",d.txnId)}),La=Object.create(null));let c=La[i]||(La[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Na(t);let _=new Rp(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function Ty(e,t){if(!La)return;let r=La[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:gp,exclusiveStart:!0})){gp=n;let o=Ur(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Na(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,gu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,m)}catch(m){console.error(m),(0,gu.info)(m)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},gp,!0)}function gy(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Ru.broadcast)({type:py,path:n}),Ty(n,!0)})}}var gu,Ru,py,u1,La,Bfe,Rp,gp,Ry=Re(()=>{gu=D(U()),Ru=D(Qe());fu();hu();Ia();py="transaction",u1="transaction-await",Bfe=Buffer.alloc(4096);a(Sy,"addSubscription");Rp=class extends ws{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},gp=Date.now();a(Ty,"notifyFromTransactionData");a(gy,"listenToCommits")});var Oy=T((Gfe,Ay)=>{"use strict";var Ap=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Ay.exports=Ap});var by=T((xfe,Ny)=>{"use strict";var Op=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Ny.exports=Op});var Nd=T(($fe,yy)=>{"use strict";var bp=j(),yp=R(),{RecordEncoder:l1}=(Su(),te(ny));bp.initSync();var _1=bp.get(yp.CONFIG_PARAMS.STORAGE_COMPRESSION),d1=bp.get(yp.CONFIG_PARAMS.STORAGE_CACHING)!==!1,f1=yp.UPDATES_PROPERTY,Np=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=_1&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=d1&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:l1},this.alwaysLazyProperty=s=>s===f1)}};yy.exports=Np});var yd=T((Yfe,wy)=>{"use strict";var Da=j(),Au=R();Da.initSync();var E1=Da.get(Au.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Da.get(Au.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Da.get(Au.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Iy=Da.get(Au.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),h1=Da.get(Au.CONFIG_PARAMS.STORAGE_NOREADAHEAD),bd=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=E1,this.noFSAccess=!0,Iy!==void 0&&(this.overlappingSync=Iy),this.noReadAhead=h1}};wy.exports=bd;bd.MAX_DBS=1e4});var Pe=T((Wfe,qy)=>{"use strict";var wp=require("lmdb"),Ps=require("fs-extra"),vr=require("path"),Id=or(),Dy=U(),ar=Mr().LMDB_ERRORS_ENUM,wd=by(),Cp=Nd(),Py=yd(),Li=Ke(),Cy=R(),{table:m1,resetDatabases:p1}=(Ee(),te(Le)),Ly=j(),Ms=Li.INTERNAL_DBIS_NAME,My=Li.DBI_DEFINITION_NAME,S1="data.mdb",T1="lock.mdb",Ou=".mdb",g1="-lock",Ip=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=os(t,r),this.key_type=this.dbi[Li.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Li.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new wp.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Cd(e,t){if(e===void 0)throw new Error(ar.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ar.ENV_NAME_REQUIRED)}a(Cd,"pathEnvNameValidation");async function Lp(e,t,r=!0){try{await Ps.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ar.INVALID_BASE_PATH):s}try{let s=vr.join(e,t+Ou);return await Ps.access(s,Ps.constants.R_OK|Ps.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ps.access(vr.join(e,t,S1),Ps.constants.R_OK|Ps.constants.F_OK),vr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ar.INVALID_ENVIRONMENT)}else throw new Error(ar.INVALID_ENVIRONMENT);throw s}}a(Lp,"validateEnvironmentPath");function Ld(e,t){if(Id.validateEnv(e),t===void 0)throw new Error(ar.DBI_NAME_REQUIRED)}a(Ld,"validateEnvDBIName");async function R1(e,t,r=!1,s=!1){Cd(e,t);let n=vr.basename(e);t=t.toString();let i=Ly.get(Cy.CONFIG_PARAMS.DATABASES);i||Ly.setProperty(Cy.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Lp(e,t,s),Uy(e,t,r)}catch(o){if(o.message===ar.INVALID_ENVIRONMENT){let c=vr.join(e,t);await Ps.mkdirp(s?c:e);let u=new Py(s?c:c+Ou,!1),_=wp.open(u);_.dbis=Object.create(null);let l=new Cp(!1);_.openDB(Ms,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dp(e,t,r);return _[Li.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(R1,"createEnvironment");async function A1(e,t,r,s=!0){Cd(e,t),t=t.toString();let n=vr.join(e,t);return m1({table:t,database:vr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(A1,"copyEnvironment");async function Uy(e,t,r=!1){Cd(e,t),t=t.toString();let s=Dp(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Lp(e,t),i=vr.join(e,t+Ou),o=n!=i,c=new Py(n,o),u=wp.open(c);u.dbis=Object.create(null);let _=By(u);for(let l=0;l<_.length;l++)os(u,_[l]);return u[Li.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Uy,"openEnvironment");async function O1(e,t,r=!1){Cd(e,t),t=t.toString();let s=vr.join(e,t+Ou),n=await Lp(e,t);if(global.lmdb_map!==void 0){let i=Dp(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await vy(o),delete global.lmdb_map[i]}}await Ps.remove(n),await Ps.remove(n===s?n+g1:vr.join(vr.dirname(n),T1))}a(O1,"deleteEnvironment");async function vy(e){Id.validateEnv(e);let t=e[Li.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(vy,"closeEnvironment");function Dp(e,t,r=!1){let n=`${vr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Dp,"getCachedEnvironmentName");function N1(e){Id.validateEnv(e);let t=Object.create(null),r=os(e,Ms);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ms)try{t[s]=Object.assign(new wd,n)}catch{Dy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(N1,"listDBIDefinitions");function By(e){Id.validateEnv(e);let t=[],r=os(e,Ms);for(let{key:s}of r.getRange({start:!1}))s!==Ms&&t.push(s);return t}a(By,"listDBIs");function b1(e,t){let s=os(e,Ms).getEntry(t),n=new wd;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Dy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(b1,"getDBIDefinition");function Hy(e,t,r,s=!r){if(Ld(e,t),t=t.toString(),t===Ms)throw new Error(ar.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return os(e,t)}catch(n){if(n.message===ar.DBI_DOES_NOT_EXIST){let i=new Cp(r,s===!0),o=e.openDB(t,i),c=new wd(r===!0,s);return o[My]=c,os(e,Ms).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Hy,"createDBI");function os(e,t){if(Ld(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ms?r=b1(e,t):r=new wd,r===void 0)throw new Error(ar.DBI_DOES_NOT_EXIST);let s;try{let n=new Cp(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ar.DBI_DOES_NOT_EXIST):n}return s[My]=r,e.dbis[t]=s,s}a(os,"openDBI");function y1(e,t){Ld(e,t),t=t.toString();let r=os(e,t),s=r.getStats();return r[Li.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(y1,"statDBI");async function I1(e,t){try{let r=vr.join(e,t+Ou);return(await Ps.stat(r)).size}catch{throw new Error(ar.INVALID_ENVIRONMENT)}}a(I1,"environmentDataSize");function w1(e,t){if(Ld(e,t),t=t.toString(),t===Ms)throw new Error(ar.CANNOT_DROP_INTERNAL_DBIS_NAME);os(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],os(e,Ms).removeSync(t)}a(w1,"dropDBI");function C1(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{os(e,i)}catch(o){if(o.message===ar.DBI_DOES_NOT_EXIST)Hy(e,i,i!==t,i===t),s=!0;else throw o}}s&&p1()}a(C1,"initializeDBIs");qy.exports={openDBI:os,openEnvironment:Uy,createEnvironment:R1,listDBIs:By,listDBIDefinitions:N1,createDBI:Hy,dropDBI:w1,statDBI:y1,deleteEnvironment:O1,initializeDBIs:C1,TransactionCursor:Ip,environmentDataSize:I1,copyEnvironment:A1,closeEnvironment:vy}});var xy=T((jfe,Fy)=>{"use strict";var Pp=Pe(),L1=U(),Gy=Mr().LMDB_ERRORS_ENUM;Fy.exports=D1;async function D1(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 Pp.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Gy.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Pp.closeEnvironment(global.lmdb_map[s]),await Pp.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Gy.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){L1.error(t)}}a(D1,"cleanLMDBMap")});var Fn=T((Jfe,P1)=>{P1.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var eI=T((Zfe,Zy)=>{"use strict";var Mp=require("recursive-iterator"),M1=require("alasql"),Up=require("clone"),ky=G(),{handleHDBError:$y,hdb_errors:U1}=Z(),{HDB_ERROR_MSGS:Vy,HTTP_STATUS_CODES:Yy}=U1,{getDatabases:v1}=(Ee(),te(Le)),B1=["DISTINCT_ARRAY"],Ky=Symbol("validateTables"),vp=Symbol("validateTable"),Xfe=Symbol("getAllColumns"),Wy=Symbol("validateAllColumns"),Dd=Symbol("findColumn"),Qy=Symbol("validateOrderBy"),Nu=Symbol("validateSegment"),Bp=Symbol("validateColumn"),jy=Symbol("setColumnsForTable"),zy=Symbol("checkColumnsForAsterisk"),Jy=Symbol("validateGroupBy"),Xy=Symbol("hasColumns"),Hp=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Ky](),this[zy](),this[Wy]()}[Ky](){if(this[Xy]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[vp](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[vp](t.table)})}}[Xy](){let t=!1,r=new Mp(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[vp](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=v1();if(!r[t.databaseid])throw $y(new Error,Vy.SCHEMA_NOT_FOUND(t.databaseid),Yy.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw $y(new Error,Vy.TABLE_NOT_FOUND(t.databaseid,t.tableid),Yy.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Up(n);i.table=Up(t),this.attributes.push(i)})}[Dd](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)}[zy](){let t=new Mp(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[jy](r.tableid)}[jy](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new M1.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Wy](){this[Nu](this.statement.columns,!1),this[Nu](this.statement.joins,!1),this[Nu](this.statement.where,!1),this[Jy](this.statement.group,!1),this[Nu](this.statement.order,!0)}[Nu](t,r){if(!t)return;let s=new Mp(t),n=[];for(let{node:i,path:o}of s)!ky.isEmpty(i)&&!ky.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Qy](i):n.push(this[Bp](i)));return n}[Jy](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&B1.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Up(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Dd](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Dd](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Qy](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Bp](t)}[Bp](t){let r=this[Dd](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Zy.exports=Hp});var rI=T((tEe,tI)=>{"use strict";var qp=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")}};tI.exports=qp});var nI=T((sEe,sI)=>{"use strict";var Gp=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};sI.exports=Gp});var oI=T((iEe,iI)=>{"use strict";var Fp=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};iI.exports=Fp});var cI=T((aEe,aI)=>{"use strict";var xp=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};aI.exports=xp});var Io=T((dEe,_I)=>{"use strict";var H1=Pe(),q1=nI(),G1=oI(),F1=cI(),an=or(),bu=Mr().LMDB_ERRORS_ENUM,x1=Ke(),xn=R(),k1=G(),$1=require("uuid"),uEe=require("lmdb"),{handleHDBError:V1,hdb_errors:Y1}=Z(),{OVERFLOW_MARKER:lEe,MAX_SEARCH_KEY_LENGTH:_Ee}=x1,uI=j();uI.initSync();var Pd=uI.get(xn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),kp=xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,yo=xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function K1(e,t,r,s,n=an.getNextMonotonicTime()){Kp(e,t,r,s),$p(e,t,r);let i=new q1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];lI(_,!0,n);let l=W1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Vp(o,c,s,i,n)}a(K1,"insertRecords");function W1(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][xn.FUNC_VAL],s[o]=c)}let u=an.getIndexedValues(c),_=e.dbis[o];if(u){Pd&&_.prefetch(u.map(l=>({key:l,value:n})),Md);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Pd&&e.dbis[t].prefetch([n],Md),e.dbis[t].put(n,s,s[yo])})}a(W1,"insertRecord");function Q1(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Q1,"removeSkippedRecords");function lI(e,t,r){let s=r>0;(s||!Number.isInteger(e[yo]))&&(e[yo]=r||(r=an.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[kp]))&&(e[kp]=r||an.getNextMonotonicTime()):delete e[kp]}a(lI,"setTimestamps");function $p(e,t,r){r.indexOf(xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),H1.initializeDBIs(e,t,r)}a($p,"initializeTransaction");async function j1(e,t,r,s,n=an.getNextMonotonicTime()){Kp(e,t,r,s),$p(e,t,r);let i=new G1,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Yp(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Vp(c,u,s,i,n,o)}a(j1,"updateRecords");async function z1(e,t,r,s,n=an.getNextMonotonicTime()){try{Kp(e,t,r,s)}catch(u){throw V1(u,u.message,Y1.HTTP_STATUS_CODES.BAD_REQUEST)}$p(e,t,r);let i=new F1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;k1.isEmpty(_[t])?(l=$1.v4(),_[t]=l):l=_[t];let d=Yp(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Vp(o,c,s,i,n)}a(z1,"upsertRecords");async function Vp(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||an.getNextMonotonicTime(),Q1(r,i),s}a(Vp,"finalizeWrite");function Yp(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(lI(r,!l,o),Number.isInteger(r[yo])&&_[yo]>r[yo])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof m=="function"){let N=m([[_]]);Array.isArray(N)&&(m=N[0][xn.FUNC_VAL],r[h]=m)}if(m===A)continue;let g=an.getIndexedValues(A);if(g){Pd&&S.prefetch(g.map(N=>({key:N,value:s})),Md);for(let N=0,V=g.length;N<V;N++)S.remove(g[N],s)}if(g=an.getIndexedValues(m),g){Pd&&S.prefetch(g.map(N=>({key:N,value:s})),Md);for(let N=0,V=g.length;N<V;N++)S.put(g[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[yo])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Yp(e,t,r,s,n,i,o))}a(Yp,"updateUpsertRecord");function J1(e,t,r){if(an.validateEnv(e),t===void 0)throw new Error(bu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bu.WRITE_ATTRIBUTES_REQUIRED):new Error(bu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(J1,"validateBasic");function Kp(e,t,r,s){if(J1(e,t,r),!Array.isArray(s))throw s===void 0?new Error(bu.RECORDS_REQUIRED):new Error(bu.RECORDS_MUST_BE_ARRAY)}a(Kp,"validateWrite");function Md(){}a(Md,"noop");_I.exports={insertRecords:K1,updateRecords:j1,upsertRecords:z1}});var cn=T((EEe,EI)=>{"use strict";var fI=G(),dI=R(),Pa=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,kn=require("joi"),Di={schema_format:{pattern:Pa,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},X1=kn.alternatives(kn.string().min(1).max(Di.schema_length.maximum).pattern(Pa).messages({"string.pattern.base":"{:#label} "+Di.schema_format.message}),kn.number()).required(),Z1=kn.alternatives(kn.string().min(1).max(Di.schema_length.maximum).pattern(Pa).messages({"string.pattern.base":"{:#label} "+Di.schema_format.message}),kn.number()),eK=kn.alternatives(kn.string().min(1).max(Di.schema_length.maximum).pattern(Pa).messages({"string.pattern.base":"{:#label} "+Di.schema_format.message}),kn.number()).required();function tK(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Di.schema_length.maximum?`'${e}' maximum of 250 characters`:Pa.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(tK,"checkValidTable");function rK(e,t){return fI.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(rK,"validateSchemaExists");function sK(e,t){let r=t.state.ancestors[0].schema;return fI.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(sK,"validateTableExists");function nK(e,t){return e.toLowerCase()===dI.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${dI.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(nK,"validateSchemaName");EI.exports={common_validators:Di,schema_regex:Pa,hdb_schema_table:X1,validateSchemaExists:rK,validateTableExists:sK,validateSchemaName:nK,checkValidTable:tK,hdb_database:Z1,hdb_table:eK}});var Ve=T((mEe,hI)=>{"use strict";var cr=require("validate.js");cr.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||cr.validators.type.checks[t](e)?null:` must be a '${t}' value`};cr.validators.type.checks={Object:function(e){return cr.isObject(e)&&!cr.isArray(e)},Array:cr.isArray,Integer:cr.isInteger,Number:cr.isNumber,String:cr.isString,Date:cr.isDate,Boolean:function(e){return typeof e=="boolean"}};cr.validators.hasValidFileExt=function(e,t){return cr.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};hI.exports={validateObject:iK,validateObjectAsync:oK,validateBySchema:aK};function iK(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=cr(e,t,{format:"flat"});return r?new Error(r):null}a(iK,"validateObject");async function oK(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await cr.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(oK,"validateObjectAsync");function aK(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(aK,"validateBySchema")});var Ud=T((SEe,mI)=>{var{common_validators:un}=cn(),Iu=Ve(),yu="is required",ct={database:{presence:!1,format:un.schema_format,length:un.schema_length},schema:{presence:!1,format:un.schema_format,length:un.schema_length},table:{presence:!0,format:un.schema_format,length:un.schema_length},attribute:{presence:!0,format:un.schema_format,length:un.schema_length},hash_attribute:{presence:!0,format:un.schema_format,length:un.schema_length}};function wu(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(wu,"makeAttributesStrings");function cK(e){return e=wu(e),ct.table.presence=!1,ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Iu.validateObject(e,ct)}a(cK,"schema_object");function uK(e){return e=wu(e),ct.table.presence={message:yu},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Iu.validateObject(e,ct)}a(uK,"table_object");function lK(e){return e=wu(e),ct.table.presence={message:yu},ct.attribute.presence=!1,Iu.validateObject(e,ct)}a(lK,"create_table_object");function _K(e){return e=wu(e),ct.table.presence={message:yu},ct.attribute.presence={message:yu},ct.hash_attribute.presence=!1,Iu.validateObject(e,ct)}a(_K,"attribute_object");function dK(e){return e=wu(e),ct.table.presence={message:yu},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Iu.validateObject(e,ct)}a(dK,"describe_table");function fK(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(fK,"validateTableResidence");mI.exports={schema_object:cK,create_table_object:lK,table_object:uK,attribute_object:_K,describe_table:dK,validateTableResidence:fK}});var SI=T((gEe,pI)=>{"use strict";var EK=require("uuid"),Wp=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||EK.v4(),this.schema_table=`${this.schema}.${this.table}`}};pI.exports=Wp});var vd=T((AEe,TI)=>{"use strict";var hK=SI(),Qp=class extends hK{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};TI.exports=Qp});var RI=T((NEe,gI)=>{"use strict";gI.exports=pK;var mK="inserted";function pK(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===mK?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(pK,"returnObject")});var Bd=T((yEe,yI)=>{"use strict";var SK=R(),jp=Pe(),TK=Io(),{getSystemSchemaPath:gK,getSchemaPath:RK}=He(),AK=Fn(),OK=Ud(),NK=vd(),bK=RI(),{handleHDBError:AI,hdb_errors:NI}=Z(),OI=G(),{HTTP_STATUS_CODES:yK}=NI,zp=AK.hdb_attribute,bI=[];for(let e=0;e<zp.attributes.length;e++)bI.push(zp.attributes[e].attribute);var IK="inserted";yI.exports=wK;async function wK(e){let t=OK.attribute_object(e);if(t)throw AI(new Error,t.message,NI.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&OI.checkGlobalSchemaTable(e.schema,e.table);if(r)throw AI(new Error,r,yK.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=OI.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new NK(e.schema,e.table,e.attribute,e.id);try{let i=await jp.openEnvironment(RK(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}`);jp.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await jp.openEnvironment(gK(),SK.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await TK.insertRecords(o,zp.hash_attribute,bI,[n]);return bK(IK,c,{records:[n]},u)}catch(i){throw i}}a(wK,"lmdbCreateAttribute")});var Xp=T((wEe,wI)=>{var{hdb_table:CK,hdb_database:II}=cn(),LK=Ve(),Jp=require("joi"),DK={undefined:"undefined",null:"null"},PK=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||DK[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),MK=Jp.object({database:II,schema:II,table:CK,records:Jp.array().items(Jp.object().custom(PK)).required()});wI.exports=function(e){return LK.validateBySchema(e,MK)}});var Cu=T((DEe,LI)=>{"use strict";var $n=G(),CI=U(),LEe=Xp(),{getDatabases:UK}=(Ee(),te(Le)),{ClientError:wo}=Z();LI.exports=vK;function vK(e){if($n.isEmpty(e))throw new wo("invalid update parameters defined.");if($n.isEmptyOrZeroLength(e.schema))throw new wo("invalid schema specified.");if($n.isEmptyOrZeroLength(e.table))throw new wo("invalid table specified.");if(!Array.isArray(e.records))throw new wo("records must be an array");let t=UK()[e.schema]?.[e.table];if($n.isEmpty(t))throw new wo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&$n.isEmptyOrZeroLength(o[r]))throw CI.error("a valid hash attribute must be provided with update record:",o),new wo("a valid hash attribute must be provided with update record, check log for more info");if(!$n.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw CI.error(`a valid hash value must be provided with ${e.operation} record:`,o),new wo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!$n.isEmpty(o[r])&&o[r]!==""&&s.has($n.autoCast(o[r]))&&(o.skip=!0),s.add($n.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(vK,"insertUpdateValidate")});var Lu=T((MEe,DI)=>{"use strict";var BK=R().OPERATIONS_ENUM,Zp=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=BK.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};DI.exports=Zp});var Uu=T((BEe,PI)=>{"use strict";var vEe=Lu(),Hd=R(),tS=G(),eS=U(),HK=require("uuid"),{handleHDBError:Du,hdb_errors:qK}=Z(),{HDB_ERROR_MSGS:Pu,HTTP_STATUS_CODES:Mu}=qK;PI.exports=GK;function GK(e,t,r){for(let n=0;n<t.length;n++)FK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];xK(i,r,e.operation)}}a(GK,"processRows");function FK(e){if(Buffer.byteLength(String(e))>Hd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Du(new Error,Pu.ATTR_NAME_LENGTH_ERR(e),Mu.BAD_REQUEST,void 0,void 0,!0);if(tS.isEmptyOrZeroLength(e)||tS.isEmpty(e.trim()))throw Du(new Error,Pu.ATTR_NAME_NULLISH_ERR,Mu.BAD_REQUEST,void 0,void 0,!0)}a(FK,"validateAttribute");function xK(e,t,r){if(!e.hasOwnProperty(t)||tS.isEmptyOrZeroLength(e[t])){if(r===Hd.OPERATIONS_ENUM.INSERT||r===Hd.OPERATIONS_ENUM.UPSERT){e[t]=HK.v4();return}throw eS.error("Update transaction aborted due to record with no hash value:",e),Du(new Error,Pu.RECORD_MISSING_HASH_ERR,Mu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Hd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw eS.error(e),Du(new Error,Pu.HASH_VAL_LENGTH_ERR,Mu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw eS.error(e),Du(new Error,Pu.INVALID_FORWARD_SLASH_IN_HASH_ERR,Mu.BAD_REQUEST,void 0,void 0,!0)}a(xK,"validateHash")});var qd=T((qEe,UI)=>{"use strict";var MI=G(),kK=R(),$K=U(),VK=Bd(),YK=vd(),KK=Vn(),{SchemaEventMsg:WK}=Us(),QK="already exists in";UI.exports=jK;async function jK(e,t,r){if(MI.isEmptyOrZeroLength(r))return r;let s=[];MI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await zK(e,t.schema,t.name,i)})),n}a(jK,"lmdbCheckForNewAttributes");async function zK(e,t,r,s){let n=new YK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await JK(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(QK))$K.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(zK,"createNewAttribute");async function JK(e){let t;return t=await VK(e),KK.signalSchemaChange(new WK(process.pid,kK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(JK,"createAttribute")});var Ma=T((FEe,vI)=>{"use strict";var rS=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};vI.exports=rS});var HI=T((kEe,BI)=>{"use strict";var XK=Ma(),ZK=R().OPERATIONS_ENUM,sS=class extends XK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(ZK.INSERT,r,s,n,i),this.records=t}};BI.exports=sS});var GI=T((VEe,qI)=>{"use strict";var eW=Ma(),tW=R().OPERATIONS_ENUM,nS=class extends eW{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(tW.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};qI.exports=nS});var xI=T((KEe,FI)=>{"use strict";var rW=Ma(),sW=R().OPERATIONS_ENUM,iS=class extends rW{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(sW.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};FI.exports=iS});var $I=T((QEe,kI)=>{"use strict";var nW=Ma(),iW=R().OPERATIONS_ENUM,oS=class extends nW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(iW.DELETE,s,n,t,i),this.original_records=r}};kI.exports=oS});var vu=T((JEe,WI)=>{"use strict";var zEe=require("path"),VI=Pe(),oW=HI(),aW=GI(),cW=xI(),uW=$I(),Ua=Ke(),YI=G(),{CONFIG_PARAMS:lW}=R(),KI=j();KI.initSync();var Gd=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:_W}=He();WI.exports=dW;async function dW(e,t){if(KI.get(lW.LOGGING_AUDITLOG)===!1)return;let r=_W(e.schema,e.table),s=await VI.openEnvironment(r,e.table,!0),n=fW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){VI.initializeDBIs(s,Ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ua.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),YI.isEmpty(n.user_name)||s.dbis[Ua.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ua.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(dW,"writeTransaction");function fW(e,t){let r=YI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Gd.INSERT)return new oW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Gd.UPDATE)return new aW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Gd.UPSERT)return new cW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Gd.DELETE)return new uW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(fW,"createTransactionObject")});var aS=T((ehe,QI)=>{"use strict";var EW=Cu(),ZEe=Lu(),Bu=R(),hW=Uu(),mW=Io().insertRecords,pW=Pe(),SW=U(),TW=qd(),{getSchemaPath:gW}=He(),RW=vu();QI.exports=AW;async function AW(e){try{let{schema_table:t,attributes:r}=EW(e);hW(e,r,t.hash_attribute),e.schema!==Bu.SYSTEM_SCHEMA_NAME&&(r.includes(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Bu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Bu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await TW(e.hdb_auth_header,t,r),n=gW(e.schema,e.table),i=await pW.openEnvironment(n,e.table),o=await mW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await RW(e,o)}catch(c){SW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(AW,"lmdbCreateRecords")});var JI=T((rhe,zI)=>{"use strict";var jI=R(),OW=aS(),NW=Lu(),bW=require("fs-extra"),{getSchemaPath:yW}=He();zI.exports=IW;async function IW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new NW(jI.SYSTEM_SCHEMA_NAME,jI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await OW(r),await bW.mkdirp(yW(e.schema))}a(IW,"lmdbCreateSchema")});var ZI=T((nhe,XI)=>{"use strict";var cS=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};XI.exports=cS});var sw=T((uhe,rw)=>{"use strict";var ew=Pe(),uS=or(),lS=Mr().LMDB_ERRORS_ENUM,wW=Ke(),tw=U(),ohe=G(),CW=require("lmdb"),LW=ZI(),DW=R(),{OVERFLOW_MARKER:ahe,MAX_SEARCH_KEY_LENGTH:che}=wW,PW=DW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function MW(e,t,r,s){if(uS.validateEnv(e),t===void 0)throw new Error(lS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lS.IDS_REQUIRED):new Error(lS.IDS_MUST_BE_ITERABLE);try{let n=ew.listDBIs(e);ew.initializeDBIs(e,t,n);let i=new LW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[PW]>s){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,CW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],N=h[A];if(N!=null)try{let V=uS.getIndexedValues(N);if(V)for(let $=0,F=V.length;$<F;$++)g.remove(V[$],o)}catch{tw.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(m),u.push(o),i.original_records.push(h)}catch(h){tw.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=uS.getNextMonotonicTime(),i}catch(n){throw n}}a(MW,"deleteRecords");rw.exports={deleteRecords:MW}});var Hu=T((_he,iw)=>{"use strict";var va=G(),UW=sw(),vW=Pe(),{getSchemaPath:BW}=He(),HW=vu(),qW=U();iw.exports=GW;async function GW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(va.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(va.isEmptyOrZeroLength(e.hash_values)&&!va.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];va.isEmpty(u)||e.hash_values.push(u)}}if(va.isEmptyOrZeroLength(e.hash_values))return nw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(va.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=BW(e.schema,e.table),i=await vW.openEnvironment(n,e.table),o=await UW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await HW(e,o)}catch(c){qW.error(`unable to write transaction due to ${c.message}`)}return nw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(GW,"lmdbDeleteRecords");function nw(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(nw,"createDeleteResponse")});var dS=T((Ehe,ow)=>{"use strict";var FW=R(),fhe=or();function _S(e,t){let r=Object.create(null);if(t.length===1&&FW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(_S,"parseRow");function xW(e,t,r,s){let n=_S(r,e);s.push(n)}a(xW,"searchAll");function kW(e,t,r,s){let n=_S(r,e);s[t]=n}a(kW,"searchAllToMap");function $W(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a($W,"iterateDBI");function Co(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Co,"pushResults");function VW(e,t,r,s,n,i){t.toString().endsWith(e)&&Co(t,r,s,n,i)}a(VW,"endsWith");function YW(e,t,r,s,n,i){t.toString().includes(e)&&Co(t,r,s,n,i)}a(YW,"contains");function KW(e,t,r,s,n,i){t>e&&Co(t,r,s,n,i)}a(KW,"greaterThanCompare");function WW(e,t,r,s,n,i){t>=e&&Co(t,r,s,n,i)}a(WW,"greaterThanEqualCompare");function QW(e,t,r,s,n,i){t<e&&Co(t,r,s,n,i)}a(QW,"lessThanCompare");function jW(e,t,r,s,n,i){t<=e&&Co(t,r,s,n,i)}a(jW,"lessThanEqualCompare");ow.exports={parseRow:_S,searchAll:xW,searchAllToMap:kW,iterateDBI:$W,endsWith:VW,contains:YW,greaterThanCompare:KW,greaterThanEqualCompare:WW,lessThanCompare:QW,lessThanEqualCompare:jW,pushResults:Co}});var Ba=T((The,fw)=>{"use strict";var Pi=Pe(),mhe=U(),Br=or(),Fd=Ke(),tt=Mr().LMDB_ERRORS_ENUM,phe=G(),zW=R(),xd=dS(),{parseRow:JW}=xd,She=require("lmdb"),{OVERFLOW_MARKER:aw,MAX_SEARCH_KEY_LENGTH:XW}=Fd;function cw(e,t,r,s=!1,n=void 0,i=void 0){return Lo(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(cw,"iterateFullIndex");function qu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Lo(e,t,r,(l,d,f,E)=>{let g={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(g.values=!1,d.getRange(g).map(N=>({value:N}))):d.getRange(g)})}a(qu,"iterateRangeBetween");function Lo(e,t,r,s){let n=e.database||e,i=Pi.openDBI(n,r);i[Fd.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Pi.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Lo,"setupTransaction");function uw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(aw)){if(!n)if(r)n=Pi.openDBI(e,r);else{let u=Pi.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Pi.openDBI(e,u[_]),!n[Fd.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(uw,"getOverflowCheck");function ZW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Lo(e,t,t,(o,c,u)=>(kd(r),r=Gu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>JW(_.value,r))))}a(ZW,"searchAll");function eQ(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);kd(r),r=Gu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of cw(e,t,t,s,n,i))o.set(c,xd.parseRow(u,r));return o}a(eQ,"searchAllToMap");function tQ(e,t,r=!1,s=void 0,n=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=cw(e,void 0,t,r,s,n),c=o.transaction,u=uw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(tQ,"iterateDBI");function rQ(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Pi.statDBI(e,t).entryCount}a(rQ,"countAll");function sQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Mi(e,r,s),Lo(e,t,r,(c,u,_,l)=>(s=Br.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(sQ,"equals");function nQ(e,t,r){return Mi(e,t,r),Pi.openDBI(e,t).getValuesCount(r)}a(nQ,"count");function iQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Mi(e,r,s),Lo(e,null,r,(c,u)=>{s=Br.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(iQ,"startsWith");function oQ(e,t,r,s,n=!1,i=void 0,o=void 0){return lw(e,t,r,s,n,i,o,!0)}a(oQ,"endsWith");function lw(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Mi(e,r,s),Lo(e,null,r,(u,_,l,d)=>{let f=uw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(aw)?_.getValues(E,{transaction:u}).map(m=>{let S=f(E,m);if(c?S.endsWith(s):S.includes(s))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(s):h.includes(s))?_[Fd.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(lw,"contains");function aQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qu(e,t,r,s,u,n,i,o,!0,!1)}a(aQ,"greaterThan");function cQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),qu(e,t,r,s,u,n,i,o,!1,!1)}a(cQ,"greaterThanEqual");function uQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qu(e,t,r,u,s,n,i,o,!1,!0)}a(uQ,"lessThan");function lQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),qu(e,t,r,u,s,n,i,o,!1,!1)}a(lQ,"lessThanEqual");function _Q(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(tt.START_VALUE_REQUIRED);if(n===void 0)throw new Error(tt.END_VALUE_REQUIRED);if(s=Br.convertKeyValueToWrite(s),n=Br.convertKeyValueToWrite(n),s>n)throw new Error(tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return qu(e,t,r,s,n,i,o,c)}a(_Q,"between");function dQ(e,t,r,s){Br.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(kd(r),r=Gu(n,r),s===void 0)throw new Error(tt.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=xd.parseRow(c,r)),o}a(dQ,"searchByHash");function fQ(e,t,r){Br.validateEnv(e);let s=e.database||e,n=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 s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(fQ,"checkHashExists");function EQ(e,t,r,s,n=[]){return dw(e,t,r,s,n),_w(e,t,r,s,n).map(i=>i[1])}a(EQ,"batchSearchByHash");function hQ(e,t,r,s,n=[]){dw(e,t,r,s,n);let i=new Map;for(let[o,c]of _w(e,t,r,s,n))i.set(o,c);return i}a(hQ,"batchSearchByHashToMap");function _w(e,t,r,s,n=[]){return Lo(e,t,t,(i,o,c)=>{r=Gu(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,xd.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(_w,"batchHashSearch");function dw(e,t,r,s,n){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(kd(r),s==null)throw new Error(tt.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(tt.IDS_MUST_BE_ITERABLE)}a(dw,"initializeBatchSearchByHash");function kd(e){if(!Array.isArray(e))throw e===void 0?new Error(tt.FETCH_ATTRIBUTES_REQUIRED):new Error(tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(kd,"validateFetchAttributes");function Mi(e,t,r){if(Br.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>XW)throw new Error(tt.SEARCH_VALUE_TOO_LARGE)}a(Mi,"validateComparisonFunctions");function Gu(e,t){return t.length===1&&zW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Pi.listDBIs(e)),t}a(Gu,"setGetWholeRowAttributes");fw.exports={searchAll:ZW,searchAllToMap:eQ,count:nQ,countAll:rQ,equals:sQ,startsWith:iQ,endsWith:oQ,contains:lw,searchByHash:dQ,setGetWholeRowAttributes:Gu,batchSearchByHash:EQ,batchSearchByHashToMap:hQ,checkHashExists:fQ,iterateDBI:tQ,greaterThan:aQ,greaterThanEqual:cQ,lessThan:uQ,lessThanEqual:lQ,between:_Q}});var Ha=T((Rhe,Sw)=>{var Ew=require("lodash"),hw=Ve(),xe=require("joi"),mQ=G(),{hdb_schema_table:$d,checkValidTable:mw,hdb_table:pw,hdb_database:Vd}=cn(),{handleHDBError:pQ,hdb_errors:SQ}=Z(),{getDatabases:TQ}=(Ee(),te(Le)),{HTTP_STATUS_CODES:gQ}=SQ,RQ=xe.object({database:Vd,schema:Vd,table:pw,search_attribute:$d,search_value:xe.any().required(),get_attributes:xe.array().min(1).items($d).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),AQ=xe.object({database:Vd,schema:Vd,table:pw,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items($d).optional(),conditions:xe.array().min(1).items(xe.object({search_attribute:$d,search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()})).required()});Sw.exports=function(e,t){let r=null;switch(t){case"value":r=hw.validateBySchema(e,RQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(mw("database",e.schema)),i(mw("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=hw.validateBySchema(e,AQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=mQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return pQ(new Error,n,gQ.NOT_FOUND);let o=TQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Ew.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Ew.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var fS=T((Ohe,Tw)=>{"use strict";var OQ=Pe(),NQ=Ha(),{getSchemaPath:bQ}=He();Tw.exports=yQ;function yQ(e){let t=NQ(e,"hashes");if(t)throw t;let r=bQ(e.schema,e.table);return OQ.openEnvironment(r,e.table)}a(yQ,"initialize")});var ES=T((bhe,gw)=>{"use strict";var IQ=Ba(),wQ=fS();gw.exports=CQ;async function CQ(e){let t=await wQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return IQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(CQ,"lmdbGetDataByHash")});var qa=T((Ihe,Rw)=>{"use strict";var hS=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Rw.exports=hS});var Ow=T((Lhe,Aw)=>{"use strict";var Che=qa(),LQ=Ba(),DQ=fS();Aw.exports=PQ;async function PQ(e){let t=await DQ(e),r=global.hdb_schema[e.schema][e.table];return LQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(PQ,"lmdbSearchByHash")});var vs=T((Phe,Nw)=>{"use strict";var mS=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Nw.exports=mS});var Yd=T((Uhe,Lw)=>{"use strict";var Wt=Ba(),MQ=Pe(),UQ=G(),ce=Ke(),Do=R(),vQ=Fn(),bw=Mr().LMDB_ERRORS_ENUM,{getSchemaPath:BQ}=He(),Yn=Do.SEARCH_WILDCARDS;async function HQ(e,t,r){let s;e.schema===Do.SYSTEM_SCHEMA_NAME?s=vQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Cw(e,s.hash_attribute,r,t);return Iw(e,n,s.hash_attribute,r)}a(HQ,"prepSearch");async function Iw(e,t,r,s){let n=BQ(e.schema,e.table),i=await MQ.openEnvironment(n,e.table),o=ww(i,e,t,r),c=o.transaction||i;if([ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ce.SEARCH_TYPES.SEARCH_ALL,ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(qQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?yw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?yw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Wt.batchSearchByHashToMap(c,r,e.get_attributes,_):Wt.batchSearchByHash(c,r,e.get_attributes,_)}a(Iw,"executeSearch");function ww(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ce.SEARCH_TYPES.EQUALS:n=Wt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.CONTAINS:n=Wt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.ENDS_WITH:case ce.SEARCH_TYPES._ENDS_WITH:n=Wt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.STARTS_WITH:case ce.SEARCH_TYPES._STARTS_WITH:n=Wt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.SEARCH_ALL:return Wt.searchAll(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.BETWEEN:n=Wt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN:case ce.SEARCH_TYPES._GREATER_THAN:n=Wt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN_EQUAL:case ce.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Wt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN:case ce.SEARCH_TYPES._LESS_THAN:n=Wt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN_EQUAL:case ce.SEARCH_TYPES._LESS_THAN_EQUAL:n=Wt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(ww,"searchByType");function yw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(yw,"createMapFromIterable");function qQ(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(qQ,"checkToFetchMore");function Cw(e,t,r,s){if(UQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Yn.indexOf(n)>-1)return r===!0?ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ce.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Yn[0])<0&&n.indexOf(Yn[1])<0)return c===!0?r===!0?ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ce.SEARCH_TYPES.EQUALS;if(Yn.indexOf(i)>=0&&Yn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ce.SEARCH_TYPES.CONTAINS;if(Yn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ce.SEARCH_TYPES.ENDS_WITH;if(Yn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ce.SEARCH_TYPES.STARTS_WITH;if(n.includes(Yn[0])||n.includes(Yn[1]))return ce.SEARCH_TYPES.EQUALS;throw new Error(bw.UNKNOWN_SEARCH_TYPE)}else switch(s){case Do.VALUE_SEARCH_COMPARATORS.BETWEEN:return ce.SEARCH_TYPES.BETWEEN;case Do.VALUE_SEARCH_COMPARATORS.GREATER:return ce.SEARCH_TYPES.GREATER_THAN;case Do.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ce.SEARCH_TYPES.GREATER_THAN_EQUAL;case Do.VALUE_SEARCH_COMPARATORS.LESS:return ce.SEARCH_TYPES.LESS_THAN;case Do.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ce.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(bw.UNKNOWN_SEARCH_TYPE)}}a(Cw,"createSearchTypeFromSearchObject");Lw.exports={executeSearch:Iw,createSearchTypeFromSearchObject:Cw,prepSearch:HQ,searchByType:ww}});var Pw=T((Hhe,Dw)=>{"use strict";var Bhe=vs(),GQ=Ha(),FQ=G(),xQ=R(),kQ=Yd();Dw.exports=$Q;function $Q(e,t){if(!FQ.isEmpty(t)&&xQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=GQ(e,"value");if(s)throw s;let n=!0;return kQ.prepSearch(e,t,n)}a($Q,"lmdbGetDataByValue")});var Fu=T((Fhe,Mw)=>{"use strict";var Ghe=vs(),VQ=Ha(),YQ=G(),KQ=R(),WQ=Yd();Mw.exports=QQ;async function QQ(e,t){if(!YQ.isEmpty(t)&&KQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=VQ(e,"value");if(s)throw s;return WQ.prepSearch(e,t,!1)}a(QQ,"lmdbSearchByValue")});var vw=T(($he,Uw)=>{"use strict";var khe=Ke(),pS=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},SS=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},TS=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Uw.exports={SearchByConditionsObject:pS,SearchCondition:SS,SortAttribute:TS}});var Fw=T((Whe,Gw)=>{"use strict";var Yhe=vw().SearchByConditionsObject,jQ=vs(),zQ=Ha(),gS=Ba(),Kd=Ke(),{Resource:Khe}=(Ls(),te(op)),qw=Yd(),JQ=dS(),XQ=require("lodash"),{getSchemaPath:ZQ}=He(),Bw=Pe(),{handleHDBError:ej,hdb_errors:tj}=Z(),{HTTP_STATUS_CODES:rj}=tj,sj=1e8;Gw.exports=nj;async function nj(e){let t=zQ(e,"conditions");if(t)throw ej(t,t.message,rj.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=ZQ(e.schema,e.table),s=await Bw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Bw.openDBI(s,_.search_attribute);let i=XQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Kd.SEARCH_TYPES.EQUALS?_.estimated_count=gS.count(s,_.search_attribute,_.search_value):l===Kd.SEARCH_TYPES.CONTAINS||l===Kd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=sj}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Hw(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(qw.filterByType),d=l.length,f=gS.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>JQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Hw(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=gS.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(nj,"lmdbSearchByConditions");async function Hw(e,t,r,s){let n=new jQ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Kd.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,qw.searchByType(e,n,i,s).map(o=>o.value)}a(Hw,"executeConditionSearch")});var xu=T((jhe,xw)=>{"use strict";var ij=R().OPERATIONS_ENUM,RS=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=ij.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};xw.exports=RS});var AS=T((Jhe,jw)=>{"use strict";var Yw=vs(),Kw=xu(),Ww=Fu(),Qw=Hu(),ur=R(),kw=G(),$w=Pe(),{getTransactionAuditStorePath:oj,getSchemaPath:aj}=He(),Vw=U();jw.exports=cj;async function cj(e){try{if(kw.isEmpty(global.hdb_schema[e.schema])||kw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await uj(e),await lj(e);let t=aj(e.schema,e.table);try{await $w.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Vw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=oj(e.schema,e.table);await $w.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Vw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(cj,"lmdbDropTable");async function uj(e){let t=new Yw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Ww(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Kw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Qw(n)}a(uj,"deleteAttributesFromSystem");async function lj(e){let t=new Yw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Ww(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Kw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Qw(n)}catch(i){throw i}}a(lj,"dropTableFromSystem")});var Jw=T((Zhe,zw)=>{"use strict";var _j=require("fs-extra"),dj=vs(),fj=qa(),Ej=xu(),hj=AS(),mj=Hu(),pj=ES(),Sj=Fu(),Kn=R(),{getSchemaPath:Tj}=He(),{handleHDBError:gj,hdb_errors:Rj}=Z(),{HDB_ERROR_MSGS:Aj,HTTP_STATUS_CODES:Oj}=Rj;zw.exports=Nj;async function Nj(e){let t;try{t=await bj(e.schema);let r=new dj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Sj(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await hj(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new Ej(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await mj(n);let i=Tj(t);await _j.remove(i)}catch(r){throw r}}a(Nj,"lmdbDropSchema");async function bj(e){let t=new fj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await pj(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw gj(new Error,Aj.SCHEMA_NOT_FOUND(e),Oj.NOT_FOUND,void 0,void 0,!0);return s}a(bj,"validateDropSchema")});var ku=T((tme,Xw)=>{"use strict";var OS=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Xw.exports=OS});var bS=T((nme,Zw)=>{"use strict";var yj=require("fs-extra"),Wd=Pe(),{getTransactionAuditStorePath:Ij}=He(),NS=Ke(),sme=ku();Zw.exports=wj;async function wj(e){let t;try{let r=Ij(e.schema,e.table);await yj.mkdirp(r),t=await Wd.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{Wd.createDBI(t,NS.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Wd.createDBI(t,NS.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Wd.createDBI(t,NS.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(wj,"createTransactionsAuditEnvironment")});var sC=T((ome,rC)=>{"use strict";var yS=R(),eC=Pe(),Cj=Io(),{getSystemSchemaPath:Lj,getSchemaPath:Dj}=He(),Pj=Fn(),Mj=Bd(),IS=vd(),Uj=U(),vj=bS(),CS=Pj.hdb_table,tC=[];for(let e=0;e<CS.attributes.length;e++)tC.push(CS.attributes[e].attribute);rC.exports=Bj;async function Bj(e,t){let r=Dj(t.schema,t.table),s=new IS(t.schema,t.table,yS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new IS(t.schema,t.table,yS.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await eC.createEnvironment(r,t.table),e!==void 0){let o=await eC.openEnvironment(Lj(),yS.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Cj.insertRecords(o,CS.hash_attribute,tC,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await wS(s),await wS(n),await wS(i)}await vj(t)}catch(o){throw o}}a(Bj,"lmdbCreateTable");async function wS(e){try{await Mj(e)}catch(t){Uj.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wS,"createAttribute")});var iC=T((cme,nC)=>{"use strict";var Hj=Cu(),qj=Uu(),Gj=qd(),$u=R(),Fj=Io().updateRecords,xj=Pe(),{getSchemaPath:kj}=He(),$j=vu(),Vj=U();nC.exports=Yj;async function Yj(e){try{let{schema_table:t,attributes:r}=Hj(e);qj(e,r,t.hash_attribute),e.schema!==$u.SYSTEM_SCHEMA_NAME&&(r.includes($u.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push($u.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes($u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push($u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Gj(e.hdb_auth_header,t,r),n=kj(e.schema,e.table),i=await xj.openEnvironment(n,e.table),o=await Fj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await $j(e,o)}catch(c){Vj.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Yj,"lmdbUpdateRecords")});var aC=T((lme,oC)=>{"use strict";var Kj=R().OPERATIONS_ENUM,LS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=Kj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};oC.exports=LS});var uC=T((fme,cC)=>{"use strict";var dme=aC(),Wj=Cu(),Qj=Uu(),jj=qd(),Vu=R(),zj=Io().upsertRecords,Jj=Pe(),{getSchemaPath:Xj}=He(),Zj=vu(),ez=U(),{handleHDBError:tz,hdb_errors:rz}=Z();cC.exports=sz;async function sz(e){let t;try{t=Wj(e)}catch(u){throw tz(u,u.message,rz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Qj(e,s,r.hash_attribute),e.schema!==Vu.SYSTEM_SCHEMA_NAME&&(s.includes(Vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Vu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Vu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await jj(e.hdb_auth_header,r,s),i=Xj(e.schema,e.table),o=await Jj.openEnvironment(i,e.table),c=await zj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Zj(e,c)}catch(u){ez.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(sz,"lmdbUpsertRecords")});var _C=T((hme,lC)=>{"use strict";var DS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};lC.exports=DS});var fC=T((pme,dC)=>{"use strict";var PS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};dC.exports=PS});var mC=T((gme,hC)=>{"use strict";var MS=Pe(),{getTransactionAuditStorePath:nz}=He(),Tme=_C(),Yu=Ke(),iz=G(),EC=fC(),oz=require("util").promisify,az=oz(setTimeout),cz=1e4,uz=100;hC.exports=lz;async function lz(e){let t=nz(e.schema,e.table),r=await MS.openEnvironment(t,e.table,!0),s=MS.listDBIs(r);MS.initializeDBIs(r,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new EC;do n=await _z(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await az(uz);while(n.transactions_deleted>0);return i}a(lz,"deleteAuditLogsBefore");async function _z(e,t){let r=new EC;try{let s=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Yu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];iz.isEmpty(c)||(n=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>cz)break}return await n,r}catch(s){throw s}}a(_z,"deleteTransactions")});var SC=T((Ame,pC)=>{"use strict";var US=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};pC.exports=US});var gC=T((bme,TC)=>{"use strict";var dz=vs(),fz=xu(),Nme=SC(),ln=R(),Ez=G(),vS=Pe(),hz=Fn(),mz=Fu(),pz=Hu(),{getSchemaPath:Sz}=He();TC.exports=Tz;async function Tz(e,t=!0){let r;e.schema===ln.SYSTEM_SCHEMA_NAME?r=hz[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Rz(e),n=Sz(e.schema,e.table),i=await vS.openEnvironment(n,e.table);return t===!0&&await gz(e,i,r.hash_attribute),vS.dropDBI(i,e.attribute),s}a(Tz,"lmdbDropAttribute");async function gz(e,t,r){let s=vS.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(gz,"removeAttributeFromAllObjects");async function Rz(e){let t=new dz(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await mz(t)).filter(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Ez.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new fz(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return pz(i)}a(Rz,"dropAttributeFromSystem")});var yC=T((wme,bC)=>{"use strict";var BS=Pe(),Ga=Ke(),Ime=or(),HS=R(),RC=G(),{getTransactionAuditStorePath:Az}=He(),Oz=Ba(),Qd=Ma(),Nz=U();bC.exports=bz;async function bz(e){let t=Az(e.schema,e.table),r=await BS.openEnvironment(t,e.table,!0),s=BS.listDBIs(r);BS.initializeDBIs(r,Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return AC(r,e.search_values);case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Iz(r,e.search_values,n);case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return yz(r,e.search_values);default:return AC(r)}}a(bz,"readAuditLog");function AC(e,t=[0,Date.now()]){RC.isEmpty(t[0])&&(t[0]=0),RC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Qd,n))}a(AC,"searchTransactionsByTimestamp");function yz(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,NC(e,i))}return Object.fromEntries(r)}a(yz,"searchTransactionsByUsername");function Iz(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Oz.equals(e,Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ga.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=NC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);OC(u,"records",r,l,o),OC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Iz,"searchTransactionsByHashValues");function OC(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Qd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Qd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(OC,"loopRecords");function NC(e,t){let r=[];try{let s=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Qd,i);r.push(o)}}catch(i){Nz.warn(i)}return r}catch(s){throw s}}a(NC,"batchSearchTransactions")});var wC=T((Pme,IC)=>{"use strict";var{getSchemaPath:Lme}=He(),Dme=Pe(),{database:wz}=(Ee(),te(Le));IC.exports={writeTransaction:Cz};async function Cz(e,t,r){return wz({database:e,table:t}).transaction(r)}a(Cz,"writeTransaction")});var PC=T((Ume,DC)=>{"use strict";var{getSchemaPath:CC}=He(),LC=Pe();DC.exports={flush:Lz,resetReadTxn:Dz};async function Lz(e,t){return(await LC.openEnvironment(CC(e,t),t.toString())).flushed}a(Lz,"flush");async function Dz(e,t){try{(await LC.openEnvironment(CC(e,t),t.toString())).resetReadTxn()}catch{}}a(Dz,"resetReadTxn")});var BC=T((Bme,vC)=>{"use strict";var{Readable:Pz}=require("stream"),{getDatabases:Mz}=(Ee(),te(Le)),{readSync:Uz,openSync:vz,createReadStream:MC}=require("fs"),{open:Bz}=require("lmdb"),UC=Nd(),Hz=yd(),{AUDIT_STORE_OPTIONS:qz}=(Ia(),te(my)),{INTERNAL_DBIS_NAME:Gz,AUDIT_STORE_NAME:Fz}=Ke();vC.exports=kz;var qS=32768,xz=100;async function kz(e){let t=e.database||e.schema||"data",r=Mz()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=Bz({noSync:!0,maxDbs:Hz.MAX_DBS}),f,E=d.openDB(Gz,new UC(!1)),h=l.useReadTransaction(),m=0,S=a(async function(g,N){N.encoding="binary",N.encoder=void 0;let V=d.openDB(g,N),$=l.openDB(g,N);for(let{key:F,version:w,value:K}of $.getRange({transaction:h,versions:$.useVersions}))f=V.put(F,K,w),m++%xz===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(V=>g.startsWith?.(V+"/"))){E.put(g,N);let[,V]=g.split("/"),$=!V,F=new UC(!$,$);await S(g,F)}e.include_audit&&await S(Fz,Object.assign({},qz)),await f;let A=MC(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=vz(o.path);return o.transaction(()=>{let _=Buffer.alloc(qS);Uz(c,_,0,qS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=MC(null,{fd:c,start:qS}),f=new Pz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(kz,"getBackup")});var GC=T((qme,qC)=>{"use strict";var $z=U(),{handleHDBError:Vz}=Z(),Yz=rI(),Kz=Bd(),Wz=aS(),Qz=JI(),jz=Hu(),zz=ES(),Jz=Ow(),Xz=Pw(),Zz=Fu(),eJ=Fw(),tJ=Jw(),rJ=sC(),sJ=iC(),nJ=uC(),iJ=mC(),oJ=AS(),aJ=gC(),cJ=yC(),uJ=wC(),HC=PC(),lJ=BC(),GS=class extends Yz{static{a(this,"LMDBBridge")}async searchByConditions(t){return eJ(t)}async getDataByHash(t){return await zz(t)}async searchByHash(t){return await Jz(t)}async getDataByValue(t,r){return await Xz(t,r)}async searchByValue(t){return await Zz(t)}async createSchema(t){return await Qz(t)}async dropSchema(t){return await tJ(t)}async createTable(t,r){return await rJ(t,r)}async dropTable(t){return await oJ(t)}async createAttribute(t){return await Kz(t)}async createRecords(t){return await Wz(t)}async updateRecords(t){return await sJ(t)}async upsertRecords(t){try{return await nJ(t)}catch(r){throw Vz(r,null,null,$z.ERR,r)}}async deleteRecords(t){return await jz(t)}async dropAttribute(t){return await aJ(t)}async deleteAuditLogsBefore(t){return await iJ(t)}async readAuditLog(t){return await cJ(t)}writeTransaction(t,r,s){return uJ.writeTransaction(t,r,s)}flush(t,r){return HC.flush(t,r)}resetReadTxn(t,r){return HC.resetReadTxn(t,r)}getBackup(t){return lJ(t)}};qC.exports=GS});var QC={};Fe(QC,{ResourceBridge:()=>kS});function $S({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 xC(e,t){let r=_n(e),s=$S(e,r);if(!r)throw new Bs.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;We(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&ld(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function _n(e){let t=e.database||e.schema||dJ,r=Hs()[t];if(!r)throw(0,Bs.handleHDBError)(new Error,_J.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function kC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*$C(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var VC,jd,Bs,YC,KC,qs,FS,xS,WC,_J,dJ,fJ,EJ,FC,kS,jC=Re(()=>{"use strict";VC=D(GC()),jd=D(Ha()),Bs=D(Z());Ee();YC=D(Cu()),KC=D(Uu()),qs=D(R()),FS=D(Vn()),xS=D(Us()),WC=D(G());No();_d();({HDB_ERROR_MSGS:_J}=Bs.hdb_errors),dJ="data",fJ=1e4,EJ=10,kS=class extends VC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),FC=this}async searchByConditions(t){let r=(0,jd.default)(t,"conditions");if(r)throw(0,Bs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=_n(t);if(!s)throw new Bs.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:$S(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Bs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ut({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await _n(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=_n(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){_n(t).dropTable()}createSchema(t){return Ku({database:t.schema,table:null}),FS.signalSchemaChange(new xS.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await VS(t.schema),FS.signalSchemaChange(new xS.SchemaEventMsg(process.pid,qs.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,FC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,YC.default)(t);(0,KC.default)(t,s,r.primaryKey);let n,i=Hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=ld(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Hs()[t.schema][t.table],s={user:t.hdb_user};return We(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return kC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Bs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:qs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,WC.async_set_timeout)(EJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%fJ===0&&await _();return u.length>0&&await _(),n?kC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,jd.default)(t,"hashes");if(r)throw r;return xC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of xC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&qs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,jd.default)(t,"value");if(s)throw s;let n=_n(t);if(!n)throw new Bs.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===qs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:$S(t,n)})}async getDataByValue(t,r){let s=new Map,n=_n(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){_n({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return _n(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=_n(t),s={};switch(t.search_type){case qs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case qs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of $C(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return $C(r,t.search_values?.[0],t.search_values?.[1])}}};a($S,"getSelect");a(xC,"getRecords");a(_n,"getTable");a(kC,"createDeleteResponse");a($C,"groupRecordsInHistory")});var as=T((Vme,zC)=>{"use strict";var{ResourceBridge:hJ}=(jC(),te(QC)),mJ=j();mJ.initSync();var zd;function pJ(){return zd||(zd=new hJ,zd)}a(pJ,"getBridge");zC.exports=pJ()});var eL=T((Kme,ZC)=>{"use strict";var JC=require("lodash"),Wu=require("mathjs"),SJ=require("jsonata"),XC=G();ZC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?JC.uniqWith(e,JC.isEqual):e,searchJSON:TJ,mad:Qu.bind(null,Wu.mad),mean:Qu.bind(null,Wu.mean),mode:Qu.bind(null,Wu.mode),prod:Qu.bind(null,Wu.prod),median:Qu.bind(null,Wu.median)};function Qu(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Qu,"aggregateFunction");function TJ(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(XC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),XC.isEmpty(this.__ala__.res[r])){let s=SJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(TJ,"searchJSON")});var rL=T((Qme,tL)=>{"use strict";var lt=require("moment"),YS="YYYY-MM-DDTHH:mm:ss.SSSZZ";lt.suppressDeprecationWarnings=!0;tL.exports={current_date:()=>lt().utc().format("YYYY-MM-DD"),current_time:()=>lt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return lt(e).utc().format("YYYY");case"month":return lt(e).utc().format("MM");case"day":return lt(e).utc().format("DD");case"hour":return lt(e).utc().format("HH");case"minute":return lt(e).utc().format("mm");case"second":return lt(e).utc().format("ss");case"millisecond":return lt(e).utc().format("SSS");default:break}},date:e=>lt(e).utc().format(YS),date_format:(e,t)=>lt(e).utc().format(t),date_add:(e,t,r)=>lt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>lt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=lt(e).utc(),n=lt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>lt().utc().valueOf(),get_server_time:()=>lt().format(YS),offset_utc:(e,t)=>lt(e).utc().utcOffset(t).format(YS)}});var oL=T((jme,iL)=>{"use strict";var gJ=require("@turf/area"),RJ=require("@turf/length"),AJ=require("@turf/circle"),OJ=require("@turf/difference"),NJ=require("@turf/distance"),bJ=require("@turf/boolean-contains"),yJ=require("@turf/boolean-equal"),IJ=require("@turf/boolean-disjoint"),wJ=require("@turf/helpers"),sL=R(),le=G(),Wn=U();iL.exports={geoArea:CJ,geoLength:LJ,geoCircle:DJ,geoDifference:PJ,geoDistance:nL,geoNear:MJ,geoContains:UJ,geoEqual:vJ,geoCrosses:BJ,geoConvert:HJ};function CJ(e){if(le.isEmpty(e))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e));try{return gJ.default(e)}catch(t){return Wn.trace(t,e),NaN}}a(CJ,"geoArea");function LJ(e,t){if(le.isEmpty(e))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e));try{return RJ.default(e,{units:t||"kilometers"})}catch(r){return Wn.trace(r,e),NaN}}a(LJ,"geoLength");function DJ(e,t,r){if(le.isEmpty(e))return NaN;if(le.isEmpty(t))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e));try{return AJ.default(e,t,{units:r||"kilometers"})}catch(s){return Wn.trace(s,e,t),NaN}}a(DJ,"geoCircle");function PJ(e,t){if(le.isEmpty(e))return NaN;if(le.isEmpty(t))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return OJ(e,t)}catch(r){return Wn.trace(r,e,t),NaN}}a(PJ,"geoDifference");function nL(e,t,r){if(le.isEmpty(e))return NaN;if(le.isEmpty(t))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return NJ.default(e,t,{units:r||"kilometers"})}catch(s){return Wn.trace(s,e,t),NaN}}a(nL,"geoDistance");function MJ(e,t,r,s){if(le.isEmpty(e)||le.isEmpty(t))return!1;if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return nL(e,t,s)<=r}catch(n){return Wn.trace(n,e,t),!1}}a(MJ,"geoNear");function UJ(e,t){if(le.isEmpty(e)||le.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return bJ.default(e,t)}catch(r){return Wn.trace(r,e,t),!1}}a(UJ,"geoContains");function vJ(e,t){if(le.isEmpty(e)||le.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return yJ.default(e,t)}catch(r){return Wn.trace(r,e,t),!1}}a(vJ,"geoEqual");function BJ(e,t){if(le.isEmpty(e)||le.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return!IJ.default(e,t)}catch(r){return Wn.trace(r,e,t),!1}}a(BJ,"geoCrosses");function HJ(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty(sL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sL.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=le.autoCastJSON(e)),wJ[t](e,r)}a(HJ,"geoConvert")});var Jd=T((Jme,aL)=>{var Po=eL(),Hr=rL(),dn=oL();aL.exports=e=>{e.aggr.mad=e.aggr.MAD=Po.mad,e.aggr.mean=e.aggr.MEAN=Po.mean,e.aggr.mode=e.aggr.MODE=Po.mode,e.aggr.prod=e.aggr.PROD=Po.prod,e.aggr.median=e.aggr.MEDIAN=Po.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Po.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Po.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=dn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=dn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=dn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=dn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=dn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=dn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=dn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=dn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=dn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=dn.geoNear}});var _L=T((Xme,lL)=>{"use strict";var ju=require("lodash"),lr=require("alasql");lr.options.cache=!1;var qJ=Jd(),cL=require("clone"),Xd=require("recursive-iterator"),ne=U(),_e=G(),Fa=as(),GJ=R(),{hdb_errors:FJ}=Z(),{getDatabases:uL}=(Ee(),te(Le)),xJ="IS NULL",Gs="There was a problem performing this search. Please check the logs and try again.";qJ(lr);var KS=class{static{a(this,"SQLSearch")}constructor(t,r){if(_e.isEmpty(t))throw ne.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(),_e.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!_e.isEmptyOrZeroLength(s))return ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error(Gs)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error(Gs)}}_getColumns(){let t=new Xd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(cL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ju.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=uL()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(_e.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Xd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!_e.isEmpty(r)&&r.right)if(_e.isNotEmptyAndHasValue(r.right.value)){let s=_e.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=_e.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&_e.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Xd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!_e.isEmpty(GJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(_e.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(_e.isEmptyOrZeroLength(r.left.columnid)||_e.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(_e.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"=":!_e.isEmpty(r.right.value)||!_e.isEmpty(r.left.value)?s.add(_e.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(_e.isEmptyOrZeroLength(this.all_table_attributes)&&_e.isEmptyOrZeroLength(this.statement.from)&&_e.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&ju.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(_e.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);_e.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(_e.isEmptyOrZeroLength(this.all_table_attributes)&&!_e.isEmptyOrZeroLength(this.columns.columns))return t;if(_e.isEmptyOrZeroLength(this.all_table_attributes)&&_e.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(cL(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(_e.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(xJ)>-1&&this.tables.forEach(n=>{let i={columnid:uL()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ju.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!_e.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!_e.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Fa.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Gs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Fa.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,_e.autoCast(E)))}))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Gs)}else if(!_e.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!_e.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Fa.getDataByValue(c,E.operation);if(u)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,_e.autoCast(m)));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,S[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,_e.autoCast(m)))}}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(l),new Error(Gs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Fa.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,_e.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,_e.autoCast(d)))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(l),new Error(Gs)}}}_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 lr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=ju.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=m.length;S<A;S++){let g=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Xd(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=ju.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error(Gs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Fa.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let m=n.columns[h],S=E[m]===void 0?null:E[m];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();ne.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ne.error(FJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Fa.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error(Gs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};lL.exports=KS});var _r=T((epe,dL)=>{"use strict";var kJ=eI();dL.exports={searchByConditions:VJ,searchByHash:YJ,searchByValue:KJ,search:WJ};var WS=as(),{transformReq:QS}=G(),$J=_L();async function VJ(e){return QS(e),WS.searchByConditions(e)}a(VJ,"searchByConditions");async function YJ(e){QS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of WS.searchByHash(e))r&&t.push(r);return t}a(YJ,"searchByHash");async function KJ(e){QS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of WS.searchByValue(e))t.push(r);return t}a(KJ,"searchByValue");function WJ(e,t){try{let r=new kJ(e);r.validate(),new $J(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(WJ,"search")});var Qn=T((rpe,mL)=>{"use strict";var zu=require("crypto"),QJ=j(),{CONFIG_PARAMS:jJ}=R(),EL="aes-256-cbc",zJ=32,JJ=16,jS=64,hL=32,XJ=jS+hL,fL=new Map;mL.exports={encrypt:ZJ,decrypt:e2,createNatsTableStreamName:t2};function ZJ(e){let t=zu.randomBytes(zJ),r=zu.randomBytes(JJ),s=zu.createCipheriv(EL,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(ZJ,"encrypt");function e2(e){let t=e.substr(0,jS),r=e.substr(jS,hL),s=e.substr(XJ,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=zu.createDecipheriv(EL,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(e2,"decrypt");function t2(e,t){let r=QJ.get(jJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=fL.get(r);return s||(s=zu.createHash("md5").update(r).digest("hex"),fL.set(r,s)),s}a(t2,"createNatsTableStreamName")});var Ui=T((ipe,SL)=>{"use strict";var npe=_r(),Zd=U(),pL=Ud(),r2=Qn(),ef=G(),{handleHDBError:tf,hdb_errors:s2}=Z(),{HDB_ERROR_MSGS:rf,HTTP_STATUS_CODES:zS}=s2,n2=j();n2.initSync();var{getDatabases:JS}=(Ee(),te(Le));SL.exports={describeAll:i2,describeTable:sf,describeSchema:o2};async function i2(e){try{let t=ef.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=JS(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await sf({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await sf({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Zd.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Zd.error("Got an error in describeAll"),Zd.error(t),tf(new Error,rf.DESCRIBE_ALL_ERR)}}a(i2,"describeAll");async function sf(e,t){ef.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=pL.describe_table(e);if(i)throw i;let c=JS()[r];if(!c)throw tf(new Error,rf.SCHEMA_NOT_FOUND(e.schema),zS.NOT_FOUND);let u=c[s];if(!u)throw tf(new Error,rf.TABLE_NOT_FOUND(e.schema,e.table),zS.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=r2.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Zd.warn(`unable to stat table dbi due to ${f}`)}return d}a(sf,"descTable");async function o2(e){ef.transformReq(e);let t=pL.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=JS()[s];if(!i)throw tf(new Error,rf.SCHEMA_NOT_FOUND(e.schema),zS.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),ef.isEmpty(u)||u.describe){let _=await sf({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(o2,"describeSchema")});var cs=T((upe,OL)=>{var a2=Fn(),{callbackify:gL,promisify:c2}=require("util"),{getDatabases:RL}=(Ee(),te(Le));OL.exports={setSchemaDataToGlobal:TL,getTableSchema:u2,getSystemSchema:l2,setSchemaDataToGlobalAsync:c2(TL)};var AL=Ui(),ape=gL(AL.describeAll),cpe=gL(AL.describeTable);function TL(e){global.hdb_schema=RL(),e&&e()}a(TL,"setSchemaDataToGlobal");function u2(e,t,r){let s=RL()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(u2,"getTableSchema");function l2(){return a2}a(l2,"getSystemSchema")});var dr=T((_pe,IL)=>{"use strict";var of=Xp(),vt=G(),_2=require("util"),af=as(),d2=cs(),NL=U(),{handleHDBError:Mo,hdb_errors:f2}=Z(),{HTTP_STATUS_CODES:Uo}=f2,E2=_2.promisify(d2.getTableSchema),h2="updated",bL="inserted",yL="upserted";IL.exports={insert:p2,update:S2,upsert:T2,validation:m2,flush:g2};async function m2(e){if(vt.isEmpty(e))throw new Error("invalid update parameters defined.");if(vt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(vt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await E2(e.schema,e.table),r=of(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&vt.isEmptyOrZeroLength(c[s]))throw NL.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(!vt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw NL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!vt.isEmpty(c[s])&&c[s]!==""&&n.has(vt.autoCast(c[s]))&&(c.skip=!0),n.add(vt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(m2,"validation");async function p2(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=of(e);if(t)throw Mo(new Error,t.message,Uo.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Mo(new Error,r,Uo.BAD_REQUEST);let s=await af.createRecords(e);return nf(bL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(p2,"insertData");async function S2(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=of(e);if(t)throw Mo(new Error,t.message,Uo.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Mo(new Error,r,Uo.BAD_REQUEST);let s=await af.updateRecords(e);return vt.isEmpty(s.existing_rows)?nf(h2,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):nf(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(S2,"updateData");async function T2(e){if(e.operation!=="upsert")throw Mo(new Error,"invalid operation, must be upsert",Uo.INTERNAL_SERVER_ERROR);let t=of(e);if(t)throw Mo(new Error,t.message,Uo.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Mo(new Error,r,Uo.BAD_REQUEST);let s=await af.upsertRecords(e);return nf(yL,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(T2,"upsertData");function nf(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===bL?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===yL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(nf,"returnObject");function g2(e){return vt.transformReq(e),af.flush(e.schema,e.table)}a(g2,"flush")});var ZS=T((fpe,LL)=>{var R2=Ve(),XS=require("joi"),{hdb_table:A2,hdb_database:wL}=cn(),CL={schema:wL,database:wL,table:A2},O2={date:XS.date().iso().required()},N2={timestamp:XS.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};LL.exports=function(e,t){let r=t==="timestamp"?{...CL,...N2}:{...CL,...O2},s=XS.object(r);return R2.validateBySchema(e,s)}});var ML=T((Epe,PL)=>{var b2=Ve(),eT=require("joi"),{hdb_table:y2,hdb_database:DL}=cn(),I2=eT.object({schema:DL,database:DL,table:y2,hash_values:eT.array().required(),ids:eT.array()});PL.exports=function(e){return b2.validateBySchema(e,I2)}});var nT=T((hpe,UL)=>{"use strict";var tT=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},rT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},sT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};UL.exports={InsertObject:tT,NoSQLSeachObject:rT,DeleteResponseObject:sT}});var Ho=T((ppe,GL)=>{"use strict";var BL=ZS(),w2=ML(),vo=G(),vL=require("moment"),HL=U(),{promisify:C2,callbackify:L2}=require("util"),Bo=R(),D2=cs(),iT=C2(D2.getTableSchema),oT=as(),{DeleteResponseObject:P2}=nT(),{handleHDBError:vi,hdb_errors:M2}=Z(),{HDB_ERROR_MSGS:cf,HTTP_STATUS_CODES:Bi}=M2,U2="records successfully deleted",v2=L2(qL);GL.exports={delete:v2,deleteRecord:qL,deleteFilesBefore:B2,deleteAuditLogsBefore:H2};async function B2(e){let t=BL(e,"date");if(t)throw vi(t,t.message,Bi.BAD_REQUEST,void 0,void 0,!0);if(vo.transformReq(e),!vL(e.date,vL.ISO_8601).isValid())throw vi(new Error,cf.INVALID_DATE,Bi.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,cf.INVALID_DATE,!0);let s=vo.checkSchemaTableExist(e.schema,e.table);if(s)throw vi(new Error,s,Bi.NOT_FOUND,Bo.LOG_LEVELS.ERROR,s,!0);let n=await oT.deleteRecordsBefore(e);if(await iT(e.schema,e.table),HL.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(B2,"deleteFilesBefore");async function H2(e){let t=BL(e,"timestamp");if(t)throw vi(t,t.message,Bi.BAD_REQUEST,void 0,void 0,!0);if(vo.transformReq(e),isNaN(e.timestamp))throw vi(new Error,cf.INVALID_VALUE("Timestamp"),Bi.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,cf.INVALID_VALUE("Timestamp"),!0);let r=vo.checkSchemaTableExist(e.schema,e.table);if(r)throw vi(new Error,r,Bi.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);let s=await oT.deleteAuditLogsBefore(e);return await iT(e.schema,e.table),HL.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(H2,"deleteAuditLogsBefore");async function qL(e){e.ids&&(e.hash_values=e.ids);let t=w2(e);if(t)throw vi(t,t.message,Bi.BAD_REQUEST,void 0,void 0,!0);vo.transformReq(e);let r=vo.checkSchemaTableExist(e.schema,e.table);if(r)throw vi(new Error,r,Bi.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);try{await iT(e.schema,e.table);let s=await oT.deleteRecords(e);return vo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${U2}`),s}catch(s){if(s.message===Bo.SEARCH_NOT_FOUND_MESSAGE){let n=new P2;return n.message=Bo.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(qL,"deleteRecord")});var uf=T((Tpe,kL)=>{var q2=require("crypto"),FL=9;function G2(e){let t=x2(FL),r=xL(e+t);return t+r}a(G2,"createHash");function F2(e,t){let r=e.substr(0,FL),s=r+xL(t+r);return e===s}a(F2,"validateHash");function x2(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(x2,"generateSalt");function xL(e){return q2.createHash("md5").update(e).digest("hex")}a(xL,"md5");kL.exports={hash:G2,validate:F2}});var VL=T((Rpe,$L)=>{var aT=Ve(),Qt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function k2(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,aT.validateObject(e,Qt)}a(k2,"addUserValidation");function $2(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,aT.validateObject(e,Qt)}a($2,"alterUserValidation");function V2(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,aT.validateObject(e,Qt)}a(V2,"dropUserValidation");$L.exports={addUserValidation:k2,alterUserValidation:$2,dropUserValidation:V2}});var ke=T((Npe,KL)=>{"use strict";var{platform:Ope}=require("os"),Y2="nats-server.zip",cT="nats-server",K2=process.platform==="win32"?`${cT}.exe`:cT,uT="HDB",W2=/^[^\s.,*>]+$/,YL="__request__",Q2=a(e=>`${e}.${YL}`,"REQUEST_SUBJECT"),j2={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},z2={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},J2={HUB:"hub.pid",LEAF:"leaf.pid"},X2={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Z2={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:uT,deliver_subject:"__HDB__.WORKQUEUE"},e4={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:uT,deliver_subject:"HDB.SCHEMAQUEUE"},t4={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:uT,deliver_subject:"HDB.USERQUEUE"},r4={SUCCESS:"success",ERROR:"error"},s4={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},n4={TXN:"txn",MSGID:"msgid"},xa={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},i4={[xa.ERR]:1,[xa.WRN]:2,[xa.INF]:3,[xa.DBG]:4,[xa.TRC]:5},o4={debug:"-D",trace:"-DVV"};KL.exports={NATS_SERVER_ZIP:Y2,NATS_SERVER_NAME:cT,NATS_BINARY_NAME:K2,PID_FILES:J2,NATS_CONFIG_FILES:z2,SERVER_SUFFIX:X2,WORK_QUEUE_CONSUMER_NAMES:Z2,SCHEMA_QUEUE_CONSUMER_NAMES:e4,USER_QUEUE_CONSUMER_NAMES:t4,NATS_TERM_CONSTRAINTS_RX:W2,REQUEST_SUFFIX:YL,UPDATE_REMOTE_RESPONSE_STATUSES:r4,CLUSTER_STATUS_STATUSES:s4,REQUEST_SUBJECT:Q2,SUBJECT_PREFIXES:n4,MSG_HEADERS:j2,LOG_LEVELS:xa,LOG_LEVEL_FLAGS:o4,LOG_LEVEL_HIERARCHY:i4}});var lT=T((ype,WL)=>{"use strict";var a4={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
2
+ "use strict";var D$=Object.create;var Nl=Object.defineProperty;var P$=Object.getOwnPropertyDescriptor;var M$=Object.getOwnPropertyNames;var U$=Object.getPrototypeOf,v$=Object.prototype.hasOwnProperty;var a=(e,t)=>Nl(e,"name",{value:t,configurable:!0});var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Nl(e,r,{get:t[r],enumerable:!0})},Ab=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of M$(t))!v$.call(e,s)&&s!==r&&Nl(e,s,{get:()=>t[s],enumerable:!(n=P$(t,s))||n.enumerable});return e};var U=(e,t,r)=>(r=e!=null?D$(U$(e)):{},Ab(t||!e||!e.__esModule?Nl(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>Ab(Nl({},"__esModule",{value:!0}),e);var bb=T((Zfe,Nb)=>{var B$=require("fast-glob"),{statSync:Sp,existsSync:Tp,readFileSync:H$,writeFileSync:q$}=require("fs"),{spawnSync:x$,spawn:G$,execFileSync:Xfe}=require("child_process"),{isMainThread:F$}=require("worker_threads"),{join:Fi,relative:Ob}=require("path"),{PACKAGE_ROOT:Jn}=b(),{tmpdir:k$,platform:$$}=require("os");require("source-map-support").install();var V$=["resources","server","dataLayer","components"],bl="ts-build",gp,Y$=__filename.endsWith("tsBuild.js");if(Y$){if(F$){let r;try{Sp(Fi(Jn,bl)),r=!0}catch{}if(r)for(let n of B$.sync(V$.map(s=>s+"/**/*.ts"),{cwd:Jn})){let s=0,i=0;try{s=Sp(Fi(Jn,n)).mtimeMs-5e3,i=Sp(Fi(Jn,bl,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."),gp=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),gp=!0;if(gp){let n=Fi(Jn,"node_modules/.bin/tsc");$$()==="win32"&&(n+=".cmd");let s=x$(n,{cwd:Jn});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let i=Fi(k$(),"harperdb-tsc.pid"),o;if(Tp(i))try{process.kill(+H$(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=G$(n,["--watch"],{cwd:Jn,detached:!0,stdio:"ignore"});q$(i,c.pid.toString()),c.unref()}}}}let e=Nb.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Jn)&&!n[0].includes("node_modules")){let i=Ob(Jn,n[0]),o;i.startsWith(bl)?o=Fi(Jn,Ob(bl,i)):o=Fi(Jn,bl,i);let c=Fi(o,r),l=c+".js";if(Tp(l))return l;if(c.includes(".")&&Tp(c))return c}return t(r,n,s)}}});var b=T((rEe,xb)=>{"use strict";var Nn=require("path"),K$=require("fs"),{relative:eEe,join:tEe}=Nn,{existsSync:W$}=K$;function Q$(){let e=__dirname;for(;!W$(Nn.join(e,"package.json"));){let t=Nn.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Q$,"getHDBPackageRoot");var ki=Q$(),yb="js",Dd=yb,j$="harperdb-config.yaml",z$="defaultConfig.yaml",J$="hdb",Ib=`harperdb.${Dd}`,wb=`customFunctionsServer.${Dd}`,X$=`restartHdb.${Dd}`,Ap="HarperDB",Ld="Custom Functions",Pd="Clustering Hub",Md="Clustering Leaf",Z$="Clustering Ingest Service",eV="Clustering Reply Service",tV="foreground.pid",rV="hdb.pid",nV="data",sV={HDB:Ap,CLUSTERING_HUB:Pd,CLUSTERING_LEAF:Md,CLUSTERING_INGEST_SERVICE:Z$,CLUSTERING_REPLY_SERVICE:eV,CUSTOM_FUNCTIONS:Ld,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},iV={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},oV={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},aV={harperdb:Ap,"clustering hub":Pd,"clustering leaf":Md,"custom functions":Ld,custom_functions:Ld,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},cV={CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md},Rp={HDB:Nn.join(ki,"server/harperdb"),CUSTOM_FUNCTIONS:Nn.join(ki,"server/customFunctions"),CLUSTERING_HUB:Nn.join(ki,"server/nats"),CLUSTERING_LEAF:Nn.join(ki,"server/nats")},lV={HDB:Nn.join(Rp.HDB,Ib),CUSTOM_FUNCTIONS:Nn.join(Rp.CUSTOM_FUNCTIONS,wb)},uV={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Nn.join(ki,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Nn.join(ki,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Nn.join(ki,"launchServiceScripts/launchUpdateNodes4-0-0.js")},_V={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Cb="support@harperdb.io",dV="customer-success@harperdb.io",Lb=1,fV=4141,Db="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",EV="https://www.harperdb.io/product",hV=`For support, please submit a request at ${Db} or contact ${Cb}`,Pb=`For license support, please contact ${dV}`,mV="None of the specified records were found.",pV="hash attribute not found",SV=`Your current license only supports ${Lb} role. ${Pb}`,TV="Your current license only supports 3 connections to a node.",gV="127.0.0.1",RV=1,AV=/^\.$/,OV=/^\.\.$/,NV="U+002E",bV=/\//g,yV="U+002F",IV=/U\+002F/g,wV=/^U\+002E$/,CV=/^U\+002EU\+002E$/,LV="d",DV=999999,PV="*",MV="--max-old-space-size=",UV="system",vV="__hdb_hash",BV=".harperdb",HV=".hdb",qV="keys",xV="hdb_boot_properties.file",GV=".updateConfig.json",FV="SIGTSTP",kV=24,$V=6e4,VV=448,YV="blob",KV="trash",WV="database",QV="schema",jV="transactions",zV=".count",JV="id",XV="PROCESS_NAME",Mb={SETTINGS_PATH_KEY:"settings_path"},Ub=require("lodash"),ZV={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},eY={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},tY={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},rY={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"},nY={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"},Qr="hdb_internal:",sY={CREATE_SCHEMA:Qr+"create_schema",CREATE_TABLE:Qr+"create_table",CREATE_ATTRIBUTE:Qr+"create_attribute",ADD_USER:Qr+"add_user",ALTER_USER:Qr+"alter_user",DROP_USER:Qr+"drop_user",HDB_NODES:Qr+"hdb_nodes",HDB_USERS:Qr+"hdb_users",HDB_WORKERS:Qr+"hdb_workers",CATCHUP:Qr+"catchup",SCHEMA_CATCHUP:Qr+"schema_catchup",WORKER_ROOM:Qr+"cluster_workers"},iY={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"},oY="060493.ks",aY=".license",cY={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},lY={CSV:".csv",JSON:".json"},uY={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},_Y={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},yl={};yl[J.INSERT]=J.INSERT;yl[J.UPDATE]=J.UPDATE;yl[J.UPSERT]=J.UPSERT;yl[J.DELETE]=J.DELETE;var He=Object.create(null);He[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;He[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;He[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;He[J.READ_LOG]=J.READ_LOG;He[J.ADD_NODE]=J.ADD_NODE;He[J.LIST_USERS]=J.LIST_USERS;He[J.LIST_ROLES]=J.LIST_ROLES;He[J.USER_INFO]=J.USER_INFO;He[J.SQL]=J.SQL;He[J.GET_JOB]=J.GET_JOB;He[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;He[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;He[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;He[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;He[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;He[J.REMOVE_NODE]=J.REMOVE_NODE;He[J.RESTART]=J.RESTART;He[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;He[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;He[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;He[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;He[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;He[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;He[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;He[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;He[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var dY={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"},fY={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},vb={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"},EY=Ub.invert(vb),hY={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"},I={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",MAXHEAPMEMORY:"maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers"},Bb={settings_path:Mb.SETTINGS_PATH_KEY,hdb_root_key:I.ROOTPATH,hdb_root:I.ROOTPATH,rootpath:I.ROOTPATH,server_port_key:I.OPERATIONSAPI_NETWORK_PORT,server_port:I.OPERATIONSAPI_NETWORK_PORT,cert_key:I.TLS_CERTIFICATE,certificate:I.TLS_CERTIFICATE,private_key_key:I.TLS_PRIVATEKEY,private_key:I.TLS_PRIVATEKEY,http_secure_enabled_key:I.OPERATIONSAPI_NETWORK_HTTPS,https_on:I.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:I.OPERATIONSAPI_NETWORK_CORS,cors_on:I.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:I.LOGGING_LEVEL,log_level:I.LOGGING_LEVEL,log_path_key:I.LOGGING_ROOT,log_path:I.LOGGING_ROOT,clustering_node_name_key:I.CLUSTERING_NODENAME,node_name:I.CLUSTERING_NODENAME,clustering_enabled_key:I.CLUSTERING_ENABLED,clustering:I.CLUSTERING_ENABLED,max_http_threads:I.THREADS,max_hdb_processes:I.THREADS,server_timeout_key:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:I.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:I.LOGGING_AUDITLOG,disable_transaction_log:I.LOGGING_AUDITLOG,operation_token_timeout_key:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:I.HTTP_PORT,custom_functions_port:I.HTTP_PORT,custom_functions_directory_key:I.COMPONENTSROOT,custom_functions_directory:I.COMPONENTSROOT,max_custom_function_processes:I.THREADS,log_to_file:I.LOGGING_FILE,log_to_stdstreams:I.LOGGING_STDSTREAMS,local_studio_on:I.LOCALSTUDIO_ENABLED,clustering_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:I.CLUSTERING_USER,clustering_enabled:I.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:I.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:I.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:I.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:I.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:I.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:I.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:I.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:I.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:I.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:I.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:I.CLUSTERING_NODENAME,clustering_tls_certificate:I.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:I.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:I.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:I.CLUSTERING_TLS_INSECURE,clustering_tls_verify:I.CLUSTERING_TLS_VERIFY,clustering_loglevel:I.CLUSTERING_LOGLEVEL,clustering_republishmessages:I.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:I.CLUSTERING_DATABASELEVEL,customfunctions_network_port:I.HTTP_PORT,customfunctions_tls_certificate:I.TLS_CERTIFICATE,customfunctions_network_cors:I.HTTP_CORS,customfunctions_network_corsaccesslist:I.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:I.HTTP_HEADERSTIMEOUT,customfunctions_network_https:I.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:I.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:I.HTTP_TIMEOUT,http_threads:I.THREADS,threads:I.THREADS,maxheapmemory:I.MAXHEAPMEMORY,http_session_affinity:I.HTTP_SESSIONAFFINITY,http_compressionthreshold:I.HTTP_COMPRESSIONTHRESHOLD,http_cors:I.HTTP_CORS,http_corsaccesslist:I.HTTP_CORSACCESSLIST,http_headerstimeout:I.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:I.HTTP_KEEPALIVETIMEOUT,http_timeout:I.HTTP_TIMEOUT,http_port:I.HTTP_PORT,http_secureport:I.HTTP_SECUREPORT,customfunctions_processes:I.THREADS,customfunctions_root:I.COMPONENTSROOT,localstudio_enabled:I.LOCALSTUDIO_ENABLED,logging_file:I.LOGGING_FILE,logging_level:I.LOGGING_LEVEL,logging_root:I.LOGGING_ROOT,logging_rotation_enabled:I.LOGGING_ROTATION_ENABLED,logging_rotation_compress:I.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:I.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:I.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:I.LOGGING_ROTATION_PATH,logging_stdstreams:I.LOGGING_STDSTREAMS,logging_auditlog:I.LOGGING_AUDITLOG,logging_auditretention:I.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:I.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:I.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:I.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:I.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:I.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:I.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:I.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:I.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:I.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:I.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:I.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:I.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:I.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:I.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:I.ROOTPATH,databases:I.DATABASES,storage_path:I.STORAGE_PATH,ignorescripts:I.IGNORE_SCRIPTS,mqtt_network_port:I.MQTT_NETWORK_PORT,mqtt_websocket:I.MQTT_WEBSOCKET,mqtt_network_secureport:I.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:I.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:I.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:I.MQTT_NETWORK_MTLS_USER,mqtt_requireauthentication:I.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:I.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:I.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:I.AUTHENTICATION_CACHETTL,authentication_enablesessions:I.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:I.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:I.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:I.COMPONENTSROOT,tls_certificate:I.TLS_CERTIFICATE,tls_privatekey:I.TLS_PRIVATEKEY,tls_certificateauthority:I.TLS_CERTIFICATEAUTHORITY,tls_ciphers:I.TLS_CIPHERS};for(let e in I){let t=I[e];Bb[t.toLowerCase()]=t}var mY={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},pY={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},SY={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"},TY={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},gY={VERSION_DEFAULT:"2.2.0"},RY={DEVELOPMENT:8192,DEFAULT:512},AY={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"},OY={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"},NY={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Hb={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},bY=Symbol("metadata"),yY="__clustering__",IY=Object.values(Hb),wY=15984864e5,qb={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},CY=Ub.invert(qb),LY={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"},DY=111,PY=`\r
3
+ `,MY={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},UY=["*","%"],vY="unauthorized_access",BY="func_val",HY={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},qY={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},xY={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"},GY={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},FY={HTTP:"http"},kY={STOPPED:"stopped",ONLINE:"online"},$Y="3.x.x",VY={SUCCESS:"success",FAILURE:"failure"},YY={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};xb.exports={LOCAL_HARPERDB_OPERATIONS:He,HDB_SUPPORT_ADDRESS:Cb,HDB_SUPPORT_URL:Db,HDB_PRICING_URL:EV,SUPPORT_HELP_MSG:hV,LICENSE_HELP_MSG:Pb,HDB_PROC_NAME:Ib,HDB_PROC_DESCRIPTOR:Ap,CLUSTERING_LEAF_PROC_DESCRIPTOR:Md,CLUSTERING_HUB_PROC_DESCRIPTOR:Pd,SYSTEM_SCHEMA_NAME:UV,HASH_FOLDER_NAME:vV,HDB_HOME_DIR_NAME:BV,UPDATE_FILE_NAME:GV,LICENSE_KEY_DIR_NAME:qV,BOOT_PROPS_FILE_NAME:xV,JOB_TYPE_ENUM:pY,JOB_STATUS_ENUM:cY,SYSTEM_TABLE_NAMES:rY,SYSTEM_TABLE_HASH_ATTRIBUTES:nY,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:lY,S3_BUCKET_AUTH_KEYS:uY,VALID_SQL_OPS_ENUM:_Y,GEO_CONVERSION_ENUM:fY,HDB_SETTINGS_NAMES:vb,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:EY,SERVICE_ACTIONS_ENUM:dY,CLUSTER_MESSAGE_TYPE_ENUM:SY,CLUSTER_CONNECTION_DIRECTION_ENUM:TY,CLUSTER_EVENTS_DEFS_ENUM:AY,PERIOD_REGEX:AV,DOUBLE_PERIOD_REGEX:OV,UNICODE_PERIOD:NV,FORWARD_SLASH_REGEX:bV,UNICODE_FORWARD_SLASH:yV,ESCAPED_FORWARD_SLASH_REGEX:IV,ESCAPED_PERIOD_REGEX:wV,ESCAPED_DOUBLE_PERIOD_REGEX:CV,REG_KEY_FILE_NAME:oY,RESTART_TIMEOUT_MS:$V,HDB_FILE_PERMISSIONS:VV,DATABASES_DIR_NAME:WV,LEGACY_DATABASES_DIR_NAME:QV,TRANSACTIONS_DIR_NAME:jV,LIMIT_COUNT_NAME:zV,ID_ATTRIBUTE_STRING:JV,INSERT_MODULE_ENUM:eY,UPGRADE_JSON_FIELD_NAMES_ENUM:tY,RESTART_CODE:FV,RESTART_CODE_NUM:kV,CLUSTER_OPERATIONS:yl,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:iY,HDB_INTERNAL_SC_CHANNEL_PREFIX:Qr,INTERNAL_SC_CHANNELS:sY,CLUSTERING_MESSAGE_TYPES:LY,HDB_FILE_SUFFIX:HV,BLOB_FOLDER_NAME:YV,HDB_TRASH_DIR:KV,ORIGINATOR_SET_VALUE:DY,LICENSE_VALUES:gY,RAM_ALLOCATION_ENUM:RY,TIME_STAMP_NAMES_ENUM:Hb,TIME_STAMP_NAMES:IY,PERMS_UPDATE_RELEASE_TIMESTAMP:wY,SEARCH_NOT_FOUND_MESSAGE:mV,SEARCH_ATTRIBUTE_NOT_FOUND:pV,LICENSE_ROLE_DENIED_RESPONSE:SV,LICENSE_MAX_CONNS_REACHED:TV,BASIC_LICENSE_MAX_NON_CU_ROLES:Lb,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:fV,VALUE_SEARCH_COMPARATORS:qb,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:CY,LICENSE_FILE_NAME:aY,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:OY,NEW_LINE:PY,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:RV,MOMENT_DAYS_TAG:LV,API_TURNOVER_SEC:DV,LOOPBACK:gV,CODE_EXTENSION:Dd,WILDCARD_SEARCH_VALUE:PV,NODE_ERROR_CODES:NY,JAVASCRIPT_EXTENSION:yb,PERMS_CRUD_ENUM:MY,UNAUTHORIZED_PERMISSION_NAME:vY,SEARCH_WILDCARDS:UY,FUNC_VAL:BY,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:HY,JWT_ENUM:qY,CLUSTERING_FLAG:yY,ITC_EVENT_TYPES:xY,CUSTOM_FUNCTION_PROC_NAME:wb,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ld,SERVICES:GY,THREAD_TYPES:FY,MEM_SETTING_KEY:MV,HDB_RESTART_SCRIPT:X$,PROCESS_DESCRIPTORS:sV,SERVICE_SERVERS:lV,SERVICE_SERVERS_CWD:Rp,PROCESS_DESCRIPTORS_VALIDATE:aV,LAUNCH_SERVICE_SCRIPTS:uV,LOG_LEVELS:oV,PROCESS_NAME_ENV_PROP:XV,LOG_NAMES:iV,PM2_PROCESS_STATUSES:kY,CONFIG_PARAM_MAP:Bb,CONFIG_PARAMS:I,HDB_CONFIG_FILE:j$,HDB_DEFAULT_CONFIG_FILE:z$,ROLE_TYPES_ENUM:_V,BOOT_PROP_PARAMS:Mb,INSTALL_PROMPTS:ZV,HDB_ROOT_DIR_NAME:J$,CLUSTERING_PROCESSES:cV,FOREGROUND_PID_FILE:tV,PACKAGE_ROOT:ki,PRE_4_0_0_VERSION:$Y,DATABASES_PARAM_CONFIG:mY,METADATA_PROPERTY:bY,AUTH_AUDIT_STATUS:VY,AUTH_AUDIT_TYPES:YY,HDB_PID_FILE:rV,DEFAULT_DATABASE_NAME:nV,LEGACY_CONFIG_PARAMS:hY};bb()});var Mo=T((sEe,kb)=>{"use strict";var Gb=require("minimist");kb.exports=KY;function KY(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=Fb(process.env),n=Fb(Gb(process.argv))):(r=process.env,n=Gb(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(KY,"assignCMDENVVariables");function Fb(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(Fb,"objKeysToLowerCase")});var B=T((oEe,Cp)=>{"use strict";var Uo=require("fs-extra"),{workerData:WY,threadId:QY}=require("worker_threads"),ni=require("path"),Yb=require("yaml"),Kb=require("properties-reader"),Pt=b(),$b=Mo(),jY=require("os"),{PACKAGE_ROOT:Np}=b(),{_assignPackageExport:zY}=require("../index"),wl={};for(let e in console)wl[e]||(wl[e]=console[e]);var mr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Wb={STDOUT:"stdOut",STDERR:"stdErr"},JY=ni.join(Np,"logs"),XY=ni.join(Np,"config/yaml/",Pt.HDB_DEFAULT_CONFIG_FILE),ZY=1e4,ri,Os,hr,Ud,vd,Cl,ja,Il;Il===void 0&&Qb();Cp.exports={notify:Jb,fatal:Xb,error:Ll,warn:wp,info:Bd,debug:Ip,trace:yp,setLogLevel:o1,log_level:hr,loggerWithTag:e1,suppressLogging:t1,initLogSettings:Qb,setupConsoleLogging:jb,logCustomLevel:s1,closeLogFile:bp,getLogFilePath:()=>Cl,OUTPUTS:Wb,AuthAuditLog:l1};zY("logger",Cp.exports);function Qb(e=!1){try{if(Il===void 0||e){bp();let t=i1(),r=$b(["ROOTPATH"]);try{Il=Kb(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Uo.pathExistsSync(ni.join(r.ROOTPATH,Pt.HDB_CONFIG_FILE)))throw n}({level:hr,config_log_path:vd,to_file:ri,to_stream:Os}=a1(r.ROOTPATH?ni.join(r.ROOTPATH,Pt.HDB_CONFIG_FILE):Il.get("settings_path"))),Ud=Pt.LOG_NAMES.HDB,Cl=ni.join(vd,Ud)}}catch(t){if(Il=void 0,t.code===Pt.NODE_ERROR_CODES.ENOENT){let r=$b(Object.keys(Pt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Pt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Pt.CONFIG_PARAMS.LOGGING_LEVEL){hr=l;continue}if(c===Pt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Os=l;continue}c===Pt.CONFIG_PARAMS.LOGGING_FILE&&(ri=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=c1();ri=ri===void 0?s:ri,ri=Vb(ri),Os=Os===void 0?i:Os,Os=Vb(Os),hr=hr===void 0?n:hr,vd=JY,Ud=Pt.LOG_NAMES.INSTALL,Cl=ni.join(vd,Ud);return}throw Ll("Error initializing log settings"),Ll(t),t}process.env.DEV_MODE&&(Os=!0),jb()}a(Qb,"initLogSettings");var Op=!0;function jb(){Qa("error",Ll),Qa("warn",wp),Qa("log",Bd),Qa("info",Bd),Qa("debug",Ip),Qa("trace",yp)}a(jb,"setupConsoleLogging");function Qa(e,t){console[e]=function(...r){if(Op&&t(...r),!/PM2 log:|App \[/.test(r[0]))return wl[e](...r)}}a(Qa,"logConsole");function e1(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Jb),fatal:r(Xb),error:r(Ll),warn:r(wp),info:r(Bd),debug:r(Ip),trace:r(yp)};function r(n){return function(...s){return n(t,...s)}}}a(e1,"loggerWithTag");function t1(e){try{Op=!1,e()}finally{Op=!0}}a(t1,"suppressLogging");var r1=WY?.name?.replace(/ /g,"-")||"main";function si(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||r1+"/"+QY);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack:typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
4
+ `}a(si,"createLogRecord");function Dl(e){ri&&zb(e),Os&&process.stdout.write(e)}a(Dl,"logStdOut");function Hd(e){ri&&zb(e),Os&&process.stderr.write(e)}a(Hd,"logStdErr");function zb(e){n1(),ja?Uo.appendFileSync(ja,e):wl.log(e)}a(zb,"logToFile");function bp(){try{Uo.closeSync(ja)}catch{}ja=null}a(bp,"closeLogFile");function n1(){if(!ja){try{if(!Cl)debugger;ja=Uo.openSync(Cl,"a")}catch(e){wl.error(e)}setTimeout(()=>{bp()},ZY).unref()}}a(n1,"openLogFile");function Bd(...e){mr[hr]<=mr.info&&Dl(si("info",e))}a(Bd,"info");function yp(...e){mr[hr]<=mr.trace&&Dl(si("trace",e))}a(yp,"trace");function Ll(...e){mr[hr]<=mr.error&&Hd(si("error",e))}a(Ll,"error");function Ip(...e){mr[hr]<=mr.debug&&Dl(si("debug",e))}a(Ip,"debug");function Jb(...e){mr[hr]<=mr.notify&&Dl(si("notify",e))}a(Jb,"notify");function Xb(...e){mr[hr]<=mr.fatal&&Hd(si("fatal",e))}a(Xb,"fatal");function wp(...e){mr[hr]<=mr.warn&&Hd(si("warn",e))}a(wp,"warn");function s1(e,t,...r){t===Wb.STDERR?Hd(si(e,r)):Dl(si(e,r))}a(s1,"logCustomLevel");function i1(){let e;try{e=jY.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ni.join(e,Pt.HDB_HOME_DIR_NAME,Pt.BOOT_PROPS_FILE_NAME);return Uo.existsSync(t)||(t=ni.join(Np,"utility/hdb_boot_properties.file")),t}a(i1,"getPropsFilePath");function o1(e){hr=e}a(o1,"setLogLevel");function Vb(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Vb,"autoCastBoolean");function a1(e){try{if(e.includes("config/settings.js")){let o=Kb(e);return{level:o.get(Pt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ni.dirname(o.get(Pt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Pt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Pt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Yb.parseDocument(Uo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Pt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(a1,"getLogConfig");function c1(){try{let e=Yb.parseDocument(Uo.readFileSync(XY,"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(c1,"getDefaultConfig");function l1(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(l1,"AuthAuditLog")});var vo=T((cEe,u1)=>{u1.exports={name:"harperdb",version:"4.3.0-alpha.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.477.0","@aws-sdk/lib-storage":"3.477.0","@endo/static-module-record":"^1.0.0","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.25.1","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.2",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.10.0",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.0.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.20","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.15.1",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.3.3","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Bo=T((lEe,Zb)=>{"use strict";Zb.exports={version:_1,printVersion:d1};var qd=vo();function _1(){if(qd)return qd.version}a(_1,"version");function d1(){qd&&console.log(`HarperDB Version ${qd.version}`)}a(d1,"printVersion")});var ry=T((_Ee,ty)=>{"use strict";var ey=require("semver/functions/major"),f1=vo(),Lp=process.versions&&process.versions.node?process.versions.node:void 0;ty.exports=E1;function E1(){let e=f1.engines["minimum-node"];if(Lp&&ey(Lp)<ey(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Lp}. Please install a version of Node.js that is withing the defined range.`}}a(E1,"checkNodeVersion")});var Ho={};je(Ho,{server:()=>Mt});var ny,Mt,jr=Ae(()=>{ny=require("../index"),Mt={};(0,ny._assignPackageExport)("server",Mt)});var Dp=T((fEe,sy)=>{"use strict";var h1=require("util"),m1=require("path"),p1=require("child_process"),S1=h1.promisify(p1.execFile),T1=1e3*1e3*10;sy.exports={findPs:g1};async function g1(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await S1("ps",["wwxo",`pid,${r}`],{maxBuffer:T1});for(let s of n.trim().split(`
5
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:m1.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(g1,"findPs")});var ft=T((hEe,oy)=>{"use strict";var R1="__dbis__",A1="__txns__",O1="__environment_name__",N1="__dbi_defintion__",b1={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"},y1=["__createdtime__","__updatedtime__"],I1="\uFFFF",iy={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},w1=Object.values(iy);oy.exports={AUDIT_STORE_NAME:A1,INTERNAL_DBIS_NAME:R1,DBI_DEFINITION_NAME:N1,SEARCH_TYPES:b1,TIMESTAMP_NAMES:y1,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:O1,TRANSACTIONS_DBI_NAMES_ENUM:iy,TRANSACTIONS_DBIS:w1,OVERFLOW_MARKER:I1}});var zr=T((mEe,hy)=>{"use strict";var ay=b(),cy=ft(),ly={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},uy=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),_y={500:uy("There was an error processing your request."),400:"Invalid request"},C1=_y[ly.INTERNAL_SERVER_ERROR],L1={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.`},D1={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},P1={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"},M1={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 ${cy.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${cy.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"},U1={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ay.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 ${ay.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"},dy={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"},v1={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."},B1={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`},H1={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"},q1={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},x1={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`},fy={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.`},Ey={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}`},G1={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."},F1={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},k1={...dy,...P1,...L1,...v1,...B1,...H1,...q1,...x1,...U1,...fy,...Ey,...G1,...F1,...D1};hy.exports={CHECK_LOGS_WRAPPER:uy,HDB_ERROR_MSGS:k1,DEFAULT_ERROR_MSGS:_y,DEFAULT_ERROR_RESP:C1,HTTP_STATUS_CODES:ly,LMDB_ERRORS_ENUM:M1,AUTHENTICATION_ERROR_MSGS:dy,VALIDATION_ERROR_MSGS:fy,ITC_ERRORS:Ey}});var ee=T((SEe,Sy)=>{"use strict";var za=zr(),$1=B(),V1=b(),xd=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,my),this.statusCode=n||za.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(za.DEFAULT_ERROR_MSGS[n]?za.DEFAULT_ERROR_MSGS[n]:za.DEFAULT_ERROR_MSGS[za.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&&$1[s](i)}},Pp=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}},Mp=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function my(e,t,r,n=V1.LOG_LEVELS.ERROR,s=null,i=!1){if(py(e))return e;let o=new xd(e,t,r,n,s);return i&&delete o.stack,o}a(my,"handleHDBError");function py(e){return e.__proto__.constructor.name===xd.name}a(py,"isHDBError");Sy.exports={isHDBError:py,handleHDBError:my,ClientError:Pp,ServerError:Mp,hdb_errors:za}});var ze=T((gEe,by)=>{"use strict";var Bl=b(),Y1=V(),pr=z(),Hl=require("path"),K1=require("minimist"),Ty=require("fs-extra"),gy=require("lodash");pr.initSync();var{CONFIG_PARAMS:$i,DATABASES_PARAM_CONFIG:Pl,SYSTEM_SCHEMA_NAME:Gd}=Bl,Ml,Ul,vl;function Ry(){if(Ml!==void 0)return Ml;if(pr.getHdbBasePath()!==void 0)return Ml=pr.get($i.STORAGE_PATH)||Hl.join(pr.getHdbBasePath(),Bl.DATABASES_DIR_NAME),Ml}a(Ry,"getBaseSchemaPath");function Ay(){if(Ul!==void 0)return Ul;if(pr.getHdbBasePath()!==void 0)return Ul=Ny(Gd),Ul}a(Ay,"getSystemSchemaPath");function Oy(){if(vl!==void 0)return vl;if(pr.getHdbBasePath()!==void 0)return vl=pr.get(Bl.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Hl.join(pr.getHdbBasePath(),Bl.TRANSACTIONS_DIR_NAME),vl}a(Oy,"getTransactionAuditStoreBasePath");function W1(e,t){let r=pr.get($i.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Hl.join(Oy(),e.toString())}a(W1,"getTransactionAuditStorePath");function Ny(e,t){e=e.toString(),t=t&&t.toString();let r=pr.get(Bl.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Hl.join(Ry(),e)}a(Ny,"getSchemaPath");function Q1(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,K1(process.argv));let n=r[$i.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!Y1.isObject(n))throw o;i=n}for(let o of i){let c=o[Gd];if(!c)continue;let l=pr.get($i.DATABASES);l=l??{};let _=c?.tables?.[t]?.[Pl.PATH];if(_)return gy.set(l,[Gd,Pl.TABLES,t,Pl.PATH],_),pr.setProperty($i.DATABASES,l),_;let u=c?.[Pl.PATH];if(u)return gy.set(l,[Gd,Pl.PATH],u),pr.setProperty($i.DATABASES,l),u}}let s=r[$i.STORAGE_PATH.toUpperCase()];if(s){if(!Ty.pathExistsSync(s))throw new Error(s+" does not exist");let i=Hl.join(s,e);return Ty.mkdirsSync(i),pr.setProperty($i.STORAGE_PATH,s),i}return Ay()}a(Q1,"initSystemSchemaPaths");function j1(){Ml=void 0,Ul=void 0,vl=void 0}a(j1,"resetPaths");by.exports={getBaseSchemaPath:Ry,getSystemSchemaPath:Ay,getTransactionAuditStorePath:W1,getTransactionAuditStoreBasePath:Oy,getSchemaPath:Ny,initSystemSchemaPaths:Q1,resetPaths:j1}});var Sr=T((NEe,Ly)=>{"use strict";var z1=zr().LMDB_ERRORS_ENUM,AEe=require("lmdb"),J1=ft(),OEe=require("buffer").Buffer,{OVERFLOW_MARKER:yy,MAX_SEARCH_KEY_LENGTH:Fd}=J1,Iy=["number","string","symbol","boolean","bigint"];function X1(e){if(e=e?.primaryStore||e,!e)throw new Error(z1.ENV_REQUIRED)}a(X1,"validateEnv");function Z1(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(Z1,"stringifyData");function eK(e){return e instanceof Date?e.valueOf():e}a(eK,"convertKeyValueToWrite");function tK(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Iy.includes(typeof e))return e.length>Fd?[e.slice(0,Fd)+yy]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Iy.includes(typeof i))i.length>Fd?r.push(i.slice(0,Fd)+yy):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(tK,"getIndexedValues");var kd=0,wy=0;function Cy(){wy=Date.now()-performance.now()}a(Cy,"adjustStartTime");Cy();var rK=6e4;setInterval(Cy,rK).unref();function nK(){let e=performance.now()+wy;return e>kd?(kd=e,e):(kd+=488e-6,kd)}a(nK,"getNextMonotonicTime");Ly.exports={validateEnv:X1,stringifyData:Z1,convertKeyValueToWrite:eK,getNextMonotonicTime:nK,getIndexedValues:tK}});var Dy,Xn,Up,ql=Ae(()=>{Dy=require("events"),Xn=class extends Dy.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Up;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},Up=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Jr(e){return e[sr]||(e[sr]=Object.create(null))}function Kd(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[Te])},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 bn.ClientError(`${c} must be a string, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"ID":l=a(function(u){if(!(typeof u=="string"||u?.length>0&&u.every?.(d=>typeof d=="string")||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be a string, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Float":case"Number":l=a(function(u){if(!(typeof u=="number"||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be a number, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Int":l=a(function(u){if(!(u>>0===u||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs((u>>0)-u)<=1)u=Math.round(u);else throw new bn.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Long":l=a(function(u){if(!(Math.round(u)===u&&Math.abs(u)<=9007199254740992||u==null&&o.nullable!==!1))if(typeof u=="number"&&Math.abs(u)<=9007199254740992)u=Math.round(u);else throw new bn.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"BigInt":l=a(function(u){if(!(typeof u=="bigint"||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=BigInt(u);else throw new bn.ClientError(`${c} must be a number, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Boolean":l=a(function(u){if(!(typeof u=="boolean"||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be a boolean, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Date":l=a(function(u){if(!(u instanceof Date||u==null&&o.nullable!==!1))if(typeof u=="string"||typeof u=="number")u=new Date(u);else throw new bn.ClientError(`${c} must be a Date, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Bytes":l=a(function(u){if(!(u instanceof Uint8Array||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${u}`);Jr(this)[c]=u},"set");break;case"Any":case void 0:l=a(function(u){Jr(this)[c]=u},"set");break;default:l=a(function(u){if(!(typeof u=="object"||u==null&&o.nullable!==!1))throw new bn.ClientError(`${c} must be an object, attempt to assign ${u}`);Jr(this)[c]=u},"set")}_={get(){let u=this[sr];if(u&&c in u)return u[c];let d=this[we]?.[c];if(d&&typeof d=="object"){let f=Py(d,o);if(f)return u||(u=this[sr]=Object.create(null)),u[c]=f}return d},set:l,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[sr];return l?.[o]!==void 0?l[o]:this[we]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new bn.ClientError("Can not add a property to a sealed table schema");Jr(this)[o]=c}),i("deleteProperty",function(o){Jr(this)[o]=void 0}),i("toJSON",function(){let o=this[sr],c;for(let _ in o)c||(c=Object.assign({},this[we])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[we])),Object.assign(c,this)),c||this[we]}),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 Py(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){this[we]=s}},Kd(r,t)),new r(e)):new $d(e);case Array:let n=new Yd(e.length);n[we]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=Py(o,t?.elements)),n[s]=o}return n}}function Wd(e){let t=e[sr],r;for(let s in t){r||(r=Object.assign({},e[we]));let i=t[s];i&&typeof i=="object"&&(i=Wd(i)),r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[we])),Object.assign(r,e)),r||e[we]}function xl(e){let t;if(e[we]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=xl(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[n]=i}return Object.freeze(t)}let r=e[sr];for(let n in r){t||(t=Object.assign({},e[we]));let s=r[n];s&&typeof s=="object"&&(s=xl(s)),t[n]=s}return t?Object.freeze(t):e[we]||(e.buffer?e:Object.freeze(e))}function Vd(e){let t=e[we];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[qo]||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?.[we]===s){if(Vd(i))return!0}else return!0}}else{let r=e[sr];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[we]===i){if(Vd(s))return!0}else return!0}else return!0}}return!1}var bn,sr,$d,qo,Yd,Qd=Ae(()=>{Zn();bn=U(ee()),sr=Symbol("own-data");a(Jr,"getChanges");a(Kd,"assignTrackedAccessors");a(Py,"trackObject");$d=class{static{a(this,"GenericTrackedObject")}constructor(t){this[we]=t}};Kd($d,{});a(Wd,"collapseData");a(xl,"deepFreeze");a(Vd,"hasChanges");qo=Symbol.for("has-array-changes"),Yd=class extends Array{static{a(this,"TrackedArray")}[qo];constructor(t){super(t)}splice(...t){return this[qo]=!0,super.splice(...t)}push(...t){return this[qo]=!0,super.push(...t)}pop(){return this[qo]=!0,super.pop()}unshift(...t){return this[qo]=!0,super.unshift(...t)}shift(){return this[qo]=!0,super.shift()}};Yd.prototype.constructor=Array});function aK(){oK=setInterval(function(){for(let e of vp)if(e.stale){let t=e[Te]?.url;My.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},iK).unref()}var Bp,My,sK,vp,xo,jd,iK,oK,Hp=Ae(()=>{Bp=U(Sr()),My=U(B());Zn();sK=100,vp=new Set,xo=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;open=!0;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn;if(!this.open)throw new Error("Can not start a read on a transaction that is no longer open");return this.readTxnsUsed=1,this.readTxn=this.lmdbDb.useReadTransaction(),vp.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(vp.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}addWrite(t){if(!this.open&&!this.autoCommitMode)throw new Error("Can not use a transaction that is no longer open");this.writes.push(t),this.autoCommitMode&&this.commit()}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,Bp.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length){let u=this.validated;this.validated=this.writes.length;for(let f=u;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=u;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=u;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}n||this.doneReadTxn(),t?.prepared?.(),this.open=!1;let s,i=[],o=0;this.writes=this.writes.filter(u=>u);let c=a(u=>{u.commit(r,u.entry,n)},"doWrite"),l=a(()=>{let u=this.writes[o++];if(u)if(u.key){n>0&&(u.entry=u.store.getEntry(u.key));let d=u.store.ifVersion(u.key,u.entry?.version??null,l);s=s||d}else l();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<sK>>n?l():s=this.writes[0].store.transaction(()=>{for(let u of this.writes)u.entry=u.store.getEntry(u.key),c(u);return!0}),s)return s.then(u=>u?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=n+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let u=this.next?.commit(t);if(u?.then)return u?.then(d=>({txnTime:r,next:d}));_.next=u}return _}abort(t){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=!1,this.writes=[]}},jd=class extends xo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Bp.getNextMonotonicTime)())}getReadTxn(){}},iK=3e4;a(aK,"startMonitoringTxns");aK()});function Xe(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new xo;e.timestamp&&(n.timestamp=e.timestamp),n[Te]=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(r?.resetTransaction?{prepared(){n.autoCommitMode=!0}}:{});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var Uy,Go=Ae(()=>{Uy=require("../index");Zn();Hp();a(Xe,"transaction");(0,Uy._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Te]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Te]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function Fl(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 A=o[0],g=ii(n.attributes,A);if(g.relationship){if(o.length<2)throw new Fo.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let N=g.definition?.tableClass||g.elements?.definition?.tableClass,M=new Map,G=Fl({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,N,s,M);if(g.relationship.to){i[o[0]]=M;let x=!!ii(N.attributes,g.relationship.to)?.elements;G=_K(G,g,N.primaryStore,x,M)}if(g.relationship.from){let x=a(D=>Fl({attribute:g.relationship.from,value:D},t,r,n,s,M),"searchEntry");g.elements?(i[o[0]]=M,G=dK(G,g,N.primaryStore,M,x)):G=G.flatMap(x)}return G}else if(o.length===1)o=o[0];else throw new Fo.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,u,d,f;c instanceof Date&&(c=c.getTime());let E;switch(By[l]||l){case"lt":_=!0,u=c;break;case"le":_=!0,u=c,d=!0;break;case"gt":_=c,f=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,u=c.slice(0),u[u.length-1]=bs.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 rt.SEARCH_TYPES.EQUALS:case void 0:_=c,u=c,d=!0;break;case"ne":if(c===null){_=c,f=!0;break}case"contains":case"ends_with":E=!0;break;default:throw new Fo.ClientError(`Unknown query comparator "${l}"`)}if(r){let A=_;_=u,u=A,A=!f,f=!d,d=A}let h=o===n.primaryKey||o==null,p=h?n.primaryStore:n.indices[o];if(!p||p.isIndexing||E||c===null&&!p.indexNulls){if(!s)throw new Fo.ClientError(`"${o}" is not indexed${c===null&&!p.indexNulls?" for nulls, index needs to be rebuilt to search for nulls":p?.isIndexing?" yet":""}, can not search for this attribute`,404);let A=kl(e);if(!A)throw new Fo.ClientError(`Unknown search operator ${e.comparator}`);return n.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:N})=>new Promise((M,G)=>setImmediate(()=>{try{M(N&&A(N)?g:qp.SKIP)}catch(x){G(x)}})))}let S={start:_,end:u,inclusiveEnd:d,exclusiveStart:f,values:!0,versions:h,transaction:t,reverse:r};if(h){let A=p.getRange(S).map(g=>g.value==null?qp.SKIP:g);return A.hasEntries=!0,A}else return p.getRange(S).map(({value:A})=>A)}function ii(e,t){if(Array.isArray(t))if(t.length>1){let r=ii(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?ii(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 _K(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){if(!i){let l=t.relationship.to;return(async()=>{let _=a((d,f)=>{let E=d;Array.isArray(d)&&(E=Yi(d),o=!0);let h=s.get(E);h?h.push(f):s.set(E,h=[f]),d!==E&&(h.key=d)},"add_entry"),u=0;for await(let d of e){let f=d.value??r.get(d.key??d),E=f?.[l];if(E!=null&&!s.filters?.some(h=>!h(f))){if(n)for(let h=0;h<E.length;h++)_(E[h],d);else _(E,d);u++>100&&(await new Promise(setImmediate),u=0)}}return i=(o?s:s.keys())[Symbol.iterator](),this.next()})()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}}}}})}function dK(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o;return{next(){let c;if(o&&(c=o.next(),!c.done))return c;if(!i)return(async()=>{let l=new Map;n.fromRecord=u=>u[t.relationship.from]?.filter?.(d=>l.has(Yi(d)));let _=0;for await(let u of e){if(n.filters){let d=r.get(u);if(n.filters.some(f=>!f(d)))continue}l.set(Yi(u),u),_++>100&&(await new Promise(setImmediate),_=0)}return i=l.values()[Symbol.iterator](),this.next()})();do{let l=i.next();return l.done?l:(o=s(l.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function kl(e,t,r,n){if(e.conditions){let c=e.conditions.map(kl);return e.operator==="or"?l=>c.some(_=>_(l)):l=>c.every(_=>_(l))}let s=e.comparator,i=e[0]??e.attribute,o=e[1]??e.value;if(Array.isArray(i)){if(i.length===0)return()=>!0;if(i.length===1)i=i[0];else if(i.length>1){let c=i[0],l=ii(t.attributes,c),_=l.definition?.tableClass||l.elements.definition?.tableClass,u=n?.[c],d=kl({attribute:i.length>2?i.slice(1):i[1],value:o,comparator:s},t,r,u?.[c]?.joined);if(!d)return;if(u){u.filters||(u.filters=[]),u.filters.push(d);return}let f=t.propertyResolvers?.[c];return(E,h)=>{let p,S;return f?(S=f(E,r,h),p=S?.value):p=E[c],p?Array.isArray(p)?p.some(d):d(p,S):!1}}}switch(o instanceof Date&&(o=o.getTime()),By[s]||s){case rt.SEARCH_TYPES.EQUALS:case void 0:return Ns(i,c=>c===o);case rt.SEARCH_TYPES.CONTAINS:return Ns(i,c=>c?.toString().includes(o));case rt.SEARCH_TYPES.ENDS_WITH:case rt.SEARCH_TYPES._ENDS_WITH:return Ns(i,c=>c?.toString().endsWith(o));case rt.SEARCH_TYPES.STARTS_WITH:case rt.SEARCH_TYPES._STARTS_WITH:return Ns(i,c=>typeof c=="string"&&c.startsWith(o));case rt.SEARCH_TYPES.BETWEEN:return o[0]instanceof Date&&(o[0]=o[0].getTime()),o[1]instanceof Date&&(o[1]=o[1].getTime()),Ns(i,c=>(0,bs.compareKeys)(c,o[0])>=0&&(0,bs.compareKeys)(c,o[1])<=0);case"gt":case rt.SEARCH_TYPES.GREATER_THAN:case rt.SEARCH_TYPES._GREATER_THAN:return Ns(i,c=>(0,bs.compareKeys)(c,o)>0);case"ge":case rt.SEARCH_TYPES.GREATER_THAN_EQUAL:case rt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Ns(i,c=>(0,bs.compareKeys)(c,o)>=0);case rt.SEARCH_TYPES.LESS_THAN:case"lt":case rt.SEARCH_TYPES._LESS_THAN:return Ns(i,c=>(0,bs.compareKeys)(c,o)<0);case"le":case rt.SEARCH_TYPES.LESS_THAN_EQUAL:case rt.SEARCH_TYPES._LESS_THAN_EQUAL:return Ns(i,c=>(0,bs.compareKeys)(c,o)<=0);case"ne":return Ns(i,c=>(0,bs.compareKeys)(c,o)!==0);default:throw new Fo.ClientError(`Unknown query comparator "${s}"`)}}function Ns(e,t){return r=>{let n=r[e];return typeof n!="object"||!n?t(n):Array.isArray(n)?n.some(t):n instanceof Date?t(n.getTime()):!1}}function xp(e){return t=>{if(t.estimated_count===void 0){if(t.conditions){let n;if(t.operator==="or"){n=0;for(let s of t.conditions)n+=s.estimated_count}else{n=1/0;for(let s of t.conditions)n=1/(1/n+1/s.estimated_count)}return t.estimated_count=n,t.estimated_count}let r=t.comparator||t.search_type;if(r===rt.SEARCH_TYPES.EQUALS){let n=t[0]??t.attribute;if(n==null||n===e.primaryKey)t.estimated_count=1;else if(Array.isArray(n)){let s=ii(e.attributes,n[0]),i=s.definition?.tableClass||s.elements.definition?.tableClass,o=xp(i)({value:t.value,attribute:n.length>2?n.slice(1):n[1],comparator:"equals"});t.estimated_count=o*4*(e.indices[s.relationship.from]||e.primaryStore).getStats().entryCount/(i.primaryStore.getStats().entryCount||1)}else{let s=e.indices[n];t.estimated_count=s?s.getValuesCount(t[1]??t.value):1/0}}else r===rt.SEARCH_TYPES.CONTAINS||r===rt.SEARCH_TYPES.ENDS_WITH||r==="ne"?t.value===null&&r==="ne"?t.estimated_count=vy:t.estimated_count=1/0:r===rt.SEARCH_TYPES.STARTS_WITH||r==="prefix"?t.estimated_count=vy:r===rt.SEARCH_TYPES.BETWEEN?t.estimated_count=lK:t.estimated_count=cK;typeof t.descending=="boolean"&&(t.estimated_count/=4)}return t.estimated_count}}function zd(e){if(e)if(Vi=e,Ja.lastIndex=0,fK.test(e))try{let t=Gl(new Za,"");if(Tr!==Vi.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Tr} in '${Vi}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function Gl(e,t){let r=Ja,n,s,i,o,c;for(;n=r.exec(Vi);){Tr=r.lastIndex;let[,l,_]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let u;switch(_){case"=":if(s)l.length<=2&&(i=l);else{if(i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Xa(l)}break;case"!=":case"<":case"<=":case">":case">=":if(i=uK[_],!l)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Xa(l);break;case"=*":i="ends_with",s=Xa(l);break;case"*":o=!0;case"*&":e.conditions?e.conditions.push({comparator:i==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(l)}):e.push(l+_),s=null;break;case"|":e.operator="or";case"":case void 0:case"&":if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.conditions.push({comparator:i,attribute:s,value:decodeURIComponent(l)})}s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Xa(l)),s=void 0;break;case"(":Ja.lastIndex=Tr;let d=Gl(l?[]:new Za,")");switch(l){case"":e.conditions.push(d);break;case"limit":switch(d.length){case 1:e.limit=+d[0];break;case 2:e.offset=+d[0],e.limit=d[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(d[0])&&d.length===1&&!d[0].name?(e.select=d[0],e.select.asArray=!0):d.length===1?e.select=d[0]:d.length===2&&d[1]===""?e.select=d.slice(0,1):e.select=d;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=Hy(d);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Vi[Tr]===","?r.lastIndex=++Tr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");Ja.lastIndex=Tr,u=Gl([],"}"),u.name=l,e.push(u),Vi[Tr]===","?r.lastIndex=++Tr:o=!0;break;case"[":Ja.lastIndex=Tr,l?(u=Gl(new Za,"]"),u.name=l):u=Gl(e.conditions?new Za:[],"]"),e.conditions?(e.conditions.push(u),s=null):e.push(u),Vi[Tr]===","?r.lastIndex=++Tr:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s)e.conditions.push({comparator:i||"equals",attribute:s,value:decodeURIComponent(l)});else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Xa(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?EK:Ja,r.lastIndex=Tr),Tr===Vi.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function Xa(e){return e.indexOf(".")>-1?e.split(".").map(Xa):decodeURIComponent(e)}function Hy(e){let t=qy(e[0]);return e.length>1&&(t.next=Hy(e.slice(1))),t}function qy(e){if(Array.isArray(e)){let t=qy(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 Yi(e){return Array.isArray(e)?e.join("\0"):e}var Fo,rt,bs,qp,cK,lK,vy,uK,By,fK,Ja,EK,Tr,Vi,Za,Jd=Ae(()=>{Fo=U(ee()),rt=U(ft()),bs=require("ordered-binary"),qp=require("lmdb"),cK=1e8,lK=15e6,vy=1e7,uK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(Fl,"searchByIndex");a(ii,"findAttribute");a(_K,"joinTo");a(dK,"joinFrom");By={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",equal:"equals",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(kl,"filterByType");a(Ns,"attributeComparator");a(xp,"estimateCondition");fK=/[()[\]*|!<>.]|(=\w+=)/,Ja=/([^?&|=<>!([{}\])*,]*)([([{}\])|,&]|[=<>!*]*)/g,EK=/([^&|*=[\]{}]+)([[\]{}]|[&|*=]*)/g;a(zd,"parseQuery");a(Gl,"parseBlock");a(Xa,"decodeProperty");a(Hy,"toSortObject");a(qy,"toSortEntry");Za=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(Yi,"flattenKey")});var kp={};je(kp,{CONTEXT:()=>Te,ID_PROPERTY:()=>Pe,IS_COLLECTION:()=>wn,RECORD_PROPERTY:()=>we,Resource:()=>jt,SAVE_UPDATES_PROPERTY:()=>$y,snake_case:()=>mK,transformForSelect:()=>Zd});function mK(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function xy(e,t){if($l=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?($l=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new Fp;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){$l=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function yn(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[Te]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(u=s,c=u[this.primaryKey]??null,o=i[Te]||i):u=i:(u=s,c=u[Pe]??u[this.primaryKey]??null):i?o=i[Te]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(l=s,s[Symbol.iterator]){c=[],_=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let E=c.indexOf("?");if(E>-1){let p=this.parseQuery(c.slice(E+1));l?l=Object.assign(p,l):l=p,c=c.slice(0,E)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(l?.ensureLoaded!=null||l?.async||_?(d=Object.assign({},t),l?.ensureLoaded!=null&&(d.ensureLoaded=l.ensureLoaded),l?.async&&(d.async=l.async),_&&(d.isCollection=!0)):d=t,o.transaction){let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)}else return d.resetTransaction=!0,Xe(o,()=>{let E=this.getResource(c,o,d);return E.then?E.then(f):f(E)},d);function f(E){if(t.type==="read"&&(E[$y]=!1),o.authorize){o.authorize=!1;let h=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,u,o):E.allowUpdate(o.user,u,o):t.type==="create"?E.allowCreate(o.user,u,o):E.allowDelete(o.user,l,o);if(h?.then)return h.then(p=>{if(!p)throw new Xd(o.user);return typeof u?.then=="function"?u.then(S=>e(E,l,o,S)):e(E,l,o,u)});if(!h)throw new Xd(o.user)}return typeof u?.then=="function"?u.then(h=>e(E,l,o,h)):e(E,l,o,u)}a(f,"authorizeActionOnResource")}}function In(e,t){let r=new ky.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 Gp(e,t,r){let n=e[we];if(n){let s=e[sr];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 Zd(e,t){let r=t?.propertyResolvers,n=t[Te],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):Gp(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(Gp(l,r,n));for(let d of e)_.push(u(d));return _},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(f=>f&&typeof f=="object"?c(f):f);let _={},u=i(Gp(l,r,n)),d;for(let f of e){let E=u(f);E===void 0&&o&&(E=null),E?.then?(d||(d=[]),d.push(E.then(h=>_[f.name||f]=h))):_[f.name||f]=E}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let u=r[c.name]?.definition?.tableClass;l=s[c.name]=Zd(c.select||c,u)}let _=o(c.name);return l(_)}else return o(c);else return c}}a(i,"handleProperty")}var Gy,Fy,ky,Te,Pe,wn,$y,we,hK,jt,Xd,$l,Fp,Zn=Ae(()=>{Gy=require("crypto");ql();Fy=require("../index"),ky=U(ee());Qd();Go();Jd();Te=Symbol.for("context"),Pe=Symbol.for("primary-key"),wn=Symbol("is-collection"),$y=Symbol("save-updates"),we=Symbol("stored-record"),hK={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},jt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Pe]=t;let n=r?.[Te];this[Te]=n!==void 0?n:r||null}static get=yn(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 _=Zd(l,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=yn(function(t,r,n,s){if(Array.isArray(s)&&t[wn]){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):In(t,"put")},{hasContent:!0,type:"update"});static delete=yn(function(t,r,n,s){return t.delete?t.delete(r):In(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Gy.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),Xe(n,()=>{let i=new this(s,n),o=i.update?i.update(r):In(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=yn(function(t,r,n,s){return t.invalidate?t.invalidate(r):In(t,"delete")},{hasContent:!1,type:"update"});static post=yn(function(t,r,n,s){return t[Pe]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=yn(function(t,r,n,s){return t.connect?t.connect(s,r):In(t,"connect")},{hasContent:!0,type:"read"});static subscribe=yn(function(t,r,n,s){return t.subscribe?t.subscribe(r):In(t,"subscribe")},{type:"read"});static publish=yn(function(t,r,n,s){return t[Pe]!=null&&t.update?.(),t.publish?t.publish(s,r):In(t,"publish")},{hasContent:!0,type:"create"});static search=yn(function(t,r,n,s){let i=t.search?t.search(r):In(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=Zd(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=yn(function(t,r,n,s){return t.search?t.search(s,r):In(t,"search")},{hasContent:!0,type:"read"});static copy=yn(function(t,r,n,s){return t.copy?t.copy(s,r):In(t,"copy")},{type:"create"});static move=yn(function(t,r,n,s){return t.move?t.move(s,r):In(t,"move")},{type:"delete"});post(t){if(this[wn])return this.constructor.create(this[Pe],t,this[Te]);In(this,"post")}static isCollection(t){return t?.[wn]}static coerceId(t){return t}static parseQuery(t){return zd(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&&hK[o];if(c)r.headers.set("accept",c);else if(n)n.property=o;else return{query:{property:o},id:xy(t,this),isCollection:$l}}let i=xy(t,this);return $l?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Te],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(_=>_[Pe]===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[Pe],f=_.get(d);f?f.push(u):_.set(d,[u])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[wn]=!0),s}subscribe(t){return new Xn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Xn}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[Pe]}getContext(){return this[Te]}};jt.prototype[Te]=null;(0,Fy._assignPackageExport)("Resource",jt);a(mK,"snake_case");Xd=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(xy,"pathToId");Fp=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(yn,"transactional");a(In,"missingMethod");a(Gp,"selectFromObject");a(Zd,"transformForSelect")});var Vy={};je(Vy,{Resources:()=>ef,keyArrayToString:()=>ec,resetResources:()=>pK,resources:()=>Ki});function pK(){return Ki=new ef}function ec(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var ef,Ki,Vl=Ae(()=>{Go();ef=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,l]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let u=this.get(c.slice(0,_));u&&(u.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(l){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Xe(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(pK,"resetResources");a(ec,"keyArrayToString")});var zy={};je(zy,{HAS_EXPIRATION:()=>jp,LAST_TIMESTAMP_PLACEHOLDER:()=>Kl,LOCAL_TIMESTAMP:()=>SK,METADATA:()=>Yl,NO_TIMESTAMP:()=>$p,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Qp,RecordEncoder:()=>Wp,TIMESTAMP_ASSIGN_LAST:()=>gK,TIMESTAMP_ASSIGN_NEW:()=>Wy,TIMESTAMP_ASSIGN_PREVIOUS:()=>Qy,TIMESTAMP_PLACEHOLDER:()=>tf,TIMESTAMP_RECORD_PREVIOUS:()=>Vp,getUpdateRecord:()=>zp,handleLocalTimeForGets:()=>of});function jy(){return rc[0]=rc[0]^64,TK.getFloat64(0)}function of(e){let t=e.getEntry;e.readCount=0,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,_=l?.[Yl];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?.[Yl]>=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[Yl];return _>=0&&(c.metadataFlags=_,c.localTime=l.localTime,c.value=l.value,l.expiresAt>0&&(c.expiresAt=l.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,l=c&&c.store;if(l&&!(i.flag&67108864)){let _=l.cache;if(c.key){let u=RK.call(_,c.key);if(u&&u.timestampBytes){let d=u.timestampOffset;u.timestampBytes[d]===2&&(u.timestampBytes.copy(rc,0,d),u.timestampBytes=null,u.localTime=jy())}}}}while(i!=o&&(i=i.next))}));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,ko.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<ko.length;l++){let _=ko[l].deref();(!_||_===this||_.isDone||_.isCommitted)&&ko.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function zp(e,t,r){return function(n,s,i,o,c=-1,l,_,u,d="put",f,E){if(f||l==null?tc=i?.localTime?Vp|Qy:$p:tc=l?i?.localTime?Vp|16384:Wy|16384:$p,u>0&&(c|=jp),nf=c,Kp=u,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:tc>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(e.cache&&S.result!==!1){let A=e.cache.get(n);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(u||!A.expiresAt)&&(A.expiresAt=u),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=Yp,A.timestampOffset=Yp.start||0))}if(l){let A=_?.user?.username;if(E&&(rf=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,N=r.get(g);if(N){let M=Xr(N).previousLocalTime;return r.put(g,sf(o,t,n,M,A,d,rf),{ifVersion:p}),S}}r.put(Kl,sf(o,t,n,i?.localTime?1:0,A,d,rf),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var Yy,Ky,tf,Kl,Qp,SK,Yl,rc,TK,$p,Wy,gK,Qy,Vp,jp,Yp,rf,tc,nf,Kp,Wp,RK,ko,Wl=Ae(()=>{Yy=require("msgpackr");nc();Ky=U(B()),tf=new Uint8Array([1,1,1,1,4,64,0,0]),Kl=new Uint8Array([1,1,1,1,1,0,0,0]),Qp=new Uint8Array([1,1,1,1,3,64,0,0]),SK=Symbol("local-timestamp"),Yl=Symbol("metadata"),rc=new Uint8Array(8),TK=new DataView(rc.buffer,0,8),$p=0,Wy=0,gK=1,Qy=3,Vp=4,jp=16,tc=0,nf=-1,Kp=0,Wp=class extends Yy.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(tc||nf>=0){let i=0,o=tc;o&&(i+=8,tc=0);let c=nf,l=Kp;c>=0&&(i+=2,nf=-1,l&&(i+=8,Kp=0));let _=Yp=r.call(this,n,s|2048|i);rf=_.subarray((_.start||0)+i,_.end);let u=_.start||0;return o&&(tf[4]=o,tf[5]=o>>8,_.set(tf,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(rc,0,c),c+=8;else for(let d=0;d<8;d++)rc[d]=t[c++];l=jy(),i=t[c]}let _;i<32&&(o=i,c+=2,o&jp&&(_=(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,[Yl]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(jy,"getTimestamp");RK=Map.prototype.get;a(of,"handleLocalTimeForGets");ko=[];setInterval(()=>{for(let e=0;e<ko.length;e++){let t=ko[e].deref();!t||t.isDone||t.isCommitted?ko.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Ky.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(zp,"getUpdateRecord")});var cI={};je(cI,{AUDIT_STORE_OPTIONS:()=>oI,createAuditEntry:()=>sf,openAuditStore:()=>cf,readAuditEntry:()=>Xr,setAuditRetention:()=>AK,transactionKeyEncoder:()=>iI});function cf(e){let t=e.auditStore=e.openDB(tI.AUDIT_STORE_NAME,oI);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(n,s){return r[n]=s,{remove(){delete r[n]}}},(0,nI.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Ql||(Ql=setTimeout(()=>{if(Ql=null,t.rootStore.status!=="closed")for(let{key:n,value:s}of t.getRange({start:0,end:Date.now()-Jp})){if((s[0]&15)===Zp){let i=Xr(s),o=i.tableId;r[o]?.(i.recordId)}t.remove(n)}},Jp/10).unref())}),t}function AK(e){clearTimeout(Ql),Ql=null,Jp=e}function sf(e,t,r,n,s,i,o){let c=aI[i],l=1;n&&(n>1?sc.setFloat64(0,n):Cn.set(Qp),l=9),f(0),f(t),d(r),sc.setFloat64(l,e),l+=8,s?d(s):Cn[l++]=0,Cn[n?8:0]=c;let u=Cn.subarray(0,l);if(o)return Buffer.concat([u,o]);return u;function d(E){let h=l;l+=1,l=(0,ic.writeKey)(E,Cn,l);let p=l-h-1;p>127?p>16383?(tS.error("Key or username was too large for audit entry",E),l=h+1,Cn[h]=0):(Cn.copyWithin(h+2,h+1,l),sc.setUint16(h,p|32768),l++):Cn[h]=p}function f(E){E<128?Cn[l++]=E:E<16384?(sc.setUint16(l,E|32768),l+=2):E<1056964608?(sc.setUint32(l,E|3221225472),l+=4):(Cn[l]=255,sc.setUint32(l+1,E),l+=5)}}function Xr(e){try{let t=e.dataView||(e.dataView=new eS(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,l=t.position+=o,_=t.readFloat64();o=t.readInt();let u=t.position,d=t.position+=o;return{type:aI[n&7],tableId:i,get recordId(){return eI(e,c,l)},version:_,previousLocalTime:r,get user(){return d>u?eI(e,u,d):void 0},getValue(f){return n&Xp?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return tS.error("Reading audit entry error",e),{}}}function eI(e,t,r){let n=e.subarray(t,r);return(0,ic.readKey)(n,0,r-t)}var ic,af,tI,rI,nI,sI,tS,Cn,sc,iI,oI,Jp,Ql,Xp,Jy,Zp,Xy,Zy,aI,eS,nc=Ae(()=>{ic=require("ordered-binary"),af=U(z()),tI=U(ft()),rI=U(b()),nI=U(nt()),sI=U(V());Wl();tS=U(B());(0,af.initSync)();Cn=Buffer.alloc(1024),sc=new DataView(Cn.buffer,Cn.byteOffset,1024),iI={writeKey(e,t,r){return e===Kl?(t.set(Kl,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ic.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,ic.readKey)(e,t,r)}},oI={encoding:"binary",keyEncoder:iI},Jp=(0,sI.convertToMS)((0,af.get)(rI.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Ql=null;a(cf,"openAuditStore");a(AK,"setAuditRetention");Xp=16,Jy=1,Zp=2,Xy=3,Zy=4,aI={put:Jy|Xp,[Jy]:"put",delete:Zp,[Zp]:"delete",message:Xy|Xp,[Xy]:"message",invalidate:Zy,[Zy]:"invalidate"};a(sf,"createAuditEntry");a(Xr,"readAuditEntry");eS=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(eI,"readKeySafely")});function uI(e,t,r,n){let s=e.primaryStore.env.path,i=e.primaryStore.tableId;oc||((0,zl.onMessageByType)(lI,u=>{_I(u.path)}),(0,zl.onMessageByType)(OK,u=>{(0,jl.trace)("confirming to proceed with txn",u.txnId)}),oc=Object.create(null));let o=oc[s]||(oc[s]=[]);o.auditStore=e.auditStore;let c=o[i];c||(c=o[i]=new Map,c.envs=o,c.tableId=i,c.store=e.primaryStore),t=ec(t);let l=new nS(r);l.startTime=n;let _=c.get(t);return _?_.push(l):(c.set(t,_=[l]),_.tables=c,_.key=t),l.subscriptions=_,l}function _I(e,t){if(!oc)return;let r=oc[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}let n;for(let{key:s,value:i}of r.auditStore.getRange({start:rS,exclusiveStart:!0})){rS=s;let o=Xr(i),c=r[o.tableId];if(!c)continue;let l=o.recordId,_,u=ec(o.recordId),d=0;do{let f=c.get(u);if(f){for(let h of f)if(!(d>0&&!(h.includeDescendants&&!(h.onlyChildren&&d>1)))){if(h.startTime>=s){(0,jl.info)("omitting",l,h.startTime,s);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(n?n.push(h):n=[h]),h.txnInProgress=o.version),h.listener(l,o,s,p)}catch(p){console.error(p),(0,jl.info)(p)}}}if(u==null)break;let E=u.lastIndexOf?.("/",u.length-2);E>-1?u=u.slice(0,E):u=null,d++}while(!0)}if(n)for(let s of n)s.txnInProgress=null,s.listener(null,{type:"end_txn"},rS,!0)}function dI(e,t){let r=t||e,n=r.env;if(t&&!t.cache&&(t.cache=new Map),!n.hasBroadcastListener){n.hasBroadcastListener=!0;let s=n.path;r.on("aftercommit",()=>{(0,zl.broadcast)({type:lI,path:s}),_I(s,!0)})}}var jl,zl,lI,OK,oc,ihe,nS,rS,fI=Ae(()=>{jl=U(B()),zl=U(nt());ql();Vl();nc();lI="transaction",OK="transaction-await",ihe=Buffer.alloc(4096);a(uI,"addSubscription");nS=class extends Xn{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"}}},rS=Date.now();a(_I,"notifyFromTransactionData");a(dI,"listenToCommits")});var hI=T((che,EI)=>{"use strict";var sS=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};EI.exports=sS});var pI=T((uhe,mI)=>{"use strict";var iS=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};mI.exports=iS});var lf=T((dhe,SI)=>{"use strict";var aS=z(),cS=b(),{RecordEncoder:NK}=(Wl(),re(zy));aS.initSync();var bK=aS.get(cS.CONFIG_PARAMS.STORAGE_COMPRESSION),yK=aS.get(cS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,IK=cS.UPDATES_PROPERTY,oS=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=bK&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=yK&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:NK},this.alwaysLazyProperty=n=>n===IK)}};SI.exports=oS});var _f=T((Ehe,gI)=>{"use strict";var ac=z(),Jl=b();ac.initSync();var wK=ac.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ac.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ac.get(Jl.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",TI=ac.get(Jl.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),CK=ac.get(Jl.CONFIG_PARAMS.STORAGE_NOREADAHEAD),uf=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=wK,this.noFSAccess=!0,TI!==void 0&&(this.overlappingSync=TI),this.noReadAhead=CK}};gI.exports=uf;uf.MAX_DBS=1e4});var $e=T((mhe,LI)=>{"use strict";var uS=require("lmdb"),es=require("fs-extra"),Zr=require("path"),df=Sr(),OI=B(),gr=zr().LMDB_ERRORS_ENUM,ff=pI(),_S=lf(),NI=_f(),Wi=ft(),RI=b(),{table:LK,resetDatabases:DK}=(me(),re(Ge)),AI=z(),ts=Wi.INTERNAL_DBIS_NAME,bI=Wi.DBI_DEFINITION_NAME,PK="data.mdb",MK="lock.mdb",Xl=".mdb",UK="-lock",lS=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Ln(t,r),this.key_type=this.dbi[Wi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Wi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new uS.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ef(e,t){if(e===void 0)throw new Error(gr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(gr.ENV_NAME_REQUIRED)}a(Ef,"pathEnvNameValidation");async function dS(e,t,r=!0){try{await es.access(e)}catch(n){throw n.code==="ENOENT"?new Error(gr.INVALID_BASE_PATH):n}try{let n=Zr.join(e,t+Xl);return await es.access(n,es.constants.R_OK|es.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await es.access(Zr.join(e,t,PK),es.constants.R_OK|es.constants.F_OK),Zr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(gr.INVALID_ENVIRONMENT)}else throw new Error(gr.INVALID_ENVIRONMENT);throw n}}a(dS,"validateEnvironmentPath");function hf(e,t){if(df.validateEnv(e),t===void 0)throw new Error(gr.DBI_NAME_REQUIRED)}a(hf,"validateEnvDBIName");async function vK(e,t,r=!1,n=!1){Ef(e,t);let s=Zr.basename(e);t=t.toString();let i=AI.get(RI.CONFIG_PARAMS.DATABASES);i||AI.setProperty(RI.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await dS(e,t,n),yI(e,t,r)}catch(o){if(o.message===gr.INVALID_ENVIRONMENT){let c=Zr.join(e,t);await es.mkdirp(n?c:e);let l=new NI(n?c:c+Xl,!1),_=uS.open(l);_.dbis=Object.create(null);let u=new _S(!1);_.openDB(ts,u),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=fS(e,t,r);return _[Wi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(vK,"createEnvironment");async function BK(e,t,r,n=!0){Ef(e,t),t=t.toString();let s=Zr.join(e,t);return LK({table:t,database:Zr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(BK,"copyEnvironment");async function yI(e,t,r=!1){Ef(e,t),t=t.toString();let n=fS(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 dS(e,t),i=Zr.join(e,t+Xl),o=s!=i,c=new NI(s,o),l=uS.open(c);l.dbis=Object.create(null);let _=wI(l);for(let u=0;u<_.length;u++)Ln(l,_[u]);return l[Wi.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(yI,"openEnvironment");async function HK(e,t,r=!1){Ef(e,t),t=t.toString();let n=Zr.join(e,t+Xl),s=await dS(e,t);if(global.lmdb_map!==void 0){let i=fS(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await II(o),delete global.lmdb_map[i]}}await es.remove(s),await es.remove(s===n?s+UK:Zr.join(Zr.dirname(s),MK))}a(HK,"deleteEnvironment");async function II(e){df.validateEnv(e);let t=e[Wi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(II,"closeEnvironment");function fS(e,t,r=!1){let s=`${Zr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(fS,"getCachedEnvironmentName");function qK(e){df.validateEnv(e);let t=Object.create(null),r=Ln(e,ts);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ts)try{t[n]=Object.assign(new ff,s)}catch{OI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(qK,"listDBIDefinitions");function wI(e){df.validateEnv(e);let t=[],r=Ln(e,ts);for(let{key:n}of r.getRange({start:!1}))n!==ts&&t.push(n);return t}a(wI,"listDBIs");function xK(e,t){let n=Ln(e,ts).getEntry(t),s=new ff;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{OI.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(xK,"getDBIDefinition");function CI(e,t,r,n=!r){if(hf(e,t),t=t.toString(),t===ts)throw new Error(gr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ln(e,t)}catch(s){if(s.message===gr.DBI_DOES_NOT_EXIST){let i=new _S(r,n===!0),o=e.openDB(t,i),c=new ff(r===!0,n);return o[bI]=c,Ln(e,ts).putSync(t,c),e.dbis[t]=o,o}throw s}}a(CI,"createDBI");function Ln(e,t){if(hf(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ts?r=xK(e,t):r=new ff,r===void 0)throw new Error(gr.DBI_DOES_NOT_EXIST);let n;try{let s=new _S(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(gr.DBI_DOES_NOT_EXIST):s}return n[bI]=r,e.dbis[t]=n,n}a(Ln,"openDBI");function GK(e,t){hf(e,t),t=t.toString();let r=Ln(e,t),n=r.getStats();return r[Wi.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(GK,"statDBI");async function FK(e,t){try{let r=Zr.join(e,t+Xl);return(await es.stat(r)).size}catch{throw new Error(gr.INVALID_ENVIRONMENT)}}a(FK,"environmentDataSize");function kK(e,t){if(hf(e,t),t=t.toString(),t===ts)throw new Error(gr.CANNOT_DROP_INTERNAL_DBIS_NAME);Ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ln(e,ts).removeSync(t)}a(kK,"dropDBI");function $K(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Ln(e,i)}catch(o){if(o.message===gr.DBI_DOES_NOT_EXIST)CI(e,i,i!==t,i===t),n=!0;else throw o}}n&&DK()}a($K,"initializeDBIs");LI.exports={openDBI:Ln,openEnvironment:yI,createEnvironment:vK,listDBIs:wI,listDBIDefinitions:qK,createDBI:CI,dropDBI:kK,statDBI:GK,deleteEnvironment:HK,initializeDBIs:$K,TransactionCursor:lS,environmentDataSize:FK,copyEnvironment:BK,closeEnvironment:II}});var MI=T((She,PI)=>{"use strict";var ES=$e(),VK=B(),DI=zr().LMDB_ERRORS_ENUM;PI.exports=YK;async function YK(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 ES.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==DI.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await ES.closeEnvironment(global.lmdb_map[n]),await ES.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==DI.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){VK.error(t)}}a(YK,"cleanLMDBMap")});var oi=T((ghe,KK)=>{KK.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var KI=T((Ahe,YI)=>{"use strict";var hS=require("recursive-iterator"),WK=require("alasql"),mS=require("clone"),UI=V(),{handleHDBError:vI,hdb_errors:QK}=ee(),{HDB_ERROR_MSGS:BI,HTTP_STATUS_CODES:HI}=QK,{getDatabases:jK}=(me(),re(Ge)),zK=["DISTINCT_ARRAY"],qI=Symbol("validateTables"),pS=Symbol("validateTable"),Rhe=Symbol("getAllColumns"),xI=Symbol("validateAllColumns"),mf=Symbol("findColumn"),GI=Symbol("validateOrderBy"),Zl=Symbol("validateSegment"),SS=Symbol("validateColumn"),FI=Symbol("setColumnsForTable"),kI=Symbol("checkColumnsForAsterisk"),$I=Symbol("validateGroupBy"),VI=Symbol("hasColumns"),TS=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[qI](),this[kI](),this[xI]()}[qI](){if(this[VI]()){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)})}}[VI](){let t=!1,r=new hS(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=jK();if(!r[t.databaseid])throw vI(new Error,BI.SCHEMA_NOT_FOUND(t.databaseid),HI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw vI(new Error,BI.TABLE_NOT_FOUND(t.databaseid,t.tableid),HI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=mS(s);i.table=mS(t),this.attributes.push(i)})}[mf](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)}[kI](){let t=new hS(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[FI](r.tableid)}[FI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new WK.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[xI](){this[Zl](this.statement.columns,!1),this[Zl](this.statement.joins,!1),this[Zl](this.statement.where,!1),this[$I](this.statement.group,!1),this[Zl](this.statement.order,!0)}[Zl](t,r){if(!t)return;let n=new hS(t),s=[];for(let{node:i,path:o}of n)!UI.isEmpty(i)&&!UI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[GI](i):s.push(this[SS](i)));return s}[$I](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&zK.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=mS(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[mf](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[mf](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`}[GI](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[SS](t)}[SS](t){let r=this[mf](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]}};YI.exports=TS});var QI=T((Nhe,WI)=>{"use strict";var gS=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")}};WI.exports=gS});var zI=T((yhe,jI)=>{"use strict";var RS=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};jI.exports=RS});var XI=T((whe,JI)=>{"use strict";var AS=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}};JI.exports=AS});var ew=T((Lhe,ZI)=>{"use strict";var OS=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};ZI.exports=OS});var Vo=T((vhe,nw)=>{"use strict";var JK=$e(),XK=zI(),ZK=XI(),eW=ew(),ys=Sr(),eu=zr().LMDB_ERRORS_ENUM,tW=ft(),ai=b(),rW=V(),nW=require("uuid"),Phe=require("lmdb"),{handleHDBError:sW,hdb_errors:iW}=ee(),{OVERFLOW_MARKER:Mhe,MAX_SEARCH_KEY_LENGTH:Uhe}=tW,tw=z();tw.initSync();var pf=tw.get(ai.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),NS=ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$o=ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function oW(e,t,r,n,s=ys.getNextMonotonicTime()){wS(e,t,r,n),bS(e,t,r);let i=new XK,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l];rw(_,!0,s);let u=aW(e,t,r,_),d=_[t];o.push(u),c.push(d)}return yS(o,c,n,i,s)}a(oW,"insertRecords");function aW(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][ai.FUNC_VAL],n[o]=c)}let l=ys.getIndexedValues(c),_=e.dbis[o];if(l){pf&&_.prefetch(l.map(u=>({key:u,value:s})),Sf);for(let u=0,d=l.length;u<d;u++)_.put(l[u],s)}}pf&&e.dbis[t].prefetch([s],Sf),e.dbis[t].put(s,n,n[$o])})}a(aW,"insertRecord");function cW(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(cW,"removeSkippedRecords");function rw(e,t,r){let n=r>0;(n||!Number.isInteger(e[$o]))&&(e[$o]=r||(r=ys.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[NS]))&&(e[NS]=r||ys.getNextMonotonicTime()):delete e[NS]}a(rw,"setTimestamps");function bS(e,t,r){r.indexOf(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(ai.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),JK.initializeDBIs(e,t,r)}a(bS,"initializeTransaction");async function lW(e,t,r,n,s=ys.getNextMonotonicTime()){wS(e,t,r,n),bS(e,t,r);let i=new ZK,o=[],c=[],l=[];for(let _=0;_<n.length;_++){let u=n[_],d=u[t],f;try{f=IS(e,t,u,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),l.push(d)}return yS(c,l,n,i,s,o)}a(lW,"updateRecords");async function uW(e,t,r,n,s=ys.getNextMonotonicTime()){try{wS(e,t,r,n)}catch(l){throw sW(l,l.message,iW.HTTP_STATUS_CODES.BAD_REQUEST)}bS(e,t,r);let i=new eW,o=[],c=[];for(let l=0;l<n.length;l++){let _=n[l],u;rW.isEmpty(_[t])?(u=nW.v4(),_[t]=u):u=_[t];let d=IS(e,t,_,u,i,!1,s);o.push(d),c.push(u)}return yS(o,c,n,i,s)}a(uW,"upsertRecords");async function yS(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||ys.getNextMonotonicTime(),cW(r,i),n}a(yS,"finalizeWrite");function IS(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(rw(r,!u,o),Number.isInteger(r[$o])&&_[$o]>r[$o])return!1;u&&s.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][ai.FUNC_VAL],r[h]=p)}if(p===A)continue;let g=ys.getIndexedValues(A);if(g){pf&&S.prefetch(g.map(N=>({key:N,value:n})),Sf);for(let N=0,M=g.length;N<M;N++)S.remove(g[N],n)}if(g=ys.getIndexedValues(p),g){pf&&S.prefetch(g.map(N=>({key:N,value:n})),Sf);for(let N=0,M=g.length;N<M;N++)S.put(g[N],n)}}let E=Object.assign({},_,r);c.put(n,E,E[$o])},"do_put");return l?d=c.ifVersion(n,l.version,f):d=c.ifNoExists(n,f),d.then(E=>E?!0:IS(e,t,r,n,s,i,o))}a(IS,"updateUpsertRecord");function _W(e,t,r){if(ys.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(_W,"validateBasic");function wS(e,t,r,n){if(_W(e,t,r),!Array.isArray(n))throw n===void 0?new Error(eu.RECORDS_REQUIRED):new Error(eu.RECORDS_MUST_BE_ARRAY)}a(wS,"validateWrite");function Sf(){}a(Sf,"noop");nw.exports={insertRecords:oW,updateRecords:lW,upsertRecords:uW}});var ws=T((Hhe,ow)=>{"use strict";var iw=V(),sw=b(),cc=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Is=require("joi"),Qi={schema_format:{pattern:cc,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},dW=Is.alternatives(Is.string().min(1).max(Qi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Qi.schema_format.message}),Is.number(),Is.array()).required(),fW=Is.alternatives(Is.string().min(1).max(Qi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Qi.schema_format.message}),Is.number()),EW=Is.alternatives(Is.string().min(1).max(Qi.schema_length.maximum).pattern(cc).messages({"string.pattern.base":"{:#label} "+Qi.schema_format.message}),Is.number()).required();function hW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Qi.schema_length.maximum?`'${e}' maximum of 250 characters`:cc.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(hW,"checkValidTable");function mW(e,t){return iw.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(mW,"validateSchemaExists");function pW(e,t){let r=t.state.ancestors[0].schema;return iw.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(pW,"validateTableExists");function SW(e,t){return e.toLowerCase()===sw.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${sw.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(SW,"validateSchemaName");ow.exports={common_validators:Qi,schema_regex:cc,hdb_schema_table:dW,validateSchemaExists:mW,validateTableExists:pW,validateSchemaName:SW,checkValidTable:hW,hdb_database:fW,hdb_table:EW}});var st=T((xhe,aw)=>{"use strict";var Rr=require("validate.js");Rr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Rr.validators.type.checks[t](e)?null:` must be a '${t}' value`};Rr.validators.type.checks={Object:function(e){return Rr.isObject(e)&&!Rr.isArray(e)},Array:Rr.isArray,Integer:Rr.isInteger,Number:Rr.isNumber,String:Rr.isString,Date:Rr.isDate,Boolean:function(e){return typeof e=="boolean"}};Rr.validators.hasValidFileExt=function(e,t){return Rr.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};aw.exports={validateObject:TW,validateObjectAsync:gW,validateBySchema:RW};function TW(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Rr(e,t,{format:"flat"});return r?new Error(r):null}a(TW,"validateObject");async function gW(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Rr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(gW,"validateObjectAsync");function RW(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(RW,"validateBySchema")});var Tf=T((Fhe,cw)=>{var{common_validators:Cs}=ws(),ru=st(),tu="is required",Ot={database:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},schema:{presence:!1,format:Cs.schema_format,length:Cs.schema_length},table:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length},hash_attribute:{presence:!0,format:Cs.schema_format,length:Cs.schema_length}};function nu(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(nu,"makeAttributesStrings");function AW(e){return e=nu(e),Ot.table.presence=!1,Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,ru.validateObject(e,Ot)}a(AW,"schema_object");function OW(e){return e=nu(e),Ot.table.presence={message:tu},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,ru.validateObject(e,Ot)}a(OW,"table_object");function NW(e){return e=nu(e),Ot.table.presence={message:tu},Ot.attribute.presence=!1,ru.validateObject(e,Ot)}a(NW,"create_table_object");function bW(e){return e=nu(e),Ot.table.presence={message:tu},Ot.attribute.presence={message:tu},Ot.hash_attribute.presence=!1,ru.validateObject(e,Ot)}a(bW,"attribute_object");function yW(e){return e=nu(e),Ot.table.presence={message:tu},Ot.attribute.presence=!1,Ot.hash_attribute.presence=!1,ru.validateObject(e,Ot)}a(yW,"describe_table");function IW(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(IW,"validateTableResidence");cw.exports={schema_object:AW,create_table_object:NW,table_object:OW,attribute_object:bW,describe_table:yW,validateTableResidence:IW}});var uw=T(($he,lw)=>{"use strict";var wW=require("uuid"),CS=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||wW.v4(),this.schema_table=`${this.schema}.${this.table}`}};lw.exports=CS});var gf=T((Yhe,_w)=>{"use strict";var CW=uw(),LS=class extends CW{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}};_w.exports=LS});var fw=T((Whe,dw)=>{"use strict";dw.exports=DW;var LW="inserted";function DW(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===LW?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(DW,"returnObject")});var Rf=T((jhe,Sw)=>{"use strict";var PW=b(),DS=$e(),MW=Vo(),{getSystemSchemaPath:UW,getSchemaPath:vW}=ze(),BW=oi(),HW=Tf(),qW=gf(),xW=fw(),{handleHDBError:Ew,hdb_errors:mw}=ee(),hw=V(),{HTTP_STATUS_CODES:GW}=mw,PS=BW.hdb_attribute,pw=[];for(let e=0;e<PS.attributes.length;e++)pw.push(PS.attributes[e].attribute);var FW="inserted";Sw.exports=kW;async function kW(e){let t=HW.attribute_object(e);if(t)throw Ew(new Error,t.message,mw.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&hw.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Ew(new Error,r,GW.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=hw.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 qW(e.schema,e.table,e.attribute,e.id);try{let i=await DS.openEnvironment(vW(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}`);DS.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await DS.openEnvironment(UW(),PW.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await MW.insertRecords(o,PS.hash_attribute,pw,[s]);return xW(FW,c,{records:[s]},l)}catch(i){throw i}}a(kW,"lmdbCreateAttribute")});var US=T((Jhe,gw)=>{var{hdb_table:$W,hdb_database:Tw}=ws(),VW=st(),MS=require("joi"),YW={undefined:"undefined",null:"null"},KW=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||YW[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"),WW=MS.object({database:Tw,schema:Tw,table:$W,records:MS.array().items(MS.object().custom(KW)).required()});gw.exports=function(e){return VW.validateBySchema(e,WW)}});var su=T((eme,Aw)=>{"use strict";var ci=V(),Rw=B(),Zhe=US(),{getDatabases:QW}=(me(),re(Ge)),{ClientError:Yo}=ee();Aw.exports=jW;function jW(e){if(ci.isEmpty(e))throw new Yo("invalid update parameters defined.");if(ci.isEmptyOrZeroLength(e.schema))throw new Yo("invalid schema specified.");if(ci.isEmptyOrZeroLength(e.table))throw new Yo("invalid table specified.");if(!Array.isArray(e.records))throw new Yo("records must be an array");let t=QW()[e.schema]?.[e.table];if(ci.isEmpty(t))throw new Yo(`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&&ci.isEmptyOrZeroLength(o[r]))throw Rw.error("a valid hash attribute must be provided with update record:",o),new Yo("a valid hash attribute must be provided with update record, check log for more info");if(!ci.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Rw.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Yo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ci.isEmpty(o[r])&&o[r]!==""&&n.has(ci.autoCast(o[r]))&&(o.skip=!0),n.add(ci.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(jW,"insertUpdateValidate")});var iu=T((rme,Ow)=>{"use strict";var zW=b().OPERATIONS_ENUM,vS=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=zW.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Ow.exports=vS});var lu=T((ime,Nw)=>{"use strict";var sme=iu(),Af=b(),HS=V(),BS=B(),JW=require("uuid"),{handleHDBError:ou,hdb_errors:XW}=ee(),{HDB_ERROR_MSGS:au,HTTP_STATUS_CODES:cu}=XW;Nw.exports=ZW;function ZW(e,t,r){for(let s=0;s<t.length;s++)eQ(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];tQ(i,r,e.operation)}}a(ZW,"processRows");function eQ(e){if(Buffer.byteLength(String(e))>Af.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ou(new Error,au.ATTR_NAME_LENGTH_ERR(e),cu.BAD_REQUEST,void 0,void 0,!0);if(HS.isEmptyOrZeroLength(e)||HS.isEmpty(e.trim()))throw ou(new Error,au.ATTR_NAME_NULLISH_ERR,cu.BAD_REQUEST,void 0,void 0,!0)}a(eQ,"validateAttribute");function tQ(e,t,r){if(!e.hasOwnProperty(t)||HS.isEmptyOrZeroLength(e[t])){if(r===Af.OPERATIONS_ENUM.INSERT||r===Af.OPERATIONS_ENUM.UPSERT){e[t]=JW.v4();return}throw BS.error("Update transaction aborted due to record with no hash value:",e),ou(new Error,au.RECORD_MISSING_HASH_ERR,cu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Af.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw BS.error(e),ou(new Error,au.HASH_VAL_LENGTH_ERR,cu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw BS.error(e),ou(new Error,au.INVALID_FORWARD_SLASH_IN_HASH_ERR,cu.BAD_REQUEST,void 0,void 0,!0)}a(tQ,"validateHash")});var Of=T((ame,yw)=>{"use strict";var bw=V(),rQ=b(),nQ=B(),sQ=Rf(),iQ=gf(),oQ=li(),{SchemaEventMsg:aQ}=rs(),cQ="already exists in";yw.exports=lQ;async function lQ(e,t,r){if(bw.isEmptyOrZeroLength(r))return r;let n=[];bw.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 uQ(e,t.schema,t.name,i)})),s}a(lQ,"lmdbCheckForNewAttributes");async function uQ(e,t,r,n){let s=new iQ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await _Q(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(cQ))nQ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(uQ,"createNewAttribute");async function _Q(e){let t;return t=await sQ(e),oQ.signalSchemaChange(new aQ(process.pid,rQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_Q,"createAttribute")});var lc=T((lme,Iw)=>{"use strict";var qS=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}};Iw.exports=qS});var Cw=T((_me,ww)=>{"use strict";var dQ=lc(),fQ=b().OPERATIONS_ENUM,xS=class extends dQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(fQ.INSERT,r,n,s,i),this.records=t}};ww.exports=xS});var Dw=T((fme,Lw)=>{"use strict";var EQ=lc(),hQ=b().OPERATIONS_ENUM,GS=class extends EQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(hQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};Lw.exports=GS});var Mw=T((hme,Pw)=>{"use strict";var mQ=lc(),pQ=b().OPERATIONS_ENUM,FS=class extends mQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(pQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};Pw.exports=FS});var vw=T((pme,Uw)=>{"use strict";var SQ=lc(),TQ=b().OPERATIONS_ENUM,kS=class extends SQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(TQ.DELETE,n,s,t,i),this.original_records=r}};Uw.exports=kS});var uu=T((gme,xw)=>{"use strict";var Tme=require("path"),Bw=$e(),gQ=Cw(),RQ=Dw(),AQ=Mw(),OQ=vw(),uc=ft(),Hw=V(),{CONFIG_PARAMS:NQ}=b(),qw=z();qw.initSync();var Nf=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:bQ}=ze();xw.exports=yQ;async function yQ(e,t){if(qw.get(NQ.LOGGING_AUDITLOG)===!1)return;let r=bQ(e.schema,e.table),n=await Bw.openEnvironment(r,e.table,!0),s=IQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Bw.initializeDBIs(n,uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,uc.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Hw.isEmpty(s.user_name)||n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[uc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(yQ,"writeTransaction");function IQ(e,t){let r=Hw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Nf.INSERT)return new gQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Nf.UPDATE)return new RQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Nf.UPSERT)return new AQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Nf.DELETE)return new OQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(IQ,"createTransactionObject")});var $S=T((Ome,Gw)=>{"use strict";var wQ=su(),Ame=iu(),_u=b(),CQ=lu(),LQ=Vo().insertRecords,DQ=$e(),PQ=B(),MQ=Of(),{getSchemaPath:UQ}=ze(),vQ=uu();Gw.exports=BQ;async function BQ(e){try{let{schema_table:t,attributes:r}=wQ(e);CQ(e,r,t.hash_attribute),e.schema!==_u.SYSTEM_SCHEMA_NAME&&(r.includes(_u.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(_u.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(_u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(_u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await MQ(e.hdb_auth_header,t,r),s=UQ(e.schema,e.table),i=await DQ.openEnvironment(s,e.table),o=await LQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vQ(e,o)}catch(c){PQ.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(BQ,"lmdbCreateRecords")});var $w=T((bme,kw)=>{"use strict";var Fw=b(),HQ=$S(),qQ=iu(),xQ=require("fs-extra"),{getSchemaPath:GQ}=ze();kw.exports=FQ;async function FQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new qQ(Fw.SYSTEM_SCHEMA_NAME,Fw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await HQ(r),await xQ.mkdirp(GQ(e.schema))}a(FQ,"lmdbCreateSchema")});var Yw=T((Ime,Vw)=>{"use strict";var VS=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}};Vw.exports=VS});var jw=T((Pme,Qw)=>{"use strict";var Kw=$e(),YS=Sr(),KS=zr().LMDB_ERRORS_ENUM,kQ=ft(),Ww=B(),Cme=V(),$Q=require("lmdb"),VQ=Yw(),YQ=b(),{OVERFLOW_MARKER:Lme,MAX_SEARCH_KEY_LENGTH:Dme}=kQ,KQ=YQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WQ(e,t,r,n){if(YS.validateEnv(e),t===void 0)throw new Error(KS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(KS.IDS_REQUIRED):new Error(KS.IDS_MUST_BE_ITERABLE);try{let s=Kw.listDBIs(e);Kw.initializeDBIs(e,t,s);let i=new VQ,o,c=[],l=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||n&&h[KQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,$Q.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let A=s[S];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],N=h[A];if(N!=null)try{let M=YS.getIndexedValues(N);if(M)for(let G=0,x=M.length;G<x;G++)g.remove(M[G],o)}catch{Ww.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),l.push(o),i.original_records.push(h)}catch(h){Ww.warn(h),i.skipped.push(o)}let _=[],u=await Promise.all(c);for(let f=0,E=u.length;f<E;f++)u[f]===!0?i.deleted.push(l[f]):(i.skipped.push(l[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=YS.getNextMonotonicTime(),i}catch(s){throw s}}a(WQ,"deleteRecords");Qw.exports={deleteRecords:WQ}});var du=T((Ume,Jw)=>{"use strict";var _c=V(),QQ=jw(),jQ=$e(),{getSchemaPath:zQ}=ze(),JQ=uu(),XQ=B();Jw.exports=ZQ;async function ZQ(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(_c.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(_c.isEmptyOrZeroLength(e.hash_values)&&!_c.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];_c.isEmpty(l)||e.hash_values.push(l)}}if(_c.isEmptyOrZeroLength(e.hash_values))return zw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(_c.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=zQ(e.schema,e.table),i=await jQ.openEnvironment(s,e.table),o=await QQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await JQ(e,o)}catch(c){XQ.error(`unable to write transaction due to ${c.message}`)}return zw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(ZQ,"lmdbDeleteRecords");function zw(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(zw,"createDeleteResponse")});var QS=T((Hme,Xw)=>{"use strict";var ej=b(),Bme=Sr();function WS(e,t){let r=Object.create(null);if(t.length===1&&ej.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(WS,"parseRow");function tj(e,t,r,n){let s=WS(r,e);n.push(s)}a(tj,"searchAll");function rj(e,t,r,n){let s=WS(r,e);n[t]=s}a(rj,"searchAllToMap");function nj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(nj,"iterateDBI");function Ko(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(Ko,"pushResults");function sj(e,t,r,n,s,i){t.toString().endsWith(e)&&Ko(t,r,n,s,i)}a(sj,"endsWith");function ij(e,t,r,n,s,i){t.toString().includes(e)&&Ko(t,r,n,s,i)}a(ij,"contains");function oj(e,t,r,n,s,i){t>e&&Ko(t,r,n,s,i)}a(oj,"greaterThanCompare");function aj(e,t,r,n,s,i){t>=e&&Ko(t,r,n,s,i)}a(aj,"greaterThanEqualCompare");function cj(e,t,r,n,s,i){t<e&&Ko(t,r,n,s,i)}a(cj,"lessThanCompare");function lj(e,t,r,n,s,i){t<=e&&Ko(t,r,n,s,i)}a(lj,"lessThanEqualCompare");Xw.exports={parseRow:WS,searchAll:tj,searchAllToMap:rj,iterateDBI:nj,endsWith:sj,contains:ij,greaterThanCompare:oj,greaterThanEqualCompare:aj,lessThanCompare:cj,lessThanEqualCompare:lj,pushResults:Ko}});var dc=T((kme,iC)=>{"use strict";var ji=$e(),xme=B(),en=Sr(),bf=ft(),Et=zr().LMDB_ERRORS_ENUM,Gme=V(),uj=b(),yf=QS(),{parseRow:_j}=yf,Fme=require("lmdb"),{OVERFLOW_MARKER:Zw,MAX_SEARCH_KEY_LENGTH:dj}=bf;function eC(e,t,r,n=!1,s=void 0,i=void 0){return Wo(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(eC,"iterateFullIndex");function fu(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,_=!1){return Wo(e,t,r,(u,d,f,E)=>{let g={transaction:u,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!_,exclusiveStart:i===!0?_:l};return E===r?(g.values=!1,d.getRange(g).map(N=>({value:N}))):d.getRange(g)})}a(fu,"iterateRangeBetween");function Wo(e,t,r,n){let s=e.database||e,i=ji.openDBI(s,r);i[bf.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ji.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Wo,"setupTransaction");function tC(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(Zw)){if(!s)if(r)s=ji.openDBI(e,r);else{let l=ji.listDBIs(e);for(let _=0,u=l.length;_<u&&(s=ji.openDBI(e,l[_]),!s[bf.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(tC,"getOverflowCheck");function fj(e,t,r,n=!1,s=void 0,i=void 0){if(en.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);return Wo(e,t,t,(o,c,l)=>(If(r),r=Eu(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>_j(_.value,r))))}a(fj,"searchAll");function Ej(e,t,r,n=!1,s=void 0,i=void 0){if(en.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);If(r),r=Eu(e.database||e,r);let o=new Map;for(let{key:c,value:l}of eC(e,t,t,n,s,i))o.set(c,yf.parseRow(l,r));return o}a(Ej,"searchAllToMap");function hj(e,t,r=!1,n=void 0,s=void 0){if(en.validateEnv(e),t===void 0)throw new Error(Et.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=eC(e,void 0,t,r,n,s),c=o.transaction,l=tC(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(hj,"iterateDBI");function mj(e,t){if(en.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);return ji.statDBI(e,t).entryCount}a(mj,"countAll");function pj(e,t,r,n,s=!1,i=void 0,o=void 0){return zi(e,r,n),Wo(e,t,r,(c,l,_,u)=>(n=en.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(pj,"equals");function Sj(e,t,r){return zi(e,t,r),ji.openDBI(e,t).getValuesCount(r)}a(Sj,"count");function Tj(e,t,r,n,s=!1,i=void 0,o=void 0){return zi(e,r,n),Wo(e,null,r,(c,l)=>{n=en.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let u;if(s===!0){let d;for(let f of l.getKeys({transaction:c,start:n}))if(!f.startsWith(n)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),u=l.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(n))return f;if(_===!0)return u.DONE}}),u.filter(f=>f)}else return u=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return u.DONE}),_?u:u.filter(d=>d)})}a(Tj,"startsWith");function gj(e,t,r,n,s=!1,i=void 0,o=void 0){return rC(e,t,r,n,s,i,o,!0)}a(gj,"endsWith");function rC(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return zi(e,r,n),Wo(e,null,r,(l,_,u,d)=>{let f=tC(u,l,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(E=>{let h=E.toString();return h.endsWith(Zw)?_.getValues(E,{transaction:l}).map(p=>{let S=f(E,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[bf.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:l}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(rC,"contains");function Rj(e,t,r,n,s=!1,i=void 0,o=void 0){zi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),fu(e,t,r,n,l,s,i,o,!0,!1)}a(Rj,"greaterThan");function Aj(e,t,r,n,s=!1,i=void 0,o=void 0){zi(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),fu(e,t,r,n,l,s,i,o,!1,!1)}a(Aj,"greaterThanEqual");function Oj(e,t,r,n,s=!1,i=void 0,o=void 0){zi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),fu(e,t,r,l,n,s,i,o,!1,!0)}a(Oj,"lessThan");function Nj(e,t,r,n,s=!1,i=void 0,o=void 0){zi(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),fu(e,t,r,l,n,s,i,o,!1,!1)}a(Nj,"lessThanEqual");function bj(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(en.validateEnv(e),r===void 0)throw new Error(Et.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Et.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Et.END_VALUE_REQUIRED);if(n=en.convertKeyValueToWrite(n),s=en.convertKeyValueToWrite(s),n>s)throw new Error(Et.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return fu(e,t,r,n,s,i,o,c)}a(bj,"between");function yj(e,t,r,n){en.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);if(If(r),r=Eu(s,r),n===void 0)throw new Error(Et.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=yf.parseRow(c,r)),o}a(yj,"searchByHash");function Ij(e,t,r){en.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Et.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Ij,"checkHashExists");function wj(e,t,r,n,s=[]){return sC(e,t,r,n,s),nC(e,t,r,n,s).map(i=>i[1])}a(wj,"batchSearchByHash");function Cj(e,t,r,n,s=[]){sC(e,t,r,n,s);let i=new Map;for(let[o,c]of nC(e,t,r,n,s))i.set(o,c);return i}a(Cj,"batchSearchByHashToMap");function nC(e,t,r,n,s=[]){return Wo(e,t,t,(i,o,c)=>{r=Eu(c,r);let l=r.length<3;return n.map(_=>{let u=c.dbis[t].get(_,{transaction:i,lazy:l});if(u)return[_,yf.parseRow(u,r)];s.push(_)}).filter(_=>_)})}a(nC,"batchHashSearch");function sC(e,t,r,n,s){if(en.validateEnv(e),t===void 0)throw new Error(Et.HASH_ATTRIBUTE_REQUIRED);if(If(r),n==null)throw new Error(Et.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Et.IDS_MUST_BE_ITERABLE)}a(sC,"initializeBatchSearchByHash");function If(e){if(!Array.isArray(e))throw e===void 0?new Error(Et.FETCH_ATTRIBUTES_REQUIRED):new Error(Et.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(If,"validateFetchAttributes");function zi(e,t,r){if(en.validateEnv(e),t===void 0)throw new Error(Et.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Et.SEARCH_VALUE_REQUIRED);if(r?.length>dj)throw new Error(Et.SEARCH_VALUE_TOO_LARGE)}a(zi,"validateComparisonFunctions");function Eu(e,t){return t.length===1&&uj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ji.listDBIs(e)),t}a(Eu,"setGetWholeRowAttributes");iC.exports={searchAll:fj,searchAllToMap:Ej,count:Sj,countAll:mj,equals:pj,startsWith:Tj,endsWith:gj,contains:rC,searchByHash:yj,setGetWholeRowAttributes:Eu,batchSearchByHash:wj,batchSearchByHashToMap:Cj,checkHashExists:Ij,iterateDBI:hj,greaterThan:Rj,greaterThanEqual:Aj,lessThan:Oj,lessThanEqual:Nj,between:bj}});var fc=T((Vme,uC)=>{var oC=require("lodash"),aC=st(),_e=require("joi"),Lj=V(),{hdb_schema_table:hu,checkValidTable:cC,hdb_table:lC,hdb_database:wf}=ws(),{handleHDBError:Dj,hdb_errors:Pj}=ee(),{getDatabases:Mj}=(me(),re(Ge)),{HTTP_STATUS_CODES:Uj}=Pj,vj=_e.object({database:wf,schema:wf,table:lC,search_attribute:hu,search_value:_e.any().required(),get_attributes:_e.array().min(1).items(_e.alternatives(hu,_e.object())).optional(),desc:_e.bool(),limit:_e.number().integer().min(1),offset:_e.number().integer().min(0)}),Bj=_e.object({database:wf,schema:wf,table:lC,operator:_e.string().valid("and","or").default("and").lowercase(),offset:_e.number().integer().min(0),limit:_e.number().integer().min(1),get_attributes:_e.array().min(1).items(_e.alternatives(hu,_e.object())).optional(),sort:_e.object({attribute:_e.alternatives(hu,_e.array().min(1)),descending:_e.bool().optional()}).optional(),conditions:_e.array().min(1).items(_e.alternatives(_e.object({operator:_e.string().valid("and","or").default("and").lowercase(),conditions:_e.array()}),_e.object({search_attribute:_e.alternatives(hu,_e.array().min(1)),search_type:_e.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:_e.when("search_type",{switch:[{is:"equals",then:_e.any()},{is:"between",then:_e.array().items(_e.alternatives([_e.string(),_e.number()])).length(2)}],otherwise:_e.alternatives(_e.string(),_e.number())}).required()}))).required()});uC.exports=function(e,t){let r=null;switch(t){case"value":r=aC.validateBySchema(e,vj);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(cC("database",e.schema)),i(cC("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=aC.validateBySchema(e,Bj);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Lj.checkGlobalSchemaTable(e.schema,e.table);if(s)return Dj(new Error,s,Uj.NOT_FOUND);let o=Mj()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(u=>{for(let d=0,f=u.conditions.length;d<f;d++){let E=u.conditions[d];E.conditions?l(E):c.push(E.search_attribute)}},"addConditions");t==="conditions"&&l(e);let _=oC.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Array.isArray(u)&&!oC.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 jS=T((Kme,_C)=>{"use strict";var Hj=$e(),qj=fc(),{getSchemaPath:xj}=ze();_C.exports=Gj;function Gj(e){let t=qj(e,"hashes");if(t)throw t;let r=xj(e.schema,e.table);return Hj.openEnvironment(r,e.table)}a(Gj,"initialize")});var zS=T((Qme,dC)=>{"use strict";var Fj=dc(),kj=jS();dC.exports=$j;async function $j(e){let t=await kj(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Fj.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a($j,"lmdbGetDataByHash")});var Ec=T((zme,fC)=>{"use strict";var JS=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};fC.exports=JS});var hC=T((Zme,EC)=>{"use strict";var Xme=Ec(),Vj=dc(),Yj=jS();EC.exports=Kj;async function Kj(e){let t=await Yj(e),r=global.hdb_schema[e.schema][e.table];return Vj.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Kj,"lmdbSearchByHash")});var ns=T((tpe,mC)=>{"use strict";var XS=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}};mC.exports=XS});var Cf=T((npe,AC)=>{"use strict";var ir=dc(),Wj=$e(),Qj=V(),de=ft(),Qo=b(),jj=oi(),pC=zr().LMDB_ERRORS_ENUM,{getSchemaPath:zj}=ze(),ui=Qo.SEARCH_WILDCARDS;async function Jj(e,t,r){let n;e.schema===Qo.SYSTEM_SCHEMA_NAME?n=jj[e.table]:n=global.hdb_schema[e.schema][e.table];let s=RC(e,n.hash_attribute,r,t);return TC(e,s,n.hash_attribute,r)}a(Jj,"prepSearch");async function TC(e,t,r,n){let s=zj(e.schema,e.table),i=await Wj.openEnvironment(s,e.table),o=gC(i,e,t,r),c=o.transaction||i;if([de.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,de.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,de.SEARCH_TYPES.SEARCH_ALL,de.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Xj(e,r)===!1){let u=e.search_attribute;if(u===r)return n?SC(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[u]:f.key}),"toObject");return n?SC(o,d):o.map(d)}let _=e.search_attribute===r?o.map(u=>u.key):o.map(u=>u.value);return n===!0?ir.batchSearchByHashToMap(c,r,e.get_attributes,_):ir.batchSearchByHash(c,r,e.get_attributes,_)}a(TC,"executeSearch");function gC(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 de.SEARCH_TYPES.EQUALS:s=ir.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case de.SEARCH_TYPES.CONTAINS:s=ir.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case de.SEARCH_TYPES.ENDS_WITH:case de.SEARCH_TYPES._ENDS_WITH:s=ir.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case de.SEARCH_TYPES.STARTS_WITH:case de.SEARCH_TYPES._STARTS_WITH:s=ir.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case de.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ir.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case de.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ir.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case de.SEARCH_TYPES.SEARCH_ALL:return ir.searchAll(e,n,t.get_attributes,o,c,l);case de.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ir.searchAllToMap(e,n,t.get_attributes,o,c,l);case de.SEARCH_TYPES.BETWEEN:s=ir.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case de.SEARCH_TYPES.GREATER_THAN:case de.SEARCH_TYPES._GREATER_THAN:s=ir.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case de.SEARCH_TYPES.GREATER_THAN_EQUAL:case de.SEARCH_TYPES._GREATER_THAN_EQUAL:s=ir.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case de.SEARCH_TYPES.LESS_THAN:case de.SEARCH_TYPES._LESS_THAN:s=ir.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case de.SEARCH_TYPES.LESS_THAN_EQUAL:case de.SEARCH_TYPES._LESS_THAN_EQUAL:s=ir.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(gC,"searchByType");function SC(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(SC,"createMapFromIterable");function Xj(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(Xj,"checkToFetchMore");function RC(e,t,r,n){if(Qj.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),ui.indexOf(s)>-1)return r===!0?de.SEARCH_TYPES.SEARCH_ALL_TO_MAP:de.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ui[0])<0&&s.indexOf(ui[1])<0)return c===!0?r===!0?de.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:de.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:de.SEARCH_TYPES.EQUALS;if(ui.indexOf(i)>=0&&ui.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),de.SEARCH_TYPES.CONTAINS;if(ui.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),de.SEARCH_TYPES.ENDS_WITH;if(ui.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),de.SEARCH_TYPES.STARTS_WITH;if(s.includes(ui[0])||s.includes(ui[1]))return de.SEARCH_TYPES.EQUALS;throw new Error(pC.UNKNOWN_SEARCH_TYPE)}else switch(n){case Qo.VALUE_SEARCH_COMPARATORS.BETWEEN:return de.SEARCH_TYPES.BETWEEN;case Qo.VALUE_SEARCH_COMPARATORS.GREATER:return de.SEARCH_TYPES.GREATER_THAN;case Qo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return de.SEARCH_TYPES.GREATER_THAN_EQUAL;case Qo.VALUE_SEARCH_COMPARATORS.LESS:return de.SEARCH_TYPES.LESS_THAN;case Qo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return de.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(pC.UNKNOWN_SEARCH_TYPE)}}a(RC,"createSearchTypeFromSearchObject");AC.exports={executeSearch:TC,createSearchTypeFromSearchObject:RC,prepSearch:Jj,searchByType:gC}});var NC=T((ope,OC)=>{"use strict";var ipe=ns(),Zj=fc(),ez=V(),tz=b(),rz=Cf();OC.exports=nz;function nz(e,t){if(!ez.isEmpty(t)&&tz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Zj(e,"value");if(n)throw n;let s=!0;return rz.prepSearch(e,t,s)}a(nz,"lmdbGetDataByValue")});var mu=T((lpe,bC)=>{"use strict";var cpe=ns(),sz=fc(),iz=V(),oz=b(),az=Cf();bC.exports=cz;async function cz(e,t){if(!iz.isEmpty(t)&&oz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=sz(e,"value");if(n)throw n;return az.prepSearch(e,t,!1)}a(cz,"lmdbSearchByValue")});var IC=T((dpe,yC)=>{"use strict";var _pe=ft(),ZS=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}},eT=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},tT=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};yC.exports={SearchByConditionsObject:ZS,SearchCondition:eT,SortAttribute:tT}});var PC=T((mpe,DC)=>{"use strict";var Epe=IC().SearchByConditionsObject,lz=ns(),uz=fc(),rT=dc(),Lf=ft(),{Resource:hpe}=(Zn(),re(kp)),LC=Cf(),_z=QS(),dz=require("lodash"),{getSchemaPath:fz}=ze(),wC=$e(),{handleHDBError:Ez,hdb_errors:hz}=ee(),{HTTP_STATUS_CODES:mz}=hz,pz=1e8;DC.exports=Sz;async function Sz(e){let t=uz(e,"conditions");if(t)throw Ez(t,t.message,mz.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=fz(e.schema,e.table),n=await wC.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)wC.openDBI(n,_.search_attribute);let i=dz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let u=_.search_type;u===Lf.SEARCH_TYPES.EQUALS?_.estimated_count=rT.count(n,_.search_attribute,_.search_value):u===Lf.SEARCH_TYPES.CONTAINS||u===Lf.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=pz}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await CC(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(LC.filterByType),d=u.length,f=rT.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(l=l.filter(E=>{for(let h=0;h<d;h++)if(!u[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(E=>_z.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await CC(o,e,f,s.hash_attribute);c=c.concat(E)}let _=new Set,u=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(u,e.limit&&e.limit+u),l=rT.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Sz,"lmdbSearchByConditions");async function CC(e,t,r,n){let s=new lz(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===Lf.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,LC.searchByType(e,s,i,n).map(o=>o.value)}a(CC,"executeConditionSearch")});var pu=T((Spe,MC)=>{"use strict";var Tz=b().OPERATIONS_ENUM,nT=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=Tz.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};MC.exports=nT});var sT=T((gpe,FC)=>{"use strict";var HC=ns(),qC=pu(),xC=mu(),GC=du(),Ar=b(),UC=V(),vC=$e(),{getTransactionAuditStorePath:gz,getSchemaPath:Rz}=ze(),BC=B();FC.exports=Az;async function Az(e){try{if(UC.isEmpty(global.hdb_schema[e.schema])||UC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Oz(e),await Nz(e);let t=Rz(e.schema,e.table);try{await vC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")BC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gz(e.schema,e.table);await vC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")BC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Az,"lmdbDropTable");async function Oz(e){let t=new HC(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await xC(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 qC(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await GC(s)}a(Oz,"deleteAttributesFromSystem");async function Nz(e){let t=new HC(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await xC(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 qC(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await GC(s)}catch(i){throw i}}a(Nz,"dropTableFromSystem")});var $C=T((Ape,kC)=>{"use strict";var bz=require("fs-extra"),yz=ns(),Iz=Ec(),wz=pu(),Cz=sT(),Lz=du(),Dz=zS(),Pz=mu(),_i=b(),{getSchemaPath:Mz}=ze(),{handleHDBError:Uz,hdb_errors:vz}=ee(),{HDB_ERROR_MSGS:Bz,HTTP_STATUS_CODES:Hz}=vz;kC.exports=qz;async function qz(e){let t;try{t=await xz(e.schema);let r=new yz(_i.SYSTEM_SCHEMA_NAME,_i.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[_i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Pz(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await Cz(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new wz(_i.SYSTEM_SCHEMA_NAME,_i.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Lz(s);let i=Mz(t);await bz.remove(i)}catch(r){throw r}}a(qz,"lmdbDropSchema");async function xz(e){let t=new Iz(_i.SYSTEM_SCHEMA_NAME,_i.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[_i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Dz(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw Uz(new Error,Bz.SCHEMA_NOT_FOUND(e),Hz.NOT_FOUND,void 0,void 0,!0);return n}a(xz,"validateDropSchema")});var Su=T((Npe,VC)=>{"use strict";var iT=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};VC.exports=iT});var aT=T((Ipe,YC)=>{"use strict";var Gz=require("fs-extra"),Df=$e(),{getTransactionAuditStorePath:Fz}=ze(),oT=ft(),ype=Su();YC.exports=kz;async function kz(e){let t;try{let r=Fz(e.schema,e.table);await Gz.mkdirp(r),t=await Df.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{Df.createDBI(t,oT.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Df.createDBI(t,oT.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Df.createDBI(t,oT.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(kz,"createTransactionsAuditEnvironment")});var jC=T((Cpe,QC)=>{"use strict";var cT=b(),KC=$e(),$z=Vo(),{getSystemSchemaPath:Vz,getSchemaPath:Yz}=ze(),Kz=oi(),Wz=Rf(),lT=gf(),Qz=B(),jz=aT(),_T=Kz.hdb_table,WC=[];for(let e=0;e<_T.attributes.length;e++)WC.push(_T.attributes[e].attribute);QC.exports=zz;async function zz(e,t){let r=Yz(t.schema,t.table),n=new lT(t.schema,t.table,cT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new lT(t.schema,t.table,cT.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new lT(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await KC.createEnvironment(r,t.table),e!==void 0){let o=await KC.openEnvironment(Vz(),cT.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await $z.insertRecords(o,_T.hash_attribute,WC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await uT(n),await uT(s),await uT(i)}await jz(t)}catch(o){throw o}}a(zz,"lmdbCreateTable");async function uT(e){try{await Wz(e)}catch(t){Qz.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(uT,"createAttribute")});var JC=T((Dpe,zC)=>{"use strict";var Jz=su(),Xz=lu(),Zz=Of(),Tu=b(),eJ=Vo().updateRecords,tJ=$e(),{getSchemaPath:rJ}=ze(),nJ=uu(),sJ=B();zC.exports=iJ;async function iJ(e){try{let{schema_table:t,attributes:r}=Jz(e);Xz(e,r,t.hash_attribute),e.schema!==Tu.SYSTEM_SCHEMA_NAME&&(r.includes(Tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Zz(e.hdb_auth_header,t,r),s=rJ(e.schema,e.table),i=await tJ.openEnvironment(s,e.table),o=await eJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await nJ(e,o)}catch(c){sJ.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(iJ,"lmdbUpdateRecords")});var ZC=T((Mpe,XC)=>{"use strict";var oJ=b().OPERATIONS_ENUM,dT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=oJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};XC.exports=dT});var tL=T((Bpe,eL)=>{"use strict";var vpe=ZC(),aJ=su(),cJ=lu(),lJ=Of(),gu=b(),uJ=Vo().upsertRecords,_J=$e(),{getSchemaPath:dJ}=ze(),fJ=uu(),EJ=B(),{handleHDBError:hJ,hdb_errors:mJ}=ee();eL.exports=pJ;async function pJ(e){let t;try{t=aJ(e)}catch(l){throw hJ(l,l.message,mJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;cJ(e,n,r.hash_attribute),e.schema!==gu.SYSTEM_SCHEMA_NAME&&(n.includes(gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await lJ(e.hdb_auth_header,r,n),i=dJ(e.schema,e.table),o=await _J.openEnvironment(i,e.table),c=await uJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await fJ(e,c)}catch(l){EJ.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(pJ,"lmdbUpsertRecords")});var nL=T((qpe,rL)=>{"use strict";var fT=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};rL.exports=fT});var iL=T((Gpe,sL)=>{"use strict";var ET=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}};sL.exports=ET});var cL=T(($pe,aL)=>{"use strict";var hT=$e(),{getTransactionAuditStorePath:SJ}=ze(),kpe=nL(),Ru=ft(),TJ=V(),oL=iL(),gJ=require("util").promisify,RJ=gJ(setTimeout),AJ=1e4,OJ=100;aL.exports=NJ;async function NJ(e){let t=SJ(e.schema,e.table),r=await hT.openEnvironment(t,e.table,!0),n=hT.listDBIs(r);hT.initializeDBIs(r,Ru.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new oL;do s=await bJ(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 RJ(OJ);while(s.transactions_deleted>0);return i}a(NJ,"deleteAuditLogsBefore");async function bJ(e,t){let r=new oL;try{let n=e.dbis[Ru.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[Ru.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];TJ.isEmpty(c)||(s=e.dbis[Ru.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[Ru.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>AJ)break}return await s,r}catch(n){throw n}}a(bJ,"deleteTransactions")});var uL=T((Ype,lL)=>{"use strict";var mT=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};lL.exports=mT});var dL=T((Qpe,_L)=>{"use strict";var yJ=ns(),IJ=pu(),Wpe=uL(),Ls=b(),wJ=V(),pT=$e(),CJ=oi(),LJ=mu(),DJ=du(),{getSchemaPath:PJ}=ze();_L.exports=MJ;async function MJ(e,t=!0){let r;e.schema===Ls.SYSTEM_SCHEMA_NAME?r=CJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await vJ(e),s=PJ(e.schema,e.table),i=await pT.openEnvironment(s,e.table);return t===!0&&await UJ(e,i,r.hash_attribute),pT.dropDBI(i,e.attribute),n}a(MJ,"lmdbDropAttribute");async function UJ(e,t,r){let n=pT.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(UJ,"removeAttributeFromAllObjects");async function vJ(e){let t=new yJ(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await LJ(t)).filter(o=>o[Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(wJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new IJ(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return DJ(i)}a(vJ,"dropAttributeFromSystem")});var SL=T((Jpe,pL)=>{"use strict";var ST=$e(),hc=ft(),zpe=Sr(),TT=b(),fL=V(),{getTransactionAuditStorePath:BJ}=ze(),HJ=dc(),Pf=lc(),qJ=B();pL.exports=xJ;async function xJ(e){let t=BJ(e.schema,e.table),r=await ST.openEnvironment(t,e.table,!0),n=ST.listDBIs(r);ST.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case TT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return EL(r,e.search_values);case TT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,FJ(r,e.search_values,s);case TT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return GJ(r,e.search_values);default:return EL(r)}}a(xJ,"readAuditLog");function EL(e,t=[0,Date.now()]){fL.isEmpty(t[0])&&(t[0]=0),fL.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hc.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 Pf,s))}a(EL,"searchTransactionsByTimestamp");function GJ(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[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,mL(e,i))}return Object.fromEntries(r)}a(GJ,"searchTransactionsByUsername");function FJ(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let _=t[c],u=HJ.equals(e,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of u){let f=Number(d);n.has(f)?n.get(f).push(_.toString()):n.set(f,[_.toString()])}}let s=Array.from(n.keys()),i=mL(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],_=l.timestamp,u=n.get(_);hL(l,"records",r,u,o),hL(l,"original_records",r,u,o)}return Object.fromEntries(o)}a(FJ,"searchTransactionsByHashValues");function hL(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 Pf(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Pf(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(l,[_])}}}a(hL,"loopRecords");function mL(e,t){let r=[];try{let n=e.dbis[hc.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 Pf,i);r.push(o)}}catch(i){qJ.warn(i)}return r}catch(n){throw n}}a(mL,"batchSearchTransactions")});var gL=T((tSe,TL)=>{"use strict";var{getSchemaPath:Zpe}=ze(),eSe=$e(),{database:kJ}=(me(),re(Ge));TL.exports={writeTransaction:$J};async function $J(e,t,r){return kJ({database:e,table:t}).transaction(r)}a($J,"writeTransaction")});var NL=T((nSe,OL)=>{"use strict";var{getSchemaPath:RL}=ze(),AL=$e();OL.exports={flush:VJ,resetReadTxn:YJ};async function VJ(e,t){return(await AL.openEnvironment(RL(e,t),t.toString())).flushed}a(VJ,"flush");async function YJ(e,t){try{(await AL.openEnvironment(RL(e,t),t.toString())).resetReadTxn()}catch{}}a(YJ,"resetReadTxn")});var wL=T((iSe,IL)=>{"use strict";var{Readable:KJ}=require("stream"),{getDatabases:WJ}=(me(),re(Ge)),{readSync:QJ,openSync:jJ,createReadStream:bL}=require("fs"),{open:zJ}=require("lmdb"),yL=lf(),JJ=_f(),{AUDIT_STORE_OPTIONS:XJ}=(nc(),re(cI)),{INTERNAL_DBIS_NAME:ZJ,AUDIT_STORE_NAME:e2}=ft();IL.exports=r2;var gT=32768,t2=100;async function r2(e){let t=e.database||e.schema||"data",r=WJ()[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=zJ({noSync:!0,maxDbs:JJ.MAX_DBS}),f,E=d.openDB(ZJ,new yL(!1)),h=u.useReadTransaction(),p=0,S=a(async function(g,N){N.encoding="binary",N.encoder=void 0;let M=d.openDB(g,N),G=u.openDB(g,N);for(let{key:x,version:D,value:K}of G.getRange({transaction:h,versions:G.useVersions}))f=M.put(x,K,D),p++%t2===0&&(await new Promise($=>setTimeout($,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:N}of u.getRange({transaction:h,start:!1}))if(s.some(M=>g.startsWith?.(M+"/"))){E.put(g,N);let[,M]=g.split("/"),G=!M,x=new yL(!G,G);await S(g,x)}e.include_audit&&await S(e2,Object.assign({},XJ)),await f;let A=bL(d.path);return A.headers=l(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=jJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(gT);QJ(c,_,0,gT),o.resetReadTxn();let u=o.useReadTransaction();u.renew();let d=bL(null,{fd:c,start:gT}),f=new KJ.from(async function*(){yield _;for await(let E of d)u.openTimer&&(u.openTimer=0),yield E;u.done()}());return f.headers=l(),f});function l(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(r2,"getBackup")});var DL=T((aSe,LL)=>{"use strict";var n2=B(),{handleHDBError:s2}=ee(),i2=QI(),o2=Rf(),a2=$S(),c2=$w(),l2=du(),u2=zS(),_2=hC(),d2=NC(),f2=mu(),E2=PC(),h2=$C(),m2=jC(),p2=JC(),S2=tL(),T2=cL(),g2=sT(),R2=dL(),A2=SL(),O2=gL(),CL=NL(),N2=wL(),RT=class extends i2{static{a(this,"LMDBBridge")}async searchByConditions(t){return E2(t)}async getDataByHash(t){return await u2(t)}async searchByHash(t){return await _2(t)}async getDataByValue(t,r){return await d2(t,r)}async searchByValue(t){return await f2(t)}async createSchema(t){return await c2(t)}async dropSchema(t){return await h2(t)}async createTable(t,r){return await m2(t,r)}async dropTable(t){return await g2(t)}async createAttribute(t){return await o2(t)}async createRecords(t){return await a2(t)}async updateRecords(t){return await p2(t)}async upsertRecords(t){try{return await S2(t)}catch(r){throw s2(r,null,null,n2.ERR,r)}}async deleteRecords(t){return await l2(t)}async dropAttribute(t){return await R2(t)}async deleteAuditLogsBefore(t){return await T2(t)}async readAuditLog(t){return await A2(t)}writeTransaction(t,r,n){return O2.writeTransaction(t,r,n)}flush(t,r){return CL.flush(t,r)}resetReadTxn(t,r){return CL.resetReadTxn(t,r)}getBackup(t){return N2(t)}};LL.exports=RT});var GL={};je(GL,{ResourceBridge:()=>NT});function bT({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 ML(e,t){let r=Ds(e),n=bT(e,r);if(!r)throw new ss.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user},o;Xe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,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&&Wd(u),t?{value:{key:_,value:u}}:{value:u}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Ds(e){let t=e.database||e.schema||y2,r=is()[t];if(!r)throw(0,ss.handleHDBError)(new Error,b2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function UL(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*vL(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 BL,Mf,ss,HL,qL,os,AT,OT,xL,b2,y2,I2,w2,PL,NT,FL=Ae(()=>{"use strict";BL=U(DL()),Mf=U(fc()),ss=U(ee());me();HL=U(su()),qL=U(lu()),os=U(b()),AT=U(li()),OT=U(rs()),xL=U(V());Go();Qd();({HDB_ERROR_MSGS:b2}=ss.hdb_errors),y2="data",I2=1e4,w2=10,NT=class extends BL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),PL=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,Mf.default)(t,"conditions");if(r)throw(0,ss.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Ds(t);if(!n)throw new ss.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:bT(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 ss.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}]}ht({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await Ds(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Ds(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(_=>{if(!_){let{value:u,version:d}=r.primaryStore.getEntry(o);return i(o,u,d)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Ds(t).dropTable()}createSchema(t){return Au({database:t.schema,table:null}),AT.signalSchemaChange(new OT.SchemaEventMsg(process.pid,os.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await yT(t.schema),AT.signalSchemaChange(new OT.SchemaEventMsg(process.pid,os.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,PL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,HL.default)(t);(0,qL.default)(t,n,r.primaryKey);let s,i=is()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Xe(o,async c=>{if(!i.schemaDefined){s=[];for(let u of n)i.attributes.find(f=>f.name==u)||s.push(u);s.length>0&&await i.addAttributes(s.map(u=>({name:u,indexed:!0})))}let l=[],_=[];for(let u of t.records){let d=await i.get(u[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(u[i.primaryKey]);continue}d&&(d=Wd(d));for(let f in u)if(Object.prototype.hasOwnProperty.call(u,f)){let E=u[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,u[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(u),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(u,f)||(u[f]=d[f]);await i.put(u,o),l.push(u[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=is()[t.schema][t.table],n={user:t.hdb_user};return Xe(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 UL(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=is()[t.schema][t.table];if(!r.createdTimeProperty)throw new ss.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:os.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,xL.async_set_timeout)(w2),l=[],s=!0},"chunkDelete");for await(let u of n)l.push(u[r.primaryKey]),c++,c%I2===0&&await _();return l.length>0&&await _(),s?UL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Mf.default)(t,"hashes");if(r)throw r;return ML(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ML(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&os.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,Mf.default)(t,"value");if(n)throw n;let s=Ds(t);if(!s)throw new ss.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===os.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:bT(t,s)})}async getDataByValue(t,r){let n=new Map,s=Ds(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Ds({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Ds(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Ds(t),n={};switch(t.search_type){case os.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 os.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of vL(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return vL(r,t.search_values?.[0],t.search_values?.[1])}}};a(bT,"getSelect");a(ML,"getRecords");a(Ds,"getTable");a(UL,"createDeleteResponse");a(vL,"groupRecordsInHistory")});var Dn=T((fSe,kL)=>{"use strict";var{ResourceBridge:C2}=(FL(),re(GL)),L2=z();L2.initSync();var Uf;function D2(){return Uf||(Uf=new C2,Uf)}a(D2,"getBridge");kL.exports=D2()});var KL=T((hSe,YL)=>{"use strict";var $L=require("lodash"),Ou=require("mathjs"),P2=require("jsonata"),VL=V();YL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?$L.uniqWith(e,$L.isEqual):e,searchJSON:M2,mad:Nu.bind(null,Ou.mad),mean:Nu.bind(null,Ou.mean),mode:Nu.bind(null,Ou.mode),prod:Nu.bind(null,Ou.prod),median:Nu.bind(null,Ou.median)};function Nu(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(Nu,"aggregateFunction");function M2(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(VL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),VL.isEmpty(this.__ala__.res[r])){let n=P2(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(M2,"searchJSON")});var QL=T((pSe,WL)=>{"use strict";var Nt=require("moment"),IT="YYYY-MM-DDTHH:mm:ss.SSSZZ";Nt.suppressDeprecationWarnings=!0;WL.exports={current_date:()=>Nt().utc().format("YYYY-MM-DD"),current_time:()=>Nt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Nt(e).utc().format("YYYY");case"month":return Nt(e).utc().format("MM");case"day":return Nt(e).utc().format("DD");case"hour":return Nt(e).utc().format("HH");case"minute":return Nt(e).utc().format("mm");case"second":return Nt(e).utc().format("ss");case"millisecond":return Nt(e).utc().format("SSS");default:break}},date:e=>Nt(e).utc().format(IT),date_format:(e,t)=>Nt(e).utc().format(t),date_add:(e,t,r)=>Nt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Nt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Nt(e).utc(),s=Nt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Nt().utc().valueOf(),get_server_time:()=>Nt().format(IT),offset_utc:(e,t)=>Nt(e).utc().utcOffset(t).format(IT)}});var XL=T((SSe,JL)=>{"use strict";var U2=require("@turf/area"),v2=require("@turf/length"),B2=require("@turf/circle"),H2=require("@turf/difference"),q2=require("@turf/distance"),x2=require("@turf/boolean-contains"),G2=require("@turf/boolean-equal"),F2=require("@turf/boolean-disjoint"),k2=require("@turf/helpers"),jL=b(),Ee=V(),di=B();JL.exports={geoArea:$2,geoLength:V2,geoCircle:Y2,geoDifference:K2,geoDistance:zL,geoNear:W2,geoContains:Q2,geoEqual:j2,geoCrosses:z2,geoConvert:J2};function $2(e){if(Ee.isEmpty(e))return NaN;typeof e=="string"&&(e=Ee.autoCastJSON(e));try{return U2.default(e)}catch(t){return di.trace(t,e),NaN}}a($2,"geoArea");function V2(e,t){if(Ee.isEmpty(e))return NaN;typeof e=="string"&&(e=Ee.autoCastJSON(e));try{return v2.default(e,{units:t||"kilometers"})}catch(r){return di.trace(r,e),NaN}}a(V2,"geoLength");function Y2(e,t,r){if(Ee.isEmpty(e))return NaN;if(Ee.isEmpty(t))return NaN;typeof e=="string"&&(e=Ee.autoCastJSON(e));try{return B2.default(e,t,{units:r||"kilometers"})}catch(n){return di.trace(n,e,t),NaN}}a(Y2,"geoCircle");function K2(e,t){if(Ee.isEmpty(e))return NaN;if(Ee.isEmpty(t))return NaN;typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t));try{return H2(e,t)}catch(r){return di.trace(r,e,t),NaN}}a(K2,"geoDifference");function zL(e,t,r){if(Ee.isEmpty(e))return NaN;if(Ee.isEmpty(t))return NaN;typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t));try{return q2.default(e,t,{units:r||"kilometers"})}catch(n){return di.trace(n,e,t),NaN}}a(zL,"geoDistance");function W2(e,t,r,n){if(Ee.isEmpty(e)||Ee.isEmpty(t))return!1;if(Ee.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return zL(e,t,n)<=r}catch(s){return di.trace(s,e,t),!1}}a(W2,"geoNear");function Q2(e,t){if(Ee.isEmpty(e)||Ee.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t));try{return x2.default(e,t)}catch(r){return di.trace(r,e,t),!1}}a(Q2,"geoContains");function j2(e,t){if(Ee.isEmpty(e)||Ee.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t));try{return G2.default(e,t)}catch(r){return di.trace(r,e,t),!1}}a(j2,"geoEqual");function z2(e,t){if(Ee.isEmpty(e)||Ee.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t));try{return!F2.default(e,t)}catch(r){return di.trace(r,e,t),!1}}a(z2,"geoCrosses");function J2(e,t,r){if(Ee.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ee.isEmpty(t))throw new Error("geo_type is required");if(Ee.isEmpty(jL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(jL.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),k2[t](e,r)}a(J2,"geoConvert")});var vf=T((gSe,ZL)=>{var jo=KL(),tn=QL(),Ps=XL();ZL.exports=e=>{e.aggr.mad=e.aggr.MAD=jo.mad,e.aggr.mean=e.aggr.MEAN=jo.mean,e.aggr.mode=e.aggr.MODE=jo.mode,e.aggr.prod=e.aggr.PROD=jo.prod,e.aggr.median=e.aggr.MEDIAN=jo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=jo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=jo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=tn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=tn.current_time,e.fn.extract=e.fn.EXTRACT=tn.extract,e.fn.date=e.fn.DATE=tn.date,e.fn.date_format=e.fn.DATE_FORMAT=tn.date_format,e.fn.date_add=e.fn.DATE_ADD=tn.date_add,e.fn.date_sub=e.fn.DATE_SUB=tn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=tn.date_diff,e.fn.now=e.fn.NOW=tn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=tn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=tn.get_server_time,e.fn.getdate=e.fn.GETDATE=tn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=tn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ps.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ps.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ps.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ps.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ps.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ps.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ps.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ps.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ps.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ps.geoNear}});var nD=T((RSe,rD)=>{"use strict";var bu=require("lodash"),Or=require("alasql");Or.options.cache=!1;var X2=vf(),eD=require("clone"),Bf=require("recursive-iterator"),ce=B(),Ce=V(),mc=Dn(),Z2=b(),{hdb_errors:e4}=ee(),{getDatabases:tD}=(me(),re(Ge)),t4="IS NULL",as="There was a problem performing this search. Please check the logs and try again.";X2(Or);var wT=class{static{a(this,"SQLSearch")}constructor(t,r){if(Ce.isEmpty(t))throw ce.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(),Ce.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Ce.isEmptyOrZeroLength(n))return ce.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw ce.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ce.error(n),new Error(as)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw ce.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ce.error(n),new Error(as)}if(Object.keys(this.data).length===0)return ce.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw ce.error("Error thrown from processJoins in SQLSearch class method search."),ce.error(n),new Error(as)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw ce.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ce.error(n),new Error(as)}try{return t=await this._finalSQL(),t}catch(n){throw ce.error("Error thrown from finalSQL in SQLSearch class method search."),ce.error(n),new Error(as)}}_getColumns(){let t=new Bf(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(eD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=bu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=tD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Ce.isEmpty(this.statement.where)){ce.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Bf(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Ce.isEmpty(r)&&r.right)if(Ce.isNotEmptyAndHasValue(r.right.value)){let n=Ce.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Or.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Ce.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Or.yy.LogicValue({value:i}):n instanceof Or.yy.StringValue&&Ce.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Or.yy.NumValue({value:i}))});if(t){ce.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Bf(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(!Ce.isEmpty(Z2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Ce.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Ce.isEmptyOrZeroLength(r.left.columnid)||Ce.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(Ce.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"=":!Ce.isEmpty(r.right.value)||!Ce.isEmpty(r.left.value)?n.add(Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from)&&Ce.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&bu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(Ce.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Ce.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(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&!Ce.isEmptyOrZeroLength(this.columns.columns))return t;if(Ce.isEmptyOrZeroLength(this.all_table_attributes)&&Ce.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Or.promise(r)}catch(r){throw ce.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ce.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(eD(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(Ce.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(t4)>-1&&this.tables.forEach(s=>{let i={columnid:tD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=bu.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!Ce.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.exact_search_values[_].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[_].values);let u=await mc.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 ce.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ce.error(u),new Error(as)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async u=>{let d=Object.assign({},c);d.search_value=u;let f=await mc.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]):(this.data[i].__merged_data[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,E))}))}catch(u){throw ce.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ce.error(u),new Error(as)}else if(!Ce.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Ce.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let u=this.comparator_search_values[_].comparators;for(let d=0,f=u.length;d<f;d++){let E=u[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await mc.getDataByValue(c,E.operation);if(l)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(u){throw ce.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ce.error(u),new Error(as)}else try{c.search_attribute=s.attribute,c.search_value="*";let u=await mc.getDataByValue(c);if(l)for(let[d]of u)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,f]of u)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,f[s.attribute]),this._setMergedHashAttribute(i,d))}catch(u){throw ce.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ce.error(u),new Error(as)}}}_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 Or.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 Or.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Or.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 Or.yy.FuncValue:new Or.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let u="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(u=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${_} ${u} ${d}`,h=this._convertColumnsToIndexes(E,s);f=await Or.promise(h,t),t=null}catch(E){throw ce.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ce.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=bu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let g=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Bf(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=bu.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw ce.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ce.error(i),new Error(as)}}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 mc.getDataByHash(c),_=s.columns.length;for(let u=0,d=o.length;u<d;u++){let f=o[u],E=l.get(f);for(let h=0;h<_;h++){let p=s.columns[h],S=E[p]===void 0?null:E[p];this.data[n].__merged_data[f].push(S)}}}}catch(r){throw ce.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ce.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();ce.trace(`Final SQL: ${s}`),n=await Or.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),ce.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw ce.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ce.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 ce.error(e4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ce.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 mc.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 ce.error("There was an error when processing this SQL operation. Check your logs"),ce.error(o),new Error(as)}}return Object.values(Object.values(this.data)[0].__merged_data)}};rD.exports=wT});var Nr=T((OSe,sD)=>{"use strict";var r4=KI();sD.exports={searchByConditions:s4,searchByHash:i4,searchByValue:o4,search:a4};var CT=Dn(),{transformReq:LT}=V(),n4=nD();async function s4(e){return LT(e),CT.searchByConditions(e)}a(s4,"searchByConditions");async function i4(e){LT(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of CT.searchByHash(e))r&&t.push(r);return t}a(i4,"searchByHash");async function o4(e){LT(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of CT.searchByValue(e))t.push(r);return t}a(o4,"searchByValue");function a4(e,t){try{let r=new r4(e);r.validate(),new n4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(a4,"search")});var fi=T((bSe,cD)=>{"use strict";var yu=require("crypto"),c4=z(),{CONFIG_PARAMS:l4}=b(),oD="aes-256-cbc",u4=32,_4=16,DT=64,aD=32,d4=DT+aD,iD=new Map;cD.exports={encrypt:f4,decrypt:E4,createNatsTableStreamName:h4};function f4(e){let t=yu.randomBytes(u4),r=yu.randomBytes(_4),n=yu.createCipheriv(oD,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(f4,"encrypt");function E4(e){let t=e.substr(0,DT),r=e.substr(DT,aD),n=e.substr(d4,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=yu.createDecipheriv(oD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(E4,"decrypt");function h4(e,t){let r=c4.get(l4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=iD.get(r);return n||(n=yu.createHash("md5").update(r).digest("hex"),iD.set(r,n)),n}a(h4,"createNatsTableStreamName")});var Ji=T((wSe,uD)=>{"use strict";var ISe=Nr(),Hf=B(),lD=Tf(),m4=fi(),qf=V(),{handleHDBError:xf,hdb_errors:p4}=ee(),{HDB_ERROR_MSGS:Gf,HTTP_STATUS_CODES:PT}=p4,S4=z();S4.initSync();var{getDatabases:MT}=(me(),re(Ge));uD.exports={describeAll:T4,describeTable:Ff,describeSchema:g4};async function T4(e){try{let t=qf.isEmptyOrZeroLength(e),r,n;t||(r=e.hdb_user.role.permission,n=r.super_user||r.cluster_user);let s=MT(),i={},o={},c=[],l=e?.exact_count;for(let u in s){i[u]=!0,!t&&!n&&(o[u]=e.hdb_user.role.permission[u].describe);let d=s[u];for(let f in d)try{let E;if(t||n)E=await Ff({schema:u,table:f,exact_count:l});else if(r&&r[u].describe&&r[u].tables[f].describe){let h=r[u].tables[f].attribute_permissions;E=await Ff({schema:u,table:f,exact_count:l},h)}E&&c.push(E)}catch(E){Hf.error(E)}}let _={};for(let u in c)t||n?(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]):o[c[u].schema]&&(_[c[u].schema]==null&&(_[c[u].schema]={}),_[c[u].schema][c[u].name]=c[u],i[c[u].schema]&&delete i[c[u].schema]);for(let u in i)t||n?_[u]={}:o[u]&&(_[u]={});return _}catch(t){return Hf.error("Got an error in describeAll"),Hf.error(t),xf(new Error,Gf.DESCRIBE_ALL_ERR)}}a(T4,"describeAll");async function Ff(e,t){qf.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=lD.describe_table(e);if(i)throw i;let c=MT()[r];if(!c)throw xf(new Error,Gf.SCHEMA_NOT_FOUND(e.schema),PT.NOT_FOUND);let l=c[n];if(!l)throw xf(new Error,Gf.TABLE_NOT_FOUND(e.schema,e.table),PT.NOT_FOUND);function _(f){u.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let u=[];if(s){let f={};s.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),l.attributes.forEach(E=>{f[E.name]&&_(E)})}else l.attributes?.forEach(f=>_(f));let d={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:u};d.clustering_stream_name=m4.createNatsTableStreamName(d.schema,d.name);try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=l.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&l.indices.__updatedtime__)for(let h of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Hf.warn(`unable to stat table dbi due to ${f}`)}return d}a(Ff,"descTable");async function g4(e){qf.transformReq(e);let t=lD.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=MT()[n];if(!i)throw xf(new Error,Gf.SCHEMA_NOT_FOUND(e.schema),PT.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),qf.isEmpty(l)||l.describe){let _=await Ff({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(g4,"describeSchema")});var Pn=T((PSe,hD)=>{var R4=oi(),{callbackify:dD,promisify:A4}=require("util"),{getDatabases:fD}=(me(),re(Ge));hD.exports={setSchemaDataToGlobal:_D,getTableSchema:O4,getSystemSchema:N4,setSchemaDataToGlobalAsync:A4(_D)};var ED=Ji(),LSe=dD(ED.describeAll),DSe=dD(ED.describeTable);function _D(e){global.hdb_schema=fD(),e&&e()}a(_D,"setSchemaDataToGlobal");function O4(e,t,r){let n=fD()[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(O4,"getTableSchema");function N4(){return R4}a(N4,"getSystemSchema")});var br=T((USe,TD)=>{"use strict";var $f=US(),zt=V(),b4=require("util"),Vf=Dn(),y4=Pn(),mD=B(),{handleHDBError:zo,hdb_errors:I4}=ee(),{HTTP_STATUS_CODES:Jo}=I4,w4=b4.promisify(y4.getTableSchema),C4="updated",pD="inserted",SD="upserted";TD.exports={insert:D4,update:P4,upsert:M4,validation:L4,flush:U4};async function L4(e){if(zt.isEmpty(e))throw new Error("invalid update parameters defined.");if(zt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(zt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await w4(e.schema,e.table),r=$f(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&zt.isEmptyOrZeroLength(c[n]))throw mD.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!zt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw mD.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!zt.isEmpty(c[n])&&c[n]!==""&&s.has(zt.autoCast(c[n]))&&(c.skip=!0),s.add(zt.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(L4,"validation");async function D4(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=$f(e);if(t)throw zo(new Error,t.message,Jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw zo(new Error,r,Jo.BAD_REQUEST);let n=await Vf.createRecords(e);return kf(pD,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(D4,"insertData");async function P4(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=$f(e);if(t)throw zo(new Error,t.message,Jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw zo(new Error,r,Jo.BAD_REQUEST);let n=await Vf.updateRecords(e);return zt.isEmpty(n.existing_rows)?kf(C4,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):kf(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(P4,"updateData");async function M4(e){if(e.operation!=="upsert")throw zo(new Error,"invalid operation, must be upsert",Jo.INTERNAL_SERVER_ERROR);let t=$f(e);if(t)throw zo(new Error,t.message,Jo.BAD_REQUEST);zt.transformReq(e);let r=zt.checkSchemaTableExist(e.schema,e.table);if(r)throw zo(new Error,r,Jo.BAD_REQUEST);let n=await Vf.upsertRecords(e);return kf(SD,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(M4,"upsertData");function kf(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===pD?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===SD?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(kf,"returnObject");function U4(e){return zt.transformReq(e),Vf.flush(e.schema,e.table)}a(U4,"flush")});var vT=T((BSe,AD)=>{var v4=st(),UT=require("joi"),{hdb_table:B4,hdb_database:gD}=ws(),RD={schema:gD,database:gD,table:B4},H4={date:UT.date().iso().required()},q4={timestamp:UT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AD.exports=function(e,t){let r=t==="timestamp"?{...RD,...q4}:{...RD,...H4},n=UT.object(r);return v4.validateBySchema(e,n)}});var bD=T((HSe,ND)=>{var x4=st(),BT=require("joi"),{hdb_table:G4,hdb_database:OD}=ws(),F4=BT.object({schema:OD,database:OD,table:G4,hash_values:BT.array().required(),ids:BT.array()});ND.exports=function(e){return x4.validateBySchema(e,F4)}});var GT=T((qSe,yD)=>{"use strict";var HT=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}},qT=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}},xT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};yD.exports={InsertObject:HT,NoSQLSeachObject:qT,DeleteResponseObject:xT}});var ea=T((GSe,DD)=>{"use strict";var wD=vT(),k4=bD(),Xo=V(),ID=require("moment"),CD=B(),{promisify:$4,callbackify:V4}=require("util"),Zo=b(),Y4=Pn(),FT=$4(Y4.getTableSchema),kT=Dn(),{DeleteResponseObject:K4}=GT(),{handleHDBError:Xi,hdb_errors:W4}=ee(),{HDB_ERROR_MSGS:Yf,HTTP_STATUS_CODES:Zi}=W4,Q4="records successfully deleted",j4=V4(LD);DD.exports={delete:j4,deleteRecord:LD,deleteFilesBefore:z4,deleteAuditLogsBefore:J4};async function z4(e){let t=wD(e,"date");if(t)throw Xi(t,t.message,Zi.BAD_REQUEST,void 0,void 0,!0);if(Xo.transformReq(e),!ID(e.date,ID.ISO_8601).isValid())throw Xi(new Error,Yf.INVALID_DATE,Zi.BAD_REQUEST,Zo.LOG_LEVELS.ERROR,Yf.INVALID_DATE,!0);let n=Xo.checkSchemaTableExist(e.schema,e.table);if(n)throw Xi(new Error,n,Zi.NOT_FOUND,Zo.LOG_LEVELS.ERROR,n,!0);let s=await kT.deleteRecordsBefore(e);if(await FT(e.schema,e.table),CD.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(z4,"deleteFilesBefore");async function J4(e){let t=wD(e,"timestamp");if(t)throw Xi(t,t.message,Zi.BAD_REQUEST,void 0,void 0,!0);if(Xo.transformReq(e),isNaN(e.timestamp))throw Xi(new Error,Yf.INVALID_VALUE("Timestamp"),Zi.BAD_REQUEST,Zo.LOG_LEVELS.ERROR,Yf.INVALID_VALUE("Timestamp"),!0);let r=Xo.checkSchemaTableExist(e.schema,e.table);if(r)throw Xi(new Error,r,Zi.NOT_FOUND,Zo.LOG_LEVELS.ERROR,r,!0);let n=await kT.deleteAuditLogsBefore(e);return await FT(e.schema,e.table),CD.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(J4,"deleteAuditLogsBefore");async function LD(e){e.ids&&(e.hash_values=e.ids);let t=k4(e);if(t)throw Xi(t,t.message,Zi.BAD_REQUEST,void 0,void 0,!0);Xo.transformReq(e);let r=Xo.checkSchemaTableExist(e.schema,e.table);if(r)throw Xi(new Error,r,Zi.NOT_FOUND,Zo.LOG_LEVELS.ERROR,r,!0);try{await FT(e.schema,e.table);let n=await kT.deleteRecords(e);return Xo.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Q4}`),n}catch(n){if(n.message===Zo.SEARCH_NOT_FOUND_MESSAGE){let s=new K4;return s.message=Zo.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(LD,"deleteRecord")});var Kf=T((kSe,UD)=>{var X4=require("crypto"),PD=9;function Z4(e){let t=t3(PD),r=MD(e+t);return t+r}a(Z4,"createHash");function e3(e,t){let r=e?.substr(0,PD),n=r+MD(t+r);return e===n}a(e3,"validateHash");function t3(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(t3,"generateSalt");function MD(e){return X4.createHash("md5").update(e).digest("hex")}a(MD,"md5");UD.exports={hash:Z4,validate:e3}});var BD=T((VSe,vD)=>{var $T=st(),or={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function r3(e){return or.password.presence=!0,or.username.presence=!0,or.role.presence=!0,or.active.presence=!0,$T.validateObject(e,or)}a(r3,"addUserValidation");function n3(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,$T.validateObject(e,or)}a(n3,"alterUserValidation");function s3(e){return or.password.presence=!1,or.username.presence=!0,or.role.presence=!1,or.active.presence=!1,$T.validateObject(e,or)}a(s3,"dropUserValidation");vD.exports={addUserValidation:r3,alterUserValidation:n3,dropUserValidation:s3}});var Ze=T((WSe,qD)=>{"use strict";var{platform:KSe}=require("os"),i3="nats-server.zip",VT="nats-server",o3=process.platform==="win32"?`${VT}.exe`:VT,YT="HDB",a3=/^[^\s.,*>]+$/,HD="__request__",c3=a(e=>`${e}.${HD}`,"REQUEST_SUBJECT"),l3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},u3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_3={HUB:"hub.pid",LEAF:"leaf.pid"},d3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},f3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:YT,deliver_subject:"__HDB__.WORKQUEUE"},E3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:YT,deliver_subject:"HDB.SCHEMAQUEUE"},h3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:YT,deliver_subject:"HDB.USERQUEUE"},m3={SUCCESS:"success",ERROR:"error"},p3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},S3={TXN:"txn",MSGID:"msgid"},pc={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},T3={[pc.ERR]:1,[pc.WRN]:2,[pc.INF]:3,[pc.DBG]:4,[pc.TRC]:5},g3={debug:"-D",trace:"-DVV"};qD.exports={NATS_SERVER_ZIP:i3,NATS_SERVER_NAME:VT,NATS_BINARY_NAME:o3,PID_FILES:_3,NATS_CONFIG_FILES:u3,SERVER_SUFFIX:d3,WORK_QUEUE_CONSUMER_NAMES:f3,SCHEMA_QUEUE_CONSUMER_NAMES:E3,USER_QUEUE_CONSUMER_NAMES:h3,NATS_TERM_CONSTRAINTS_RX:a3,REQUEST_SUFFIX:HD,UPDATE_REMOTE_RESPONSE_STATUSES:m3,CLUSTER_STATUS_STATUSES:p3,REQUEST_SUBJECT:c3,SUBJECT_PREFIXES:S3,MSG_HEADERS:l3,LOG_LEVELS:pc,LOG_LEVEL_FLAGS:g3,LOG_LEVEL_HIERARCHY:T3}});var KT=T((jSe,xD)=>{"use strict";var R3={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
6
6
  `),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
7
- `)},c4="certificate.pem",u4="privateKey.pem",l4="ca.pem";WL.exports={CERTIFICATE_VALUES:a4,CERTIFICATE_PEM_NAME:c4,PRIVATEKEY_PEM_NAME:u4,CA_PEM_NAME:l4}});var dT=T((wpe,XL)=>{"use strict";var JL=require("fs-extra"),de=require("joi"),_4=require("os"),{boolean:De,string:fn,number:Bt,array:_T}=de.types(),{totalmem:QL}=require("os"),ka=require("path"),d4=U(),_f=G(),Ipe=lT(),jL=R(),f4=Ve(),zL="log",E4="components",h4="Invalid logging.rotation.maxSize unit. Available units are G, M or K",m4="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",p4="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",S4="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",T4="rootPath config parameter is undefined",g4="clustering.enabled config parameter is undefined",qo=Bt.min(0).required(),df=_T.items({host:fn.required(),port:qo}).empty(null),jn;XL.exports={configValidator:R4,routesValidator:I4,route_constraints:df};function R4(e){if(jn=e.rootPath,_f.isEmpty(jn))throw T4;let t=De.required(),r=Bt.min(0).max(1e3).empty(null).default(y4),s=fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(lf),n=fn.optional().empty(null),i=fn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=de.string().empty(null).default(lf),c=de.custom(O4).empty(null).default(lf),u=e.clustering?.enabled;if(_f.isEmpty(u))throw g4;let _;return u===!0?_=de.object({enabled:t,hubServer:de.object({cluster:de.object({name:de.required().empty(null),network:de.object({port:qo,routes:df}).required()}).required(),leafNodes:de.object({network:de.object({port:qo}).required()}).required(),network:de.object({port:qo}).required()}).required(),leafServer:de.object({network:de.object({port:qo,routes:df}).required(),streams:de.object({maxAge:Bt.min(120).allow(null).optional(),maxBytes:Bt.min(1).allow(null).optional(),maxMsgs:Bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:de.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:De.optional(),databaseLevel:De.optional(),tls:de.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:De.required(),verify:De.optional()}),user:fn.optional().empty(null)}).required():_=de.object({enabled:t,tls:de.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:De.required()})}).required(),de.object({authentication:de.object({authorizeLocal:De,cacheTTL:Bt.required(),enableSessions:De}),analytics:de.object({aggregatePeriod:Bt}),componentsRoot:s.optional(),clustering:_,localStudio:de.object({enabled:t}).required(),logging:de.object({auditAuthEvents:de.object({logFailed:De,logSuccessful:De}),file:De.required(),level:de.valid("notify","fatal","error","warn","info","debug","trace"),rotation:de.object({enabled:De.optional(),compress:De.optional(),interval:fn.custom(b4).optional().empty(null),maxSize:fn.custom(N4).optional().empty(null),path:fn.optional().empty(null).default(lf)}).required(),root:s,stdStreams:De.required(),auditLog:De.required()}).required(),operationsApi:de.object({network:de.object({cors:De.optional(),corsAccessList:_T.optional(),headersTimeout:Bt.min(1).optional(),keepAliveTimeout:Bt.min(1).optional(),port:Bt.optional().empty(null),securePort:Bt.optional().empty(null),timeout:Bt.min(1).optional()}).optional(),tls:de.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:de.object({network:de.object({port:qo,securePort:qo}).required(),webSocket:De.optional(),requireAuthentication:De.optional()}),http:de.object({compressionThreshold:Bt.optional(),cors:De.optional(),corsAccessList:_T.optional(),headersTimeout:Bt.min(1).optional(),port:Bt.min(0).optional().empty(null),securePort:Bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:de.object({writeAsync:De.required(),overlappingSync:De.optional(),caching:De.optional(),compression:De.optional(),noReadAhead:De.optional(),path:c,prefetchWrites:De.optional()}).required(),ignoreScripts:De.optional(),tls:de.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(R4,"configValidator");function A4(e){return JL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(A4,"doesPathExist");function O4(e,t){de.assert(e,fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=A4(e);if(r)return t.message(r)}a(O4,"validatePath");function N4(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(h4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(p4):e}a(N4,"validateRotationMaxSize");function b4(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(m4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(S4):e}a(b4,"validateRotationInterval");function y4(e,t){let r=t.state.path.join("."),s=_4.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||QL();return i=Math.round(Math.min(i,QL())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),d4.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(y4,"setDefaultThreads");function lf(e,t){if(!_f.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(_f.isEmpty(jn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ka.join(jn,E4);case"logging.root":return ka.join(jn,zL);case"clustering.leafServer.streams.path":return ka.join(jn,"clustering","leaf");case"storage.path":let s=ka.join(jn,jL.LEGACY_DATABASES_DIR_NAME);return JL.existsSync(s)?s:ka.join(jn,jL.DATABASES_DIR_NAME);case"logging.rotation.path":return ka.join(jn,zL);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(lf,"setDefaultRoot");function I4(e){let t=de.object({routes:df});return f4.validateBySchema({routes:e},t)}a(I4,"routesValidator")});var rt=T((Dpe,aD)=>{"use strict";var Gr=R(),wt=G(),gt=U(),{configValidator:w4,routesValidator:ZL}=dT(),fr=require("fs-extra"),C4=require("yaml"),Fs=require("path"),L4=require("is-number"),tD=require("properties-reader"),D4=require("lodash"),{handleHDBError:P4}=Z(),{HTTP_STATUS_CODES:M4,HDB_ERROR_MSGS:ff}=Mr(),Lpe=require("minimist"),{server:U4}=(Pr(),te(Ro)),{DATABASES_PARAM_CONFIG:Ju,CONFIG_PARAMS:qr,CONFIG_PARAM_MAP:xs}=Gr,v4="Unable to get config value because config is uninitialized",B4="Config successfully initialized",H4="Error backing up config file",q4="Empty parameter sent to getConfigValue",rD=Fs.join(Gr.PACKAGE_ROOT,"config","yaml",Gr.HDB_DEFAULT_CONFIG_FILE),G4="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",eD={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"},Ef,Rt,hf;aD.exports={createConfigFile:F4,getDefaultConfig:x4,getConfigValue:nD,initConfig:ET,flattenConfig:$a,updateConfigValue:iD,updateConfigObject:$4,getConfiguration:K4,setConfiguration:W4,readConfigFile:mT,getClusteringRoutes:Q4,initOldConfig:oD,getConfigFromFile:j4,getConfigFilePath:Go,addConfig:z4,deleteConfigFromFile:J4,getConfigObj:X4};function F4(e){let t=Hi(rD);Ef=$a(t.toJSON());let r;for(let o in e){let c=xs[o.toLowerCase()];if(c===qr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=fT(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&sD(t,r),hT(t);let s=t.toJSON();Rt=$a(s);let n=t.getIn(["rootPath"]),i=Fs.join(n,Gr.HDB_CONFIG_FILE);fr.createFileSync(i),fr.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(F4,"createConfigFile");function sD(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!wt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Ju.TABLES))for(let i in s[n][Ju.TABLES])for(let o in s[n][Ju.TABLES][i]){let c=s[n][Ju.TABLES][i][o],u=[qr.DATABASES,n,Ju.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[qr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){gt.error("Error parsing schemas CLI/env config arguments",s)}}a(sD,"setSchemasConfig");function x4(e){if(Ef===void 0){let r=Hi(rD);Ef=$a(r.toJSON())}let t=xs[e.toLowerCase()];if(t!==void 0)return Ef[t.toLowerCase()]}a(x4,"getDefaultConfig");function nD(e){if(e==null){gt.error(q4);return}if(Rt===void 0){gt.trace(v4);return}let t=xs[e.toLowerCase()];if(t!==void 0)return Rt[t.toLowerCase()]}a(nD,"getConfigValue");function Go(e=wt.getPropsFilePath()){let t=wt.getEnvCliRootPath();return t?Fs.join(t,Gr.HDB_CONFIG_FILE):tD(e).get(Gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Go,"getConfigFilePath");function ET(e=!1){if(Rt===void 0||e){let t;if(!wt.noBootFile()){t=wt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Go(t),s;if(r.includes("config/settings.js"))try{oD(r);return}catch(i){if(i.code!==Gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Hi(r)}catch(i){if(i.code===Gr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
8
- This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}k4(s,r),hT(s);let n=s.toJSON();if(U4.config=n,Rt=$a(n),Rt.logging_rotation_rotate)for(let i in eD)Rt[i]&&gt.error(`Config ${eD[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(B4)}}a(ET,"initConfig");function k4(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Fs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Fs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Fs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(gt.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(k4,"checkForUpdatedConfig");function hT(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=w4(t);if(r.error)throw ff.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(hT,"validateConfig");function $4(e,t){Rt===void 0&&(Rt={});let r=xs[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Rt[r.toLowerCase()]=t}a($4,"updateConfigObject");function iD(e,t,r=void 0,s=!1,n=!1,i=!1){Rt===void 0&&ET();let o=nD(xs.hdb_root),c=Fs.join(o,Gr.HDB_CONFIG_FILE),u=Hi(c),_;if(r===void 0&&e.toLowerCase()===qr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=xs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=fT(f,t);u.setIn([...E],h)}else for(let f in r){let E=xs[f.toLowerCase()];if(E===qr.HTTP_SECUREPORT&&r[f]===Rt[qr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===qr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Rt[qr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===qr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=Gr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&u.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=fT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){gt.error(A)}}}_&&sD(u,_),hT(u);let l=u.getIn(["rootPath"]),d=Fs.join(l,Gr.HDB_CONFIG_FILE);s===!0&&V4(c,l),fr.writeFileSync(d,String(u)),n&&(Rt=$a(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(iD,"updateConfigValue");function V4(e,t){try{let r=Fs.join(t,"backup",`${Gr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(H4),gt.error(r)}}a(V4,"backupConfigFile");var Y4=["databases"];function $a(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)),hf=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!Y4.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!qr[u.toUpperCase()]&&xs[u]&&(n[xs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a($a,"flattenConfig");function fT(e,t){if(e===qr.CLUSTERING_NODENAME||e===qr.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(L4(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wt.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 wt.autoCast(t)}a(fT,"castConfigValue");function K4(){let e=wt.getPropsFilePath(),t=Go(e);return Hi(t).toJSON()}a(K4,"getConfiguration");async function W4(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return iD(void 0,void 0,n,!0),G4}catch(i){throw typeof i=="string"||i instanceof String?P4(i,i,M4.BAD_REQUEST,void 0,void 0,!0):i}}a(W4,"setConfiguration");function mT(){let e=wt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(s){if(!wt.noBootFile())throw gt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Go(e);return Hi(t).toJSON()}a(mT,"readConfigFile");function Hi(e){return C4.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Hi,"parseYamlDoc");function Q4(){let e=mT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wt.isEmptyOrZeroLength(t)?[]:t;let r=ZL(t);if(r)throw ff.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=wt.isEmptyOrZeroLength(s)?[]:s;let n=ZL(s);if(n)throw ff.CONFIG_VALIDATION(n.message);if(!wt.isEmptyOrZeroLength(s)&&!wt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!wt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ff.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Q4,"getClusteringRoutes");function oD(e){let t=tD(e);Rt={};for(let r in xs){let s=t.get(r.toUpperCase());if(wt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=xs[r].toLowerCase();n===qr.LOGGING_ROOT?Rt[n]=Fs.dirname(s):Rt[n]=s}return Rt}a(oD,"initOldConfig");function j4(e){let t=mT();return D4.get(t,e.replaceAll("_","."))}a(j4,"getConfigFromFile");async function z4(e,t){let r=Hi(Go());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Go(),String(r))}a(z4,"addConfig");function J4(e){let t=Go(wt.getPropsFilePath()),r=Hi(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Fs.join(s,Gr.HDB_CONFIG_FILE);fr.writeFileSync(n,String(r))}a(J4,"deleteConfigFromFile");function X4(){return hf||(ET(),hf)}a(X4,"getConfigObj")});var uD=T((Mpe,cD)=>{"use strict";var mf=R(),pf=class{static{a(this,"BaseLicense")}constructor(t=0,r=mf.RAM_ALLOCATION_ENUM.DEFAULT,s=mf.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},pT=class extends pf{static{a(this,"ExtendedLicense")}constructor(t=0,r=mf.RAM_ALLOCATION_ENUM.DEFAULT,s=mf.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};cD.exports={BaseLicense:pf,ExtendedLicense:pT}});var Xu=T((vpe,hD)=>{"use strict";var Ya=require("fs-extra"),lD=uf(),_D=require("crypto"),Z4=require("moment"),e3=require("uuid").v4,jt=U(),TT=require("path"),t3=G(),qi=R(),r3=uD().ExtendedLicense,Va="invalid license key format",s3="061183",n3="mofi25",i3="aes-256-cbc",o3=16,a3=32,dD=j();dD.initSync();var ST;hD.exports={validateLicense:fD,generateFingerPrint:u3,licenseSearch:ED,getLicense:d3};function gT(){return TT.join(dD.getHdbBasePath(),qi.LICENSE_KEY_DIR_NAME,qi.LICENSE_FILE_NAME)}a(gT,"getLicenseDirPath");function c3(){let e=gT();return TT.join(e,qi.LICENSE_FILE_NAME)}a(c3,"getLicenseFilePath");function RT(){let e=gT();return TT.join(e,qi.REG_KEY_FILE_NAME)}a(RT,"getFingerPrintFilePath");async function u3(){let e=RT();try{return await Ya.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await l3();throw jt.error(`Error writing fingerprint file to ${e}`),jt.error(t),new Error("There was an error generating the fingerprint")}}a(u3,"generateFingerPrint");async function l3(){let e=e3(),t=lD.hash(e),r=RT();try{await Ya.mkdirp(gT()),await Ya.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw jt.error(`Error writing fingerprint file to ${r}`),jt.error(s),new Error("There was an error generating the fingerprint")}return t}a(l3,"writeFingerprint");function fD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:qi.RAM_ALLOCATION_ENUM.DEFAULT,version:qi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jt.error("empty license key passed to validate."),r;let s=RT(),n=!1;try{n=Ya.statSync(s)}catch(i){jt.error(i)}if(n){let i;try{i=Ya.readFileSync(s,"utf8")}catch{jt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(n3),c=o[1];c=Buffer.concat([Buffer.from(c)],o3);let u=Buffer.concat([Buffer.from(i)],a3),_=_D.createDecipheriv(i3,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=_3(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Va),jt.error(Va),new Error(Va)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Va),jt.error(Va),new Error(Va)}else r.exp_date=l;r.exp_date<Z4().valueOf()&&(r.valid_date=!1),lD.validate(o[1],`${s3}${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||jt.error("Invalid licence"),r}a(fD,"validateLicense");function _3(e,t){try{let r=_D.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{jt.warn("Check old license failed")}}a(_3,"checkOldLicense");function ED(){let e=new r3,t=[];try{t=Ya.readFileSync(c3(),"utf-8").split(qi.NEW_LINE)}catch(r){r.code==="ENOENT"?jt.info("no license file found"):jt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(t3.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=fD(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){jt.error("There was an error parsing the license string."),jt.error(n),e.ram_allocation=qi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return ST=e,e}a(ED,"licenseSearch");async function d3(){return ST||await ED(),ST}a(d3,"getLicense")});var Er=T((Fpe,DD)=>{"use strict";var TD="username is required",gD="nothing to update, must supply active, role or password to update",RD="password cannot be an empty string",AD="If role is specified, it cannot be empty.",OD="active must be true or false";DD.exports={addUser:R3,alterUser:A3,dropUser:N3,getSuperUser:w3,userInfo:b3,listUsers:Tf,listUsersExternal:y3,setUsersToGlobal:Wa,findAndValidateUser:CD,getClusterUser:C3,USERNAME_REQUIRED:TD,ALTERUSER_NOTHING_TO_UPDATE:gD,EMPTY_PASSWORD:RD,EMPTY_ROLE:AD,ACTIVE_BOOLEAN:OD};var ND=dr(),f3=Ho(),NT=uf(),bD=VL(),yD=_r(),bT=Vn(),Fr=G(),ID=require("validate.js"),he=U(),{promisify:E3}=require("util"),yT=Qn(),mD=R(),pD=ke(),h3=rt(),Hpe=j(),qpe=Xu(),m3=Fn(),{table:Gpe}=(Ee(),te(Le)),{handleHDBError:En,hdb_errors:p3}=Z(),{HTTP_STATUS_CODES:hn,AUTHENTICATION_ERROR_MSGS:AT,HDB_ERROR_MSGS:Ka}=p3,{UserEventMsg:IT}=Us(),OT=require("lodash"),{server:wT}=(Pr(),te(Ro)),S3=U();wT.getUser=CD;var wD={username:!0,active:!0,role:!0,password:!0},SD=new Map,Sf=yD.searchByValue,T3=yD.searchByHash,g3=E3(f3.delete);async function R3(e){let t=ID.cleanAttributes(e,wD),r=bD.addUserValidation(t);if(r)throw En(new Error,r.message,hn.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Sf(s),n=n&&Array.from(n)}catch(u){throw he.error("There was an error searching for a role in add user"),he.error(u),u}if(!n||n.length<1)throw En(new Error,Ka.ROLE_NAME_NOT_FOUND(t.role),hn.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw En(new Error,Ka.DUP_ROLES_FOUND(t.role),hn.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=yT.encrypt(t.password)),t.password=NT.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await ND.insert(i)}catch(u){throw he.error("There was an error searching for a user."),he.error(u),u}he.debug(o);try{await Wa()}catch(u){throw he.error("Got an error setting users to global"),he.error(u),u}if(o.skipped_hashes.length===1)throw En(new Error,Ka.USER_ALREADY_EXISTS(t.username),hn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],bT.signalUserChange(new IT(process.pid)),`${c.username} successfully added`}a(R3,"addUser");async function A3(e){let t=ID.cleanAttributes(e,wD);if(Fr.isEmptyOrZeroLength(t.username))throw new Error(TD);if(Fr.isEmptyOrZeroLength(t.password)&&Fr.isEmptyOrZeroLength(t.role)&&Fr.isEmptyOrZeroLength(t.active))throw new Error(gD);if(!Fr.isEmpty(t.password)&&Fr.isEmptyOrZeroLength(t.password.trim()))throw new Error(RD);if(!Fr.isEmpty(t.active)&&!Fr.isBoolean(t.active))throw new Error(OD);let r=O3(t.username);if(!Fr.isEmpty(t.password)&&!Fr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=yT.encrypt(t.password)),t.password=NT.hash(t.password)),t.role==="")throw new Error(AD);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 Sf(i)||[])}catch(c){throw he.error("Got an error searching for a role."),he.error(c),c}if(!o||o.length===0){let c=Ka.ALTER_USER_ROLE_NOT_FOUND(t.role);throw he.error(c),En(new Error,c,hn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Ka.ALTER_USER_DUP_ROLES(t.role);throw he.error(c),En(new Error,c,hn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await ND.update(s)}catch(i){throw he.error("Error during update."),he.error(i),i}try{await Wa()}catch(i){throw he.error("Got an error setting users to global"),he.error(i),i}return bT.signalUserChange(new IT(process.pid)),n}a(A3,"alterUser");function O3(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(O3,"isClusterUser");async function N3(e){try{let t=bD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Fr.isEmpty(global.hdb_users.get(e.username)))throw En(new Error,Ka.USER_NOT_EXIST(e.username),hn.NOT_FOUND,void 0,void 0,!0);let s;try{s=await g3(r)}catch(n){throw he.error("Got an error deleting a user."),he.error(n),n}he.debug(s);try{await Wa()}catch(n){throw he.error("Got an error setting users to global."),he.error(n),n}return bT.signalUserChange(new IT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(N3,"dropUser");async function b3(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=OT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await T3(r)}catch(n){throw he.error("Got an error searching for a role."),he.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw he.error(r),r}return t}a(b3,"userInfo");async function y3(){let e;try{e=await Tf()}catch(t){throw he.error("Got an error listing users."),he.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(y3,"listUsersExternal");async function Tf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Sf(e)}catch(o){throw he.error("Got an error searching for roles."),he.error(o),o}let r={};for(let o of t)r[o.id]=OT.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Sf(s)}catch(o){throw he.error("Got an error searching for users."),he.error(o),o}let i=new Map;for(let o of n)o=OT.cloneDeep(o),o.role=r[o.role],I3(o.role),i.set(o.username,o);return i}catch(e){throw he.error("got an error listing users"),he.error(e),Fr.errorizeMessage(e)}return null}a(Tf,"listUsers");function I3(e){try{if(!e){he.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(m3)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){he.error("Got an error trying to set system permissions."),he.error(t)}}a(I3,"appendSystemTablesToRole");async function Wa(){try{let e=await Tf();global.hdb_users=e}catch(e){throw he.error(e),e}}a(Wa,"setUsersToGlobal");async function CD(e,t,r=!0){global.hdb_users||await Wa();let s=global.hdb_users.get(e);if(!s)throw En(new Error,AT.GENERIC_AUTH_FAIL,hn.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw En(new Error,AT.USER_INACTIVE,hn.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(SD.get(t)===s.password)return n;if(NT.validate(s.password,t))SD.set(t,s.password);else throw En(new Error,AT.GENERIC_AUTH_FAIL,hn.UNAUTHORIZED,void 0,void 0,!0)}return n}a(CD,"findAndValidateUser");async function w3(){global.hdb_users||await Wa();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(w3,"getSuperUser");async function C3(){let e=await Tf(),t=h3.getConfigFromFile(mD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Fr.isEmpty(r)&&r?.role?.role===mD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=yT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+pD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+pD.SERVER_SUFFIX.ADMIN,r}a(C3,"getClusterUser");var LD=[];wT.invalidateUser=function(e){for(let t of LD)try{t(e)}catch(r){S3.error("Error invalidating user",r)}};wT.onInvalidatedUser=function(e){LD.push(e)}});var el=T((Vpe,vD)=>{"use strict";var Fo=U(),xr=R(),L3=xy(),kpe=cs(),$pe=Ui(),D3=Er(),{validateEvent:PD}=Us(),Zu=as(),P3=require("process"),{resetDatabases:M3}=(Ee(),te(Le)),U3={[xr.ITC_EVENT_TYPES.SCHEMA]:v3,[xr.ITC_EVENT_TYPES.USER]:UD};async function v3(e){let t=PD(e);if(t){Fo.error(t);return}Fo.trace("ITC schemaHandler received schema event:",e),await L3(e.message),await B3(e.message)}a(v3,"schemaHandler");async function B3(e){try{Zu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Zu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Zu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=M3();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Fo.error(t)}}a(B3,"syncSchemaMetadata");var MD=[];async function UD(e){try{try{Zu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Zu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Fo.warn(r)}let t=PD(e);if(t){Fo.error(t);return}Fo.trace(`ITC userHandler ${xr.HDB_ITC_CLIENT_PREFIX}${P3.pid} received user event:`,e),await D3.setUsersToGlobal();for(let r of MD)r()}catch(t){Fo.error(t)}}a(UD,"userHandler");UD.addListener=function(e){MD.push(e)};vD.exports=U3});var Us=T((zpe,HD)=>{"use strict";var Kpe=U(),CT=G(),H3=R(),{ITC_ERRORS:tl}=Mr(),{parentPort:Wpe,threadId:q3,isMainThread:G3,workerData:Qpe}=require("worker_threads"),{onMessageFromWorkers:F3,broadcast:jpe,broadcastWithAcknowledgement:x3}=Qe();HD.exports={sendItcEvent:k3,validateEvent:BD,SchemaEventMsg:$3,UserEventMsg:V3};var gf;F3(async(e,t)=>{gf=gf||el(),BD(e),gf[e.type]&&await gf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function k3(e){return!G3&&e.message&&(e.message.originator=q3),x3(e)}a(k3,"sendItcEvent");function BD(e){if(typeof e!="object")return tl.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||CT.isEmpty(e.type))return tl.MISSING_TYPE;if(!e.hasOwnProperty("message")||CT.isEmpty(e.message))return tl.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||CT.isEmpty(e.message.originator))return tl.MISSING_ORIGIN;if(H3.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return tl.INVALID_EVENT(e.type)}a(BD,"validateEvent");function $3(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a($3,"SchemaEventMsg");function V3(e){this.originator=e}a(V3,"UserEventMsg")});var Vn=T((Zpe,xD)=>{"use strict";var qD=R(),Xpe=G(),Rf=U(),GD=Oy(),Qa,{sendItcEvent:FD}=Us();function Y3(e){try{Rf.trace("signalSchemaChange called with message:",e),Qa=Qa||el();let t=new GD(qD.ITC_EVENT_TYPES.SCHEMA,e);return Qa.schema(t),FD(t)}catch(t){Rf.error(t)}}a(Y3,"signalSchemaChange");function K3(e){try{Rf.trace("signalUserChange called with message:",e),Qa=Qa||el();let t=new GD(qD.ITC_EVENT_TYPES.USER,e);return Qa.user(t),FD(t)}catch(t){Rf.error(t)}}a(K3,"signalUserChange");xD.exports={signalSchemaChange:Y3,signalUserChange:K3}});var il={};Fe(il,{addAnalyticsListener:()=>nl,recordAction:()=>kr,recordActionBinary:()=>us,setAnalyticsEnabled:()=>W3});function W3(e){JD=e}function kr(e,t,r,s,n){if(!JD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=Nf.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},Nf.set(i,o)}Af||Q3()}function us(e,t,r,s,n){kr(!!e,t,r,s,n)}function nl(e){eP.push(e)}function Q3(){Af=performance.now(),setTimeout(async()=>{let e=performance.now()-Af;Af=0;let t=[],r={time:Date.now(),period:e,threadId:xo.threadId,metrics:t};for(let[n,i]of Nf){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of tP){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await rP()}let s=process.memoryUsage();t.push({metric:"memory",threadId:xo.threadId,byThread:!0,...s});for(let n of eP)n(t);Nf=new Map,xo.parentPort?xo.parentPort.postMessage({type:ZD,report:r}):iP({report:r})},XD).unref()}async function j3(e,t=6e4){let r=PT(),s=sP(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:m}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=m;for(let g of S||[]){let{path:N,method:V,type:$,metric:F,count:w,total:K,distribution:B,threads:k,...se}=g;w||(w=1);let Ie=F+(N?"-"+N:"");V!==void 0&&(Ie+="-"+V),$!==void 0&&(Ie+="-"+$);let ie=o.get(Ie);if(ie){if(ie.threads){let Ge=ie.threads[A];if(Ge)ie=Ge;else{ie.threads[A]=Object.assign({},se);continue}}ie.count||(ie.count=1);let Vt=ie.count;for(let Ge in se){let Mt=se[Ge];typeof Mt=="number"&&(ie[Ge]=(ie[Ge]*Vt+Mt*w)/(Vt+w))}ie.count+=w,K>=0&&(ie.total+=K,ie.ratio=ie.total/ie.count)}else ie=Object.assign({period:t},g),delete ie.distribution,o.set(Ie,ie),ie.byThread&&(ie.threads=[],ie.threads[A]=Object.assign({},se),u.push(ie));if(B){B=B.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Vt=c.get(Ie);Vt?Vt.push(...B):c.set(Ie,B)}}await rP()}for(let h of u){let{path:m,method:S,type:A,metric:g,count:N,total:V,distribution:$,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let k of F){let se=k[K];typeof se=="number"&&(B+=se)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,m]of c){let S=o.get(h);m.sort((Ge,Mt)=>Ge.value>Mt.value?1:-1);let A=S.count-1,g=[],N=0,V=0,$;for(let Ge of tP){let Mt=A*Ge;for(;N<Mt;)$=m[V++],N+=$.count,V===1&&N--;let ys=m[V>1?V-2:0];$||($=m[0]),g.push($.value-($.value-ys.value)*(N-Mt)/$.count)}let[F,w,K,B,k,se,Ie,ie,Vt]=g;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:k,p90:se,p95:Ie,p99:ie,p999:Vt})}let l;for(let[h,m]of o)m.id=(0,Of.getNextMonotonicTime)(),m.time=_,s.primaryStore.put(m.id,m,{append:!0}).then(S=>{S||s.primaryStore.put(m.id,m)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,Of.getNextMonotonicTime)(),m={id:h,metric:"main-thread-utilization",idle:f-kD,active:E-$D,time:d,...process.memoryUsage()};s.primaryStore.put(h,m,{append:!0}).then(S=>{S||s.primaryStore.put(h,m)})}kD=f,$D=E}async function VD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function PT(){return YD||(YD=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function sP(){return KD||(KD=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function X3(){nP=!0;let e=(0,sl.get)(DT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await j3(XD,e),await VD(PT(),z3),await VD(sP(),J3)},Math.min(e/2,2147483647)).unref()}function iP(e,t){let r=e.report;r.threadId=t?.threadId||xo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(WD+=s.mean*s.count);r.totalBytesProcessed=WD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(QD.get(t))}),QD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Of.getNextMonotonicTime)(),PT().primaryStore.put(r.id,r),nP||X3(),Z3&&(oP=tX(r))}async function tX(e){if(await oP,!Gi){let r=(0,rl.dirname)((0,zD.getLogFilePath)());try{Gi=await(0,LT.open)((0,rl.join)(r,"analytics.log"),"r+")}catch{Gi=await(0,LT.open)((0,rl.join)(r,"analytics.log"),"w+")}}let t=(await Gi.stat()).size;if(t>eX){let r=Buffer.alloc(t);await Gi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Gi.write(r,{position:0}),await Gi.truncate(r.length),t=r.length}await Gi.write(JSON.stringify(e)+`
9
- `,t)}var xo,jD,zD,rl,LT,Of,sl,DT,Nf,JD,Af,XD,ZD,eP,tP,kD,$D,rP,z3,J3,YD,KD,nP,WD,QD,Z3,oP,Gi,eX,zn=Re(()=>{xo=require("worker_threads"),jD=D(Qe());Ee();zD=D(U()),rl=require("path"),LT=require("fs/promises"),Of=D(or()),sl=D(j()),DT=D(R());Pr();(0,sl.initSync)();Nf=new Map,JD=(0,sl.get)(DT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(W3,"setAnalyticsEnabled");a(kr,"recordAction");Tt.recordAnalytics=kr;a(us,"recordActionBinary");Af=0,XD=1e3,ZD="analytics-report",eP=[];a(nl,"addAnalyticsListener");tP=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Q3,"sendAnalytics");a(j3,"aggregation");kD=0,$D=0,rP=a(()=>new Promise(setImmediate),"rest");a(VD,"cleanup");z3=36e5,J3=31536e6;a(PT,"getRawAnalyticsTable");a(sP,"getAnalyticsTable");(0,jD.setChildListenerByType)(ZD,iP);a(X3,"startScheduledTasks");WD=0,QD=new Map,Z3=!1;a(iP,"recordAnalytics");eX=1e6;a(tX,"logAnalytics")});var HT={};Fe(HT,{coerceType:()=>Cf,makeTable:()=>Pf,setServerUtilities:()=>lX,updateResource:()=>ul});function Pf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:m}=e;m||(m=[]),gy(i,u);let S=Ep(i,s,u),A=0,g,N,V,$={},F=Promise.resolve(),w,K,B;for(let Q of m)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(w=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(K=Q),Q.expiresAt&&(B=Q),Q.isPrimaryKey&&($=Q);let k,se=[],Ie=[],ie=1,Vt=2,Ge={},Mt={},ys=864e5,yN,V_,pk=10,Sk=6;E&&CN();class pt extends Ut{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=m;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(p,b){b&&(this.sourceOptions=b,(b.expiration||b.eviction||b.scanInterval)&&this.setTTLExpiration(b)),b?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),N=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let C=a(I=>{let P=this.sources.slice(0,-1);if(P=P.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),P.length>0)if(P.length===1){let M=P[0];return(W,z,ae)=>{if(W?.source!==M)return M[I](z,ae,W)}}else return(M,W,z)=>{let ae=[];for(let Y of P){if(M?.source===Y)break;ae.push(Y[I](W,z,M))}return Promise.all(ae)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],L=a(I=>{if(O[I]&&(!O[I].reliesOnPrototype||O.prototype[I]))return(P,M,W)=>{if(!P?.source)return O[I](M,W,P)}},"getApplyToCanonicalSource");return Ge={put:L("put"),delete:L("delete"),publish:L("publish")},Mt={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,P=a(async(M,W)=>{let z=M.value,ae=M.table?ze[c][M.table]:pt;if(c===ks.SYSTEM_SCHEMA_NAME&&(M.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[ae.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let Y=await ae.getResource(M.id,W,ol);switch(M.type){case"put":return Y._writeUpdate(z,ol);case"delete":return Y._writeDelete(ol);case"publish":return Y._writePublish(z,ol);case"invalidate":return Y.invalidate(ol);default:je.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&h==null&&(h=!0);let W=p.subscribeOnThisThread?p.subscribeOnThisThread((0,ko.getWorkerIndex)()):(0,ko.getWorkerIndex)()===0,z=M&&W&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ae;for await(let Y of z)try{if(!(Y.type==="transaction"?Y.writes[0]:Y)){je.error("Bad subscription event",Y);continue}if(Y.source=p,ae)if(Y.beginTxn)ae.resolve();else{P(Y,ae);continue}if(Y.type==="end_txn")continue;let ye=We(Y,()=>{if(Y.type==="transaction"){let oe=[];for(let Yt of Y.writes)try{oe.push(P(Yt,Y))}catch(rr){throw rr.message+=" writing "+JSON.stringify(Yt)+" of event "+JSON.stringify(Y),rr}return Promise.all(oe)}else if(Y.type==="define_schema"){let oe=this.attributes.slice(0),Yt;for(let rr of Y.attributes)oe.find(mo=>mo.name===rr.name)||(oe.push(rr),Yt=!0);Yt&&(ut({table:n,database:c,attributes:oe,origin:"cluster"}),_l.signalSchemaChange(new dl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return Y.beginTxn?(ae=Y,P(Y,Y),new Promise(oe=>{ae.resolve=oe})):P(Y,Y)});I&&(await ye,_l.signalUserChange(new dl.UserEventMsg(process.pid))),Y.onCommit&&(ye?.then?ye.then(Y.onCommit):Y.onCommit())}catch(me){je.error("error in subscription handler",me)}}}catch(M){je.error(M)}})(),this}static getResource(p,b,C){let O=super.getResource(p,b,C);if(p!=null){Xc(p);try{if(O.hasOwnProperty(Ae))return O;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let L=!C?.async||i.cache?.get(p),I=bi(b),P=I.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return IN(p,b,{transaction:P},L,M=>{if(M?ul(O,M):O[Ae]=null,b.onlyIfCached&&b.noCacheStore){if(!O.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let W=Mm(p,M,b,O);if(W)return I?.disregardReadTxn(),O[UT]=!0,BT(W,z=>(ul(O,z),O))}return O})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(p)),L}}return O}ensureLoaded(){let p=Mm(this[Ce],this[mn],this[Se]);if(p)return this[UT]=!0,BT(p,b=>{this[mn]=b,this[Ae]=b.value,this[wf]=b.version})}static setTTLExpiration(p){if(typeof p=="number")d=p*1e3,f||(f=0);else if(p&&typeof p=="object")d=p.expiration*1e3,f=(p.eviction||0)*1e3,ys=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ys=ys||(d+f)/4,Um()}static enableAuditing(p=!0){E=p,p&&CN(),pt.audit=p}static coerceId(p){return p===""?null:Cf(p,$)}static async dropTable(){if(delete ze[c][n],c===o){for(let p of m)l.remove(pt.tableName+"/"+p.name),r[p.name]?.drop();l.remove(pt.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));_l.signalSchemaChange(new dl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(p,b){if(p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:m}}return super.get(p,b)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ds])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Se]?.returnNonexistent)return this}allowRead(p,b){let C=K_(p);if(C?.read){let O=C.attribute_permissions;if(O){b||(b={});let L=b.select;if(L){let I=vT(O,"read");b.select=L.filter(P=>I[P])}else b.select=O.filter(I=>I.read).map(I=>I.attribute_name);return b}else return!0}}allowUpdate(p,b){let C=K_(p);if(C?.update){let O=C.attribute_permissions;if(O){let L=vT(O,"update");for(let I in b)if(!L[I])return!1;for(let I of O){let P=I.attribute_name;!I.update&&!(P in b)&&(b[P]=this.getProperty(P))}}return!0}}allowCreate(p,b){if(this[Ds]){let C=K_(p);if(C?.insert){let O=C.attribute_permissions;if(O){let L=vT(O,"insert");for(let I in b)if(!L[I])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return K_(p)?.delete}update(p,b){if(!bi(this[Se]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let O;if(typeof p=="object"&&p)if(b){Object.isFrozen(p)&&(p=Object.assign({},p));for(let L in this[Ae])p[L]===void 0&&(p[L]=void 0);this[Kt]=p}else O=this[Kt],O&&(p=Object.assign(O,p)),this[Kt]=O=p;return this._writeUpdate(this),this}invalidate(p){let b=this[Se],C=this[Ce];Xc(C),bi(this[Se]).addWrite({key:C,store:i,invalidated:!0,entry:this[mn],nodeName:this[Se]?.nodeName,before:Ge.invalidate?.bind(this,b,C),beforeIntermediate:Mt.invalidate?.bind(this,b,C),commit:(L,I)=>{if(I?.version>L)return;let P=null;for(let M in r)P||(P={}),P[M]=this.getProperty(M);S(C,P,this[mn],L,bf,E,this[Se],0,"invalidate")}})}static evict(p,b,C){let O=this.Source,L;if(!((N||E)&&(!b||(L=i.getEntry(p),!L||!b)||L.version!==C))){if(N){if(i.hasLock(p,L.version))return;let I;for(let P in r)I||(I={}),I[P]=b[P];if(I){S(p,I,L,C,yf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Y_(p,b,null)}),E)S(p,null,L,C,yf,null,null,0,null,!0);else return i.remove(p,C)}}lock(){throw new Error("Not yet implemented")}static operation(p,b){return p.table||=n,p.schema||=c,fP.operation(p,b)}async put(p){this.update(p,!0)}_writeUpdate(p,b){let C=this[Se],O=bi(C),L=this[Ce];Xc(L);let I=this[mn];this[MT]=!0;let P={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!p[cP]||ad(p)){if(this.validate(p),C?.source?p=Eu(p):(t&&p[t]!==L&&(p[t]=L),K&&(p[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?p[w.name]=I?.value[w.name]:p[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),p=Eu(p)),p[Ae])throw new Error("Can not assign a record with a record property");this[Ae]=p}else O.removeWrite(P)},before:Ge.put&&(()=>Ge.put(C,L,p)),beforeIntermediate:Mt.put&&(()=>Mt.put(C,L,p)),commit:(M,W,z)=>{z&&(C&&W?.version>(C.lastModified||0)&&(C.lastModified=W.version),ul(this,W));let ae=W?.value;this[MT]=!1,je.trace("Checking timestamp for put",L,W?.version>M,W?.version,M),!(W?.version>M)&&(Y_(L,ae,p),S(L,p,W,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};O.addWrite(P)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ds]){for await(let b of this.search(p))(await pt.getResource(b[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[Ae]?this._writeDelete(p):!1}_writeDelete(p){let b=bi(this[Se]),C=this[Ce];Xc(C);let O=this[Se];return b.addWrite({key:C,store:i,resource:this,nodeName:O?.nodeName,before:Ge.delete?.bind(this,O,C),beforeIntermediate:Mt.delete?.bind(this,O,C),commit:(L,I,P)=>{let M=I?.value;P&&(O&&I?.version>(O.lastModified||0)&&(O.lastModified=I.version),ul(this,I)),!(I?.version>L)&&(Y_(this[Ce],M),je.trace("Write delete entry",C,L),E||h?(S(C,null,this[mn],L,0,E,this[Se],0,"delete"),E||Um()):i.remove(this[Ce]))}}),!0}search(p){let b=bi(this[Se]);if(!p)throw new Error("No query provided");let C=p.reverse===!0,O=p.conditions;O?O.length===void 0&&(O=Array.from(O)):O=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Ce]&&(O=[{attribute:null,comparator:"prefix",value:this[Ce]}].concat(O));for(let Y of O){let me=Y[0]??Y.attribute,ye=me==null?$:m.find(oe=>oe.name==me);if(ye)ye.type&&(Y[1]===void 0?Y.value=L(Y.value,ye):Y[1]=L(Y[1],ye));else if(me!=null)throw(0,pn.handleHDBError)(new Error,`${me} is not a defined attribute`,404)}function L(Y,me){return Array.isArray(Y)?Y.map(ye=>Cf(ye,me)):Cf(Y,me)}a(L,"coerceTypedValues"),O.length>1&&(O=(0,dP.sortBy)(O,Y=>{if(Y.estimated_count===void 0){let me=Y.comparator||Y.search_type;if(me===cl.SEARCH_TYPES.EQUALS){let ye=Y[0]??Y.attribute;if(ye==null||ye===t)Y.estimated_count=1;else{let oe=r[ye];Y.estimated_count=oe?oe.getValuesCount(Y[1]??Y.value):1/0}}else me===cl.SEARCH_TYPES.CONTAINS||me===cl.SEARCH_TYPES.ENDS_WITH||me==="ne"?Y.estimated_count=1/0:me===cl.SEARCH_TYPES.STARTS_WITH||me==="prefix"?Y.estimated_count=nX:Y.estimated_count=sX}return Y.estimated_count}));let I=b.getReadTxn();I.use();let P=p.select,M=O[0],W;if(!M)W=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:P?.length<4}:{start:!1,transaction:I,lazy:P?.length<4}).map(({value:Y})=>Y?new Promise(me=>setImmediate(()=>me(Y))):If.SKIP);else{let Y=rp(M,I,C,pt,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let me=O.slice(1).map(sp);W=ae(Y,me)}else{for(let ye=1;ye<O.length;ye++){let oe=O[ye],Yt=rp(oe,I,C,pt,p.allowFullScan);Y=Y.concat(Yt)}let me=new Set;Y=Y.filter(ye=>me.has(ye)?!1:(me.add(ye),!0)),W=ae(Y)}}(p.offset||p.limit!==void 0)&&(W=W.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),W.onDone=()=>{W.onDone=null,I.done()};let z=this[Se];function ae(Y,me){let ye=me?.length,oe={transaction:I,lazy:ye>0||P?.length<4,alwaysPrefetch:!0},Yt=p.ensureLoaded!==!1;function rr(mo,$e){if(Yt&&$e!==void 0){let Lr=!z.onlyIfCached&&Mm($e,mo,z,this);if(Lr)return Lr.then(Rk=>rr(Rk))}let rn=mo?.value;if(!rn)return If.SKIP;for(let Lr=0;Lr<ye;Lr++)if(!me[Lr](rn))return If.SKIP;return rn}return a(rr,"processEntry"),Y.map(mo=>IN(mo,z,oe,!1,rr))}return a(ae,"idsToRecords"),W}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ut({table:n,database:c,schemaDefined:_,attributes:m,audit:!0}),p||(p={});let b=Sy(pt,this[Ce]??null,function(I,P,M,W){try{let z=P.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:P.version,type:P.type,beginTxn:W})}catch(z){je.error(z)}},p.startTime,this[Ds]);p.crossThreads===!1&&(b.crossThreads=!1),p.supportsTransactions&&(b.supportsTransactions=!0);let C=this[Ce],O=p.previousCount;O>1e3&&(O=1e3);let L=p.startTime;if(this[Ds]){if(L){if(O)throw new pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:P}of u.getRange({start:L,exclusiveStart:!0})){let M=Ur(P,i);if(M.tableId!==s)continue;let W=M.recordId;(C==null||_P(C,W))&&b.send({id:W,timestamp:I,...M}),b.startTime=I}}else if(O){let I=[];for(let{key:P,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let W=Ur(M);if(W.tableId!==s)continue;let z=W.recordId;if(C==null||_P(C,z)){let ae=W.getValue(i);if(I.push({id:z,timestamp:P,value:ae,version:W.version,type:W.type}),--O<=0)break}}catch(W){je.error("Error getting history entry",P,W)}for(let P=I.length;P>0;)b.send(I[--P]);I[0]&&(b.startTime=I[0].timestamp)}else if(!p.omitCurrent)for(let{key:I,value:P,version:M,localTime:W}of i.getRange({start:C??!1,end:C==null?void 0:[C,Lf.MAXIMUM_KEY],versions:!0}))P&&b.send({id:I,version:M,timestamp:W,value:P})}else{O&&!L&&(L=0);let I=this[mn]?.localTime;if(je.trace("Subscription from",L,"from",C),L<I){let P=[],M=I;do{let W=u.get(M);if(W){p.omitCurrent=!0;let z=Ur(W),ae=z.getValue(i);P.push({id:C,value:ae,timestamp:M,...z}),M=z.previousLocalTime}else break;O&&O--}while(M>L&&O!==0);for(let W=P.length;W>0;)b.send(P[--W]);b.startTime=I}!p.omitCurrent&&this.doesExist()&&b.send({id:C,version:this[wf],timestamp:this[mn]?.localTime,value:this})}return p.listener&&b.on("data",p.listener),b}doesExist(){return!!(this[Ae]||this[MT])}async publish(p,b){this._writePublish(p,b)}_writePublish(p,b){let C=bi(this[Se]),O=this[Ce]||null;Xc(O);let L=this[Se];C.addWrite({key:O,store:i,entry:this[mn],nodeName:L?.nodeName,validate:()=>{this.validate(p)},before:Ge.publish?.bind(this,L,O,p),beforeIntermediate:Mt.publish?.bind(this,L,O,p),commit:(I,P,M)=>{P===void 0&&h&&!E&&Um(),S(O,P?.value??null,P,P?.version||I,0,!0,L,P?.expiresAt,"message",!1,p)}})}validate(p){let b,C=a((O,L,I)=>{if(L.type&&O!=null)if(L.properties){typeof O!="object"&&(b||(b=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let P=L.properties;for(let M=0,W=P.length;M<W;M++){let z=P[M],ae=C(O[z.name],z,I+"."+z.name);ae&&(O[z.name]=ae)}}else switch(L.type){case"Int":(typeof O!="number"||O>>0!==O)&&(b||(b=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(b||(b=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(b||(b=[])).push(`Property ${I} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(P=>typeof P=="string")||(b||(b=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(b||(b=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof O!="boolean"&&(b||(b=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(b||(b=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":O instanceof Uint8Array||(b||(b=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(L.elements)for(let P=0,M=O.length;P<M;P++){let W=O[P],z=C(W,L.elements,I+"[*]");z&&(O[P]=z)}}else(b||(b=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&O==null&&(b||(b=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let O=0,L=m.length;O<L;O++){let I=m[O],P=C(p[I.name],I,I.name);P&&(p[I.name]=P)}if(b)throw new pn.ClientError(b.join(". "))}getUpdatedTime(){return this[wf]}wasLoadedFromSource(){return N?!!this[UT]:void 0}static async addAttributes(p){let b=m.slice(0);for(let C of p){if(!C.name)throw new pn.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new pn.ClientError("Attribute names cannot include backticks or forward slashes");b.push(C)}return ut({table:n,database:c,schemaDefined:_,attributes:b}),pt.indexingOperation}static async removeAttributes(p){let b=m.filter(C=>!p.includes(C.name));return ut({table:n,database:c,schemaDefined:_,attributes:b}),pt.indexingOperation}static getRecordCount(p){let b=i.getStats().entryCount,C=5e3,O=1e3,L;b>C&&!p?.exactCount&&(L=O);let I=0;for(let{value:P}of i.getRange({start:!0,lazy:!0,limit:L}))P!=null&&I++;if(L){let P=I;I=0;for(let{value:Yt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Yt!=null&&I++;let M=L*2,W=(I+P)/M,z=Math.pow((I-P+1)/L/2,2)+W*(1-W)/M,ae=Math.max(Math.sqrt(z)*b,1),Y=Math.round(W*b),me=Math.max(Y-1.96*ae,0),ye=Math.min(Y+1.96*ae,b),oe=Math.pow(10,Math.round(Math.log10(ae)));return oe>Y&&(oe=oe/10),I=Math.round(Y/oe)*oe,{recordCount:I,estimatedRange:[Math.round(me),Math.round(ye)]}}return{recordCount:I}}static updatedAttributes(){ud(this,this)}static async deleteHistory(p=0){let b;for(let{key:C,value:O}of u.getRange({start:0,end:p}))await al(),Ur(O).tableId===s&&(b=u.remove(C));await b}static async*getHistory(p=0,b=1/0){for(let{key:C,value:O}of u.getRange({start:p,end:b})){await al();let L=Ur(O);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(p){let b=[],C=i.getEntry(p);if(!C)return b;let O=C.localTime,L=0;do{await al();let I=u.get(O);if(I){let P=Ur(I);b.push({id:P.recordId,localTime:O,version:P.version,type:P.type,value:P.getValue(i),user:P.user}),O=P.previousLocalTime}else break}while(L<1e3&&O);return b.reverse()}static cleanup(){k?.remove()}}pt.updatedAttributes();let Tk=pt.prototype;return Tk[cP]=!0,d&&pt.setTTLExpiration(d/1e3),B&&gk(),pt;function Y_(Q,p,b){let C;for(let O in r){let L=r[O],I=L.isIndexing,P=b?.[O],M=p?.[O];if(P===M&&!I)continue;C=!0;let W=(0,ll.getIndexedValues)(M);if(W){aP&&L.prefetch(W.map(z=>({key:z,value:Q})),lP);for(let z=0,ae=W.length;z<ae;z++)L.remove(W[z],Q)}if(W=(0,ll.getIndexedValues)(P),W){aP&&L.prefetch(W.map(z=>({key:z,value:Q})),lP);for(let z=0,ae=W.length;z<ae;z++)L.put(W[z],Q)}}return C}a(Y_,"updateIndices");function Xc(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>uP)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,Lf.writeKey)(Q,cX,0)>uP)throw new Error("Primary key size is too large: "+Q.length);return!0}a(Xc,"checkValidId");function IN(Q,p,b,C,O){let L=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),b.transaction?.isDone)return O(null,Q);let I=i.getEntry(Q,b);return I&&p&&(I?.version>(p.lastModified||0)&&(p.lastModified=I.version),I?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=I.localTime)),O(I,Q)},"whenPrefetched");return C?L():ie>0?(ie--,L()):new Promise((I,P)=>{ie===0?(ie--,i.prefetch([Q],()=>{M(),W()})):(se.push(Q),Ie.push(W),se.length>Sk&&(ie--,M()));function M(){if(se.length>0){let z=Ie;i.prefetch(se,()=>{ie===-1?M():ie++;for(let ae of z)ae()}),se=[],Ie=[],Vt>2&&Vt--}else ie=Vt,Vt<pk&&Vt++}a(M,"prefetch");function W(){try{I(L())}catch(z){P(z)}}a(W,"load")})}a(IN,"loadLocalRecord");function K_(Q){if(!Q)return;let p=Q.role.permission;if(p.super_user)return uX;let b=p[c],C,O=b?.tables;if(O)return O[n];if(c==="data"&&(C=p[n])&&!C.tables)return C}a(K_,"getTablePermissions");function Mm(Q,p,b,C){if(N){let O;if(b.noCache?O=!0:(p?(!p.value||p.metadataFlags&(bf|yf)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,us(!O,"cache-hit",n)),O){let L=wN(Q,p,b).then(I=>(I?.value?.[Ae]&&je.error("Can not assign a record with a record property"),b&&(I?.version>(b.lastModified||0)&&(b.lastModified=I.version),b.lastRefreshed=Date.now()),I));if(b?.onlyIfCached||p?.value&&C?.allowStaleWhileRevalidate?.(p,Q)){if(L.catch(I=>je.warn(I)),b?.onlyIfCached&&!C.doesExist())throw new pn.ServerError("Entry is not cached",504);return}else return L}}}a(Mm,"ensureLoadedFromSource");function bi(Q){let p=Q?.transaction;if(p){if(!p.open)throw new Error("Can not use a transaction that is not open");if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let b=p.next;if(!b)return p=p.next=new Oo,p.lmdbDb=i,p;p=b}while(!0)}else return new dd}a(bi,"txnForContext");async function wN(Q,p,b){let C=p?.metadataFlags,O=p?.version,L,I;if(!i.attemptLock(Q,O,()=>{clearTimeout(I);let z=i.getEntry(Q);!z||!z.value||z.metadataFlags&(bf|yf)?L(wN(Q,i.getEntry(Q),b)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(Q,O)},aX)});let P=p?.value,M={requestContext:b,replacingRecord:P,replacingVersion:O,source:null,resourceCache:b?.resourceCache},W=b?.responseHeaders;return new Promise((z,ae)=>{let Y;BT(We(M,async me=>{let ye=performance.now(),oe,Yt,rr;try{for(let Lr of pt.sources)if(Lr.get&&(!Lr.get.reliesOnPrototype||Lr.prototype.get)&&(M.source=Lr,oe=await Lr.get(Q,M),oe))break;rr=C&bf;let $e=M.lastModified||rr&&O;Yt=rr||$e>O||!P,$e||($e=(0,ll.getNextMonotonicTime)());let rn=performance.now()-ye;if(kr(rn,"cache-resolution",n),W&&W.append("Server-Timing",`cache-resolve;dur=${rn.toFixed(2)}`),me.timestamp=$e,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),oe){if(typeof oe!="object")throw new Error("Only objects can be cached and stored in tables");typeof oe.toJSON=="function"&&(oe=oe.toJSON()),t&&oe[t]!==Q&&(oe[t]=Q)}Y=!0,z({version:$e,value:oe})}catch($e){$e.message+=` while resolving record ${Q} for ${n}`,P&&(($e.code==="ECONNRESET"||$e.code==="ECONNREFUSED"||$e.code==="EAI_AGAIN")&&!b?.mustRevalidate||b?.staleIfError&&($e.statusCode===500||$e.statusCode===502||$e.statusCode===503||$e.statusCode===504))?(z({version:O,value:P}),je.trace($e.message,"(returned stale record)")):ae($e),M.transaction.abort();return}if(b?.noCacheStore){M.transaction.abort();return}bi(M).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:($e,rn)=>{if(rn?.version!==O)return;let Lr=Y_(Q,P,oe);oe?(Mt.put?.(M,Q,oe),S(Q,oe,rn,$e,0,E&&Yt||null,M,M.expiresAt,"put",!!rr)):(Mt.delete?.(M,Q),E||h?S(Q,null,rn,$e,0,E&&Yt||null,M,0,"delete",!!rr):i.remove(Q,O))}})}),()=>{i.unlock(Q,O)},me=>{i.unlock(Q,O),Y&&je.error("Error committing cache update",me)})})}a(wN,"getFromSource");function Um(){if(ys!==yN&&(yN=ys,(0,ko.getWorkerIndex)()===(0,ko.getWorkerCount)()-1)){if(V_&&clearTimeout(V_),!ys)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())/ys)*ys+Q.getTime(),b=a(C=>{je.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),V_=setTimeout(()=>F=F.then(async()=>{if(b(Math.max(C+ys,Date.now())),i.rootStore.status!=="open"){clearTimeout(V_);return}je.trace(`Starting cleanup scan for ${n}`);try{let O=0;for(let{key:L,value:I,version:P,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&P+oX<Date.now()?i.remove(L,P):M&&M+f<Date.now()&&(pt.evict(L,I,P),O++),await al();je.trace(`Finished cleanup scan for ${n}, evicted ${O} entries`)}catch(O){je.trace(`Error in cleanup scan for ${n}:`,O)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");b(p)}}a(Um,"scheduleCleanup");function CN(){k=u?.addDeleteRemovalCallback(s,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(CN,"addDeleteRemoval");function gk(){(0,ko.getWorkerIndex)()===0&&setInterval(async()=>{try{let Q=B.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:b}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(b);C?.value?.[Q]<Date.now()&&pt.evict(b,C.value,C.version),await al()}}catch(Q){je.error("Error in evicting old records",Q)}},iX).unref()}a(gk,"runRecordExpirationEviction")}function vT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function lP(){}function lX(e){fP=e}function Cf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!_X.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Df.autoCast)(e)}function _P(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function BT(e,t,r){return e?.then?e.then(t,r):t(e)}function ul(e,t){e[mn]=t,e[Ae]=t?.value??null,e[wf]=t?.version}var ks,If,ll,dP,cl,fl,pn,_l,dl,je,Lf,ko,Df,rX,fP,sX,nX,iX,oX,aP,aX,wf,cP,mn,MT,UT,ol,bf,yf,cX,uP,uX,NSe,_X,al,Mf=Re(()=>{ks=D(R()),If=require("lmdb"),ll=D(or()),dP=require("lodash");Ls();ep();cl=D(Ke()),fl=D(j());Ry();pn=D(Z()),_l=D(Vn()),dl=D(Us());Ee();Ed();je=D(U());_d();No();Lf=require("ordered-binary"),ko=D(Qe());Ia();Df=D(G());Su();zn();rX=new Uint8Array(9);rX[8]=192;sX=1e8,nX=1e7,iX=6e4,oX=864e5;fl.initSync();aP=fl.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aX=1e4,wf=Symbol.for("version"),cP=Symbol.for("incremental-update"),mn=Symbol("entry"),MT=Symbol("is-saving"),UT=Symbol("loaded-from-source"),ol={isNotification:!0,ensureLoaded:!1},bf=1,yf=8,cX=Buffer.allocUnsafeSlow(8192),uP=1978,uX={read:!0,insert:!0,update:!0,delete:!0},NSe=(0,Df.convertToMS)(fl.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Pf,"makeTable");a(vT,"attributesAsObject");a(lP,"noop");a(lX,"setServerUtilities");_X=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Cf,"coerceType");a(_P,"isDescendantId");al=a(()=>new Promise(setImmediate),"rest");a(BT,"when");a(ul,"updateResource")});var Le={};Fe(Le,{database:()=>Ku,databases:()=>ze,dropDatabase:()=>VS,dropTableMeta:()=>pX,getDatabases:()=>Hs,getTables:()=>dX,onUpdatedTable:()=>kT,readMetaDb:()=>El,resetDatabases:()=>fX,table:()=>ut,tables:()=>Vr});function dX(){return qf||Hs(),Vr||{}}function Hs(){if(qf)return ze;qf=!0,Ja=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,$r.existsSync)(e)?e:(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,$r.existsSync)(e))for(let r of(0,$r.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ye.basename)(r.name,".mdb");r.isFile()&&(0,Ye.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&El((0,Ye.join)(e,r.name),null,s)}if((0,$r.existsSync)((0,za.getBaseSchemaPath)())){for(let r of(0,$r.readdirSync)((0,za.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ye.join)((0,za.getBaseSchemaPath)(),r.name),n=(0,Ye.join)((0,za.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,$r.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Ye.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ye.join)(n,i.name);El((0,Ye.join)(s,i.name),(0,Ye.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,$r.existsSync)(n))for(let o of(0,$r.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Ye.extname)(o.name).toLowerCase()===".mdb"&&El((0,Ye.join)(n,o.name),(0,Ye.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Ye.join)(c.path,(0,Ye.basename)(o+".mdb"));(0,$r.existsSync)(u)&&El(u,o,r,null,!0)}}for(let r in ze){let s=Ja.get(r);if(s){let n=ze[r];r.includes("delete")&&ls.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(ls.trace(`delete table class ${i}`),delete n[i])}else if(delete ze[r],r==="data"){for(let n in Vr)delete Vr[n];delete Vr[Gf]}}return Ja=null,ze}}function fX(){qf=!1;for(let[,e]of Fi)e.needsDeletion=!0;Hs();for(let[e,t]of Fi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fi.delete(e));return ze}function El(e,t,r=FT,s,n){let i=new qT.default(e,!1);try{let o=Fi.get(e);o?o.needsDeletion=!1:(o=(0,vf.open)(i),Fi.set(e,o));let c=new $o.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Uf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,$r.existsSync)(s)&&(i.path=s,_=(0,vf.open)(i),_.isLegacy=!0):_=Od(o));let l=pP(r),d=l[Gf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let A=f.get(m);A||f.set(m,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let k of m)if(k.is_hash_attribute||k.isPrimaryKey){S=k;break}if(!S){ls.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let A=l[E],g={},N=[],V,$,F=typeof S.audit=="boolean"?S.audit:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)g=A.indices,N=A.attributes,A.schemaVersion++;else{V=S.tableId,V?V>=(u.get(ja)||0)&&u.putSync(ja,V+1):(S.tableId=V=u.get(ja),V||(V=1),u.putSync(ja,V+1),u.putSync(S.key,S));let k=new $o.default(!S.is_hash_attribute,S.is_hash_attribute);$=Rd(o.openDB(S.key,k)),$.rootStore=o,$.tableId=V}for(let k of m){k.attribute=k.name;try{if(!k.is_hash_attribute&&(k.indexed||k.attribute&&!k.name)){if(!g[k.name]){let Ie=new $o.default(!k.is_hash_attribute,k.is_hash_attribute);g[k.name]=o.openDB(k.key,Ie)}let se=N.find(Ie=>Ie.name===k.name);se?N.splice(N.indexOf(se),1,k):N.push(k)}}catch(se){ls.error("Error trying to update attribute",k,N,g,se)}}if(!A){A=SP(l,E,Pf({primaryStore:$,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:V,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let k of xT)k(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function pP(e){let t=ze[e];if(t||(e==="data"?t=ze[e]=Vr:e==="system"?Object.defineProperty(ze,"system",{value:t=Object.create(null),configurable:!0}):t=ze[e]=Object.create(null)),Ja&&!Ja.has(e)){let r=new Set;t[Gf]=r,Ja.set(e,r)}return t}function SP(e,t,r){return e[t]=r,r}function Ku({database:e,table:t}){e||(e=FT),Hs();let r=pP(e),s=(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),n=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,$r.existsSync)(s)?s:(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ye.join)(s,(i?t:e)+".mdb"),c=Fi.get(o);if(!c){let u=new qT.default(o,!1);c=(0,vf.open)(u),Fi.set(o,c)}return c}async function VS(e){if(!ze[e])throw new Error("Schema does not exist");let t=ze[e];for(let r in t){let n=t[r].primaryStore.rootStore;Fi.delete(n.path),n.status==="open"&&(await n.close(),await EP.remove(n.path))}if(e==="data"){for(let r in Vr)delete Vr[r];delete Vr[Gf]}delete ze[e]}function ut({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=FT);let l=Ku({database:t,table:e}),d=ze[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,m,S;u==null&&(u=!0);let A=new $o.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let g,N;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=Od(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),ls.trace(`${e} table loading, opening primary store`);let K=new $o.default(!1,!0),B=e+"/",k=Rd(l.openDB(B,K));k.rootStore=l,S=l.dbisDb=l.openDB(Uf.INTERNAL_DBIS_NAME,A),k.tableId=S.get(ja),k.tableId||(k.tableId=1),S.putSync(ja,k.tableId+1),h.tableId=k.tableId,f=SP(d,e,Pf({primaryStore:k,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,g=!0,F(),S.put(B,h)}m=f.indices,S=S||(l.dbisDb=l.openDB(Uf.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let V=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,k]=w.toString().split("/");if(k===""&&(k=K.name),k){if(B!==e)continue}else k=B;if(!i.find(Ie=>Ie.name===k)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),g=!0,S.remove(w);let Ie=f.indices[B];Ie&&V.push(Ie)}}let $=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let se=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),s&&(se.eviction=+s),g=!0,F(),S.put(K,se)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let k=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let se=new $o.default(!0,!1),Ie=l.openDB(K,se);(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<hl.workerData?.restartNumber)&&(g=!0,F(),B=S.get(K),(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<hl.workerData?.restartNumber)&&(g=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(w,"dbi",{value:Ie}),$.push(w)),S.put(K,w)),m[w.name]=Ie}else k&&(g=!0,F(),S.put(K,w))}}finally{N&&N()}if(g&&(f.schemaVersion++,f.updatedAttributes()),ls.trace(`${e} table loading, running index`),$.length>0||V.length>0?f.indexingOperation=mX(f,$,V):g&&Bf.signalSchemaChange(new Hf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let w of xT)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),ls.trace(`${e} table loaded`),f;function F(){N||l.transactionSync(()=>({then(w){N=w}}))}a(F,"startTxn")}async function mX(e,t,r){try{let s=e.schemaVersion;await Bf.signalSchemaChange(new Hf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,hP.getIndexedValues)(l[h]);if(m)for(let S=0,A=m.length;S<A;S++)E.dbi.put(m[S],_)}}),n.then(()=>u--,f=>{u--,ls.error(f)}),hl.workerData&&hl.workerData.restartNumber!==mP.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>EX?await n:u>hX&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Bf.signalSchemaChange(new Hf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){ls.error("Error in indexing",s)}}function pX({table:e,database:t}){let r=Ku({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function kT(e){xT.push(e)}var zt,Uf,vf,Ye,$r,za,$o,qT,Yr,EP,GT,hP,Bf,Hf,hl,ls,mP,FT,Gf,Vr,ze,ja,xT,qf,Fi,Ja,EX,hX,Ee=Re(()=>{zt=D(j()),Uf=D(Ke()),vf=require("lmdb"),Ye=require("path"),$r=require("fs"),za=D(He());Mf();$o=D(Nd()),qT=D(yd()),Yr=D(R()),EP=D(require("fs-extra")),GT=require("../index"),hP=D(or()),Bf=D(Vn()),Hf=D(Us()),hl=require("worker_threads"),ls=D(U()),mP=D(Qe());Ia();Su();FT="data",Gf=Symbol("defined-tables");(0,zt.initSync)();Vr=Object.create(null),ze=Object.create(null);(0,GT._assignPackageExport)("databases",ze);(0,GT._assignPackageExport)("tables",Vr);ja=Symbol.for("next-table-id"),xT=[],Fi=new Map;a(dX,"getTables");a(Hs,"getDatabases");a(fX,"resetDatabases");a(El,"readMetaDb");a(pP,"ensureDB");a(SP,"setTable");a(Ku,"database");a(VS,"dropDatabase");a(ut,"table");EX=1e3,hX=10;a(mX,"runIndexing");a(pX,"dropTableMeta");a(kT,"onUpdatedTable")});var G=T((MSe,PP)=>{"use strict";var xi=require("path"),OP=require("fs-extra"),hr=U(),TP=require("fs-extra"),Ff=require("os"),SX=require("net"),TX=require("recursive-iterator"),Je=R(),gX=Qm(),gP=require("papaparse"),xf=require("moment"),{inspect:RX}=require("util"),RP=require("is-number"),PSe=require("lodash"),AX=require("minimist"),OX=require("https"),NX=require("http"),{hdb_errors:kf}=Z(),bX=/^((\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)))$/,NP=require("util").promisify(setTimeout),yX=100,IX=5,wX="",CX=4,AP={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};PP.exports={isEmpty:Kr,isEmptyOrZeroLength:Sn,arrayHasEmptyValues:PX,arrayHasEmptyOrZeroLengthValues:MX,buildFolderPath:UX,isBoolean:bP,errorizeMessage:LX,stripFileExtension:BX,autoCast:HX,autoCastJSON:yP,autoCastJSONDeep:VT,removeDir:qX,compareVersions:GX,isCompatibleDataVersion:FX,escapeRawValue:xX,unescapeValue:kX,stringifyProps:$X,timeoutPromise:YX,isClusterOperation:WX,getClusterUser:jX,checkGlobalSchemaTable:QX,getHomeDir:wP,getPropsFilePath:VX,promisifyPapaParse:zX,removeBOM:CP,createEventPromise:JX,checkProcessRunning:XX,checkSchemaTableExist:ZX,checkSchemaExists:LP,checkTableExists:DP,getStartOfTomorrowInSeconds:eZ,getLimitKey:tZ,isObject:vX,isNotEmptyAndHasValue:DX,autoCasterIsNumberCheck:IP,backtickASTSchemaItems:rZ,isPortTaken:KX,createForkArgs:sZ,autoCastBoolean:nZ,async_set_timeout:NP,getTableHashAttribute:iZ,doesSchemaExist:oZ,doesTableExist:aZ,stringifyObj:cZ,ms_to_time:uZ,changeExtension:lZ,getEnvCliRootPath:YT,noBootFile:_Z,httpRequest:dZ,transformReq:fZ,convertToMS:EZ,PACKAGE_ROOT:Je.PACKAGE_ROOT};function LX(e){return e instanceof Error?e:new Error(e)}a(LX,"errorizeMessage");function Kr(e){return e==null}a(Kr,"isEmpty");function DX(e){return!Kr(e)&&(e||e===0||e===""||bP(e))}a(DX,"isNotEmptyAndHasValue");function Sn(e){return Kr(e)||e.length===0||e.size===0}a(Sn,"isEmptyOrZeroLength");function PX(e){if(Kr(e))return!0;for(let t=0;t<e.length;t++)if(Kr(e[t]))return!0;return!1}a(PX,"arrayHasEmptyValues");function MX(e){if(Sn(e))return!0;for(let t=0;t<e.length;t++)if(Sn(e[t]))return!0;return!1}a(MX,"arrayHasEmptyOrZeroLengthValues");function UX(...e){try{return e.join(xi.sep)}catch{console.error(e)}}a(UX,"buildFolderPath");function bP(e){return Kr(e)?!1:e===!0||e===!1}a(bP,"isBoolean");function vX(e){return Kr(e)?!1:typeof e=="object"}a(vX,"isObject");function BX(e){return Sn(e)?wX:e.slice(0,-CX)}a(BX,"stripFileExtension");function HX(e){return Kr(e)||e===""||typeof e!="string"?e:AP[e]!==void 0?AP[e]:IP(e)===!0?Number(e):bX.test(e)?new Date(e):e}a(HX,"autoCast");function yP(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(yP,"autoCastJSON");function VT(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=VT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=VT(r);s!==r&&(e[t]=s)}return e}else return yP(e)}a(VT,"autoCastJSONDeep");function IP(e){if(e.startsWith("0.")&&RP(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&RP(e))}a(IP,"autoCasterIsNumberCheck");async function qX(e){if(Sn(e))throw new Error(`Directory path: ${e} does not exist`);try{await TP.emptyDir(e),await TP.remove(e)}catch(t){throw hr.error(`Error removing files in ${e} -- ${t}`),t}}a(qX,"removeDir");function GX(e,t){if(Sn(e)){hr.info("Invalid current version sent as parameter.");return}if(Sn(t)){hr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(GX,"compareVersions");function FX(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(FX,"isCompatibleDataVersion");function xX(e){if(Kr(e))return e;let t=String(e);return t==="."?Je.UNICODE_PERIOD:t===".."?Je.UNICODE_PERIOD+Je.UNICODE_PERIOD:t.replace(Je.FORWARD_SLASH_REGEX,Je.UNICODE_FORWARD_SLASH)}a(xX,"escapeRawValue");function kX(e){if(Kr(e))return e;let t=String(e);return t===Je.UNICODE_PERIOD?".":t===Je.UNICODE_PERIOD+Je.UNICODE_PERIOD?"..":String(e).replace(Je.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(kX,"unescapeValue");function $X(e,t){if(Kr(e))return hr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Ff.EOL}!Sn(s)&&s[0]===";"?r+=" "+s+n+Ff.EOL:Sn(s)||(r+=s+"="+n+Ff.EOL)}catch{hr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a($X,"stringifyProps");function wP(){let e;try{e=Ff.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(wP,"getHomeDir");function VX(){let e=xi.join(wP(),Je.HDB_HOME_DIR_NAME,Je.BOOT_PROPS_FILE_NAME);return OP.existsSync(e)||(e=xi.join(__dirname,"../","hdb_boot_properties.file")),e}a(VX,"getPropsFilePath");function YX(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(YX,"timeoutPromise");async function KX(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=SX.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(KX,"isPortTaken");function WX(e){try{return Je.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){hr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(WX,"isClusterOperation");function QX(e,t){let r=(Ee(),te(Le)).getDatabases();if(!r[e])return kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(QX,"checkGlobalSchemaTable");function jX(e,t){if(Kr(t)){hr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Kr(e)||Sn(e)){hr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){hr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){hr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(jX,"getClusterUser");function zX(){gP.parsePromise=function(e,t,r){return new Promise(function(s,n){gP.parse(e,{header:!0,transformHeader:CP,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(zX,"promisifyPapaParse");function CP(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(CP,"removeBOM");function JX(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;hr.info(`Got cluster status event response: ${RX(n)}`);try{i.cancel()}catch{hr.error("Error trying to cancel timeout.")}s(n)})})}a(JX,"createEventPromise");async function XX(e){let t=!0,r=0;do await NP(yX*r++),(await gX.findPs(e)).length>0&&(t=!1);while(t&&r<IX);if(t)throw new Error(`process ${e} was not started`)}a(XX,"checkProcessRunning");function ZX(e,t){let r=LP(e);if(r)return r;let s=DP(e,t);if(s)return s}a(ZX,"checkSchemaTableExist");function LP(e){let{getDatabases:t}=(Ee(),te(Le));if(!t()[e])return kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(LP,"checkSchemaExists");function DP(e,t){let{getDatabases:r}=(Ee(),te(Le));if(!r()[e][t])return kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(DP,"checkTableExists");function eZ(){let e=xf().utc().add(1,Je.MOMENT_DAYS_TAG).startOf(Je.MOMENT_DAYS_TAG).unix(),t=xf().utc().unix();return e-t}a(eZ,"getStartOfTomorrowInSeconds");function tZ(){return xf().utc().format("DD-MM-YYYY")}a(tZ,"getLimitKey");function rZ(e){try{let t=new TX(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){hr.error("Got an error back ticking items."),hr.error(t)}}a(rZ,"backtickASTSchemaItems");function sZ(e){return[e]}a(sZ,"createForkArgs");function nZ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(nZ,"autoCastBoolean");function iZ(e,t){let{getDatabases:r}=(Ee(),te(Le)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(iZ,"getTableHashAttribute");function oZ(e){let{getDatabases:t}=(Ee(),te(Le));return t()[e]!==void 0}a(oZ,"doesSchemaExist");function aZ(e,t){let{getDatabases:r}=(Ee(),te(Le));return r()[e]?.[t]!==void 0}a(aZ,"doesTableExist");function cZ(e){try{return JSON.stringify(e)}catch{return e}}a(cZ,"stringifyObj");function uZ(e){let t=xf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(uZ,"ms_to_time");function lZ(e,t){let r=xi.basename(e,xi.extname(e));return xi.join(xi.dirname(e),r+t)}a(lZ,"changeExtension");function YT(){if(process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=AX(process.argv);if(e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(YT,"getEnvCliRootPath");var $T;function _Z(){if($T)return $T;let e=YT();YT()&&OP.pathExistsSync(xi.join(e,Je.HDB_CONFIG_FILE))&&($T=!0)}a(_Z,"noBootFile");function dZ(e,t){let r;return e.protocol==="http:"?r=NX:r=OX,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(dZ,"httpRequest");function fZ(e){if(!e.schema&&!e.database){e.schema=Je.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(fZ,"transformReq");function EZ(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(EZ,"convertToMS")});var j=T((vSe,vP)=>{"use strict";var KT=require("fs-extra"),$s=require("path"),MP=require("os"),hZ=require("properties-reader"),ml=U(),Vo=G(),re=R(),$f=rt(),mZ="Error initializing environment manager",Vf="BOOT_PROPS_FILE_PATH",UP=!1,pZ={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Jn={};vP.exports={BOOT_PROPS_FILE_PATH:Vf,getHdbBasePath:SZ,setHdbBasePath:TZ,get:gZ,initSync:AZ,setProperty:pe,initTestEnvironment:OZ};function SZ(){return Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(SZ,"getHdbBasePath");function TZ(e){Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(TZ,"setHdbBasePath");function gZ(e){let t=$f.getConfigValue(e);return t===void 0?Jn[e]:t}a(gZ,"get");function pe(e,t){pZ[e]&&(Jn[e]=t),$f.updateConfigObject(e,t)}a(pe,"setProperty");function RZ(){let e;try{e=Vo.getPropsFilePath(),KT.accessSync(e,KT.constants.F_OK|KT.constants.R_OK),UP=!0;let t=hZ(e);return Jn[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),Jn[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Jn[Vf]=e,!0}catch{return ml.trace(`Environment manager found no properties file at ${e}`),!1}}a(RZ,"doesPropFileExist");function AZ(e=!1){try{(UP||RZ()||Vo.noBootFile())&&($f.initConfig(e),Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=$f.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ml.error(mZ),ml.error(t),console.error(t),process.exit(1)}}a(AZ,"initSync");function OZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=$s.join(__dirname,"../../","unitTests");Jn[Vf]=$s.join(u,"hdb_boot_properties.file"),pe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,$s.join(u,"settings.test")),pe(re.HDB_SETTINGS_NAMES.INSTALL_USER,MP.userInfo()?MP.userInfo().username:void 0),pe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,$s.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.HDB_SETTINGS_NAMES.CERT_KEY,$s.join(u,"envDir","utility","keys","certificate.pem")),pe(re.CONFIG_PARAMS.TLS_PRIVATEKEY,$s.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.CONFIG_PARAMS.TLS_CERTIFICATE,$s.join(u,"envDir","utility","keys","certificate.pem")),pe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),pe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,$s.join(u,"envDir","log")),pe(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),pe(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,$s.join(u,"envDir")),pe(re.CONFIG_PARAMS.STORAGE_PATH,$s.join(u,"envDir")),pe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Vo.isEmpty(n)?!0:n),pe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Vo.isEmpty(n)?!0:n),pe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),pe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Vo.isEmpty(i)?!1:i),pe(re.CONFIG_PARAMS.HTTP_CORS,Vo.isEmpty(i)?!1:i),pe(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),pe(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,$s.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),pe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Vo.isEmpty(c)?!1:c),o&&(pe("CORS_ACCESSLIST",o),pe(re.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(pe(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),pe(re.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(pe(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),pe(re.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(pe(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),pe(re.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Vf}. Please check your boot props and settings files`;ml.fatal(r),ml.error(t)}}a(OZ,"initTestEnvironment")});var QT={};Fe(QT,{loadGQLSchema:()=>yZ,start:()=>WT,startOnMainThread:()=>bZ});function WT({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(F){if(F.kind==="NonNullType"){let B=$(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:$(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a($,"getProperty");let A=S.name.value,g=[],N={table:null,database:null,properties:g};f.set(A,N);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="export"){N.export=!0;for(let w of F.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let V=!1;for(let F of S.fields){let w=$(F.type);w.name=F.name.value,g.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,V=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let k of K.arguments)k.name.value==="role"&&B.push(k.value.value)}}N.typeName=A,A==="Query"&&(h=N)}function m(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?m(S.elements):NZ.includes(S.type)||(0,BP.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(m,"connectPropertyType");for(let S of f.values())for(let A of S.properties)m(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Yf.dirname)(s),S.tableClass):i.set((0,Yf.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Yf.dirname)(s)+"/"+S.name,A.tableClass)}}}var Yf,BP,NZ,bZ,yZ,HP=Re(()=>{Yf=require("path");Ee();BP=D(Qe()),NZ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(WT,"start");bZ=WT,yZ=WT({ensureTable:ut}).handleFile});async function Kf(e){return IZ?(pl||(pl=wZ(LZ)),(await(await pl).import(e)).namespace):import(e)}async function wZ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),pl=new Compartment({console,Math,Date,fetch:CZ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,GP.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Ut,tables:Vr,databases:ze})}};let s=await(0,qP.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),pl}function CZ(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 LZ(){return{Resource:Ut,tables:Vr}}var qP,GP,IZ,pl,jT=Re(()=>{Ls();Ee();qP=require("fs/promises"),GP=require("path"),IZ=!1;a(Kf,"secureImport");a(wZ,"getCompartment");a(CZ,"secureOnlyFetch");a(LZ,"getGlobalVars")});var JT={};Fe(JT,{handleFile:()=>DZ});async function DZ(e,t,r,s){let n=new Map,i=(0,FP.pathToFileURL)(r).toString(),o=await Kf(i);u(o.default)&&s.set((0,zT.dirname)(t),o.default),c(o,(0,zT.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var FP,zT,xP=Re(()=>{FP=require("url");jT();zT=require("path");a(DZ,"handleFile")});var ZT={};Fe(ZT,{start:()=>PZ});function PZ({resources:e}){e.set("login",XT),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var XT,kP=Re(()=>{Ls();a(PZ,"start");XT=class extends Ut{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var tg=T((WSe,YP)=>{"use strict";var{Readable:MZ}=require("stream"),UZ=1e4;YP.exports={streamAsJSON(e){return new eg({value:e})}};var eg=class extends MZ{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),$P)}catch(n){yield $P(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);VP(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>UZ?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 VP(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};function $P(e){return console.error(e),JSON.stringify(e.toString())}a($P,"handleError");function VP(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(VP,"when")});var Wf=T((jSe,KP)=>{"use strict";var vZ=as();KP.exports={writeTransaction:BZ};function BZ(e,t,r){return vZ.writeTransaction(e,t,r)}a(BZ,"writeTransaction")});var zP=T((XSe,jP)=>{"use strict";var HZ=_r(),qZ=cs(),WP=U(),GZ=dr(),JSe=Wf(),FZ=require("clone"),sg=require("alasql"),xZ=Jd(),QP=require("util"),kZ=QP.promisify(qZ.getTableSchema),$Z=QP.promisify(HZ.search),VZ=R(),rg=G();xZ(sg);jP.exports={update:KZ};var YZ="There was a problem performing this update. Please check the logs and try again.";async function KZ({statement:e,hdb_user:t}){let r=await kZ(e.table.databaseid,e.table.tableid),s=WZ(e.columns);rg.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=FZ(n),c=rg.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=sg.parse(u).statements[0],l=await $Z(_),d=QZ(s,l);return jZ(o,d,t)}a(KZ,"update");function WZ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=sg.compile(`SELECT ${r.expression.toString()} AS [${VZ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw WP.error(t),new Error(YZ)}}a(WZ,"createUpdateRecord");function QZ(e,t){return rg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(QZ,"buildUpdateRecords");async function jZ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await GZ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){WP.error(`Error delete new_attributes from update response: ${i}`)}return n}a(jZ,"updateRecords")});var XP=T((rTe,JP)=>{var zZ=require("alasql"),JZ=_r(),XZ=U(),ZZ=as(),ig=require("util"),ng=G(),e5=R(),t5=cs(),eTe=Wf(),tTe=dr(),r5="record",s5="successfully deleted",n5=ig.callbackify(c5),i5=ig.promisify(JZ.search),o5=ig.promisify(t5.getTableSchema);JP.exports={convertDelete:n5};function a5(e){return`${e.deleted_hashes.length} ${r5}${e.deleted_hashes.length===1?"":"s"} ${s5}`}a(a5,"generateReturnMessage");async function c5({statement:e,hdb_user:t}){let r=await o5(e.table.databaseid,e.table.tableid);ng.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=ng.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=zZ.parse(o).statements[0],u={operation:e5.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await i5(c);let _=await ZZ.deleteRecords(u);return ng.isEmptyOrZeroLength(_.message)&&(_.message=a5(_)),delete _.txn_time,_}catch(_){throw XZ.error(_),_.hdb_code?_.message:_}}a(c5,"convertDelete")});var sM=T((nTe,rM)=>{"use strict";var u5=Ui(),{hdb_errors:ZP}=Z(),{getDatabases:eM}=(Ee(),te(Le));rM.exports={checkSchemaExists:tM,checkSchemaTableExists:l5,schema_describe:u5};async function tM(e){if(!eM()[e])return ZP.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(tM,"checkSchemaExists");async function l5(e,t){let r=await tM(e);if(r)return r;if(!eM()[e][t])return ZP.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(l5,"checkSchemaTableExists")});var st=T((lTe,AM)=>{"use strict";var Ht=j();Ht.initSync();var _5=require("fs-extra"),d5=require("semver"),gl=require("path"),{monotonicFactory:f5}=require("ulidx"),iM=f5(),E5=require("util"),oM=require("child_process"),h5=E5.promisify(oM.exec),m5=oM.spawn,Oe=ke(),be=R(),ug=G(),_s=U(),Qf=Qn(),p5=Wf(),Sl=rt(),{onMessageByType:S5}=Qe(),{isMainThread:T5}=require("worker_threads"),{Encoder:g5,decode:lg}=require("msgpackr"),aM=new g5,{isEmpty:Yo}=ug,cM=Er(),R5=48*36e11,A5=5e9;T5&&S5(be.ITC_EVENT_TYPES.RESTART,()=>{Vs=void 0,ec=void 0});var{connect:O5,StorageType:uM,RetentionPolicy:lM,AckPolicy:jf,DeliverPolicy:zf,DiscardPolicy:N5,NatsConnection:oTe,JetStreamManager:aTe,JetStreamClient:cTe,StringCodec:uTe,JSONCodec:b5,createInbox:_g,headers:y5,ErrorCode:nM}=require("nats"),{PACKAGE_ROOT:I5}=R(),w5=To(),{recordAction:C5}=(zn(),te(il)),_M=b5(),L5="clustering",D5=w5.engines[Oe.NATS_SERVER_NAME],P5=gl.join(I5,"dependencies"),cg=gl.join(P5,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),og,ag,Tl,Xa,Za;AM.exports={runCommand:dM,checkNATSServerInstalled:M5,createConnection:dg,getConnection:Jf,getJetStreamManager:Rl,getJetStream:fM,getNATSReferences:mr,getServerList:v5,createLocalStream:fg,listStreams:EM,deleteLocalStream:B5,getServerConfig:Al,listRemoteStreams:H5,viewStream:q5,viewStreamIterator:G5,publishToStream:F5,createWorkQueueStream:x5,addSourceToWorkStream:mM,request:$5,removeSourceFromWorkStream:SM,reloadNATS:Eg,reloadNATSHub:V5,reloadNATSLeaf:Y5,extractServerName:pM,requestErrorHandler:K5,updateWorkStream:W5,createLocalTableStream:gM,createTableStreams:Q5,purgeTableStream:RM,purgeSchemaTableStreams:j5,getStreamInfo:z5,updateLocalStreams:X5,closeConnection:U5,getJsmServerName:Ol,addNatsMsgHeader:hM,updateIngestStreamConsumer:k5};async function dM(e,t=void 0){let{stdout:r,stderr:s}=await h5(e,{cwd:t});if(s)throw new Error(s.replace(`
7
+ `)},A3="certificate.pem",O3="privateKey.pem",N3="ca.pem";xD.exports={CERTIFICATE_VALUES:R3,CERTIFICATE_PEM_NAME:A3,PRIVATEKEY_PEM_NAME:O3,CA_PEM_NAME:N3}});var QT=T((JSe,VD)=>{"use strict";var $D=require("fs-extra"),le=require("joi"),b3=require("os"),{boolean:qe,string:Mn,number:$t,array:WT}=le.types(),{totalmem:GD}=require("os"),ta=require("path"),y3=B(),Wf=V(),zSe=KT(),FD=b(),I3=st(),kD="log",w3="components",C3="Invalid logging.rotation.maxSize unit. Available units are G, M or K",L3="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",D3="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",P3="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",M3="rootPath config parameter is undefined",U3="clustering.enabled config parameter is undefined",ra=$t.min(0).required(),Qf=WT.items({host:Mn.required(),port:ra}).empty(null),Ms;VD.exports={configValidator:v3,routesValidator:F3,route_constraints:Qf};function v3(e){if(Ms=e.rootPath,Wf.isEmpty(Ms))throw M3;let t=qe.required(),r=$t.min(0).max(1e3).empty(null).default(G3),n=Mn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Iu),s=Mn.optional().empty(null),i=Mn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=le.string().empty(null).default(Iu),c=le.custom(H3).empty(null).default(Iu),l=e.clustering?.enabled;if(Wf.isEmpty(l))throw U3;let _;return l===!0?_=le.object({enabled:t,hubServer:le.object({cluster:le.object({name:le.required().empty(null),network:le.object({port:ra,routes:Qf}).required()}).required(),leafNodes:le.object({network:le.object({port:ra}).required()}).required(),network:le.object({port:ra}).required()}).required(),leafServer:le.object({network:le.object({port:ra,routes:Qf}).required(),streams:le.object({maxAge:$t.min(120).allow(null).optional(),maxBytes:$t.min(1).allow(null).optional(),maxMsgs:$t.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:le.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:qe.optional(),databaseLevel:qe.optional(),tls:le.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:qe.required(),verify:qe.optional()}),user:Mn.optional().empty(null)}).required():_=le.object({enabled:t,tls:le.object({certificate:s,certificateAuthority:s,privateKey:s,insecure:qe.required()})}).required(),le.object({authentication:le.object({authorizeLocal:qe,cacheTTL:$t.required(),enableSessions:qe}),analytics:le.object({aggregatePeriod:$t}),componentsRoot:n.optional(),clustering:_,localStudio:le.object({enabled:t}).required(),logging:le.object({auditAuthEvents:le.object({logFailed:qe,logSuccessful:qe}),file:qe.required(),level:le.valid("notify","fatal","error","warn","info","debug","trace"),rotation:le.object({enabled:qe.optional(),compress:qe.optional(),interval:Mn.custom(x3).optional().empty(null),maxSize:Mn.custom(q3).optional().empty(null),path:Mn.optional().empty(null).default(Iu)}).required(),root:n,stdStreams:qe.required(),auditLog:qe.required()}).required(),operationsApi:le.object({network:le.object({cors:qe.optional(),corsAccessList:WT.optional(),headersTimeout:$t.min(1).optional(),keepAliveTimeout:$t.min(1).optional(),port:$t.optional().empty(null),domainSocket:le.optional().empty("hdb/operations-server").default(Iu),securePort:$t.optional().empty(null),timeout:$t.min(1).optional()}).optional(),tls:le.object({certificate:s,certificateAuthority:s,privateKey:s})}).required(),rootPath:Mn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:le.object({network:le.object({port:ra,securePort:ra,mtls:le.alternatives([qe.optional(),le.object({user:Mn.optional(),certificateAuthority:s})])}).required(),webSocket:qe.optional(),requireAuthentication:qe.optional()}),http:le.object({compressionThreshold:$t.optional(),cors:qe.optional(),corsAccessList:WT.optional(),headersTimeout:$t.min(1).optional(),port:$t.min(0).optional().empty(null),securePort:$t.min(0).optional().empty(null)}).required(),threads:r.optional(),maxHeapMemory:$t.min(0).optional(),storage:le.object({writeAsync:qe.required(),overlappingSync:qe.optional(),caching:qe.optional(),compression:qe.optional(),noReadAhead:qe.optional(),path:c,prefetchWrites:qe.optional()}).required(),ignoreScripts:qe.optional(),tls:le.object({certificate:s.optional(),certificateAuthority:s.optional(),privateKey:s.optional(),ciphers:Mn.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(v3,"configValidator");function B3(e){return $D.existsSync(e)?null:`Specified path ${e} does not exist.`}a(B3,"doesPathExist");function H3(e,t){le.assert(e,Mn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=B3(e);if(r)return t.message(r)}a(H3,"validatePath");function q3(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(C3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(D3):e}a(q3,"validateRotationMaxSize");function x3(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(L3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(P3):e}a(x3,"validateRotationInterval");function G3(e,t){let r=t.state.path.join("."),n=b3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||GD();return i=Math.round(Math.min(i,GD())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),y3.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(G3,"setDefaultThreads");function Iu(e,t){let r=t.state.path.join(".");if(!Wf.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Wf.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ta.join(Ms,w3);case"logging.root":return ta.join(Ms,kD);case"clustering.leafServer.streams.path":return ta.join(Ms,"clustering","leaf");case"storage.path":let n=ta.join(Ms,FD.LEGACY_DATABASES_DIR_NAME);return $D.existsSync(n)?n:ta.join(Ms,FD.DATABASES_DIR_NAME);case"logging.rotation.path":return ta.join(Ms,kD);case"operationsApi.network.domainSocket":return r==null?null:ta.join(Ms,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Iu,"setDefaultRoot");function F3(e){let t=le.object({routes:Qf});return I3.validateBySchema({routes:e},t)}a(F3,"routesValidator")});var mt=T((eTe,ZD)=>{"use strict";var nn=b(),Vt=V(),Ut=B(),{configValidator:k3,routesValidator:YD}=QT(),yr=require("fs-extra"),$3=require("yaml"),cs=require("path"),V3=require("is-number"),WD=require("properties-reader"),Y3=require("lodash"),{handleHDBError:K3}=ee(),{HTTP_STATUS_CODES:W3,HDB_ERROR_MSGS:jf}=zr(),ZSe=require("minimist"),{server:Q3}=(jr(),re(Ho)),{DATABASES_PARAM_CONFIG:wu,CONFIG_PARAMS:rn,CONFIG_PARAM_MAP:ls}=nn,j3="Unable to get config value because config is uninitialized",z3="Config successfully initialized",J3="Error backing up config file",X3="Empty parameter sent to getConfigValue",QD=cs.join(nn.PACKAGE_ROOT,"config","yaml",nn.HDB_DEFAULT_CONFIG_FILE),Z3="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",KD={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"},zf,vt,Jf;ZD.exports={createConfigFile:eX,getDefaultConfig:tX,getConfigValue:zD,initConfig:zT,flattenConfig:Sc,updateConfigValue:JD,updateConfigObject:nX,getConfiguration:oX,setConfiguration:aX,readConfigFile:XT,getClusteringRoutes:cX,initOldConfig:XD,getConfigFromFile:lX,getConfigFilePath:na,addConfig:uX,deleteConfigFromFile:_X,getConfigObj:dX};function eX(e){let t=eo(QD);zf=Sc(t.toJSON());let r;for(let o in e){let c=ls[o.toLowerCase()];if(c===rn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let l=c.split("_"),_=jT(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...l],_)}catch(u){Ut.error(u)}}}r&&jD(t,r),JT(t);let n=t.toJSON();vt=Sc(n);let s=t.getIn(["rootPath"]),i=cs.join(s,nn.HDB_CONFIG_FILE);yr.createFileSync(i),yr.writeFileSync(i,String(t)),Ut.trace(`Config file written to ${i}`)}a(eX,"createConfigFile");function jD(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Vt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(wu.TABLES))for(let i in n[s][wu.TABLES])for(let o in n[s][wu.TABLES][i]){let c=n[s][wu.TABLES][i][o],l=[rn.DATABASES,s,wu.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=[rn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){Ut.error("Error parsing schemas CLI/env config arguments",n)}}a(jD,"setSchemasConfig");function tX(e){if(zf===void 0){let r=eo(QD);zf=Sc(r.toJSON())}let t=ls[e.toLowerCase()];if(t!==void 0)return zf[t.toLowerCase()]}a(tX,"getDefaultConfig");function zD(e){if(e==null){Ut.error(X3);return}if(vt===void 0){Ut.trace(j3);return}let t=ls[e.toLowerCase()];if(t!==void 0)return vt[t.toLowerCase()]}a(zD,"getConfigValue");function na(e=Vt.getPropsFilePath()){let t=Vt.getEnvCliRootPath();return t?cs.join(t,nn.HDB_CONFIG_FILE):WD(e).get(nn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(na,"getConfigFilePath");function zT(e=!1){if(vt===void 0||e){let t;if(!Vt.noBootFile()){t=Vt.getPropsFilePath();try{yr.accessSync(t,yr.constants.F_OK|yr.constants.R_OK)}catch(i){throw Ut.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=na(t),n;if(r.includes("config/settings.js"))try{XD(r);return}catch(i){if(i.code!==nn.NODE_ERROR_CODES.ENOENT)throw i}try{n=eo(r)}catch(i){if(i.code===nn.NODE_ERROR_CODES.ENOENT){Ut.trace(`HarperDB config file not found at ${r}.
8
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw Ut.error(i),new Error(`Error reading HarperDB config file at ${r}`)}rX(n,r),JT(n);let s=n.toJSON();if(Q3.config=s,vt=Sc(s),vt.logging_rotation_rotate)for(let i in KD)vt[i]&&Ut.error(`Config ${KD[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Ut.trace(z3)}}a(zT,"initConfig");function rX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],cs.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],cs.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],cs.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),n&&(Ut.trace("Updating config file with missing config params"),yr.writeFileSync(t,String(e)))}a(rX,"checkForUpdatedConfig");function JT(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=k3(t);if(r.error)throw jf.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],r.value?.operationsApi?.network?.domainSocket)}a(JT,"validateConfig");function nX(e,t){vt===void 0&&(vt={});let r=ls[e.toLowerCase()];if(r===void 0){Ut.trace(`Unable to update config object because config param '${e}' does not exist`);return}vt[r.toLowerCase()]=t}a(nX,"updateConfigObject");function JD(e,t,r=void 0,n=!1,s=!1,i=!1){vt===void 0&&zT();let o=zD(ls.hdb_root),c=cs.join(o,nn.HDB_CONFIG_FILE),l=eo(c),_;if(r===void 0&&e.toLowerCase()===rn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ls[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=jT(f,t);l.setIn([...E],h)}else for(let f in r){let E=ls[f.toLowerCase()];if(E===rn.HTTP_SECUREPORT&&r[f]===vt[rn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),E===rn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===vt[rn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),E===rn.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=nn.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&l.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=jT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],S)}catch(A){Ut.error(A)}}}_&&jD(l,_),JT(l);let u=l.getIn(["rootPath"]),d=cs.join(u,nn.HDB_CONFIG_FILE);n===!0&&sX(c,u),yr.writeFileSync(d,String(l)),s&&(vt=Sc(l.toJSON())),Ut.trace(`Config parameter: ${e} updated with value: ${t}`)}a(JD,"updateConfigValue");function sX(e,t){try{let r=cs.join(t,"backup",`${nn.HDB_CONFIG_FILE}.bak`);yr.copySync(e,r),Ut.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Ut.error(J3),Ut.error(r)}}a(sX,"backupConfigFile");var iX=["databases"];function Sc(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)),Jf=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])&&!iX.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;!rn[l.toUpperCase()]&&ls[l]&&(s[ls[l].toLowerCase()]=o[c]),s[l]=o[c]}}else s[i.toLowerCase()]=n[i];return s}a(r,"squashObj")}a(Sc,"flattenConfig");function jT(e,t){if(e===rn.CLUSTERING_NODENAME||e===rn.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(V3(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Vt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Vt.autoCast(t)}a(jT,"castConfigValue");function oX(){let e=Vt.getPropsFilePath(),t=na(e);return eo(t).toJSON()}a(oX,"getConfiguration");async function aX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return JD(void 0,void 0,s,!0),Z3}catch(i){throw typeof i=="string"||i instanceof String?K3(i,i,W3.BAD_REQUEST,void 0,void 0,!0):i}}a(aX,"setConfiguration");function XT(){let e=Vt.getPropsFilePath();try{yr.accessSync(e,yr.constants.F_OK|yr.constants.R_OK)}catch(n){if(!Vt.noBootFile())throw Ut.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=na(e);return eo(t).toJSON()}a(XT,"readConfigFile");function eo(e){return $3.parseDocument(yr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(eo,"parseYamlDoc");function cX(){let e=XT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Vt.isEmptyOrZeroLength(t)?[]:t;let r=YD(t);if(r)throw jf.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Vt.isEmptyOrZeroLength(n)?[]:n;let s=YD(n);if(s)throw jf.CONFIG_VALIDATION(s.message);if(!Vt.isEmptyOrZeroLength(n)&&!Vt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Vt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw jf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(cX,"getClusteringRoutes");function XD(e){let t=WD(e);vt={};for(let r in ls){let n=t.get(r.toUpperCase());if(Vt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ls[r].toLowerCase();s===rn.LOGGING_ROOT?vt[s]=cs.dirname(n):vt[s]=n}return vt}a(XD,"initOldConfig");function lX(e){let t=XT();return Y3.get(t,e.replaceAll("_","."))}a(lX,"getConfigFromFile");async function uX(e,t){let r=eo(na());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await yr.writeFile(na(),String(r))}a(uX,"addConfig");function _X(e){let t=na(Vt.getPropsFilePath()),r=eo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=cs.join(n,nn.HDB_CONFIG_FILE);yr.writeFileSync(s,String(r))}a(_X,"deleteConfigFromFile");function dX(){return Jf||(zT(),Jf)}a(dX,"getConfigObj")});var tP=T((rTe,eP)=>{"use strict";var Xf=b(),Zf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Xf.RAM_ALLOCATION_ENUM.DEFAULT,n=Xf.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},ZT=class extends Zf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Xf.RAM_ALLOCATION_ENUM.DEFAULT,n=Xf.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};eP.exports={BaseLicense:Zf,ExtendedLicense:ZT}});var sa=T((sTe,aP)=>{"use strict";var gc=require("fs-extra"),nP=Kf(),sP=require("crypto"),fX=require("moment"),EX=require("uuid").v4,ar=B(),tg=require("path"),hX=V(),to=b(),{totalmem:rP}=require("os"),mX=tP().ExtendedLicense,Tc="invalid license key format",pX="061183",SX="mofi25",TX="aes-256-cbc",gX=16,RX=32,iP=z();iP.initSync();var eg;aP.exports={validateLicense:oP,generateFingerPrint:OX,licenseSearch:sg,getLicense:yX,checkMemoryLimit:IX};function rg(){return tg.join(iP.getHdbBasePath(),to.LICENSE_KEY_DIR_NAME,to.LICENSE_FILE_NAME)}a(rg,"getLicenseDirPath");function AX(){let e=rg();return tg.join(e,to.LICENSE_FILE_NAME)}a(AX,"getLicenseFilePath");function ng(){let e=rg();return tg.join(e,to.REG_KEY_FILE_NAME)}a(ng,"getFingerPrintFilePath");async function OX(){let e=ng();try{return await gc.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await NX();throw ar.error(`Error writing fingerprint file to ${e}`),ar.error(t),new Error("There was an error generating the fingerprint")}}a(OX,"generateFingerPrint");async function NX(){let e=EX(),t=nP.hash(e),r=ng();try{await gc.mkdirp(rg()),await gc.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw ar.error(`Error writing fingerprint file to ${r}`),ar.error(n),new Error("There was an error generating the fingerprint")}return t}a(NX,"writeFingerprint");function oP(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:to.RAM_ALLOCATION_ENUM.DEFAULT,version:to.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return ar.error("empty license key passed to validate."),r;let n=ng(),s=!1;try{s=gc.statSync(n)}catch(i){ar.error(i)}if(s){let i;try{i=gc.readFileSync(n,"utf8")}catch{ar.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(SX),c=o[1];c=Buffer.concat([Buffer.from(c)],gX);let l=Buffer.concat([Buffer.from(i)],RX),_=sP.createDecipheriv(TX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let u=null;try{u=_.update(o[0],"hex","utf8"),u.trim(),u+=_.final("utf8")}catch{let E=bX(o[0],i);if(E)u=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Tc),ar.error(Tc),new Error(Tc)}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(Tc),ar.error(Tc),new Error(Tc)}else r.exp_date=u;r.exp_date<fX().valueOf()&&(r.valid_date=!1),nP.validate(o[1],`${pX}${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||ar.error("Invalid licence"),r}a(oP,"validateLicense");function bX(e,t){try{let r=sP.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{ar.warn("Check old license failed")}}a(bX,"checkOldLicense");function sg(){let e=new mX,t=[];try{t=gc.readFileSync(AX(),"utf-8").split(to.NEW_LINE)}catch(r){r.code==="ENOENT"?ar.info("no license file found"):ar.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(hX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=oP(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){ar.error("There was an error parsing the license string."),ar.error(s),e.ram_allocation=to.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return eg=e,e}a(sg,"licenseSearch");async function yX(){return eg||await sg(),eg}a(yX,"getLicense");function IX(){let e=sg().ram_allocation,t=process.constrainedMemory?.()||rP();if(t=Math.round(Math.min(t,rP())/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(IX,"checkMemoryLimit")});var Ir=T((lTe,OP)=>{"use strict";var _P="username is required",dP="nothing to update, must supply active, role or password to update",fP="password cannot be an empty string",EP="If role is specified, it cannot be empty.",hP="active must be true or false";OP.exports={addUser:BX,alterUser:HX,dropUser:xX,getSuperUser:$X,userInfo:GX,listUsers:tE,listUsersExternal:FX,setUsersToGlobal:Ac,findAndValidateUser:RP,getClusterUser:VX,USERNAME_REQUIRED:_P,ALTERUSER_NOTHING_TO_UPDATE:dP,EMPTY_PASSWORD:fP,EMPTY_ROLE:EP,ACTIVE_BOOLEAN:hP};var mP=br(),wX=ea(),ag=Kf(),pP=BD(),SP=Nr(),cg=li(),sn=V(),TP=require("validate.js"),pe=B(),{promisify:CX}=require("util"),lg=fi(),cP=b(),lP=Ze(),LX=mt(),oTe=z(),aTe=sa(),DX=oi(),{table:cTe}=(me(),re(Ge)),{handleHDBError:Us,hdb_errors:PX}=ee(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:ig,HDB_ERROR_MSGS:Rc}=PX,{UserEventMsg:ug}=rs(),og=require("lodash"),{server:_g}=(jr(),re(Ho)),MX=B();_g.getUser=(e,t)=>RP(e,t,t!=null);var gP={username:!0,active:!0,role:!0,password:!0},uP=new Map,eE=SP.searchByValue,UX=SP.searchByHash,vX=CX(wX.delete);async function BX(e){let t=TP.cleanAttributes(e,gP),r=pP.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 eE(n),s=s&&Array.from(s)}catch(l){throw pe.error("There was an error searching for a role in add user"),pe.error(l),l}if(!s||s.length<1)throw Us(new Error,Rc.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Us(new Error,Rc.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=lg.encrypt(t.password)),t.password=ag.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await mP.insert(i)}catch(l){throw pe.error("There was an error searching for a user."),pe.error(l),l}pe.debug(o);try{await Ac()}catch(l){throw pe.error("Got an error setting users to global"),pe.error(l),l}if(o.skipped_hashes.length===1)throw Us(new Error,Rc.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],cg.signalUserChange(new ug(process.pid)),`${c.username} successfully added`}a(BX,"addUser");async function HX(e){let t=TP.cleanAttributes(e,gP);if(sn.isEmptyOrZeroLength(t.username))throw new Error(_P);if(sn.isEmptyOrZeroLength(t.password)&&sn.isEmptyOrZeroLength(t.role)&&sn.isEmptyOrZeroLength(t.active))throw new Error(dP);if(!sn.isEmpty(t.password)&&sn.isEmptyOrZeroLength(t.password.trim()))throw new Error(fP);if(!sn.isEmpty(t.active)&&!sn.isBoolean(t.active))throw new Error(hP);let r=qX(t.username);if(!sn.isEmpty(t.password)&&!sn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=lg.encrypt(t.password)),t.password=ag.hash(t.password)),t.role==="")throw new Error(EP);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 eE(i)||[])}catch(c){throw pe.error("Got an error searching for a role."),pe.error(c),c}if(!o||o.length===0){let c=Rc.ALTER_USER_ROLE_NOT_FOUND(t.role);throw pe.error(c),Us(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Rc.ALTER_USER_DUP_ROLES(t.role);throw pe.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 mP.update(n)}catch(i){throw pe.error("Error during update."),pe.error(i),i}try{await Ac()}catch(i){throw pe.error("Got an error setting users to global"),pe.error(i),i}return cg.signalUserChange(new ug(process.pid)),s}a(HX,"alterUser");function qX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(qX,"isClusterUser");async function xX(e){try{let t=pP.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(sn.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,Rc.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let n;try{n=await vX(r)}catch(s){throw pe.error("Got an error deleting a user."),pe.error(s),s}pe.debug(n);try{await Ac()}catch(s){throw pe.error("Got an error setting users to global."),pe.error(s),s}return cg.signalUserChange(new ug(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(xX,"dropUser");async function GX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=og.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await UX(r)}catch(s){throw pe.error("Got an error searching for a role."),pe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw pe.error(r),r}return t}a(GX,"userInfo");async function FX(){let e;try{e=await tE()}catch(t){throw pe.error("Got an error listing users."),pe.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(FX,"listUsersExternal");async function tE(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await eE(e)}catch(o){throw pe.error("Got an error searching for roles."),pe.error(o),o}let r={};for(let o of t)r[o.id]=og.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 eE(n)}catch(o){throw pe.error("Got an error searching for users."),pe.error(o),o}let i=new Map;for(let o of s)o=og.cloneDeep(o),o.role=r[o.role],kX(o.role),i.set(o.username,o);return i}catch(e){throw pe.error("got an error listing users"),pe.error(e),sn.errorizeMessage(e)}return null}a(tE,"listUsers");function kX(e){try{if(!e){pe.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(DX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){pe.error("Got an error trying to set system permissions."),pe.error(t)}}a(kX,"appendSystemTablesToRole");async function Ac(){try{let e=await tE();global.hdb_users=e}catch(e){throw pe.error(e),e}}a(Ac,"setUsersToGlobal");async function RP(e,t,r=!0){global.hdb_users||await Ac();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Us(new Error,ig.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Us(new Error,ig.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(uP.get(t)===n.password)return s;if(ag.validate(n.password,t))uP.set(t,n.password);else throw Us(new Error,ig.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return s}a(RP,"findAndValidateUser");async function $X(){global.hdb_users||await Ac();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a($X,"getSuperUser");async function VX(){let e=await tE(),t=LX.getConfigFromFile(cP.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!sn.isEmpty(r)&&r?.role?.role===cP.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=lg.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+lP.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lP.SERVER_SUFFIX.ADMIN,r}a(VX,"getClusterUser");var AP=[];_g.invalidateUser=function(e){for(let t of AP)try{t(e)}catch(r){MX.error("Error invalidating user",r)}};_g.onInvalidatedUser=function(e){AP.push(e)}});var Lu=T((fTe,IP)=>{"use strict";var ia=B(),on=b(),YX=MI(),_Te=Pn(),dTe=Ji(),KX=Ir(),{validateEvent:NP}=rs(),Cu=Dn(),WX=require("process"),{resetDatabases:QX}=(me(),re(Ge)),jX={[on.ITC_EVENT_TYPES.SCHEMA]:zX,[on.ITC_EVENT_TYPES.USER]:yP};async function zX(e){let t=NP(e);if(t){ia.error(t);return}ia.trace("ITC schemaHandler received schema event:",e),await YX(e.message),await JX(e.message)}a(zX,"schemaHandler");async function JX(e){try{Cu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Cu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Cu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=QX();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ia.error(t)}}a(JX,"syncSchemaMetadata");var bP=[];async function yP(e){try{try{Cu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Cu.resetReadTxn(on.SYSTEM_SCHEMA_NAME,on.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ia.warn(r)}let t=NP(e);if(t){ia.error(t);return}ia.trace(`ITC userHandler ${on.HDB_ITC_CLIENT_PREFIX}${WX.pid} received user event:`,e),await KX.setUsersToGlobal();for(let r of bP)r()}catch(t){ia.error(t)}}a(yP,"userHandler");yP.addListener=function(e){bP.push(e)};IP.exports=jX});var rs=T((TTe,CP)=>{"use strict";var hTe=B(),dg=V(),XX=b(),{ITC_ERRORS:Du}=zr(),{parentPort:mTe,threadId:ZX,isMainThread:eZ,workerData:pTe}=require("worker_threads"),{onMessageFromWorkers:tZ,broadcast:STe,broadcastWithAcknowledgement:rZ}=nt();CP.exports={sendItcEvent:nZ,validateEvent:wP,SchemaEventMsg:sZ,UserEventMsg:iZ};var rE;tZ(async(e,t)=>{rE=rE||Lu(),wP(e),rE[e.type]&&await rE[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function nZ(e){return!eZ&&e.message&&(e.message.originator=ZX),rZ(e)}a(nZ,"sendItcEvent");function wP(e){if(typeof e!="object")return Du.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||dg.isEmpty(e.type))return Du.MISSING_TYPE;if(!e.hasOwnProperty("message")||dg.isEmpty(e.message))return Du.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||dg.isEmpty(e.message.originator))return Du.MISSING_ORIGIN;if(XX.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Du.INVALID_EVENT(e.type)}a(wP,"validateEvent");function sZ(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(sZ,"SchemaEventMsg");function iZ(e){this.originator=e}a(iZ,"UserEventMsg")});var li=T((ATe,MP)=>{"use strict";var LP=b(),RTe=V(),nE=B(),DP=hI(),Oc,{sendItcEvent:PP}=rs();function oZ(e){try{nE.trace("signalSchemaChange called with message:",e),Oc=Oc||Lu();let t=new DP(LP.ITC_EVENT_TYPES.SCHEMA,e);return Oc.schema(t),PP(t)}catch(t){nE.error(t)}}a(oZ,"signalSchemaChange");function aZ(e){try{nE.trace("signalUserChange called with message:",e),Oc=Oc||Lu();let t=new DP(LP.ITC_EVENT_TYPES.USER,e);return Oc.user(t),PP(t)}catch(t){nE.error(t)}}a(aZ,"signalUserChange");MP.exports={signalSchemaChange:oZ,signalUserChange:aZ}});var vu={};je(vu,{addAnalyticsListener:()=>Uu,recordAction:()=>an,recordActionBinary:()=>Un,setAnalyticsEnabled:()=>cZ});function cZ(e){$P=e}function an(e,t,r,n,s){if(!$P)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=oE.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},oE.set(i,o)}sE||lZ()}function Un(e,t,r,n,s){an(!!e,t,r,n,s)}function Uu(e){KP.push(e)}function lZ(){sE=performance.now(),setTimeout(async()=>{let e=performance.now()-sE;sE=0;let t=[],r={time:Date.now(),period:e,threadId:oa.threadId,metrics:t};for(let[s,i]of oE){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 WP){let f=Math.floor(c*d),E=o[f-1];if(f>l){let h=f-l;if(E===u){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),u=E;l=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await QP()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oa.threadId,byThread:!0,...n});for(let s of KP)s(t);oE=new Map,oa.parentPort?oa.parentPort.postMessage({type:YP,report:r}):JP({report:r})},VP).unref()}async function uZ(e,t=6e4){let r=hg(),n=jP(),s;for(let h of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){s=h.value.time;break}if(Date.now()-t<s)return;let i,o=new Map,c=new Map,l=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let g of S||[]){let{path:N,method:M,type:G,metric:x,count:D,total:K,distribution:$,threads:Q,...se}=g;D||(D=1);let ye=x+(N?"-"+N:"");M!==void 0&&(ye+="-"+M),G!==void 0&&(ye+="-"+G);let oe=o.get(ye);if(oe){if(oe.threads){let Re=oe.threads[A];if(Re)oe=Re;else{oe.threads[A]=Object.assign({},se);continue}}oe.count||(oe.count=1);let dt=oe.count;for(let Re in se){let Wt=se[Re];typeof Wt=="number"&&(oe[Re]=(oe[Re]*dt+Wt*D)/(dt+D))}oe.count+=D,K>=0&&(oe.total+=K,oe.ratio=oe.total/oe.count)}else oe=Object.assign({period:t},g),delete oe.distribution,o.set(ye,oe),oe.byThread&&(oe.threads=[],oe.threads[A]=Object.assign({},se),l.push(oe));if($){$=$.map(Re=>typeof Re=="number"?{value:Re,count:1}:Re);let dt=c.get(ye);dt?dt.push(...$):c.set(ye,$)}}await QP()}for(let h of l){let{path:p,method:S,type:A,metric:g,count:N,total:M,distribution:G,threads:x,...D}=h;x=x.filter(K=>K);for(let K in D){if(typeof h[K]!="number")continue;let $=0;for(let Q of x){let se=Q[K];typeof se=="number"&&($+=se)}h[K]=$}h.count=x.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Re,Wt)=>Re.value>Wt.value?1:-1);let A=S.count-1,g=[],N=0,M=0,G;for(let Re of WP){let Wt=A*Re;for(;N<Wt;)G=p[M++],N+=G.count,M===1&&N--;let zn=p[M>1?M-2:0];G||(G=p[0]),g.push(G.value-(G.value-zn.value)*(N-Wt)/G.count)}let[x,D,K,$,Q,se,ye,oe,dt]=g;Object.assign(S,{p1:x,p10:D,p25:K,median:$,p75:Q,p90:se,p95:ye,p99:oe,p999:dt})}let u;for(let[h,p]of o)p.id=(0,iE.getNextMonotonicTime)(),p.time=_,n.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||n.primaryStore.put(p.id,p)}),u=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(u||E*10>f){let h=(0,iE.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-UP,active:E-vP,time:d,...process.memoryUsage()};n.primaryStore.put(h,p,{append:!0}).then(S=>{S||n.primaryStore.put(h,p)})}UP=f,vP=E}async function BP(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function hg(){return HP||(HP=ht({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function jP(){return qP||(qP=ht({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function fZ(){zP=!0;let e=(0,Mu.get)(Eg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await uZ(VP,e),await BP(hg(),_Z),await BP(jP(),dZ)},Math.min(e/2,2147483647)).unref()}function JP(e,t){let r=e.report;r.threadId=t?.threadId||oa.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xP+=n.mean*n.count);r.totalBytesProcessed=xP,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(GP.get(t))}),GP.set(t,t.performance.eventLoopUtilization())),r.id=(0,iE.getNextMonotonicTime)(),hg().primaryStore.put(r.id,r),zP||fZ(),EZ&&(XP=mZ(r))}async function mZ(e){if(await XP,!ro){let r=(0,Pu.dirname)((0,kP.getLogFilePath)());try{ro=await(0,fg.open)((0,Pu.join)(r,"analytics.log"),"r+")}catch{ro=await(0,fg.open)((0,Pu.join)(r,"analytics.log"),"w+")}}let t=(await ro.stat()).size;if(t>hZ){let r=Buffer.alloc(t);await ro.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await ro.write(r,{position:0}),await ro.truncate(r.length),t=r.length}await ro.write(JSON.stringify(e)+`
9
+ `,t)}var oa,FP,kP,Pu,fg,iE,Mu,Eg,oE,$P,sE,VP,YP,KP,WP,UP,vP,QP,_Z,dZ,HP,qP,zP,xP,GP,EZ,XP,ro,hZ,Ei=Ae(()=>{oa=require("worker_threads"),FP=U(nt());me();kP=U(B()),Pu=require("path"),fg=require("fs/promises"),iE=U(Sr()),Mu=U(z()),Eg=U(b());jr();(0,Mu.initSync)();oE=new Map,$P=(0,Mu.get)(Eg.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(cZ,"setAnalyticsEnabled");a(an,"recordAction");Mt.recordAnalytics=an;a(Un,"recordActionBinary");sE=0,VP=1e3,YP="analytics-report",KP=[];a(Uu,"addAnalyticsListener");WP=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(lZ,"sendAnalytics");a(uZ,"aggregation");UP=0,vP=0,QP=a(()=>new Promise(setImmediate),"rest");a(BP,"cleanup");_Z=36e5,dZ=31536e6;a(hg,"getRawAnalyticsTable");a(jP,"getAnalyticsTable");(0,FP.setChildListenerByType)(YP,JP);a(fZ,"startScheduledTasks");xP=0,GP=new Map,EZ=!1;a(JP,"recordAnalytics");hZ=1e6;a(mZ,"logAnalytics")});var gg={};je(gg,{coerceType:()=>lE,makeTable:()=>_E,setServerUtilities:()=>OZ,updateResource:()=>Gu});function _E(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:_,dbisDB:u}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),dI(i,l);let S=zp(i,n,l),A=0,g,N,M,G={},x=Promise.resolve(),D,K,$;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(D=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&($=W),W.isPrimaryKey&&(G=W);let Q,se=[],ye=[],oe=1,dt=2,Re={},Wt={},zn=864e5,fb,Id,Gi,Eb=!1,fp,I$=10,w$=6;E&&mb();class et extends jt{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=D;static updatedTimeProperty=K;static propertyResolvers;static sources=[];static get expirationMS(){return d}static dbisDB=u;static schemaDefined=_;static sourcedFrom(m,R){R&&(this.sourceOptions=R,(R.expiration||R.eviction||R.scanInterval)&&this.setTTLExpiration(R)),R?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let L=a(y=>{let w=this.sources.slice(0,-1);if(w=w.filter(P=>P[y]&&(!P[y].reliesOnPrototype||P.prototype[y])),w.length>0)if(w.length===1){let P=w[0];return(H,q,j)=>{if(H?.source!==P)return P[y](q,j,H)}}else return(P,H,q)=>{let j=[];for(let X of w){if(P?.source===X)break;j.push(X[y](H,q,P))}return Promise.all(j)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],C=a(y=>{if(O[y]&&(!O[y].reliesOnPrototype||O.prototype[y]))return(w,P,H)=>{if(!w?.source)return O[y](P,H,w)}},"getApplyToCanonicalSource");return Re={put:C("put"),delete:C("delete"),publish:C("publish")},Wt={put:L("put"),delete:L("delete"),publish:L("publish"),invalidate:L("invalidate")},(async()=>{let y=!1,w=a(async(P,H)=>{let q=P.value,j=P.table?at[c][P.table]:et;if(c===us.SYSTEM_SCHEMA_NAME&&(P.table===us.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||P.table===us.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),P.id===void 0&&(P.id=q[j.primaryKey],P.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(P));P.source=m;let X=await j.getResource(P.id,H,Bu);switch(P.type){case"put":return X._writeUpdate(q,Bu);case"delete":return X._writeDelete(Bu);case"publish":return X._writePublish(q,Bu);case"invalidate":return X.invalidate(Bu);default:ot.error("Unknown operation",P.type,P.id)}},"writeUpdate");try{let P=m.subscribe;P&&h==null&&(h=!0);let H=m.subscribeOnThisThread?m.subscribeOnThisThread((0,aa.getWorkerIndex)()):(0,aa.getWorkerIndex)()===0,q=P&&H&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(q){let j;for await(let X of q)try{if(!(X.type==="transaction"?X.writes[0]:X)){ot.error("Bad subscription event",X);continue}if(X.source=m,j)if(X.beginTxn)j.resolve();else{w(X,j);continue}if(X.type==="end_txn")continue;let Ue=Xe(X,()=>{if(X.type==="transaction"){let ie=[];for(let Se of X.writes)try{ie.push(w(Se,X))}catch(Ft){throw Ft.message+=" writing "+JSON.stringify(Se)+" of event "+JSON.stringify(X),Ft}return Promise.all(ie)}else if(X.type==="define_schema"){let ie=this.attributes.slice(0),Se;for(let Ft of X.attributes)ie.find(Fe=>Fe.name===Ft.name)||(ie.push(Ft),Se=!0);Se&&(ht({table:s,database:c,attributes:ie,origin:"cluster"}),ku.signalSchemaChange(new $u.SchemaEventMsg(process.pid,us.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return X.beginTxn?(j=X,w(X,X),new Promise(ie=>{j.resolve=ie})):w(X,X)});y&&(await Ue,ku.signalUserChange(new $u.UserEventMsg(process.pid))),X.onCommit&&(Ue?.then?Ue.then(X.onCommit):X.onCommit())}catch(tt){ot.error("error in subscription handler",tt)}}}catch(P){ot.error(P)}})(),this}static getResource(m,R,L){let O=super.getResource(m,R,L);if(m!=null){Rl(m);try{if(O.hasOwnProperty(we))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let C=!L?.async||i.cache?.get(m),y=Rn(R),w=y.getReadTxn();if(w?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Ep(m,R,{transaction:w},C,P=>{if(P?Gu(O,P):O[we]=null,R.onlyIfCached&&R.noCacheStore){if(!O.doesExist())throw new vn.ServerError("Entry is not cached",504)}else if(L?.ensureLoaded){let H=hp(m,P,R,O);if(H)return y?.disregardReadTxn(),O[pg]=!0,Tg(H,q=>(Gu(O,q),O))}return O})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(m)),C}}return O}ensureLoaded(){let m=hp(this[Pe],this[Bs],this[Te]);if(m)return this[pg]=!0,Tg(m,R=>{this[Bs]=R,this[we]=R.value,this[cE]=R.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,zn=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");zn=zn||(d+f)/4,pp()}static enableAuditing(m=!0){E=m,m&&mb(),et.audit=m}static coerceId(m){return m===""?null:lE(m,G)}static async dropTable(){if(delete at[c][s],c===o){for(let m of p)u.remove(et.tableName+"/"+m.name),r[m.name]?.drop();u.remove(et.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));ku.signalSchemaChange(new $u.SchemaEventMsg(process.pid,us.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[wn])return this.search(m);if(this[Pe]===null){if(m?.conditions)return this.search(m);let R=et.getRecordCount();return{recordCount:R.recordCount,estimatedRecordRange:R.estimatedRange,records:"./",name:s,database:c,attributes:p}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[Te]?.returnNonexistent)return this}allowRead(m,R){let L=Cd(m);if(L?.read){if(L.isSuperUser)return!0;let O=L.attribute_permissions,C=R?.select;if(O?.length>0||Eb&&C){if(R||(R={}),C){let y=O?.length>0&&Sg(O,"read");R.select=C.map(w=>{let P=w.name||w;if(!y||y[P]){let H=Gi[P]?.definition?.tableClass;if(H){if(w.name||(w={name:w}),!H.prototype.allowRead.call(null,m,w))return!1;if(!w.select)return w.name}return w}}).filter(Boolean)}else R.select=O.filter(y=>y.read&&!Gi[y.attribute_name]).map(y=>y.attribute_name);return R}else return!0}}allowUpdate(m,R){let L=Cd(m);if(L?.update){let O=L.attribute_permissions;if(O?.length>0){let C=Sg(O,"update");for(let y in R)if(!C[y])return!1;for(let y of O){let w=y.attribute_name;!y.update&&!(w in R)&&(R[w]=this.getProperty(w))}}return!0}}allowCreate(m,R){if(this[wn]){let L=Cd(m);if(L?.insert){let O=L.attribute_permissions;if(O?.length>0){let C=Sg(O,"insert");for(let y in R)if(!C[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Cd(m)?.delete}update(m,R){if(!Rn(this[Te]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;if(typeof m=="object"&&m)if(R){Object.isFrozen(m)&&(m=Object.assign({},m));for(let C in this[we])m[C]===void 0&&(m[C]=void 0);this[sr]=m}else O=this[sr],O&&(m=Object.assign(O,m)),this[sr]=O=m;return this._writeUpdate(this),this}invalidate(m){let R=this[Te],L=this[Pe];Rl(L),Rn(this[Te]).addWrite({key:L,store:i,invalidated:!0,entry:this[Bs],nodeName:this[Te]?.nodeName,before:Re.invalidate?.bind(this,R,L),beforeIntermediate:Wt.invalidate?.bind(this,R,L),commit:(C,y)=>{if(y?.version>C)return;let w=null;for(let P in r)w||(w={}),w[P]=this.getProperty(P);S(L,w,this[Bs],C,Hu,E,this[Te],0,"invalidate")}})}static evict(m,R,L){let O=this.Source,C;if(!((N||E)&&(!R||(C=i.getEntry(m),!C||!R)||C.version!==L))){if(N){if(i.hasLock(m,C.version))return;let y;for(let w in r)y||(y={}),y[w]=R[w];if(y)return S(m,y,C,L,qu,null,null,0,null,!0)}return i.ifVersion(L,()=>{wd(m,R,null)}),E?S(m,null,C,L,qu,null,null,0,null,!0):i.remove(m,L)}}lock(){throw new Error("Not yet implemented")}static operation(m,R){return m.table||=s,m.schema||=c,oM.operation(m,R)}put(m){this.update(m,!0)}_writeUpdate(m,R){let L=this[Te],O=Rn(L),C=this[Pe];Rl(C);let y=this[Bs];this[mg]=!0;let w={key:C,store:i,entry:y,nodeName:L?.nodeName,validate:P=>{if(!m[eM]||Vd(m)){if(this.validate(m),L?.source?m=xl(m):(t&&m[t]!==C&&(m[t]=C),K&&(m[K.name]=K.type==="Date"?new Date(P):K.type==="String"?new Date(P).toISOString():P),D&&(y?.value?m[D.name]=y?.value[D.name]:m[D.name]=D.type==="Date"?new Date(P):D.type==="String"?new Date(P).toISOString():P),m=xl(m)),m[we])throw new Error("Can not assign a record with a record property");this[we]=m}else O.removeWrite(w)},before:Re.put&&(()=>Re.put(L,C,m)),beforeIntermediate:Wt.put&&(()=>Wt.put(L,C,m)),commit:(P,H,q)=>{q&&(L&&H?.version>(L.lastModified||0)&&(L.lastModified=H.version),Gu(this,H));let j=H?.value;this[mg]=!1,!(H?.version>P)&&(wd(C,j,m),S(C,m,H,P,0,E,L,L.expiresAt||(d?d+Date.now():0)))}};O.addWrite(w)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[wn]){for await(let R of this.search(m))(await et.getResource(R[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[we]?this._writeDelete(m):!1}_writeDelete(m){let R=Rn(this[Te]),L=this[Pe];Rl(L);let O=this[Te];return R.addWrite({key:L,store:i,resource:this,nodeName:O?.nodeName,before:Re.delete?.bind(this,O,L),beforeIntermediate:Wt.delete?.bind(this,O,L),commit:(C,y,w)=>{let P=y?.value;w&&(O&&y?.version>(O.lastModified||0)&&(O.lastModified=y.version),Gu(this,y)),!(y?.version>C)&&(wd(this[Pe],P),ot.trace("Write delete entry",L,C),E||h?(S(L,null,this[Bs],C,0,E,this[Te],0,"delete"),E||pp()):i.remove(this[Pe]))}}),!0}search(m){let R=this[Te],L=Rn(R);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Pe]&&(O=[{attribute:null,comparator:"prefix",value:this[Pe]}].concat(O));let C,y={};function w(ne,ke){let xe;switch(ke){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');xe=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ke)}let At=xe&&{},Er;for(let Ie of ne){if(Ie.conditions){Ie.conditions=w(Ie.conditions,Ie.operator);continue}let Le=Ie[0]??Ie.attribute,kt=Le==null?G:ii(p,Le);if(kt){if(xe){let Wr=Yi(Le),Qt=At[Wr];Qt?(Qt.push(Ie),Er=!0):At[Wr]=[Ie]}kt.type&&(Ie[1]===void 0?Ie.value=H(Ie.value,kt):Ie[1]=H(Ie[1],kt))}else if(Le!=null)throw(0,vn.handleHDBError)(new Error,`${Le} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return ne;if(Er)for(let Ie in At){let Le=At[Ie],kt=Le.length;if(kt>1)for(let Wr=0;Wr<kt;Wr++){let Qt=Le[Wr];if(Qt.comparator==="ge"||Qt.comparator==="greater_than_equal")for(let Be=0;Be<kt;Be++){let On=Le[Be];(On.comparator==="le"||On.comparator==="less_than_equal")&&(Qt.comparator="between",Qt.value=[Qt.value,On.value],ne.splice(ne.indexOf(On),1))}if(Qt.comparator==="equals"||!Qt.comparator){for(let Be=0;Be<kt;Be++)if(Be!==Wr){let On=Le[Be];ne.splice(ne.indexOf(On),1)}break}}}return ne}a(w,"prepareConditions");function P(ne,ke){if(m.enforceExecutionOrder)return ne;for(let xe of ne)xe.conditions&&(xe.conditions=P(xe.conditions,xe.operator));return ne.length>1&&ke!=="or"?(0,iM.sortBy)(ne,xp(et)):ne}a(P,"orderConditions");function H(ne,ke){return Array.isArray(ne)?ne.map(xe=>lE(xe,ke)):lE(ne,ke)}a(H,"coerceTypedValues");let q=m.operator;(O.length>0||q)&&(O=w(O,q));let j=typeof m.sort=="object"&&m.sort,X;if(j&&q!=="or"){let ne=j.attribute;if(C=O.find(ke=>Yi(ke.attribute)===Yi(ne)),!C){if(!ii(p,ne))throw(0,vn.handleHDBError)(new Error,`${ne} is not a defined attribute`,404);C={attribute:ne},O.push(C)}C.descending=!!j.descending}O=P(O,q),j&&(O[0]===C?j.next&&(X={dbOrderedAttribute:j.attribute,attribute:j.next.attribute,descending:j.next.descending,next:j.next.next}):(C&&O.splice(O.indexOf(C),1),X=j));function tt(ne,ke){let xe=ne[0];if(ke==="or"){let At=ie(xe);for(let Ie=1;Ie<ne.length;Ie++){let Le=ne[Ie],kt=ie(Le);At=At.concat(kt)}let Er=new Set;return At.filter(Ie=>{let Le=Ie.key??Ie;return Er.has(Le)?!1:(Er.add(Le),!0)})}else{let At=ie(xe),Er=ne.slice(1).map(Ie=>kl(Ie,et,R,y)).filter(Boolean);return Er.length>0?An(At,Er):At}}a(tt,"executeConditions");let Ue=m.reverse===!0;function ie(ne){return ne.conditions?tt(ne.conditions,ne.operator):Fl(ne,L,ne.descending||Ue,et,m.allowFullScan,y)}a(ie,"executeCondition");let Se=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:q,postOrdering:X,selectApplied:!!Se};let Ft=L.useReadTxn(),Fe=tt(O,q);(m.offset||m.limit!==void 0)&&(Fe=Fe.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0));let ve=m.ensureLoaded!==!1;function An(ne,ke){let xe=ke?.length,At={transaction:Ft,lazy:xe>0||typeof Se=="string"||Se?.length<4,alwaysPrefetch:!0};function Er(Le,kt){let Wr=Le?.value;if(!Wr)return aE.SKIP;for(let Qt=0;Qt<xe;Qt++)if(!ke[Qt](Wr,Le))return aE.SKIP;return kt!==void 0&&(Le.key=kt),Le}a(Er,"processEntry");let Ie=xe>0||!ne.hasEntries?ne.map(Le=>typeof Le=="object"&&Le.key!==void 0?xe>0?Er(Le):Le:Ep(Le,R,At,!1,Er)):ne;return Ie.hasEntries=!0,Ie}a(An,"transformToEntries");let ue,Al=et.transformEntryForSelect(Se,R,y,ve,!0);if(X){Fe=An(Fe,null);let ne;ue=new Fe.constructor({[Symbol.iterator](){let ke,xe=Fe[Symbol.asyncIterator](),At,Er=X.dbOrderedAttribute,Ie,Le,kt=!0;function Wr(Be){let On=Be.next&&Wr(Be.next),Ol=Be.descending;return(pb,Sb)=>{let Tb=mp(pb,Be.attribute,R),gb=mp(Sb,Be.attribute,R),Rb=Ol?(0,ca.compareKeys)(gb,Tb):(0,ca.compareKeys)(Tb,gb);return Rb===0?On?.(pb,Sb)||0:Rb}}a(Wr,"createComparator");let Qt=Wr(X);return{async next(){let Be;if(ke)if(Be=ke.next(),Be.done){if(At)return ue.onDone&&ue.onDone(),Be}else return{value:Al(Be.value)};ne=[],Ie&&ne.push(Ie);do if(Be=await xe.next(),Be.done){if(At=!0,ne.length)break;return ue.onDone&&ue.onDone(),Be}else{let On=Be.value;if(Er){let Ol=mp(On,Er,R);if(kt)kt=!1,Le=Ol;else if(Ol!==Le){Le=Ol,Ie=On;break}}ne.push(On)}while(!0);return X.isGrouped,ne.sort(Qt),ke=ne[Symbol.iterator](),Be=ke.next(),Be.done?(ue.onDone&&ue.onDone(),Be):{value:await Al(Be.value)}},return(){ue.onDone&&ue.onDone(),xe.return()},throw(){ue.onDone&&ue.onDone(),xe.throw()}}}})}else ue=Fe.map(Al);return ue.onDone=()=>{ue.results=null,L.doneReadTxn()},ue.selectApplied=!0,ue}static transformEntryForSelect(m,R,L,O,C){if(m===t||m?.length===1&&m[0]===t){let H=a(q=>q?.key??q,"transform");return m===t?H:m.asArray?q=>[H(q)]:q=>({[t]:H(q)})}let y;O&&N&&!m?.every(H=>{let q;return typeof H=="object"?q=H.name:q=H,r[q]||q===t})&&(y=!0);let w,P=a(H=>{let q;if(H){if(fp=H,q=H.value||H.deref?.(),!q&&(H.key===void 0||H.deref)){if(H=Ep(H.key??H,R,{transaction:Rn(R).getReadTxn(),lazy:m?.length<4},!1,j=>j),H?.then)return H.then(P);q=H?.value}if(y&&(H.metadataFlags&(Hu|qu)||H.expiresAt&&H.expiresAt<Date.now())){let j=hp(H.key??H,H,R);if(j?.then)return j.then(P)}}if(q==null)return C?aE.SKIP:q;if(m&&!(m[0]==="*"&&m.length===1)){let j,X=a((Ue,ie)=>{let Se;typeof Ue=="object"?Se=Ue.name:Se=Ue;let Ft=Gi?.[Se],Fe;if(Ft){let ve=L?.[Se];if(ve)if(ve.fromRecord)Fe=ve.fromRecord(q);else{let ue=Yi(H.key);Fe=ve.get(ue),Fe||(Fe=[])}else Fe=Ft(q,R,H);let An=a(ue=>{if(ue&&typeof ue=="object"){let Al=Ft.definition?.tableClass;w||(w={});let ne=w[Se]||(w[Se]=(Al||et).transformEntryForSelect(Se===Ue?null:Ue.select||Ue,R,ve,O));if(Array.isArray(ue)){let ke;if(ue=ue.map(xe=>{let At=ne(xe);return At?.then&&(ke=!0),At}),ke){j||(j=[]),j.push(Promise.all(ue).then(xe=>ie(xe,Se)));return}}else if(ue=ne(ue),ue?.then){j||(j=[]),j.push(ue.then(ke=>ie(ke,Se)));return}}ie(ue,Se)},"handleResolvedValue");Fe?.then?(j||(j=[]),j.push(Fe.then(An))):An(Fe);return}else Fe=q[Se],Fe&&typeof Fe=="object"&&Se!==Ue&&(Fe=this.transformEntryForSelect(Ue.select||Ue,R,null)({value:Fe}));ie(Fe,Se)},"selectAttribute"),tt;if(typeof m=="string")X(m,Ue=>{tt=Ue});else if(Array.isArray(m))if(m.asArray)tt=[],m.forEach((Ue,ie)=>{Ue==="*"?m[ie]=q:X(Ue,Se=>tt[ie]=Se)});else{tt={};for(let Ue of m)if(Ue==="*")for(let ie in q)tt[ie]=q[ie];else X(Ue,(ie,Se)=>tt[Se]=ie)}else throw new vn.ClientError("Invalid select"+m);return j?Promise.all(j).then(()=>tt):tt}return q},"transform");return P}async subscribe(m){if(!l)throw new Error("Can not subscribe to a table without an audit log");E||ht({table:s,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let R=uI(et,this[Pe]??null,function(y,w,P,H){try{let q=w.getValue?.(i);this.send({id:y,timestamp:P,value:q,version:w.version,type:w.type,beginTxn:H})}catch(q){ot.error(q)}},m.startTime,this[wn]);this[wn]&&(R.includeDescendants=!0,m.onlyChildren&&(R.onlyChildren=!0)),m.crossThreads===!1&&(R.crossThreads=!1),m.supportsTransactions&&(R.supportsTransactions=!0);let L=this[Pe],O=m.previousCount;O>1e3&&(O=1e3);let C=m.startTime;if(this[wn]){if(C){if(O)throw new vn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:w}of l.getRange({start:C,exclusiveStart:!0})){let P=Xr(w,i);if(P.tableId!==n)continue;let H=P.recordId;(L==null||nM(L,H))&&R.send({id:H,timestamp:y,...P}),R.startTime=y}}else if(O){let y=[];for(let{key:w,value:P}of l.getRange({start:"z",end:!1,reverse:!0}))try{let H=Xr(P);if(H.tableId!==n)continue;let q=H.recordId;if(L==null||nM(L,q)){let j=H.getValue(i);if(y.push({id:q,timestamp:w,value:j,version:H.version,type:H.type}),--O<=0)break}}catch(H){ot.error("Error getting history entry",w,H)}for(let w=y.length;w>0;)R.send(y[--w]);y[0]&&(R.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:w,version:P,localTime:H}of i.getRange({start:L??!1,end:L==null?void 0:[L,ca.MAXIMUM_KEY],versions:!0}))w&&R.send({id:y,version:P,timestamp:H,value:w})}else{O&&!C&&(C=0);let y=this[Bs]?.localTime;if(ot.trace("Subscription from",C,"from",L),C<y){let w=[],P=y;do{let H=l.get(P);if(H){m.omitCurrent=!0;let q=Xr(H),j=q.getValue(i);w.push({id:L,value:j,timestamp:P,...q}),P=q.previousLocalTime}else break;O&&O--}while(P>C&&O!==0);for(let H=w.length;H>0;)R.send(w[--H]);R.startTime=y}!m.omitCurrent&&this.doesExist()&&R.send({id:L,version:this[cE],timestamp:this[Bs]?.localTime,value:this})}return m.listener&&R.on("data",m.listener),R}doesExist(){return!!(this[we]||this[mg])}publish(m,R){this._writePublish(m,R)}_writePublish(m,R){let L=Rn(this[Te]),O=this[Pe]||null;Rl(O);let C=this[Te];L.addWrite({key:O,store:i,entry:this[Bs],nodeName:C?.nodeName,validate:()=>{this.validate(m)},before:Re.publish?.bind(this,C,O,m),beforeIntermediate:Wt.publish?.bind(this,C,O,m),commit:(y,w,P)=>{w===void 0&&h&&!E&&pp(),S(O,w?.value??null,w,w?.version||y,0,!0,C,w?.expiresAt,"message",!1,m)}})}validate(m){let R,L=a((O,C,y)=>{if(C.type&&O!=null)if(C.properties){typeof O!="object"&&(R||(R=[])).push(`Property ${y} must be an object${C.type?" ("+C.type+")":""}`);let w=C.properties;for(let P=0,H=w.length;P<H;P++){let q=w[P],j=L(O[q.name],q,y+"."+q.name);j&&(O[q.name]=j)}}else switch(C.type){case"Int":(typeof O!="number"||O>>0!==O)&&(R||(R=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(R||(R=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(R||(R=[])).push(`Property ${y} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(w=>typeof w=="string")||(R||(R=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(R||(R=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof O!="boolean"&&(R||(R=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(R||(R=[])).push(`Property ${y} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(R||(R=[])).push(`Property ${y} must be a bigint`)}break;case"Bytes":O instanceof Uint8Array||(R||(R=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(C.elements)for(let w=0,P=O.length;w<P;w++){let H=O[w],q=L(H,C.elements,y+"[*]");q&&(O[w]=q)}}else(R||(R=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}C.nullable===!1&&O==null&&(R||(R=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let O=0,C=p.length;O<C;O++){let y=p[O];if(y.relationship)continue;let w=L(m[y.name],y,y.name);w&&(m[y.name]=w)}if(R)throw new vn.ClientError(R.join(". "))}getUpdatedTime(){return this[cE]}wasLoadedFromSource(){return N?!!this[pg]:void 0}static async addAttributes(m){let R=p.slice(0);for(let L of m){if(!L.name)throw new vn.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new vn.ClientError("Attribute names cannot include backticks or forward slashes");R.push(L)}return ht({table:s,database:c,schemaDefined:_,attributes:R}),et.indexingOperation}static async removeAttributes(m){let R=p.filter(L=>!m.includes(L.name));return ht({table:s,database:c,schemaDefined:_,attributes:R}),et.indexingOperation}static getRecordCount(m){let R=i.getStats().entryCount,L=5e3,O=1e3,C;R>L&&!m?.exactCount&&(C=O);let y=0;for(let{value:w}of i.getRange({start:!0,lazy:!0,limit:C}))w!=null&&y++;if(C){let w=y;y=0;for(let{value:Se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))Se!=null&&y++;let P=C*2,H=(y+w)/P,q=Math.pow((y-w+1)/C/2,2)+H*(1-H)/P,j=Math.max(Math.sqrt(q)*R,1),X=Math.round(H*R),tt=Math.max(X-1.96*j,0),Ue=Math.min(X+1.96*j,R),ie=Math.pow(10,Math.round(Math.log10(j)));return ie>X&&(ie=ie/10),y=Math.round(X/ie)*ie,{recordCount:y,estimatedRange:[Math.round(tt),Math.round(Ue)]}}return{recordCount:y}}static updatedAttributes(){Gi=this.propertyResolvers={$id:(m,R,L)=>L.key,$updatedtime:(m,R,L)=>L.version,$record:(m,R,L)=>L?{value:m}:m};for(let m of this.attributes){m.resolve=null;let R=m.relationship;if(R)if(Eb=!0,R.to)m.elements?.definition?(Gi[m.name]=m.resolve=(L,O,C)=>{let y=L[R.from?R.from:t],w=m.elements.definition.tableClass;return C?Fl({attribute:R.to,value:y},Rn(O).getReadTxn(),!1,w).asArray:w.search([{attribute:R.to,value:y}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(R.from){let L=m.definition||m.elements?.definition;L?(Gi[m.name]=m.resolve=(O,C,y)=>{let w=O[R.from];if(w!==void 0){if(m.elements){let P,H=w.map(q=>{let j=y?L.tableClass.primaryStore.getEntry(q,{transaction:Rn(C).getReadTxn()}):L.tableClass.get(q,C);return j?.then&&(P=!0),j});return R.filterMissing?P?Promise.all(H).then(q=>q.filter(sM)):H.filter(sM):P?Promise.all(H):H}return y?L.tableClass.primaryStore.getEntry(w,{transaction:Rn(C).getReadTxn()}):L.tableClass.get(w,C)}},m.set=(O,C)=>{if(Array.isArray(C)){let y=C.map(w=>w[Pe]||w[L.tableClass.primaryKey]);O[R.from]=y}else{let y=C[Pe]||C[L.tableClass.primaryKey];O[R.from]=y}},m.resolve.definition=m.definition||m.elements?.definition):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}Kd(this,this)}static async deleteHistory(m=0){let R;for(let{key:L,value:O}of l.getRange({start:0,end:m}))await xu(),Xr(O).tableId===n&&(R=l.remove(L));await R}static async*getHistory(m=0,R=1/0){for(let{key:L,value:O}of l.getRange({start:m,end:R})){await xu();let C=Xr(O);C.tableId===n&&(yield{id:C.recordId,localTime:L,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(m){let R=[],L=i.getEntry(m);if(!L)return R;let O=L.localTime,C=0;do{await xu();let y=l.get(O);if(y){let w=Xr(y);R.push({id:w.recordId,localTime:O,version:w.version,type:w.type,value:w.getValue(i),user:w.user}),O=w.previousLocalTime}else break}while(C<1e3&&O);return R.reverse()}static cleanup(){Q?.remove()}}et.updatedAttributes();let C$=et.prototype;return C$[eM]=!0,d&&et.setTTLExpiration(d/1e3),$&&L$(),et;function wd(W,m,R){let L;for(let O in r){let C=r[O],y=C.isIndexing,w=R?.[O],P=m?.[O];if(w===P&&!y)continue;L=!0;let H=C.indexNulls,q=(0,Fu.getIndexedValues)(P,H);if(q){ZP&&C.prefetch(q.map(j=>({key:j,value:W})),rM);for(let j=0,X=q.length;j<X;j++)C.remove(q[j],W)}if(q=(0,Fu.getIndexedValues)(w,H),q){ZP&&C.prefetch(q.map(j=>({key:j,value:W})),rM);for(let j=0,X=q.length;j<X;j++)C.put(q[j],W)}}return L}a(wd,"updateIndices");function Rl(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>tM)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;case"bigint":if(W<2n**64n&&W>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,ca.writeKey)(W,RZ,0)>tM)throw new Error("Primary key size is too large: "+W.length);return!0}a(Rl,"checkValidId");function Ep(W,m,R,L,O){let C=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),R.transaction?.isDone)return O(null,W);let y=i.getEntry(W,R);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),O(y,W)},"whenPrefetched");return L?C():oe>0?(oe--,C()):new Promise((y,w)=>{oe===0?(oe--,i.prefetch([W],()=>{P(),H()})):(se.push(W),ye.push(H),se.length>w$&&(oe--,P()));function P(){if(se.length>0){let q=ye;i.prefetch(se,()=>{oe===-1?P():oe++;for(let j of q)j()}),se=[],ye=[],dt>2&&dt--}else oe=dt,dt<I$&&dt++}a(P,"prefetch");function H(){try{y(C())}catch(q){w(q)}}a(H,"load")})}a(Ep,"loadLocalRecord");function Cd(W){if(!W)return;let m=W.role.permission;if(m.super_user)return AZ;let R=m[c],L,O=R?.tables;if(O)return O[s];if(c==="data"&&(L=m[s])&&!L.tables)return L}a(Cd,"getTablePermissions");function hp(W,m,R,L){if(N){let O;if(R.noCache?O=!0:(m?(!m.value||m.metadataFlags&(Hu|qu)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Un(!O,"cache-hit",s)),O){let C=hb(W,m,R).then(y=>(y?.value?.[we]&&ot.error("Can not assign a record with a record property"),R&&(y?.version>(R.lastModified||0)&&(R.lastModified=y.version),R.lastRefreshed=Date.now()),y));if(R?.onlyIfCached||m?.value&&L?.allowStaleWhileRevalidate?.(m,W)){if(C.catch(y=>ot.warn(y)),R?.onlyIfCached&&!L.doesExist())throw new vn.ServerError("Entry is not cached",504);return}else return C}}}a(hp,"ensureLoadedFromSource");function Rn(W){let m=W?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let R=m.next;if(!R)return m=m.next=new xo,m.lmdbDb=i,m;m=R}while(!0)}else return new jd}a(Rn,"txnForContext");function mp(W,m,R){if(!W)return;fp=W;let L=W.value||W.deref?.()||(fp=i.getEntry(W.key))?.value;if(typeof m=="object"){let C=Gi,y=L;for(let w=0,P=m.length;w<P;w++){let H=m[w],q=C?.[H];y=q?q(y,R):y?.[H],C=q?.definition?.tableClass?.propertyResolvers}return y}let O=Gi[m];return O?O(L,R):L[m]}a(mp,"getAttributeValue");async function hb(W,m,R){let L=m?.metadataFlags,O=m?.version,C,y;if(!i.attemptLock(W,O,()=>{clearTimeout(y);let q=i.getEntry(W);!q||!q.value||q.metadataFlags&(Hu|qu)?C(hb(W,i.getEntry(W),R)):C(q)}))return new Promise(q=>{C=q,y=setTimeout(()=>{i.unlock(W,O)},gZ)});let w=m?.value,P={requestContext:R,replacingRecord:w,replacingVersion:O,source:null,resourceCache:R?.resourceCache},H=R?.responseHeaders;return new Promise((q,j)=>{let X;Tg(Xe(P,async tt=>{let Ue=performance.now(),ie,Se,Ft;try{for(let ue of et.sources)if(ue.get&&(!ue.get.reliesOnPrototype||ue.prototype.get)&&(P.source=ue,ie=await ue.get(W,P),ie))break;Ft=L&Hu;let ve=P.lastModified||Ft&&O;Se=Ft||ve>O||!w,ve||(ve=(0,Fu.getNextMonotonicTime)());let An=performance.now()-Ue;if(an(An,"cache-resolution",s),H&&H.append("Server-Timing",`cache-resolve;dur=${An.toFixed(2)}`),tt.timestamp=ve,d&&!P.expiresAt&&(P.expiresAt=Date.now()+d),ie){if(typeof ie!="object")throw new Error("Only objects can be cached and stored in tables");typeof ie.toJSON=="function"&&(ie=ie.toJSON()),t&&ie[t]!==W&&(ie[t]=W)}X=!0,q({version:ve,value:ie})}catch(ve){ve.message+=` while resolving record ${W} for ${s}`,w&&((ve.code==="ECONNRESET"||ve.code==="ECONNREFUSED"||ve.code==="EAI_AGAIN")&&!R?.mustRevalidate||R?.staleIfError&&(ve.statusCode===500||ve.statusCode===502||ve.statusCode===503||ve.statusCode===504))?(q({version:O,value:w}),ot.trace(ve.message,"(returned stale record)")):j(ve),P.transaction.abort();return}if(R?.noCacheStore){P.transaction.abort();return}Rn(P).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(ve,An)=>{if(An?.version!==O)return;let ue=wd(W,w,ie);ie?(Wt.put?.(P,W,ie),S(W,ie,An,ve,0,E&&Se||null,P,P.expiresAt,"put",!!Ft)):(Wt.delete?.(P,W),E||h?S(W,null,An,ve,0,E&&Se||null,P,0,"delete",!!Ft):i.remove(W,O))}})}),()=>{i.unlock(W,O)},tt=>{i.unlock(W,O),X&&ot.error("Error committing cache update",tt)})})}a(hb,"getFromSource");function pp(){if(zn!==fb&&(fb=zn,(0,aa.getWorkerIndex)()===(0,aa.getWorkerCount)()-1)){if(Id&&clearTimeout(Id),!zn)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/zn)*zn+W.getTime(),R=a(L=>{ot.trace(`Scheduled next cleanup scan at ${new Date(L)}ms`),Id=setTimeout(()=>x=x.then(async()=>{if(R(Math.max(L+zn,Date.now())),i.rootStore.status!=="open"){clearTimeout(Id);return}let O=50,C=new Array(O),y=0;ot.trace(`Starting cleanup scan for ${s}`);try{let w=0;for(let{key:P,value:H,version:q,expiresAt:j}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let X;H===null&&!E&&q+TZ<Date.now()?X=i.remove(P,q):j&&j+f<Date.now()&&(X=et.evict(P,H,q),w++),X&&(await C[y],C[y]=X.catch(tt=>{ot.error("Cleanup error",tt)}),++y>=O&&(y=0)),await xu()}ot.trace(`Finished cleanup scan for ${s}, evicted ${w} entries`)}catch(w){ot.trace(`Error in cleanup scan for ${s}:`,w)}}),Math.min(L-Date.now(),2147483647)).unref()},"startNextTimer");R(m)}}a(pp,"scheduleCleanup");function mb(){Q=l?.addDeleteRemovalCallback(n,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(mb,"addDeleteRemoval");function L$(){(0,aa.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=$.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${$} must be indexed`);for(let{value:R}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(R);L?.value?.[W]<Date.now()&&et.evict(R,L.value,L.version),await xu()}}catch(W){ot.error("Error in evicting old records",W)}},SZ).unref()}a(L$,"runRecordExpirationEviction")}function Sg(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 rM(){}function OZ(e){oM=e}function lE(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?e==="null"?null:parseInt(e):r==="Float"?e==="null"?null:parseFloat(e):r==="BigInt"?e==="null"?null:BigInt(e):r==="Date"?(typeof e!="number"&&!NZ.test(e)&&(e+="Z"),e==="null"?null:new Date(e)):!r||r==="Any"?(0,uE.autoCast)(e):e}function nM(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 Tg(e,t,r){return e?.then?e.then(t,r):t(e)}function Gu(e,t){e[Bs]=t,e[we]=t?.value??null,e[cE]=t?.version}function sM(e){return e!=null}var us,aE,Fu,iM,Vu,vn,ku,$u,ot,ca,aa,uE,pZ,oM,SZ,TZ,ZP,gZ,cE,eM,Bs,mg,pg,Bu,Hu,qu,RZ,tM,AZ,KTe,NZ,xu,dE=Ae(()=>{us=U(b()),aE=require("lmdb"),Fu=U(Sr()),iM=require("lodash");Zn();Hp();Vu=U(z());fI();vn=U(ee()),ku=U(li()),$u=U(rs());me();Jd();ot=U(B());Qd();Go();ca=require("ordered-binary"),aa=U(nt());nc();uE=U(V());Wl();Ei();pZ=new Uint8Array(9);pZ[8]=192;SZ=6e4,TZ=864e5;Vu.initSync();ZP=Vu.get(us.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gZ=1e4,cE=Symbol.for("version"),eM=Symbol.for("incremental-update"),Bs=Symbol("entry"),mg=Symbol("is-saving"),pg=Symbol("loaded-from-source"),Bu={isNotification:!0,ensureLoaded:!1},Hu=1,qu=8,RZ=Buffer.allocUnsafeSlow(8192),tM=1978,AZ={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},KTe=(0,uE.convertToMS)(Vu.get(us.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(_E,"makeTable");a(Sg,"attributesAsObject");a(rM,"noop");a(OZ,"setServerUtilities");NZ=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(lE,"coerceType");a(nM,"isDescendantId");xu=a(()=>new Promise(setImmediate),"rest");a(Tg,"when");a(Gu,"updateResource");a(sM,"exists")});var Ge={};je(Ge,{database:()=>Au,databases:()=>at,dropDatabase:()=>yT,dropTableMeta:()=>LZ,getDatabases:()=>is,getTables:()=>bZ,onUpdatedTable:()=>bg,readMetaDb:()=>Yu,resetDatabases:()=>yZ,table:()=>ht,tables:()=>ln});function bZ(){return pE||is(),ln||{}}function is(){if(pE)return at;pE=!0,yc=new Map;let e=(0,cr.getHdbBasePath)()&&(0,it.join)((0,cr.getHdbBasePath)(),un.DATABASES_DIR_NAME),t=(0,cr.get)(un.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,cr.get)(un.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,cn.existsSync)(e)?e:(0,it.join)((0,cr.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,cn.existsSync)(e))for(let r of(0,cn.readdirSync)(e,{withFileTypes:!0})){let n=(0,it.basename)(r.name,".mdb");r.isFile()&&(0,it.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Yu((0,it.join)(e,r.name),null,n)}if((0,cn.existsSync)((0,bc.getBaseSchemaPath)())){for(let r of(0,cn.readdirSync)((0,bc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,it.join)((0,bc.getBaseSchemaPath)(),r.name),s=(0,it.join)((0,bc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,cn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,it.extname)(i.name).toLowerCase()===".mdb"){let o=(0,it.join)(s,i.name);Yu((0,it.join)(n,i.name),(0,it.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,cn.existsSync)(s))for(let o of(0,cn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,it.extname)(o.name).toLowerCase()===".mdb"&&Yu((0,it.join)(s,o.name),(0,it.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,it.join)(c.path,(0,it.basename)(o+".mdb"));(0,cn.existsSync)(l)&&Yu(l,o,r,null,!0)}}for(let r in at){let n=yc.get(r);if(n){let s=at[r];r.includes("delete")&&Bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Bn.trace(`delete table class ${i}`),delete s[i])}else if(delete at[r],r==="data"){for(let s in ln)delete ln[s];delete ln[SE]}}return yc=null,at}}function yZ(){pE=!1;for(let[,e]of no)e.needsDeletion=!0;is();for(let[e,t]of no)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),no.delete(e));return at}function Yu(e,t,r=Og,n,s){let i=new Rg.default(e,!1);try{let o=no.get(e);o?o.needsDeletion=!1:(o=(0,EE.open)(i),no.set(e,o));let c=new la.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(fE.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,cn.existsSync)(n)&&(i.path=n,_=(0,EE.open)(i),_.isLegacy=!0):_=cf(o));let u=uM(r),d=u[SE],f=new Map;for(let{key:E,value:h}of l.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let Q of p)if(Q.is_hash_attribute||Q.isPrimaryKey){S=Q;break}if(!S){Bn.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=u[E],g={},N=[],M,G,x=typeof S.audit=="boolean"?S.audit:(0,cr.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),D=S.trackDeletes,K=S.expiration,$=S.eviction;if(A)g=A.indices,N=A.attributes,A.schemaVersion++;else{M=S.tableId,M?M>=(l.get(Nc)||0)&&l.putSync(Nc,M+1):(S.tableId=M=l.get(Nc),M||(M=1),l.putSync(Nc,M+1),l.putSync(S.key,S));let Q=new la.default(!S.is_hash_attribute,S.is_hash_attribute);G=of(o.openDB(S.key,Q)),G.rootStore=o,G.tableId=M}for(let Q of p){Q.attribute=Q.name;try{if(!Q.is_hash_attribute&&(Q.indexed||Q.attribute&&!Q.name)){if(!g[Q.name]){let ye=new la.default(!Q.is_hash_attribute,Q.is_hash_attribute);g[Q.name]=o.openDB(Q.key,ye),g[Q.name].indexNulls=Q.indexNulls}let se=N.find(ye=>ye.name===Q.name);se?N.splice(N.indexOf(se),1,Q):N.push(Q)}}catch(se){Bn.error("Error trying to update attribute",Q,N,g,se)}}if(!A){A=_M(u,E,_E({primaryStore:G,auditStore:_,audit:x,expirationMS:K&&K*1e3,evictionMS:$&&$*1e3,trackDeletes:D,tableName:E,tableId:M,primaryKey:S.name,databasePath:s?r+"/"+E:r,databaseName:r,indices:g,attributes:p,schemaDefined:S.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let Q of Ng)Q(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function uM(e){let t=at[e];if(t||(e==="data"?t=at[e]=ln:e==="system"?Object.defineProperty(at,"system",{value:t=Object.create(null),configurable:!0}):t=at[e]=Object.create(null)),yc&&!yc.has(e)){let r=new Set;t[SE]=r,yc.set(e,r)}return t}function _M(e,t,r){return e[t]=r,r}function Au({database:e,table:t}){e||(e=Og),is();let r=uM(e),n=(0,it.join)((0,cr.getHdbBasePath)(),un.DATABASES_DIR_NAME),s=(0,cr.get)(un.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,cr.get)(un.CONFIG_PARAMS.STORAGE_PATH)||((0,cn.existsSync)(n)?n:(0,it.join)((0,cr.getHdbBasePath)(),un.LEGACY_DATABASES_DIR_NAME));let o=(0,it.join)(n,(i?t:e)+".mdb"),c=no.get(o);if(!c){let l=new Rg.default(o,!1);c=(0,EE.open)(l),no.set(o,c)}return c}async function yT(e){if(!at[e])throw new Error("Schema does not exist");let t=at[e];for(let r in t){let s=t[r].primaryStore.rootStore;no.delete(s.path),s.status==="open"&&(await s.close(),await aM.remove(s.path))}if(e==="data"){for(let r in ln)delete ln[r];delete ln[SE]}delete at[e]}function ht({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,trackDeletes:c,schemaDefined:l,origin:_}){t||(t=Og);let u=Au({database:t,table:e}),d=at[t],f=d?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;l==null&&(l=!0);let A=new la.default(!1);for(let D of i)D.attribute?(D.name=D.attribute,D.indexed=!0):D.attribute=D.name,D.expiresAt&&(D.indexed=!0);let g,N;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let D=u.auditStore;D||(D=cf(u)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=l,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,cr.get)(un.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),n&&(h.eviction=n),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Bn.trace(`${e} table loading, opening primary store`);let K=new la.default(!1,!0),$=e+"/",Q=of(u.openDB($,K));Q.rootStore=u,S=u.dbisDb=u.openDB(fE.INTERNAL_DBIS_NAME,A),Q.tableId=S.get(Nc),Q.tableId||(Q.tableId=1),S.putSync(Nc,Q.tableId+1),h.tableId=Q.tableId,f=_M(d,e,_E({primaryStore:Q,auditStore:D,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:E,tableName:e,tableId:Q.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:l,dbisDB:S})),f.schemaVersion=1,g=!0,x(),S.put($,h)}p=f.indices,S=S||(u.dbisDb=u.openDB(fE.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let M=[];for(let{key:D,value:K}of S.getRange({start:!0})){let[$,Q]=D.toString().split("/");if(Q===""&&(Q=K.name),Q){if($!==e)continue}else Q=$;if(!i.find(ye=>ye.name===Q)?.indexed&&K.indexed&&!K.isPrimaryKey){x(),g=!0,S.remove(D);let ye=f.indices[$];ye&&M.push(ye)}}let G=[];try{for(let D of i||[]){if(D.relationship)continue;let K=e+"/"+(D.name||"");Object.defineProperty(D,"key",{value:K,configurable:!0});let $=S.get(K);if(D.isPrimaryKey){if($=$||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+$.expiration||void 0)||(+n||void 0)!==(+$.eviction||void 0)){let se=Object.assign({},$);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),n&&(se.eviction=+n),g=!0,x(),S.put(K,se)}continue}$?.attribute&&!$.name&&($.indexed=!0);let Q=!$||$.type!==D.type||$.indexed!==D.indexed||JSON.stringify($.attributes)!==JSON.stringify(D.attributes)||JSON.stringify($.elements)!==JSON.stringify(D.elements);if(D.indexed){let se=new la.default(!0,!1),ye=u.openDB(K,se);(Q||$.indexingPID&&$.indexingPID!==process.pid||$.restartNumber<Ku.workerData?.restartNumber)&&(g=!0,x(),$=S.get(K),(Q||$.indexingPID&&$.indexingPID!==process.pid||$.restartNumber<Ku.workerData?.restartNumber)&&(g=!0,D.lastIndexedKey=$?.lastIndexedKey||!1,D.indexingPID=process.pid,ye.isIndexing=!0,Object.defineProperty(D,"dbi",{value:ye}),D.indexNulls===void 0&&(D.indexNulls=!0),G.push(D)),S.put(K,D)),$?.indexNulls&&D.indexNulls===void 0&&(D.indexNulls=!0),ye.indexNulls=D.indexNulls,p[D.name]=ye}else Q&&(g=!0,x(),S.put(K,D))}}finally{N&&N()}if(g&&(f.schemaVersion++,f.updatedAttributes()),Bn.trace(`${e} table loading, running index`),G.length>0||M.length>0?f.indexingOperation=CZ(f,G,M):g&&hE.signalSchemaChange(new mE.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let D of Ng)D(f,_!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),Bn.trace(`${e} table loaded`),f;function x(){N||u.transactionSync(()=>({then(D){N=D}}))}a(x,"startTxn")}async function CZ(e,t,r){try{let n=e.schemaVersion;await hE.signalSchemaChange(new mE.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let l of r)s=l.drop();let i,o=0,c=t.length;if(await new Promise(l=>setImmediate(l)),c>0){let l=0;for(let{key:_,value:u,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(u){if(l++,s=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,cM.getIndexedValues)(u[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),s.then(()=>l--,f=>{l--,Bn.error(f)}),Ku.workerData&&Ku.workerData.restartNumber!==lM.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}l>IZ?await s:l>wZ&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await hE.signalSchemaChange(new mE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){Bn.error("Error in indexing",n)}}function LZ({table:e,database:t}){let r=Au({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function bg(e){Ng.push(e)}var cr,fE,EE,it,cn,bc,la,Rg,un,aM,Ag,cM,hE,mE,Ku,Bn,lM,Og,SE,ln,at,Nc,Ng,pE,no,yc,IZ,wZ,me=Ae(()=>{cr=U(z()),fE=U(ft()),EE=require("lmdb"),it=require("path"),cn=require("fs"),bc=U(ze());dE();la=U(lf()),Rg=U(_f()),un=U(b()),aM=U(require("fs-extra")),Ag=require("../index"),cM=U(Sr()),hE=U(li()),mE=U(rs()),Ku=require("worker_threads"),Bn=U(B()),lM=U(nt());nc();Wl();Og="data",SE=Symbol("defined-tables");(0,cr.initSync)();ln=Object.create(null),at=Object.create(null);(0,Ag._assignPackageExport)("databases",at);(0,Ag._assignPackageExport)("tables",ln);Nc=Symbol.for("next-table-id"),Ng=[],no=new Map;a(bZ,"getTables");a(is,"getDatabases");a(yZ,"resetDatabases");a(Yu,"readMetaDb");a(uM,"ensureDB");a(_M,"setTable");a(Au,"database");a(yT,"dropDatabase");a(ht,"table");IZ=1e3,wZ=10;a(CZ,"runIndexing");a(LZ,"dropTableMeta");a(bg,"onUpdatedTable")});var V=T((tge,bM)=>{"use strict";var so=require("path"),mM=require("fs-extra"),wr=B(),dM=require("fs-extra"),TE=require("os"),DZ=require("net"),PZ=require("recursive-iterator"),ct=b(),MZ=Dp(),fM=require("papaparse"),gE=require("moment"),{inspect:UZ}=require("util"),EM=require("is-number"),ege=require("lodash"),vZ=require("minimist"),BZ=require("https"),HZ=require("http"),{hdb_errors:RE}=ee(),qZ=/^((\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)))$/,pM=require("util").promisify(setTimeout),xZ=100,GZ=5,FZ="",kZ=4,hM={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};bM.exports={isEmpty:_n,isEmptyOrZeroLength:Hs,arrayHasEmptyValues:YZ,arrayHasEmptyOrZeroLengthValues:KZ,buildFolderPath:WZ,isBoolean:SM,errorizeMessage:$Z,stripFileExtension:jZ,autoCast:zZ,autoCastJSON:TM,autoCastJSONDeep:Ig,removeDir:JZ,compareVersions:XZ,isCompatibleDataVersion:ZZ,escapeRawValue:e5,unescapeValue:t5,stringifyProps:r5,timeoutPromise:s5,isClusterOperation:o5,getClusterUser:c5,checkGlobalSchemaTable:a5,getHomeDir:RM,getPropsFilePath:n5,promisifyPapaParse:l5,removeBOM:AM,createEventPromise:u5,checkProcessRunning:_5,checkSchemaTableExist:d5,checkSchemaExists:OM,checkTableExists:NM,getStartOfTomorrowInSeconds:f5,getLimitKey:E5,isObject:QZ,isNotEmptyAndHasValue:VZ,autoCasterIsNumberCheck:gM,backtickASTSchemaItems:h5,isPortTaken:i5,createForkArgs:m5,autoCastBoolean:p5,async_set_timeout:pM,getTableHashAttribute:S5,doesSchemaExist:T5,doesTableExist:g5,stringifyObj:R5,ms_to_time:A5,changeExtension:O5,getEnvCliRootPath:wg,noBootFile:N5,httpRequest:b5,transformReq:y5,convertToMS:I5,PACKAGE_ROOT:ct.PACKAGE_ROOT};function $Z(e){return e instanceof Error?e:new Error(e)}a($Z,"errorizeMessage");function _n(e){return e==null}a(_n,"isEmpty");function VZ(e){return!_n(e)&&(e||e===0||e===""||SM(e))}a(VZ,"isNotEmptyAndHasValue");function Hs(e){return _n(e)||e.length===0||e.size===0}a(Hs,"isEmptyOrZeroLength");function YZ(e){if(_n(e))return!0;for(let t=0;t<e.length;t++)if(_n(e[t]))return!0;return!1}a(YZ,"arrayHasEmptyValues");function KZ(e){if(Hs(e))return!0;for(let t=0;t<e.length;t++)if(Hs(e[t]))return!0;return!1}a(KZ,"arrayHasEmptyOrZeroLengthValues");function WZ(...e){try{return e.join(so.sep)}catch{console.error(e)}}a(WZ,"buildFolderPath");function SM(e){return _n(e)?!1:e===!0||e===!1}a(SM,"isBoolean");function QZ(e){return _n(e)?!1:typeof e=="object"}a(QZ,"isObject");function jZ(e){return Hs(e)?FZ:e.slice(0,-kZ)}a(jZ,"stripFileExtension");function zZ(e){return _n(e)||e===""||typeof e!="string"?e:hM[e]!==void 0?hM[e]:gM(e)===!0?Number(e):qZ.test(e)?new Date(e):e}a(zZ,"autoCast");function TM(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(TM,"autoCastJSON");function Ig(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=Ig(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=Ig(r);n!==r&&(e[t]=n)}return e}else return TM(e)}a(Ig,"autoCastJSONDeep");function gM(e){if(e.startsWith("0.")&&EM(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&EM(e))}a(gM,"autoCasterIsNumberCheck");async function JZ(e){if(Hs(e))throw new Error(`Directory path: ${e} does not exist`);try{await dM.emptyDir(e),await dM.remove(e)}catch(t){throw wr.error(`Error removing files in ${e} -- ${t}`),t}}a(JZ,"removeDir");function XZ(e,t){if(Hs(e)){wr.info("Invalid current version sent as parameter.");return}if(Hs(t)){wr.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(XZ,"compareVersions");function ZZ(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(ZZ,"isCompatibleDataVersion");function e5(e){if(_n(e))return e;let t=String(e);return t==="."?ct.UNICODE_PERIOD:t===".."?ct.UNICODE_PERIOD+ct.UNICODE_PERIOD:t.replace(ct.FORWARD_SLASH_REGEX,ct.UNICODE_FORWARD_SLASH)}a(e5,"escapeRawValue");function t5(e){if(_n(e))return e;let t=String(e);return t===ct.UNICODE_PERIOD?".":t===ct.UNICODE_PERIOD+ct.UNICODE_PERIOD?"..":String(e).replace(ct.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(t5,"unescapeValue");function r5(e,t){if(_n(e))return wr.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+TE.EOL}!Hs(n)&&n[0]===";"?r+=" "+n+s+TE.EOL:Hs(n)||(r+=n+"="+s+TE.EOL)}catch{wr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(r5,"stringifyProps");function RM(){let e;try{e=TE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(RM,"getHomeDir");function n5(){let e=so.join(RM(),ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return mM.existsSync(e)||(e=so.join(__dirname,"../","hdb_boot_properties.file")),e}a(n5,"getPropsFilePath");function s5(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(s5,"timeoutPromise");async function i5(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=DZ.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(i5,"isPortTaken");function o5(e){try{return ct.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){wr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(o5,"isClusterOperation");function a5(e,t){let r=(me(),re(Ge)).getDatabases();if(!r[e])return RE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return RE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(a5,"checkGlobalSchemaTable");function c5(e,t){if(_n(t)){wr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(_n(e)||Hs(e)){wr.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){wr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){wr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(c5,"getClusterUser");function l5(){fM.parsePromise=function(e,t,r){return new Promise(function(n,s){fM.parse(e,{header:!0,transformHeader:AM,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(l5,"promisifyPapaParse");function AM(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(AM,"removeBOM");function u5(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;wr.info(`Got cluster status event response: ${UZ(s)}`);try{i.cancel()}catch{wr.error("Error trying to cancel timeout.")}n(s)})})}a(u5,"createEventPromise");async function _5(e){let t=!0,r=0;do await pM(xZ*r++),(await MZ.findPs(e)).length>0&&(t=!1);while(t&&r<GZ);if(t)throw new Error(`process ${e} was not started`)}a(_5,"checkProcessRunning");function d5(e,t){let r=OM(e);if(r)return r;let n=NM(e,t);if(n)return n}a(d5,"checkSchemaTableExist");function OM(e){let{getDatabases:t}=(me(),re(Ge));if(!t()[e])return RE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(OM,"checkSchemaExists");function NM(e,t){let{getDatabases:r}=(me(),re(Ge));if(!r()[e][t])return RE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(NM,"checkTableExists");function f5(){let e=gE().utc().add(1,ct.MOMENT_DAYS_TAG).startOf(ct.MOMENT_DAYS_TAG).unix(),t=gE().utc().unix();return e-t}a(f5,"getStartOfTomorrowInSeconds");function E5(){return gE().utc().format("DD-MM-YYYY")}a(E5,"getLimitKey");function h5(e){try{let t=new PZ(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){wr.error("Got an error back ticking items."),wr.error(t)}}a(h5,"backtickASTSchemaItems");function m5(e){return[e]}a(m5,"createForkArgs");function p5(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(p5,"autoCastBoolean");function S5(e,t){let{getDatabases:r}=(me(),re(Ge)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(S5,"getTableHashAttribute");function T5(e){let{getDatabases:t}=(me(),re(Ge));return t()[e]!==void 0}a(T5,"doesSchemaExist");function g5(e,t){let{getDatabases:r}=(me(),re(Ge));return r()[e]?.[t]!==void 0}a(g5,"doesTableExist");function R5(e){try{return JSON.stringify(e)}catch{return e}}a(R5,"stringifyObj");function A5(e){let t=gE.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(A5,"ms_to_time");function O5(e,t){let r=so.basename(e,so.extname(e));return so.join(so.dirname(e),r+t)}a(O5,"changeExtension");function wg(){if(process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=vZ(process.argv);if(e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ct.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(wg,"getEnvCliRootPath");var yg;function N5(){if(yg)return yg;let e=wg();wg()&&mM.pathExistsSync(so.join(e,ct.HDB_CONFIG_FILE))&&(yg=!0)}a(N5,"noBootFile");function b5(e,t){let r;return e.protocol==="http:"?r=HZ:r=BZ,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(b5,"httpRequest");function y5(e){if(!e.schema&&!e.database){e.schema=ct.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(y5,"transformReq");function I5(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(I5,"convertToMS")});var z=T((nge,CM)=>{"use strict";var Cg=require("fs-extra"),_s=require("path"),yM=require("os"),w5=require("properties-reader"),Qu=B(),Wu=V(),ae=b(),AE=mt(),C5="Error initializing environment manager",OE="BOOT_PROPS_FILE_PATH",IM=!1,L5={[ae.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},hi={};CM.exports={BOOT_PROPS_FILE_PATH:OE,getHdbBasePath:D5,setHdbBasePath:P5,get:wM,initSync:U5,setProperty:ge,initTestEnvironment:v5};function D5(){return hi[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(D5,"getHdbBasePath");function P5(e){hi[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(P5,"setHdbBasePath");function wM(e){let t=AE.getConfigValue(e);return t===void 0?hi[e]:t}a(wM,"get");function ge(e,t){L5[e]&&(hi[e]=t),AE.updateConfigObject(e,t)}a(ge,"setProperty");function M5(){let e;try{e=Wu.getPropsFilePath(),Cg.accessSync(e,Cg.constants.F_OK|Cg.constants.R_OK),IM=!0;let t=w5(e);return hi[ae.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ae.HDB_SETTINGS_NAMES.INSTALL_USER),hi[ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),hi[OE]=e,!0}catch{return Qu.trace(`Environment manager found no properties file at ${e}`),!1}}a(M5,"doesPropFileExist");function U5(e=!1){try{(IM||M5()||Wu.noBootFile())&&(AE.initConfig(e),hi[ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=AE.getConfigValue(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qu.error(C5),Qu.error(t),console.error(t),process.exit(1)}}a(U5,"initSync");function v5(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=_s.join(__dirname,"../../","unitTests");hi[OE]=_s.join(l,"hdb_boot_properties.file"),ge(ae.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,_s.join(l,"settings.test")),ge(ae.HDB_SETTINGS_NAMES.INSTALL_USER,yM.userInfo()?yM.userInfo().username:void 0),ge(ae.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,_s.join(l,"envDir","utility","keys","privateKey.pem")),ge(ae.HDB_SETTINGS_NAMES.CERT_KEY,_s.join(l,"envDir","utility","keys","certificate.pem")),ge(ae.CONFIG_PARAMS.TLS_PRIVATEKEY,_s.join(l,"envDir","utility","keys","privateKey.pem")),ge(ae.CONFIG_PARAMS.TLS_CERTIFICATE,_s.join(l,"envDir","utility","keys","certificate.pem")),ge(ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),ge(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY,_s.join(l,"envDir","log")),ge(ae.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),ge(ae.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),ge(ae.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),ge(ae.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,_s.join(l,"envDir")),ge(ae.CONFIG_PARAMS.STORAGE_PATH,_s.join(l,"envDir")),s&&(ge(ae.CONFIG_PARAMS.HTTP_SECUREPORT,wM(ae.CONFIG_PARAMS.HTTP_PORT)),ge(ae.CONFIG_PARAMS.HTTP_PORT,null)),ge(ae.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),ge(ae.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),ge(ae.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Wu.isEmpty(i)?!1:i),ge(ae.CONFIG_PARAMS.HTTP_CORS,Wu.isEmpty(i)?!1:i),ge(ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),ge(ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),ge(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),ge(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),ge(ae.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,_s.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),ge(ae.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Wu.isEmpty(c)?!1:c),o&&(ge("CORS_ACCESSLIST",o),ge(ae.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(ge(ae.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),ge(ae.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(ge(ae.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),ge(ae.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(ge(ae.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),ge(ae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${OE}. Please check your boot props and settings files`;Qu.fatal(r),Qu.error(t)}}a(v5,"initTestEnvironment")});var Dg={};je(Dg,{loadGQLSchema:()=>q5,start:()=>Lg,startOnMainThread:()=>H5});function Lg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:_,StringValueNode:u}=await import("graphql"),d=o(new c(r.toString(),s)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case l.OBJECT_TYPE_DEFINITION:let G=function(x){if(x.kind==="NonNullType"){let $=G(x.type);return $.nullable=!1,$}if(x.kind==="ListType")return{type:"array",elements:G(x.type)};let K={type:x.name?.value};return Object.defineProperty(K,"location",{value:x.loc.startToken}),K};a(G,"getProperty");let A=S.name.value,g=[],N={table:null,database:null,properties:g};f.set(A,N);for(let x of S.directives){if(x.name.value==="table"){for(let D of x.arguments)N[D.name.value]=D.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(x.name.value==="sealed"&&(N.sealed=!0),x.name.value==="export"){N.export=!0;for(let D of x.arguments)D.name.value==="name"&&(N.export={name:D.value.value})}}let M=!1;for(let x of S.fields){let D=G(x.type);D.name=x.name.value,g.push(D);for(let K of x.directives)if(K.name.value==="primaryKey")M?console.warn("Can not define two attributes as a primary key"):(D.isPrimaryKey=!0,M=!0);else if(K.name.value==="indexed")D.indexed=!0;else if(K.name.value==="relationship"){let $={};for(let Q of K.arguments)$[Q.name.value]=Q.value.value;D.relationship=$}else if(K.name.value==="createdTime")D.assignCreatedTime=!0;else if(K.name.value==="updatedTime")D.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")D.expiresAt=!0;else if(K.name.value==="allow"){let $=D.authorizedRoles=[];for(let Q of K.arguments)Q.name.value==="role"&&$.push(Q.value.value)}}N.type=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?(Object.defineProperty(S,"properties",{value:A.properties}),Object.defineProperty(S,"definition",{value:A})):S.type==="array"?p(S.elements):B5.includes(S.type)||(0,LM.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,NE.dirname)(n),S.tableClass):i.set((0,NE.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,NE.dirname)(n)+"/"+S.name,A.tableClass)}}}var NE,LM,B5,H5,q5,DM=Ae(()=>{NE=require("path");me();LM=U(nt()),B5=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Lg,"start");H5=Lg,q5=Lg({ensureTable:ht}).handleFile});async function bE(e){return x5?(ju||(ju=G5(k5)),(await(await ju).import(e)).namespace):import(e)}async function G5(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ju=new Compartment({console,Math,Date,fetch:F5,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,MM.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:jt,tables:ln,databases:at})}};let n=await(0,PM.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),ju}function F5(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 k5(){return{Resource:jt,tables:ln}}var PM,MM,x5,ju,Pg=Ae(()=>{Zn();me();PM=require("fs/promises"),MM=require("path"),x5=!1;a(bE,"secureImport");a(G5,"getCompartment");a(F5,"secureOnlyFetch");a(k5,"getGlobalVars")});var Ug={};je(Ug,{handleFile:()=>$5});async function $5(e,t,r,n){let s=new Map,i=(0,UM.pathToFileURL)(r).toString(),o=await bE(i);l(o.default)&&n.set((0,Mg.dirname)(t),o.default),c(o,(0,Mg.dirname)(t));function c(_,u){for(let d in _){let f=_[d];l(f)?n.set(u+"/"+d,f):typeof f=="object"&&c(f,u+"/"+d)}}a(c,"recurseForResources");function l(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(l,"isResource"),s}var UM,Mg,vM=Ae(()=>{UM=require("url");Pg();Mg=require("path");a($5,"handleFile")});var Bg={};je(Bg,{start:()=>V5});function V5({resources:e}){e.set("login",vg),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vg,BM=Ae(()=>{Zn();a(V5,"start");vg=class extends jt{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var $M={};je($M,{parse:()=>qg,streamAsJSON:()=>zu,stringify:()=>ua});function zu(e){return new Hg({value:e})}function HM(e){return console.error(e),JSON.stringify(e.toString())}function qM(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ua(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===FM)return kM(e);if(t.resolution)return t.resolution.then(()=>ua(e));throw t}}function kM(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+=kM(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ua(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function qg(e){return W5.test(e)?Y5.parse(e):JSON.parse(e)}var xM,GM,Y5,K5,FM,Hg,W5,xg=Ae(()=>{xM=require("stream"),GM=U(require("json-bigint-fixes")),Y5=(0,GM.default)({useNativeBigInt:!0}),K5=1e4,FM={};BigInt.prototype.toJSON=function(){throw FM};a(zu,"streamAsJSON");Hg=class extends xM.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),HM)}catch(s){yield HM(s)}else yield ua(t)}else yield ua(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);qM(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>K5?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 qM(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(HM,"handleError");a(qM,"when");a(ua,"stringify");a(kM,"jsStringify");W5=/-?\d{16,}/;a(qg,"parse")});var yE=T((mge,VM)=>{"use strict";var Q5=Dn();VM.exports={writeTransaction:j5};function j5(e,t,r){return Q5.writeTransaction(e,t,r)}a(j5,"writeTransaction")});var QM=T((Tge,WM)=>{"use strict";var z5=Nr(),J5=Pn(),YM=B(),X5=br(),Sge=yE(),Z5=require("clone"),Fg=require("alasql"),e8=vf(),KM=require("util"),t8=KM.promisify(J5.getTableSchema),r8=KM.promisify(z5.search),n8=b(),Gg=V();e8(Fg);WM.exports={update:i8};var s8="There was a problem performing this update. Please check the logs and try again.";async function i8({statement:e,hdb_user:t}){let r=await t8(e.table.databaseid,e.table.tableid),n=o8(e.columns);Gg.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=Z5(s),c=Gg.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=Fg.parse(l).statements[0],u=await r8(_),d=a8(n,u);return c8(o,d,t)}a(i8,"update");function o8(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Fg.compile(`SELECT ${r.expression.toString()} AS [${n8.FUNC_VAL}] FROM ?`)}),t}catch(t){throw YM.error(t),new Error(s8)}}a(o8,"createUpdateRecord");function a8(e,t){return Gg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(a8,"buildUpdateRecords");async function c8(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await X5.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){YM.error(`Error delete new_attributes from update response: ${i}`)}return s}a(c8,"updateRecords")});var zM=T((Oge,jM)=>{var l8=require("alasql"),u8=Nr(),_8=B(),d8=Dn(),$g=require("util"),kg=V(),f8=b(),E8=Pn(),Rge=yE(),Age=br(),h8="record",m8="successfully deleted",p8=$g.callbackify(R8),S8=$g.promisify(u8.search),T8=$g.promisify(E8.getTableSchema);jM.exports={convertDelete:p8};function g8(e){return`${e.deleted_hashes.length} ${h8}${e.deleted_hashes.length===1?"":"s"} ${m8}`}a(g8,"generateReturnMessage");async function R8({statement:e,hdb_user:t}){let r=await T8(e.table.databaseid,e.table.tableid);kg.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=kg.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=l8.parse(o).statements[0],l={operation:f8.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await S8(c);let _=await d8.deleteRecords(l);return kg.isEmptyOrZeroLength(_.message)&&(_.message=g8(_)),delete _.txn_time,_}catch(_){throw _8.error(_),_.hdb_code?_.message:_}}a(R8,"convertDelete")});var tU=T((bge,eU)=>{"use strict";var A8=Ji(),{hdb_errors:JM}=ee(),{getDatabases:XM}=(me(),re(Ge));eU.exports={checkSchemaExists:ZM,checkSchemaTableExists:O8,schema_describe:A8};async function ZM(e){if(!XM()[e])return JM.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ZM,"checkSchemaExists");async function O8(e,t){let r=await ZM(e);if(r)return r;if(!XM()[e][t])return JM.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(O8,"checkSchemaTableExists")});var pt=T((Dge,RU)=>{"use strict";var Jt=z();Jt.initSync();var N8=require("fs-extra"),b8=require("semver"),Zu=require("path"),{monotonicFactory:y8}=require("ulidx"),nU=y8(),I8=require("util"),sU=require("child_process"),w8=I8.promisify(sU.exec),C8=sU.spawn,Oe=Ze(),Me=b(),Wg=V(),dn=B(),IE=fi(),L8=yE(),Ju=mt(),{onMessageByType:D8}=nt(),{isMainThread:P8}=require("worker_threads"),{Encoder:M8,decode:Qg}=require("msgpackr"),iU=new M8,{isEmpty:Ea}=Wg,oU=Ir(),U8=48*36e11,v8=5e9;P8&&D8(Me.ITC_EVENT_TYPES.RESTART,()=>{Hn=void 0,fa=void 0});var{connect:B8,StorageType:aU,RetentionPolicy:cU,AckPolicy:wE,DeliverPolicy:CE,DiscardPolicy:H8,NatsConnection:Ige,JetStreamManager:wge,JetStreamClient:Cge,StringCodec:Lge,JSONCodec:q8,createInbox:jg,headers:x8,ErrorCode:rU}=require("nats"),{PACKAGE_ROOT:G8}=b(),F8=vo(),{recordAction:k8}=(Ei(),re(vu)),lU=q8(),$8="clustering",V8=F8.engines[Oe.NATS_SERVER_NAME],Y8=Zu.join(G8,"dependencies"),Kg=Zu.join(Y8,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),Vg,Yg,Xu,_a,da;RU.exports={runCommand:uU,checkNATSServerInstalled:K8,createConnection:zg,getConnection:LE,getJetStreamManager:e_,getJetStream:dU,getNATSReferences:Cr,getServerList:Q8,createLocalStream:Jg,listStreams:fU,deleteLocalStream:j8,getServerConfig:t_,listRemoteStreams:z8,viewStream:J8,viewStreamIterator:X8,publishToStream:Z8,createWorkQueueStream:e6,addSourceToWorkStream:hU,request:r6,removeSourceFromWorkStream:pU,reloadNATS:Xg,reloadNATSHub:n6,reloadNATSLeaf:s6,extractServerName:mU,requestErrorHandler:i6,updateWorkStream:o6,createLocalTableStream:TU,createTableStreams:a6,purgeTableStream:gU,purgeSchemaTableStreams:c6,getStreamInfo:l6,updateLocalStreams:_6,closeConnection:W8,getJsmServerName:r_,addNatsMsgHeader:EU,updateIngestStreamConsumer:t6,clearClientCache:_U};async function uU(e,t=void 0){let{stdout:r,stderr:n}=await w8(e,{cwd:t});if(n)throw new Error(n.replace(`
10
10
  `,""));return r.replace(`
11
- `,"")}a(dM,"runCommand");async function M5(){try{await _5.access(cg)}catch{return!1}let e=await dM(`${cg} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return d5.eq(t,D5)}a(M5,"checkNATSServerInstalled");async function dg(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await cM.getClusterUser();if(Yo(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 O5({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(be.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}a(dg,"createConnection");async function U5(){Vs&&(await Vs.drain(),Vs=void 0,Xa=void 0,Za=void 0,ec=void 0)}a(U5,"closeConnection");var Vs,ec;async function Jf(){return ec||(ec=dg(Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Vs=await ec),Vs||ec}a(Jf,"getConnection");async function Rl(){if(Xa)return Xa;Yo(Vs)&&await Jf();let{domain:e}=Al(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Yo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Xa=await Vs.jetstreamManager({domain:e,timeout:6e4}),Xa}a(Rl,"getJetStreamManager");async function fM(){if(Za)return Za;Yo(Vs)&&await Jf();let{domain:e}=Al(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Yo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Za=Vs.jetstream({domain:e,timeout:6e4}),Za}a(fM,"getJetStream");async function mr(){let e=Vs||await Jf(),t=Xa||await Rl(),r=Za||await fM();return{connection:e,jsm:t,js:r}}a(mr,"getNATSReferences");async function v5(e){let t=Ht.get(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await cM.getClusterUser(),n=await dg(t,r,s),i=_g(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=_M.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await ug.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(v5,"getServerList");async function fg(e,t){let{jsm:r}=await mr(),s=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:uM.File,retention:lM.Limits,subjects:t,discard:N5.Old,max_msgs:n,max_bytes:i,max_age:s})}a(fg,"createLocalStream");async function EM(){let{jsm:e}=await mr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(EM,"listStreams");async function B5(e){let{jsm:t}=await mr();await t.streams.delete(e)}a(B5,"deleteLocalStream");async function H5(e){let{connection:t}=await mr(),r=[],s=_g(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(_M.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(H5,"listRemoteStreams");async function q5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=iM(),o={durable_name:i,ack_policy:jf.Explicit};t&&(o.deliver_policy=zf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=lg(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(q5,"viewStream");async function*G5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=iM(),o={durable_name:i,ack_policy:jf.Explicit};t&&(o.deliver_policy=zf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=lg(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(G5,"viewStreamIterator");async function F5(e,t,r,s){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=hM(s,r);let{js:n}=await mr(),i=await Ol(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:aM.encode(s);try{_s.trace(`publishToStream publishing to subject: ${o}`),C5(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return TM(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await fg(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(F5,"publishToStream");function hM(e,t){t===void 0&&(t=y5());let r=Ht.get(be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(hM,"addNatsMsgHeader");function Al(e){e=e.toLowerCase();let t=gl.join(Ht.get(be.CONFIG_PARAMS.ROOTPATH),L5);if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Yo(ag)&&(ag={port:Sl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Sl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:gl.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),ag;if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Yo(og)&&(og={port:Sl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Sl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:Sl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:gl.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),og;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Al,"getServerConfig");async function x5(e){let{jsm:t}=await mr(),r=await Ol();try{await t.streams.add({name:e.stream_name,storage:uM.File,retention:lM.Limits,max_age:R5,max_bytes:A5,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:jf.Explicit,durable_name:e.durable_name,deliver_policy:zf.All,max_ack_pending:1e4});else throw s}}a(x5,"createWorkQueueStream");async function k5(){let{jsm:e}=await mr();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(_s.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),_s.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:jf.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:zf.All,max_ack_pending:1e4}))}a(k5,"updateIngestStreamConsumer");async function mM(e,t,r){let{jsm:s}=await mr(),n=await s.streams.info(t),i=pM(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Qf.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let m=0,S=n.config.sources.length;m<S;m++)if(d=n.config.sources[m],f=m,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let m=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:m}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(mM,"addSourceToWorkStream");function pM(e){return e.split(".")[1]}a(pM,"extractServerName");async function SM(e,t,r){let{jsm:s}=await mr(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=Qf.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(SM,"removeSourceFromWorkStream");async function $5(e,t,r=6e4,s=_g()){if(!ug.isObject(t))throw new Error("data param must be an object");let n=aM.encode(t),{connection:i}=await mr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return lg(c.data)}a($5,"request");function Eg(e){return new Promise(async(t,r)=>{let s=m5(cg,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(Eg,"reloadNATS");async function V5(){let{pid_file_path:e}=Al(be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Eg(e)}a(V5,"reloadNATSHub");async function Y5(){let{pid_file_path:e}=Al(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Eg(e)}a(Y5,"reloadNATSLeaf");function K5(e,t,r){let s;switch(e.code){case nM.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case nM.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(K5,"requestErrorHandler");async function W5(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await TM(async()=>{e.subscribe===!0?await mM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await SM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(W5,"updateWorkStream");function TM(e){return p5.writeTransaction(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(TM,"exclusiveLock");async function gM(e,t){let r=Qf.createNatsTableStreamName(e,t),s=await Ol(),n=J5(e,t,s);await fg(r,[n])}a(gM,"createLocalTableStream");async function Q5(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await gM(s,n)}}a(Q5,"createTableStreams");async function RM(e,t){if(Ht.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Qf.createNatsTableStreamName(e,t),{jsm:s}=await mr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")_s.warn(r);else throw r}}a(RM,"purgeTableStream");async function j5(e,t){if(Ht.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await RM(e,t[r])}a(j5,"purgeSchemaTableStreams");async function z5(e){return(await Rl()).streams.info(e)}a(z5,"getStreamInfo");function J5(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(J5,"createSubjectName");async function Ol(){if(Tl)return Tl;if(Tl=(await Rl())?.nc?.info?.server_name,Tl===void 0)throw new Error("Unable to get jetstream manager server name");return Tl}a(Ol,"getJsmServerName");async function X5(){let e=await Rl(),t=await Ol(),r=await EM();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Z5(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;_s.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;_s.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(X5,"updateLocalStreams");function Z5(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Z5,"updateStreamLimits")});var tE=T((fTe,yM)=>{"use strict";var tc=Ud(),rc=sM(),e8=U(),t8=require("uuid").v4,dTe=require("clone"),Zf=Vn(),sc=R(),r8=require("util"),ki=as(),{handleHDBError:pr,hdb_errors:s8}=Z(),{HDB_ERROR_MSGS:Xf,HTTP_STATUS_CODES:Sr}=s8,{SchemaEventMsg:eE}=Us(),OM=st(),{getDatabases:n8}=(Ee(),te(Le)),{transformReq:nc}=G();yM.exports={createSchema:i8,createSchemaStructure:NM,createTable:o8,createTableStructure:bM,createAttribute:_8,dropSchema:a8,dropTable:c8,dropAttribute:u8,getBackup:d8};async function i8(e){let t=await NM(e);return Zf.signalSchemaChange(new eE(process.pid,e.operation,e.schema)),t}a(i8,"createSchema");async function NM(e){let t=tc.schema_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(nc(e),!await rc.checkSchemaExists(e.schema))throw pr(new Error,Xf.SCHEMA_EXISTS_ERR(e.schema),Sr.BAD_REQUEST,sc.LOG_LEVELS.ERROR,Xf.SCHEMA_EXISTS_ERR(e.schema),!0);return await ki.createSchema(e),`database '${e.schema}' successfully created`}a(NM,"createSchemaStructure");async function o8(e){return nc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await bM(e)}a(o8,"createTable");async function bM(e){let t=tc.create_table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(tc.validateTableResidence(e.residence),!await rc.checkSchemaTableExists(e.schema,e.table))throw pr(new Error,Xf.TABLE_EXISTS_ERR(e.schema,e.table),Sr.BAD_REQUEST,sc.LOG_LEVELS.ERROR,Xf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:t8(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ki.createTable(s,e);else throw pr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sr.BAD_REQUEST);else await ki.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(bM,"createTableStructure");async function a8(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=tc.schema_object(e),s=t??r;if(s)throw pr(s,s.message,Sr.BAD_REQUEST,void 0,void 0,!0);nc(e);let n=await rc.checkSchemaExists(e.schema);if(n)throw pr(new Error,n,Sr.NOT_FOUND,sc.LOG_LEVELS.ERROR,n,!0);let i=await rc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ki.dropSchema(e),Zf.signalSchemaChange(new eE(process.pid,e.operation,e.schema)),await OM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(a8,"dropSchema");async function c8(e){let t=tc.table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);nc(e);let r=await rc.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,sc.LOG_LEVELS.ERROR,r,!0);return await ki.dropTable(e),await OM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(c8,"dropTable");async function u8(e){let t=tc.attribute_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);nc(e);let r=await rc.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,sc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw pr(new Error,"You cannot drop a hash attribute",Sr.BAD_REQUEST,void 0,void 0,!0);if(sc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw pr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sr.BAD_REQUEST,void 0,void 0,!0);try{return await ki.dropAttribute(e),l8(e),Zf.signalSchemaChange(new eE(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw e8.error(`Got an error deleting attribute ${r8.inspect(e)}.`),s}}a(u8,"dropAttribute");function l8(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(l8,"dropAttributeFromGlobal");async function _8(e){nc(e);let t=n8()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw pr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sr.BAD_REQUEST,void 0,void 0,!0);return await ki.createAttribute(e),Zf.signalSchemaChange(new eE(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(_8,"createAttribute");function d8(e){return ki.getBackup(e)}a(d8,"getBackup")});var wM=T((hTe,IM)=>{"use strict";var{OPERATIONS_ENUM:f8}=R(),hg=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=f8.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};IM.exports=hg});var mg=T((STe,MM)=>{"use strict";var E8=as(),pTe=wM(),rE=G(),sE=R(),h8=j(),{handleHDBError:CM,hdb_errors:m8}=Z(),{HDB_ERROR_MSGS:LM,HTTP_STATUS_CODES:DM}=m8,p8=Object.values(sE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),PM="To use this operation audit log must be enabled in harperdb-config.yaml";MM.exports=S8;async function S8(e){if(rE.isEmpty(e.schema))throw new Error(LM.SCHEMA_REQUIRED_ERR);if(rE.isEmpty(e.table))throw new Error(LM.TABLE_REQUIRED_ERR);if(!h8.get(sE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw CM(new Error,PM,DM.BAD_REQUEST,sE.LOG_LEVELS.ERROR,PM,!0);let t=rE.checkSchemaTableExist(e.schema,e.table);if(t)throw CM(new Error,t,DM.NOT_FOUND,sE.LOG_LEVELS.ERROR,t,!0);if(!rE.isEmpty(e.search_type)&&p8.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await E8.readAuditLog(e)}a(S8,"readAuditLog")});var vM=T((gTe,UM)=>{"use strict";var{OPERATIONS_ENUM:T8}=R(),pg=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=T8.GET_BACKUP,this.schema=t,this.table=r}};UM.exports=pg});var qM=T((NTe,HM)=>{"use strict";var g8=as(),ATe=vM(),Sg=G(),R8=R(),OTe=j(),{handleHDBError:A8,hdb_errors:O8}=Z(),{HDB_ERROR_MSGS:BM,HTTP_STATUS_CODES:N8}=O8;HM.exports=b8;async function b8(e){if(Sg.isEmpty(e.schema))throw new Error(BM.SCHEMA_REQUIRED_ERR);if(Sg.isEmpty(e.table))throw new Error(BM.TABLE_REQUIRED_ERR);let t=Sg.checkSchemaTableExist(e.schema,e.table);if(t)throw A8(new Error,t,N8.NOT_FOUND,R8.LOG_LEVELS.ERROR,t,!0);return await g8.getBackup(read_audit_log_object)}a(b8,"getBackup")});var VM=T((yTe,$M)=>{var $i=require("validate.js"),FM=Ve(),ic=R(),{handleHDBError:y8,hdb_errors:I8}=Z(),{HDB_ERROR_MSGS:nt,HTTP_STATUS_CODES:w8}=I8,Tg=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),C8={STRUCTURE_USER:"structure_user"},GM=Object.values(ic.ROLE_TYPES_ENUM),L8="attribute_permissions",D8="attribute_name",{PERMS_CRUD_ENUM:oc}=ic,P8=[L8,...Object.values(oc)],xM=[oc.READ,oc.INSERT,oc.UPDATE],M8=[D8,...xM];function U8(e){let t=Tg();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,kM(e,t)}a(U8,"addRoleValidation");function v8(e){let t=Tg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,kM(e,t)}a(v8,"alterRoleValidation");function B8(e){let t=Tg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,FM.validateObject(e,t)}a(B8,"dropRoleValidation");var H8=["operation","role","id","permission","hdb_user","hdb_auth_header"];function kM(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)H8.includes(s[o])||n.push(s[o]);n.length>0&&_t(nt.INVALID_ROLE_JSON_KEYS(n),r);let i=FM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_t(o,r)}),e.permission){let o=q8(e);o&&_t(o,r),GM.forEach(c=>{e.permission[c]&&!$i.isBoolean(e.permission[c])&&_t(nt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(GM.indexOf(o)<0){if(o===C8.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||_t(nt.SCHEMA_NOT_FOUND(d),r)}continue}_t(nt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){_t(nt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){_t(nt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{P8.includes(l)||_t(nt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(oc).forEach(l=>{$i.isDefined(_[l])?$i.isBoolean(_[l])||_t(nt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):_t(nt.TABLE_PERM_MISSING(l),r,o,u)}),$i.isDefined(_.attribute_permissions)){if(!$i.isArray(_.attribute_permissions)){_t(nt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{_t(nt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!M8.includes(m)&&m!==oc.DELETE&&_t(nt.INVALID_ATTR_PERM_KEY(m),r,o,u)}),!$i.isDefined(E.attribute_name)){_t(nt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){_t(nt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}xM.forEach(m=>{$i.isDefined(E[m])?$i.isBoolean(E[m])||_t(nt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,u):_t(nt.ATTR_PERM_MISSING(m,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;_t(nt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return G8(r)}a(kM,"customValidate");$M.exports={addRoleValidation:U8,alterRoleValidation:v8,dropRoleValidation:B8};function q8(e){let{operation:t,permission:r}=e;if(t===ic.OPERATIONS_ENUM.ADD_ROLE||t===ic.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return nt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ic.ROLE_TYPES_ENUM.SUPER_USER:ic.ROLE_TYPES_ENUM.CLUSTER_USER;return nt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(q8,"validateNoSUPerms");function G8(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:nt.ROLE_PERMS_ERROR,...e};return y8(new Error,s,w8.BAD_REQUEST)}else return null}a(G8,"generateRolePermResponse");function _t(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(_t,"addPermError")});var oE=T((wTe,QM)=>{"use strict";var YM=dr(),KM=_r(),F8=Ho(),Rg=VM(),Ag=Vn(),x8=require("uuid").v4,k8=require("util"),nE=R(),$8=G(),Og=KM.searchByValue,V8=KM.searchByHash,Y8=k8.promisify(F8.delete),K8=vs(),W8=qa(),{hdb_errors:Q8,handleHDBError:ac}=Z(),{HDB_ERROR_MSGS:WM,HTTP_STATUS_CODES:iE}=Q8,{UserEventMsg:Ng}=Us();QM.exports={addRole:j8,alterRole:z8,dropRole:J8,listRoles:X8};function gg(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(gg,"scrubRoleDetails");async function j8(e){let t=Rg.addRoleValidation(e);if(t)throw t;e=gg(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Og(r)||[])}catch(i){throw ac(i)}if(s&&s.length>0)throw ac(new Error,WM.ROLE_ALREADY_EXISTS(e.role),iE.CONFLICT,void 0,void 0,!0);e.id||(e.id=x8());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await YM.insert(n),Ag.signalUserChange(new Ng(process.pid)),e=gg(e),e}a(j8,"addRole");async function z8(e){let t=Rg.alterRoleValidation(e);if(t)throw t;e=gg(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await YM.update(r)}catch(n){throw ac(n)}if(s&&s?.message==="updated 0 of 1 records")throw ac(new Error,"Invalid role id",iE.BAD_REQUEST,void 0,void 0,!0);return await Ag.signalUserChange(new Ng(process.pid)),e}a(z8,"alterRole");async function J8(e){let t=Rg.dropRoleValidation(e);if(t)throw ac(new Error,t,iE.BAD_REQUEST,void 0,void 0,!0);let r=new W8(nE.SYSTEM_SCHEMA_NAME,nE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await V8(r));if(s.length===0)throw ac(new Error,WM.ROLE_NOT_FOUND,iE.NOT_FOUND,void 0,void 0,!0);let n=new K8(nE.SYSTEM_SCHEMA_NAME,nE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Og(n)),o=!1;if($8.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Y8(c),Ag.signalUserChange(new Ng(process.pid)),`${s[0].role} successfully deleted`}a(J8,"dropRole");async function X8(){return Og({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(X8,"listRoles")});var XM=T((LTe,JM)=>{"use strict";var Z8=j(),Vi=require("joi"),e6=Ve(),jM=require("moment"),t6=require("fs-extra"),bg=require("path"),r6=require("lodash"),Nl=R(),{LOG_LEVELS:Ko}=R(),s6="YYYY-MM-DD hh:mm:ss",n6=bg.resolve(__dirname,"../logs");JM.exports=function(e){return e6.validateBySchema(e,i6)};var i6=Vi.object({from:Vi.custom(zM),until:Vi.custom(zM),level:Vi.valid(Ko.NOTIFY,Ko.FATAL,Ko.ERROR,Ko.WARN,Ko.INFO,Ko.DEBUG,Ko.TRACE),order:Vi.valid("asc","desc"),limit:Vi.number().min(1),start:Vi.number().min(0),log_name:Vi.custom(o6)});function zM(e,t){if(jM(e,jM.ISO_8601).format(s6)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(zM,"validateDatetime");function o6(e,t){if(r6.invert(Nl.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=Z8.get(Nl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Nl.LOG_NAMES.HDB:e,i=n===Nl.LOG_NAMES.INSTALL?bg.join(n6,Nl.LOG_NAMES.INSTALL):bg.join(s,n);return t6.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(o6,"validateReadLogPath")});var Ig=T((PTe,eU)=>{"use strict";var aE=R(),a6=U(),c6=j(),u6=XM(),yg=require("path"),ZM=require("fs-extra"),{once:l6}=require("events"),{handleHDBError:_6,hdb_errors:d6}=Z(),{PACKAGE_ROOT:f6}=R(),E6=yg.join(f6,"logs"),h6=1e3,m6=200;eU.exports=p6;async function p6(e){let t=u6(e);if(t)throw _6(t,t.message,d6.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=c6.get(aE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?aE.LOG_NAMES.HDB:e.log_name,n=s===aE.LOG_NAMES.INSTALL?yg.join(E6,aE.LOG_NAMES.INSTALL):yg.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?h6:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!u&&!l&&(m=Math.max(ZM.statSync(n).size-(h+5)*m6,0));let S=ZM.createReadStream(n,{start:m});S.on("error",F=>{a6.error(F)});let A=0,g=[],N="",V;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){V&&(V.message=F.slice(K,B.index),$(V));let[k,se,Ie]=B,ie=Ie.split("] ["),Vt=ie[0],Ge=ie[1];ie.splice(0,2),V={timestamp:se,thread:Vt,level:Ge,tags:ie,message:""},K=B.index+k.length}N=F.slice(K)}),S.on("end",F=>{S.destroyed||V&&(V.message=N.trim(),$(V))}),S.resume();function $(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&A<E?A++:F.level===o&&w>=K&&w<=B&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&A<E?A++:F.level===o&&w>=K&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&A<E?A++:F.level===o&&w<=B&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Yi(F,f,g),A++,A===h&&S.destroy());break;default:A<E?A++:(Yi(F,f,g),A++,A===h&&S.destroy())}}return a($,"onLogMessage"),await l6(S,"close"),g}a(p6,"readLog");function Yi(e,t,r){t==="desc"?S6(e,r):t==="asc"?T6(e,r):r.push(e)}a(Yi,"pushLineToResult");function S6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(S6,"insertDescending");function T6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(T6,"insertAscending")});var uE=T((HTe,nU)=>{"use strict";var wg=require("joi"),{string:cE,boolean:tU,date:g6}=wg.types(),R6=Ve(),{validateSchemaExists:UTe,validateTableExists:vTe,validateSchemaName:BTe}=cn(),A6=R(),O6=ke(),rU=j();rU.initSync();var N6=cE.invalid(rU.get(A6.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(O6.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(),sU={operation:cE.valid("add_node","update_node"),node_name:N6,subscriptions:wg.array().items({table:cE.optional(),schema:cE.required(),subscribe:tU.required(),publish:tU.required().custom(y6),start_time:g6.iso()}).min(1).required()};function b6(e){return R6.validateBySchema(e,wg.object(sU))}a(b6,"addUpdateNodeValidator");function y6(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(y6,"checkForFalsy");nU.exports={addUpdateNodeValidator:b6,validation_schema:sU}});var oU=T((GTe,iU)=>{var I6=Ve(),w6={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};iU.exports=function(e){return I6.validateObject(e,w6)}});var lE=T((FTe,aU)=>{"use strict";var C6=R().OPERATIONS_ENUM,Cg=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=C6.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};aU.exports=Cg});var uU=T((kTe,cU)=>{"use strict";var L6={OPERATION:"operation",REFRESH:"refresh"},Lg=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Dg=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};cU.exports={JWTTokens:Lg,TOKEN_TYPE_ENUM:L6,JWTRSAKeys:Dg}});var Il=T((VTe,fU)=>{"use strict";var yl=require("jsonwebtoken"),Pg=require("fs-extra"),Mg=G(),ds=R(),{handleHDBError:Tr,hdb_errors:D6}=Z(),{HTTP_STATUS_CODES:gr,AUTHENTICATION_ERROR_MSGS:Rr}=D6,bl=U(),lU=uf(),Bg=Er(),P6=dr().update,M6=lE(),U6=Vn(),{UserEventMsg:v6}=Us(),Ki=j();Ki.initSync();var Ug=require("path"),{JWTTokens:B6,JWTRSAKeys:H6,TOKEN_TYPE_ENUM:_E}=uU(),q6=Ki.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ki.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",G6=Ki.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ki.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",dE="RS256",vg;fU.exports={createTokens:F6,validateOperationToken:k6,refreshOperationToken:x6,validateRefreshToken:dU};async function F6(e){if(Mg.isEmpty(e)||typeof e!="object")throw Tr(new Error,Rr.INVALID_AUTH_OBJECT,gr.BAD_REQUEST,void 0,void 0,!0);if(Mg.isEmpty(e.username))throw Tr(new Error,Rr.USERNAME_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);if(Mg.isEmpty(e.password))throw Tr(new Error,Rr.PASSWORD_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Bg.findAndValidateUser(e.username,e.password),!t)throw Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw bl.error(f),Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}let r=await fE(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await _U(i,r.private_key,r.passphrase),c=await yl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:G6,algorithm:dE,subject:_E.REFRESH}),u=lU.hash(c),_=new M6(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await P6(_)}catch(f){bl.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Tr(new Error,Rr.REFRESH_TOKEN_SAVE_FAILED,gr.INTERNAL_SERVER_ERROR);return U6.signalUserChange(new v6(process.pid)),new B6(o,c)}a(F6,"createTokens");async function _U(e,t,r){return await yl.sign(e,{key:t,passphrase:r},{expiresIn:q6,algorithm:dE,subject:_E.OPERATION})}a(_U,"signOperationToken");async function fE(){if(vg===void 0)try{let e=Ug.join(Ki.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ug.join(Ki.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ug.join(Ki.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Pg.readFile(e)).toString(),n=(await Pg.readFile(t)).toString(),i=(await Pg.readFile(r)).toString();vg=new H6(i,n,s)}catch(e){throw bl.error(e),Tr(new Error,Rr.NO_ENCRYPTION_KEYS,gr.INTERNAL_SERVER_ERROR)}return vg}a(fE,"getJWTRSAKeys");async function x6(e){if(!e)throw Tr(new Error,Rr.INVALID_BODY,gr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Tr(new Error,Rr.REFRESH_TOKEN_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);await dU(e.refresh_token);let t=await fE(),r=await yl.decode(e.refresh_token);return{operation_token:await _U({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(x6,"refreshOperationToken");async function k6(e){try{let t=await fE(),r=await yl.verify(e,t.public_key,{algorithms:dE,subject:_E.OPERATION});return await Bg.findAndValidateUser(r.username,void 0,!1)}catch(t){throw bl.warn(t),t.name&&t.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}}a(k6,"validateOperationToken");async function dU(e){let t;try{let r=await fE(),s=await yl.verify(e,r.public_key,{algorithms:dE,subject:_E.REFRESH});t=await Bg.findAndValidateUser(s.username,void 0,!1)}catch(r){throw bl.warn(r),r.name&&r.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}if(!lU.validate(t.refresh_token,e))throw Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED);return t}a(dU,"validateRefreshToken")});var Hg=T((WTe,mU)=>{"use strict";var $6=oU(),cc=require("passport"),V6=require("passport-local").Strategy,Y6=require("passport-http").BasicStrategy,K6=require("util"),W6=Er(),hU=K6.callbackify(W6.findAndValidateUser),KTe=Mr(),Q6=R(),EU=Il();cc.use(new V6(function(e,t,r){hU(e,t,r)}));cc.use(new Y6(function(e,t,r){hU(e,t,r)}));cc.serializeUser(function(e,t){t(null,e)});cc.deserializeUser(function(e,t){t(null,e)});function j6(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":cc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Q6.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?EU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):EU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:cc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(j6,"authorize");function z6(e,t){let r=$6(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(z6,"checkPermissions");mU.exports={authorize:j6,checkPermissions:z6}});var uc=T((jTe,pU)=>{"use strict";var qg=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Gg=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};pU.exports={Node:qg,NodeSubscription:Gg}});var TU=T((JTe,SU)=>{"use strict";var J6=R().OPERATIONS_ENUM,Fg=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=J6.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};SU.exports=Fg});var wl=T((ZTe,gU)=>{"use strict";var xg=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},kg=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};gU.exports={RemotePayloadObject:xg,RemotePayloadSubscription:kg}});var AU=T((tge,RU)=>{"use strict";var $g=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};RU.exports=$g});var bU=T((oge,NU)=>{"use strict";var X6=AU(),sge=Ke(),OU=Pe(),Z6=U(),{getSchemaPath:nge,getTransactionAuditStorePath:ige}=He(),{getDatabases:e9}=(Ee(),te(Le));NU.exports=t9;async function t9(e){let t=new X6;try{let r=e9()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await OU.environmentDataSize(schema_path,e.name),o=await OU.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){Z6.warn(`unable to stat table dbi due to ${r}`)}return t}a(t9,"lmdbGetTableSize")});var IU=T((cge,yU)=>{"use strict";var Vg=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};yU.exports=Vg});var Xn=T((dge,DU)=>{"use strict";var r9=require("fs-extra"),s9=require("path"),Jt=require("systeminformation"),Wi=U(),n9=st(),Yg=ke(),hE=R(),i9=bU(),LU=Ui(),{getThreadInfo:wU}=Qe(),tR=j();tR.initSync();var o9=IU(),{openEnvironment:lge}=Pe(),{getSchemaPath:_ge}=He(),{database:a9}=(Ee(),te(Le)),EE;DU.exports={getHDBProcessInfo:jg,getNetworkInfo:Jg,getDiskInfo:zg,getMemoryInfo:Qg,getCPUInfo:Wg,getTimeInfo:Kg,getSystemInformation:Xg,systemInformation:c9,getTableSize:Zg,getMetrics:eR};function Kg(){return Jt.time()}a(Kg,"getTimeInfo");async function Wg(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:A,...g}=await Jt.currentLoad();return g.cpus=[],A.forEach(N=>{let{raw_load:V,raw_load_idle:$,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...k}=N;g.cpus.push(k)}),l.current_load=g,l}catch(e){return Wi.error(`error in getCPUInfo: ${e}`),{}}}a(Wg,"getCPUInfo");async function Qg(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wi.error(`error in getMemoryInfo: ${e}`),{}}}a(Qg,"getMemoryInfo");async function jg(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await r9.readFile(s9.join(tR.get(hE.CONFIG_PARAMS.ROOTPATH),hE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===hE.NODE_ERROR_CODES.ENOENT)Wi.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Wi.error(`error in getHDBProcessInfo: ${t}`),e}}a(jg,"getHDBProcessInfo");async function zg(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return Wi.error(`error in getDiskInfo: ${t}`),e}}a(zg,"getDiskInfo");async function Jg(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Wi.error(`error in getNetworkInfo: ${t}`),e}}a(Jg,"getNetworkInfo");async function Xg(){if(EE!==void 0)return EE;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,EE=e,EE}catch(t){return Wi.error(`error in getSystemInformation: ${t}`),e}}a(Xg,"getSystemInformation");async function Zg(){let e=[],t=await LU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await i9(s));return e}a(Zg,"getTableSize");async function eR(){let e=await LU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=a9({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Wi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(eR,"getMetrics");async function CU(){if(tR.get(hE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await n9.getNATSReferences(),r=await t.streams.info(Yg.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Yg.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yg.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(CU,"getNatsStreamInfo");async function c9(e){let t=new o9;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Xg(),t.time=Kg(),t.cpu=await Wg(),t.memory=await Qg(),t.disk=await zg(),t.network=await Jg(),t.harperdb_processes=await jg(),t.table_size=await Zg(),t.metrics=await eR(),t.threads=await wU(),t.replication=await CU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Xg();break;case"time":t.time=Kg();break;case"cpu":t.cpu=await Wg();break;case"memory":t.memory=await Qg();break;case"disk":t.disk=await zg();break;case"network":t.network=await Jg();break;case"harperdb_processes":t.harperdb_processes=await jg();break;case"table_size":t.table_size=await Zg();break;case"database_metrics":case"metrics":t.metrics=await eR();break;case"threads":t.threads=await wU();break;case"replication":t.replication=await CU();break;default:break}return t}a(c9,"systemInformation")});var Zn=T((mge,vU)=>{"use strict";var u9=dr(),rR=G(),l9=require("util"),Wo=R(),PU=j();PU.initSync();var _9=Hg(),MU=_r(),{Node:Ege,NodeSubscription:hge}=uc(),d9=qa(),f9=TU(),{RemotePayloadObject:E9,RemotePayloadSubscription:h9}=wl(),{handleHDBError:m9,hdb_errors:p9}=Z(),{HTTP_STATUS_CODES:S9,HDB_ERROR_MSGS:T9}=p9,g9=vs(),R9=Xn(),A9=go(),{getDatabases:O9}=(Ee(),te(Le)),N9=l9.promisify(_9.authorize),b9=MU.searchByHash,y9=MU.searchByValue;vU.exports={authHeaderToUser:I9,isEmpty:w9,getNodeRecord:C9,upsertNodeRecord:L9,buildNodePayloads:D9,checkClusteringEnabled:P9,getAllNodeRecords:M9,getSystemInfo:U9,reverseSubscription:UU};async function I9(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await N9(t,null),e}a(I9,"authHeaderToUser");function w9(e){return e==null}a(w9,"isEmpty");async function C9(e){let t=new d9(Wo.SYSTEM_SCHEMA_NAME,Wo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return b9(t)}a(C9,"getNodeRecord");async function L9(e){let t=new f9(Wo.SYSTEM_SCHEMA_NAME,Wo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return u9.upsert(t)}a(L9,"upsertNodeRecord");function UU(e){if(rR.isEmpty(e.subscribe)||rR.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(UU,"reverseSubscription");function D9(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=rR.getTableHashAttribute(u,_),{subscribe:d,publish:f}=UU(c),E=O9()[u]?.[_],h=new h9(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new E9(r,t,n,s)}a(D9,"buildNodePayloads");function P9(){if(!PU.get(Wo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw m9(new Error,T9.CLUSTERING_NOT_ENABLED,S9.BAD_REQUEST,void 0,void 0,!0)}a(P9,"checkClusteringEnabled");async function M9(){let e=new g9(Wo.SYSTEM_SCHEMA_NAME,Wo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await y9(e))}a(M9,"getAllNodeRecords");async function U9(){let e=await R9.getSystemInformation();return{hdb_version:A9.version(),node_version:e.node_version,platform:e.platform}}a(U9,"getSystemInfo")});var sR=T((Sge,$U)=>{"use strict";var mE=st(),BU=G(),HU=ke(),qU=R(),pE=U(),GU=tE(),v9=ku(),{RemotePayloadObject:B9}=wl(),{handleHDBError:FU,hdb_errors:H9}=Z(),{HTTP_STATUS_CODES:xU}=H9,{NodeSubscription:kU}=uc();$U.exports=q9;async function q9(e,t){let r;try{r=await mE.request(`${t}.${HU.REQUEST_SUFFIX}`,new B9(qU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),pE.trace("Response from remote describe all request:",r)}catch(o){pE.error(`addNode received error from describe all request to remote node: ${o}`);let c=mE.requestErrorHandler(o,"add_node",t);throw FU(new Error,c,xU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===HU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw FU(new Error,o,xU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===qU.SYSTEM_SCHEMA_NAME){await mE.createLocalTableStream(c,u);let h=new kU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=BU.doesSchemaExist(c),l=s[c]!==void 0,d=u?BU.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(pE.trace(`addNode creating schema: ${c}`),await GU.createSchema({operation:"create_schema",schema:c})),!d&&f){pE.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new v9(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await GU.createTable(h)}await mE.createLocalTableStream(c,u);let E=new kU(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(q9,"reviewSubscriptions")});var Dl=T((gge,KU)=>{"use strict";var{handleHDBError:SE,hdb_errors:G9}=Z(),{HTTP_STATUS_CODES:TE}=G9,{addUpdateNodeValidator:F9}=uE(),Cl=U(),YU=R(),VU=ke(),x9=G(),nR=st(),Ll=Zn(),k9=j(),$9=sR(),{Node:V9,NodeSubscription:Y9}=uc(),{broadcast:K9}=Qe(),W9="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Q9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",j9=k9.get(YU.CONFIG_PARAMS.CLUSTERING_NODENAME);KU.exports=z9;async function z9(e,t=!1){Cl.trace("addNode called with:",e),Ll.checkClusteringEnabled();let r=F9(e);if(r)throw SE(r,r.message,TE.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Ll.getNodeRecord(s);if(!x9.isEmptyOrZeroLength(d))throw SE(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,TE.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await $9(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=W9,o;let c=Ll.buildNodePayloads(n,j9,YU.OPERATIONS_ENUM.ADD_NODE,await Ll.getSystemInfo());Cl.trace("addNode sending remote payload:",c);let u;try{u=await nR.request(`${s}.${VU.REQUEST_SUFFIX}`,c)}catch(d){Cl.error(`addNode received error from request: ${d}`);let f=nR.requestErrorHandler(d,"add_node",s);throw SE(new Error,f,TE.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===VU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw SE(new Error,d,TE.INTERNAL_SERVER_ERROR,"error",d)}Cl.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Cl.trace("Add node updating work stream for node:",s,"subscriptions:",E),await nR.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Y9(E.schema,E.table,E.publish,E.subscribe))}let l=new V9(s,_,u.system_info);return await Ll.upsertNodeRecord(l),K9({type:"nats_update"}),i.length>0?o.message=Q9:o.message=`Successfully added '${s}' to manifest`,o}a(z9,"addNode")});var oR=T((Age,jU)=>{"use strict";var{handleHDBError:gE,hdb_errors:J9}=Z(),{HTTP_STATUS_CODES:RE}=J9,{addUpdateNodeValidator:X9}=uE(),Pl=U(),QU=R(),WU=ke(),Z9=G(),iR=st(),Ml=Zn(),e7=j(),{cloneDeep:t7}=require("lodash"),r7=sR(),{NodeSubscription:s7}=uc(),{broadcast:n7}=Qe(),i7="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",o7="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",a7=e7.get(QU.CONFIG_PARAMS.CLUSTERING_NODENAME);jU.exports=c7;async function c7(e){Pl.trace("updateNode called with:",e),Ml.checkClusteringEnabled();let t=X9(e);if(t)throw gE(t,t.message,RE.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=t7(await Ml.getNodeRecord(r));if(Z9.isEmptyOrZeroLength(s))throw gE(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,RE.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await r7(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=i7,o;let c=Ml.buildNodePayloads(n,a7,QU.OPERATIONS_ENUM.UPDATE_NODE,await Ml.getSystemInfo());Pl.trace("updateNode sending remote payload:",c);let u;try{u=await iR.request(`${r}.${WU.REQUEST_SUFFIX}`,c)}catch(_){Pl.error(`updateNode received error from request: ${_}`);let l=iR.requestErrorHandler(_,"update_node",r);throw gE(new Error,l,RE.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===WU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw gE(new Error,_,RE.INTERNAL_SERVER_ERROR,"error",_)}Pl.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Pl.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await iR.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await u7(s[0],n,u.system_info),i.length>0?o.message=o7:o.message=`Successfully updated '${r}'`,o}a(c7,"updateNode");async function u7(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new s7(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Ml.upsertNodeRecord(s),n7({type:"nats_update"})}a(u7,"updateNodeTable")});var ev=T((Nge,ZU)=>{"use strict";var XU=require("joi"),{string:zU}=XU.types(),l7=Ve(),JU=R(),_7=j(),d7=ke();ZU.exports=f7;function f7(e){let t=zU.invalid(_7.get(JU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(d7.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=XU.object({operation:zU.valid(JU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return l7.validateBySchema(e,r)}a(f7,"removeNodeValidator")});var OE=T((yge,ov)=>{"use strict";var{handleHDBError:tv,hdb_errors:E7}=Z(),{HTTP_STATUS_CODES:rv}=E7,h7=ev(),Ul=U(),sv=Zn(),m7=G(),AE=R(),nv=ke(),iv=st(),p7=j(),{RemotePayloadObject:S7}=wl(),{NodeSubscription:T7}=uc(),g7=xu(),R7=Ho(),{broadcast:A7}=Qe(),O7=p7.get(AE.CONFIG_PARAMS.CLUSTERING_NODENAME);ov.exports=N7;async function N7(e){Ul.trace("removeNode called with:",e),sv.checkClusteringEnabled();let t=h7(e);if(t)throw tv(t,t.message,rv.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await sv.getNodeRecord(r);if(m7.isEmptyOrZeroLength(s))throw tv(new Error,`Node '${r}' was not found.`,rv.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new S7(AE.OPERATIONS_ENUM.REMOVE_NODE,O7,[]),i,o=!1;try{i=await iv.request(`${r}.${nv.REQUEST_SUFFIX}`,n),Ul.trace("Remove node reply from remote node:",r,i)}catch(u){Ul.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Ul.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new T7(l.schema,l.table,!1,!1);await iv.updateWorkStream(d,r)}let c=new g7(AE.SYSTEM_SCHEMA_NAME,AE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await R7.deleteRecord(c),A7({type:"nats_update"}),i?.status===nv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ul.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(N7,"removeNode")});var uv=T((wge,cv)=>{"use strict";var av=require("joi"),{string:b7,array:y7}=av.types(),I7=Ve(),w7=uE();cv.exports=C7;function C7(e){let t=av.object({operation:b7.valid("configure_cluster").required(),connections:y7.items(w7.validation_schema).required()});return I7.validateBySchema(e,t)}a(C7,"configureClusterValidator")});var bE=T((Lge,Ev)=>{"use strict";var L7=R(),NE=U(),D7=G(),P7=OE(),M7=Dl(),lv=Zn(),U7=uv(),{handleHDBError:_v,hdb_errors:v7}=Z(),{HTTP_STATUS_CODES:dv}=v7,B7="Configure cluster complete.",H7="Failed to configure the cluster. Check the logs for more details.",q7="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Ev.exports=G7;async function G7(e){NE.trace("configure cluster called with:",e),lv.checkClusteringEnabled();let t=U7(e);if(t)throw _v(t,t.message,dv.BAD_REQUEST,void 0,void 0,!0);let r=await lv.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(fv(P7,{operation:L7.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);NE.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(fv(M7,E,E.node_name))}let c=await Promise.allSettled(i);NE.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(NE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(D7.isEmptyOrZeroLength(u))return{message:B7,connections:_};if(l)return{message:q7,failed_nodes:u,connections:_};throw _v(new Error,H7,dv.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(G7,"configureCluster");async function fv(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(fv,"functionWrapper")});var mv=T((Pge,hv)=>{"use strict";var yE=require("joi"),F7=Ve(),{validateSchemaExists:x7,validateTableExists:k7,validateSchemaName:$7}=cn(),V7=yE.object({operation:yE.string().valid("purge_stream"),schema:yE.string().custom(x7).custom($7).required(),table:yE.string().custom(k7).required()});function Y7(e){return F7.validateBySchema(e,V7)}a(Y7,"purgeStreamValidator");hv.exports=Y7});var aR=T((Uge,pv)=>{"use strict";var{handleHDBError:K7,hdb_errors:W7}=Z(),{HTTP_STATUS_CODES:Q7}=W7,j7=mv(),z7=st(),J7=Zn();pv.exports=X7;async function X7(e){let t=j7(e);if(t)throw K7(t,t.message,Q7.BAD_REQUEST,void 0,void 0,!0);J7.checkClusteringEnabled();let{schema:r,table:s}=e;return await z7.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(X7,"purgeStream")});var wE=T((Bge,Ov)=>{"use strict";var uR=Zn(),Z7=st(),gv=j(),IE=R(),Qo=ke(),eee=G(),cR=U(),{RemotePayloadObject:tee}=wl(),{ErrorCode:Sv}=require("nats"),Tv=gv.get(IE.CONFIG_PARAMS.CLUSTERING_ENABLED),Rv=gv.get(IE.CONFIG_PARAMS.CLUSTERING_NODENAME);Ov.exports={clusterStatus:ree,buildNodeStatus:Av};async function ree(){let e={node_name:Rv,is_enabled:Tv,connections:[]};if(!Tv)return e;let t=await uR.getAllNodeRecords();if(eee.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(Av(t[s],e.connections));return await Promise.allSettled(r),e}a(ree,"clusterStatus");async function Av(e,t){let r=e.name,s=new tee(IE.OPERATIONS_ENUM.CLUSTER_STATUS,Rv,void 0,await uR.getSystemInfo()),n,i,o=Qo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await Z7.request(Qo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Qo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Qo.CLUSTER_STATUS_STATUSES.CLOSED,cR.error(`Error getting node status from ${r} `,n))}catch(u){cR.warn(`Error getting node status from ${r}`,u),u.code===Sv.NoResponders?o=Qo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===Sv.Timeout?o=Qo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Qo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new see(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==IE.PRE_4_0_0_VERSION&&await uR.upsertNodeRecord(u)}catch(u){cR.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(Av,"buildNodeStatus");function see(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(see,"NodeStatusObject")});var LE=T((qge,Nv)=>{"use strict";var{handleHDBError:nee,hdb_errors:iee}=Z(),{HTTP_STATUS_CODES:oee}=iee,aee=st(),cee=Zn(),lR=G(),CE=require("joi"),uee=Ve(),lee=2e3,_ee=CE.object({timeout:CE.number().min(1),connected_nodes:CE.boolean(),routes:CE.boolean()});Nv.exports=dee;async function dee(e){cee.checkClusteringEnabled();let t=uee.validateBySchema(e,_ee);if(t)throw nee(t,t.message,oee.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||lR.autoCastBoolean(s),o=n===void 0||lR.autoCastBoolean(n),c={nodes:[]},u=await aee.getServerList(r??lee),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:lR.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(dee,"clusterNetwork")});var wv=T((Fge,Iv)=>{"use strict";var _R=require("joi"),bv=Ve(),{route_constraints:yv}=dT();Iv.exports={setRoutesValidator:fee,deleteRoutesValidator:Eee};function fee(e){let t=_R.object({server:_R.valid("hub","leaf").required(),routes:yv.required()});return bv.validateBySchema(e,t)}a(fee,"setRoutesValidator");function Eee(e){let t=_R.object({routes:yv.required()});return bv.validateBySchema(e,t)}a(Eee,"deleteRoutesValidator")});var PE=T((kge,Pv)=>{"use strict";var jo=rt(),dR=G(),DE=R(),Cv=wv(),{handleHDBError:Lv,hdb_errors:hee}=Z(),{HTTP_STATUS_CODES:Dv}=hee,mee="cluster routes successfully set",pee="cluster routes successfully deleted";Pv.exports={setRoutes:See,getRoutes:Tee,deleteRoutes:gee};function See(e){let t=Cv.setRoutesValidator(e);if(t)throw Lv(t,t.message,Dv.BAD_REQUEST,void 0,void 0,!0);let r=jo.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=dR.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?jo.updateConfigValue(DE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):jo.updateConfigValue(DE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:mee,set:o,skipped:i}}a(See,"setRoutes");function Tee(){let e=jo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Tee,"getRoutes");function gee(e){let t=Cv.deleteRoutesValidator(e);if(t)throw Lv(t,t.message,Dv.BAD_REQUEST,void 0,void 0,!0);let r=jo.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let m=s[E];if(d.host===m.host&&d.port===m.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=n.length;h<m;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=dR.isEmptyOrZeroLength(s)?null:s,jo.updateConfigValue(DE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=dR.isEmptyOrZeroLength(n)?null:n,jo.updateConfigValue(DE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:pee,deleted:i,skipped:o}}a(gee,"deleteRoutes")});var Uv=T((Vge,Mv)=>{"use strict";var vl=require("alasql"),zo=require("recursive-iterator"),Ys=U(),Ree=G(),Bl=R(),fR=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,Oee(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Bl.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Bl.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Bl.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Aee(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Bl.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new vl.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function Aee(e){return e.filter(t=>t[Bl.PERMS_CRUD_ENUM.READ])}a(Aee,"filterReadRestrictedAttrs");function Oee(e,t,r,s,n){Nee(e,t,r,s,n)}a(Oee,"interpretAST");function Hl(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Hl,"addSchemaTableToMap");function Nee(e,t,r,s,n){if(!e){Ys.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof vl.yy.Insert?wee(e,t,r):e instanceof vl.yy.Select?bee(e,t,r,s,n):e instanceof vl.yy.Update?yee(e,t,r):e instanceof vl.yy.Delete?Iee(e,t,r):Ys.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Nee,"getRecordAttributesAST");function bee(e,t,r,s,n){if(!e){Ys.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Ree.isEmptyOrZeroLength(i)){Ys.error("No schema specified");return}e.from.forEach(c=>{Hl(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Hl(c.table,t,r,s,n)});let o=new zo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ys.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new zo(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ys.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new zo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ys.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new zo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ys.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(bee,"getSelectAttributes");function yee(e,t,r){if(!e){Ys.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new zo(e.columns),n=e.table.databaseid;Hl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ER(e.table.tableid,n,i.columnid,t,r)}a(yee,"getUpdateAttributes");function Iee(e,t,r){if(!e){Ys.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new zo(e.where),n=e.table.databaseid;Hl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ER(e.table.tableid,n,i.columnid,t,r)}a(Iee,"getDeleteAttributes");function wee(e,t,r){if(!e){Ys.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new zo(e.columns),n=e.into.databaseid;Hl(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ER(e.into.tableid,n,i.columnid,t,r)}a(wee,"getInsertAttributes");function ER(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ER,"pushAttribute");Mv.exports=fR});var UE=T((Kge,qv)=>{var ME=Xu(),vv=require("chalk"),Wr=U(),Bv=require("prompt"),{promisify:Cee}=require("util"),hR=R(),Lee=require("fs-extra"),Dee=require("path"),Pee=G(),Mee=go(),Hv=j();Hv.initSync();var Uee=require("moment"),vee=Cee(Bv.get),Bee=Dee.join(Hv.getHdbBasePath(),hR.LICENSE_KEY_DIR_NAME,hR.LICENSE_FILE_NAME,hR.LICENSE_FILE_NAME);qv.exports={getFingerprint:qee,setLicense:Hee,parseLicense:mR,register:Gee,getRegistrationInfo:xee};async function Hee(e){if(e&&e.key&&e.company){try{Wr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await mR(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Wr.error(r),Wr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Hee,"setLicense");async function qee(){let e={};try{e=await ME.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Wr.error(r),Wr.error(t),new Error(r)}return e}a(qee,"getFingerprint");async function mR(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Wr.info("Validating license input...");let r=ME.validateLicense(e,t);if(Wr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Wr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Wr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Wr.info("writing license to disk"),await Lee.writeFile(Bee,JSON.stringify({license_key:e,company:t}))}catch(s){throw Wr.error("Failed to write License"),s}return"Registration successful."}a(mR,"parseLicense");async function Gee(){let e=await Fee();return mR(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Gee,"register");async function Fee(){let e=await ME.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:vv.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:vv.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Bv.start()}catch(s){Wr.error(s)}let r;try{r=await vee(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Fee,"promptForRegistration");async function xee(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ME.getLicense()}catch(r){throw Wr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Pee.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Mee.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Uee.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(xee,"getRegistrationInfo")});var Fv=T((Qge,Gv)=>{"use strict";var kee=ke(),pR=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+kee.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};Gv.exports=pR});var $v=T((zge,kv)=>{"use strict";var xv=ke(),SR=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+xv.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+xv.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};kv.exports=SR});var Yv=T((Xge,Vv)=>{"use strict";var TR=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Vv.exports=TR});var Wv=T((eRe,Kv)=>{"use strict";var $ee=ke(),gR=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+$ee.SERVER_SUFFIX.ADMIN,this.password=r}};Kv.exports=gR});var GE=T((rRe,zv)=>{"use strict";var lc=require("path"),HE=require("fs-extra"),Vee=Fv(),Yee=$v(),Kee=Yv(),Wee=Wv(),RR=Er(),dc=G(),Ar=rt(),BE=R(),ql=ke(),{CONFIG_PARAMS:it}=BE,Gl=U(),Fl=j(),Qv=Qn(),AR=st(),_c="clustering",Qee=1e4,jv=5;zv.exports={generateNatsConfig:zee,removeNatsConfig:Jee,getHubConfigPath:jee};function jee(){let e=Fl.get(it.ROOTPATH);return lc.join(e,_c,ql.NATS_CONFIG_FILES.HUB_SERVER)}a(jee,"getHubConfigPath");async function zee(e=!1,t=void 0){Fl.initSync();let r=Fl.get(it.ROOTPATH),s=lc.join(r,_c,ql.PID_FILES.HUB),n=lc.join(r,_c,ql.PID_FILES.LEAF),i=Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=lc.join(r,_c,ql.NATS_CONFIG_FILES.HUB_SERVER),c=lc.join(r,_c,ql.NATS_CONFIG_FILES.LEAF_SERVER),u=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERTIFICATE),_=Ar.getConfigFromFile(it.CLUSTERING_TLS_PRIVATEKEY),l=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERT_AUTH),d=Ar.getConfigFromFile(it.CLUSTERING_TLS_INSECURE),f=Ar.getConfigFromFile(it.CLUSTERING_TLS_VERIFY),E=Ar.getConfigFromFile(it.CLUSTERING_NODENAME),h=Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await AR.checkNATSServerInstalled()||qE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await RR.listUsers(),S=Ar.getConfigFromFile(it.CLUSTERING_USER),A=await RR.getClusterUser();(dc.isEmpty(A)||A.active!==!0)&&qE(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await vE(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await vE(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await vE(it.CLUSTERING_HUBSERVER_NETWORK_PORT),await vE(it.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],N=[];for(let[k,se]of m.entries())se.role.role===BE.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new Wee(se.username,Qv.decrypt(se.hash))),N.push(new Kee(se.username,Qv.decrypt(se.hash))));let V=[],{hub_routes:$}=Ar.getClusteringRoutes();if(!dc.isEmptyOrZeroLength($))for(let k of $)V.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${k.host}:${k.port}`);let F=new Vee(Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,N);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=dc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===BE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await HE.writeJson(o,F),Gl.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new Yee(Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],g,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===BE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await HE.writeJson(c,B),Gl.trace(`Leaf server config written to ${c}`))}a(zee,"generateNatsConfig");async function vE(e){let t=Fl.get(e);return dc.isEmpty(t)&&qE(`port undefined for '${e}'`),await dc.isPortTaken(t)&&qE(`'${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(vE,"isPortAvailable");function qE(e){let t=`Error generating clustering config: ${e}`;Gl.error(t),console.error(t),process.exit(1)}a(qE,"generateNatsConfigError");async function Jee(e){let{port:t,config_file:r}=AR.getServerConfig(e),{username:s,decrypt_hash:n}=await RR.getClusterUser(),i=0,o=2e3;for(;i<jv;){try{let _=await AR.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Gl.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=jv)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await dc.async_set_timeout(o*(i*2))}let c="0".repeat(Qee),u=lc.join(Fl.get(it.ROOTPATH),_c,r);await HE.writeFile(u,c),await HE.remove(u),Gl.notify(e,"started.")}a(Jee,"removeNatsConfig")});var rB=T((nRe,tB)=>{"use strict";var Qr=j(),Xee=Xu(),ue=R(),xl=ke(),ei=require("path"),{PACKAGE_ROOT:xE}=R(),Jv=j(),FE=G(),fc="/dev/null",Zee=ei.join(xE,"launchServiceScripts"),Xv=ei.join(xE,"utility/scripts"),ete=ei.join(Xv,ue.HDB_RESTART_SCRIPT),Zv=ei.resolve(xE,"dependencies",`${process.platform}-${process.arch}`,xl.NATS_BINARY_NAME);function eB(){let t=Xee.licenseSearch().ram_allocation||ue.RAM_ALLOCATION_ENUM.DEFAULT,r=ue.MEM_SETTING_KEY+t,s={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return FE.noBootFile()&&(s[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{name:ue.PROCESS_DESCRIPTORS.HDB,script:ue.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:xE}}a(eB,"generateMainServerConfig");var tte=9930;function rte(){Qr.initSync(!0);let e=Qr.get(ue.CONFIG_PARAMS.ROOTPATH),t=ei.join(e,"clustering",xl.NATS_CONFIG_FILES.HUB_SERVER),r=ei.join(Qr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=Jv.get(ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=xl.LOG_LEVEL_FLAGS[Qr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==tte?"-"+s:""),script:Zv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fc,i.error_file=fc),i}a(rte,"generateNatsHubServerConfig");var ste=9940;function nte(){Qr.initSync(!0);let e=Qr.get(ue.CONFIG_PARAMS.ROOTPATH),t=ei.join(e,"clustering",xl.NATS_CONFIG_FILES.LEAF_SERVER),r=ei.join(Qr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=Jv.get(ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=xl.LOG_LEVEL_FLAGS[Qr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==ste?"-"+s:""),script:Zv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=fc,i.error_file=fc),i}a(nte,"generateNatsLeafServerConfig");function ite(){Qr.initSync();let e=ei.join(Qr.get(ue.CONFIG_PARAMS.LOGGING_ROOT),ue.LOG_NAMES.HDB),t={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Zee,autorestart:!1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=fc,t.error_file=fc),t}a(ite,"generateClusteringUpgradeV4ServiceConfig");function ote(){let e={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.RESTART_HDB};return FE.noBootFile()&&(e[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=FE.getEnvCliRootPath()),{...{name:ue.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Xv},script:ete}}a(ote,"generateRestart");function ate(){return{apps:[eB()]}}a(ate,"generateAllServiceConfigs");tB.exports={generateAllServiceConfigs:ate,generateMainServerConfig:eB,generateRestart:ote,generateNatsHubServerConfig:rte,generateNatsLeafServerConfig:nte,generateClusteringUpgradeV4ServiceConfig:ite}});var Ec=T((aRe,hB)=>{"use strict";var Ne=R(),cte=G(),ti=GE(),kl=st(),Tn=ke(),Qi=rB(),kE=j(),ji=U(),ute=Zn(),{startWorker:sB,onMessageFromWorkers:lte}=Qe(),_te=Xn(),oRe=require("util"),dte=require("child_process"),fte=require("fs"),{execFile:Ete}=dte,Te;hB.exports={enterPM2Mode:hte,start:zi,stop:OR,reload:iB,restart:oB,list:NR,describe:cB,connect:ri,kill:gte,startAllServices:Rte,startService:bR,getUniqueServicesList:uB,restartAllServices:Ate,isServiceRegistered:lB,reloadStopStart:_B,restartHdb:aB,deleteProcess:Ste,startClusteringProcesses:fB,startClusteringThreads:EB,isHdbRestartRunning:Tte,isClusteringRunning:Nte,stopClustering:Ote,reloadClustering:bte};var $l=!1;lte(e=>{e.type==="restart"&&kE.initSync(!0)});function hte(){$l=!0}a(hte,"enterPM2Mode");function ri(){return Te||(Te=require("pm2")),new Promise((e,t)=>{Te.connect((r,s)=>{ji.setupConsoleLogging(),r&&t(r),e(s)})})}a(ri,"connect");var Or,mte=10,nB;function zi(e,t=!1){if($l)return pte(e);let r=Ete(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Or.indexOf(r);o>-1&&Or.splice(o,1),!nB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<mte&&(fte.existsSync(ti.getHubConfigPath())?zi(e):(await ti.generateNatsConfig(!0),zi(e),await new Promise(c=>setTimeout(c,3e3)),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=kE.get(Ne.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Tn.LOG_LEVEL_HIERARCHY[o]>=Tn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Tn.LOG_LEVELS.ERR||l===Tn.LOG_LEVELS.WRN?ji.OUTPUTS.STDERR:ji.OUTPUTS.STDOUT;ji.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Tn.LOG_LEVELS[f]}if(Tn.LOG_LEVEL_HIERARCHY[o]>=Tn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Tn.LOG_LEVELS.ERR||l===Tn.LOG_LEVELS.WRN?ji.OUTPUTS.STDERR:ji.OUTPUTS.STDOUT;ji.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Or=[],!Or&&!t){let i=a(()=>{nB=!0,Or&&(Or.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Or.push(r)}a(zi,"start");function pte(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.start(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(pte,"startWithPM2");function OR(e){if(!$l){for(let t of Or||[])t.name===e&&(Or.splice(Or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.stop(e,async(s,n)=>{s&&(Te.disconnect(),r(s)),Te.delete(e,(i,o)=>{i&&(Te.disconnect(),r(s)),Te.disconnect(),t(o)})})})}a(OR,"stop");function iB(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.reload(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(iB,"reload");function oB(e){if(!$l)for(let t of Or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.restart(e,(s,n)=>{Te.disconnect(),t(n)})})}a(oB,"restart");function Ste(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.delete(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(Ste,"deleteProcess");async function aB(){await zi(Qi.generateRestart())}a(aB,"restartHdb");async function Tte(){let e=await NR();for(let t in e)if(e[t].name===Ne.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Tte,"isHdbRestartRunning");function NR(){return new Promise(async(e,t)=>{try{await ri()}catch(r){t(r)}Te.list((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(NR,"list");function cB(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.describe(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(cB,"describe");function gte(){if(!$l){for(let e of Or||[])e.kill();Or=[];return}return new Promise(async(e,t)=>{try{await ri()}catch(r){t(r)}Te.killDaemon((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(gte,"kill");async function Rte(){try{await fB(),await EB(),await zi(Qi.generateAllServiceConfigs())}catch(e){throw Te?.disconnect(),e}}a(Rte,"startAllServices");async function bR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ne.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Qi.generateMainServerConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Qi.generateNatsIngestServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Qi.generateNatsReplyServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Qi.generateNatsHubServerConfig(),await zi(r,t),await ti.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Qi.generateNatsLeafServerConfig(),await zi(r,t),await ti.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Qi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await zi(r)}catch(r){throw Te?.disconnect(),r}}a(bR,"startService");async function uB(){try{let e=await NR(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Te?.disconnect(),e}}a(uB,"getUniqueServicesList");async function Ate(e=[]){try{let t=!1,r=await uB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ne.PROCESS_DESCRIPTORS.HDB?t=!0:await oB(o))}t&&await _B(Ne.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Te?.disconnect(),t}}a(Ate,"restartAllServices");async function lB(e){if(Or?.find(r=>r.name===e))return!0;let t=await _te.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(lB,"isServiceRegistered");async function _B(e){let t=e===Ne.PROCESS_DESCRIPTORS.HDB?kE.get(Ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):kE.get(Ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await cB(e),s=cte.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await OR(e),await bR(e)):e===Ne.PROCESS_DESCRIPTORS.HDB?await aB():await iB(e)}a(_B,"reloadStopStart");var dB;async function fB(e=!1){for(let t in Ne.CLUSTERING_PROCESSES){let r=Ne.CLUSTERING_PROCESSES[t];await bR(r,e)}}a(fB,"startClusteringProcesses");async function EB(){dB=sB(Ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await kl.createWorkQueueStream(Tn.WORK_QUEUE_CONSUMER_NAMES),await kl.updateIngestStreamConsumer(),await kl.updateLocalStreams();let e=await ute.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ne.PRE_4_0_0_VERSION){ji.info("Starting clustering upgrade 4.0.0 process"),sB(Ne.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(EB,"startClusteringThreads");async function Ote(){for(let e in Ne.CLUSTERING_PROCESSES)if(e!==Ne.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ne.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await dB.terminate();else{let t=Ne.CLUSTERING_PROCESSES[e];await OR(t)}}a(Ote,"stopClustering");async function Nte(){for(let e in Ne.CLUSTERING_PROCESSES){let t=Ne.CLUSTERING_PROCESSES[e];if(await lB(t)===!1)return!1}return!0}a(Nte,"isClusteringRunning");async function bte(){await ti.generateNatsConfig(!0),await kl.reloadNATSHub(),await kl.reloadNATSLeaf(),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(bte,"reloadClustering")});var Jo=T((uRe,AB)=>{"use strict";var yte=require("minimist"),{isMainThread:wR,parentPort:SB}=require("worker_threads"),Xe=R(),{PROCESS_DESCRIPTORS_VALIDATE:Vl}=Xe,gn=U(),CR=G(),$E=GE(),hc=st(),yR=ke(),TB=rt(),Rn=Ec(),mB=Xn(),Ite=po(),{restartWorkers:VE,onMessageByType:wte}=Qe(),{handleHDBError:Cte,hdb_errors:Lte}=Z(),{HTTP_STATUS_CODES:Dte}=Lte,YE=j();YE.initSync();var Yl=`Restarting HarperDB. This may take up to ${Xe.RESTART_TIMEOUT_MS/1e3} seconds.`,Pte="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",pB="Clustering is not enabled so cannot be restarted",Mte="Invalid service",mc,Es;AB.exports={restart:gB,restartService:LR};wR&&wte(Xe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?LR({service:e.workerType}):gB({operation:"restart"})});async function gB(e){Es=Object.keys(e).length===0,mc=await Rn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR);let t=yte(process.argv);if(t.service){await LR(t);return}if(Es&&!mc){console.error(Pte);return}if(Es&&console.log(Yl),mc){Rn.enterPM2Mode(),gn.notify(Yl);let r=Ite(Object.keys(Xe.CONFIG_PARAM_MAP),!0);return CR.isEmptyOrZeroLength(Object.keys(r))||TB.updateConfigValue(void 0,void 0,r,!0,!0),vte(),Yl}return wR?(gn.notify(Yl),setTimeout(()=>{VE()},50)):SB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART}),Yl}a(gB,"restart");async function LR(e){let{service:t}=e;if(Xe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Cte(new Error,Mte,Dte.BAD_REQUEST,void 0,void 0,!0);if(mc=await Rn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR),!wR)return SB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Vl.clustering:if(!YE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=pB;break}Es&&console.log("Restarting clustering"),gn.notify("Restarting clustering"),await RB();break;case Vl.clustering_config:case Vl["clustering config"]:if(!YE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=pB;break}Es&&console.log("Restarting clustering_config"),gn.notify("Restarting clustering_config"),await Rn.reloadClustering();break;case"custom_functions":case"custom functions":case Vl.harperdb:case Vl.http_workers:if(Es&&!mc){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}Es&&console.log("Restarting http_workers"),gn.notify("Restarting http_workers"),Es?await Rn.restart(Xe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{VE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(gn.error(r),Es&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(LR,"restartService");async function Ute(){await hc.publishToStream(`${yR.SUBJECT_PREFIXES.TXN}.${yR.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,yR.WORK_QUEUE_CONSUMER_NAMES.stream_name,hc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Ute,"postDummyNatsMsg");async function vte(){await RB(),await Rn.restart(Xe.HDB_PROC_DESCRIPTOR),await CR.async_set_timeout(2e3),YE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await IR(),Es&&(await hc.closeConnection(),process.exit(0))}a(vte,"restartPM2Mode");async function RB(){if(!TB.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await mB.getHDBProcessInfo()).clustering.length===0)gn.trace("Clustering not running, restart will start clustering services"),await $E.generateNatsConfig(!0),await Rn.startClusteringProcesses(),await Rn.startClusteringThreads(),await IR(),Es&&await hc.closeConnection();else{await Ute(),await $E.generateNatsConfig(!0),mc?(gn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Rn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Rn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await mB.getHDBProcessInfo()).clustering.forEach(n=>{gn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await CR.async_set_timeout(3e3),await IR(),await hc.updateLocalStreams(),Es&&await hc.closeConnection(),gn.trace("Restart clustering restarting ingest and reply service threads");let t=VE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=VE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(RB,"restartClustering");async function IR(){await $E.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $E.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(IR,"removeNatsConfig")});var MB=T((dRe,PB)=>{"use strict";var _Re=require("lodash"),Nr=R(),{handleHDBError:OB,hdb_errors:Bte}=Z(),{HDB_ERROR_MSGS:Hte,HTTP_STATUS_CODES:qte}=Bte,DR=U();PB.exports={getRolePermissions:Fte};var Xo=Object.create(null),Gte=a(e=>({key:e,perms:{}}),"perms_template_obj"),IB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),wB=a((e=!1,t=!1,r=!1,s=!1)=>({[Nr.PERMS_CRUD_ENUM.READ]:e,[Nr.PERMS_CRUD_ENUM.INSERT]:t,[Nr.PERMS_CRUD_ENUM.UPDATE]:r,[Nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),PR=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...wB(t,r,s,n)}),"table_perms_template"),NB=a((e,t=wB())=>({attribute_name:e,describe:DB(t),[Kl]:t[Kl],[MR]:t[MR],[UR]:t[UR]}),"attr_perms_template"),bB=a((e,t=!1)=>({attribute_name:e,describe:t,[Kl]:t}),"timestamp_attr_perms_template"),{READ:Kl,INSERT:MR,UPDATE:UR}=Nr.PERMS_CRUD_ENUM,CB=Object.values(Nr.PERMS_CRUD_ENUM),LB=[Kl,MR,UR];function Fte(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[Nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Xo[t]&&Xo[t].key===s)return Xo[t].perms;let n=xte(e,r);return Xo[t]?Xo[t].key=s:Xo[t]=Gte(s),Xo[t].perms=n,n}catch(r){if(!e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw DR.error(s),DR.debug(r),OB(new Error,Hte.OUTDATED_PERMS_TRANSLATION_ERROR,qte.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
12
- ${r.stack}`;throw DR.error(s),OB(new Error)}}}a(Fte,"getRolePermissions");function xte(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Nr.SYSTEM_SCHEMA_NAME]=s[Nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=kte(t[i]);return}r[i]=IB(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=$te(c,u);r[i].describe||CB.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=PR()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=PR()})}),r}a(xte,"translateRolePermissions");function kte(e){let t=IB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=PR(!0,!0,!0,!0,!0)}),t}a(kte,"createStructureUserPermissions");function $te(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Nr.TIME_STAMP_NAMES.includes(d)&&(f=bB(d,l[Kl])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=NB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=DB(l),n.attribute_permissions.push(l),c||Vte(l,u)}else if(_!==o){let l;Nr.TIME_STAMP_NAMES.includes(_)?l=bB(_):l=NB(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=yB(n),n}else return e.describe=yB(e),e}a($te,"getTableAttrPerms");function yB(e){return CB.filter(t=>e[t]).length>0}a(yB,"getSchemaTableDescribePerm");function DB(e){return LB.filter(t=>e[t]).length>0}a(DB,"getAttributeDescribePerm");function Vte(e,t){LB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Vte,"checkForHashPerms")});var UB={};Fe(UB,{Headers:()=>Ji});var Ji,KE=Re(()=>{Ji=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Wl={};Fe(Wl,{authentication:()=>kB,bypassAuth:()=>Jte,login:()=>Zte,logout:()=>ere,start:()=>Xte});function Jte(){xB=!0}async function kB(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Qte?Wte:[]:Kte?Yte:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ji([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return WE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),WE&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(WE){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let m=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,m===-1?n.length:m),_=await BB.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,m)=>{let S=new jE.AuthAuditLog(E,h,qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===qt.AUTH_AUDIT_STATUS.SUCCESS?vB.notify(S):vB.error(S)},"authAuditLog"),d;if(s){if(d=Zo.get(s),!d){let[E,h]=s.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await Tt.getUser(m,S):null;break;case"Bearer":try{d=await(0,QE.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,QE.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return zte&&(Zo.get(h)||(Zo.set(h,h),l(m,qt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Xi({error:A.message},e)})}Zo.set(s,d),jte&&l(d.username,qt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Tt.getUser(_.user,null,!1):xB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,qB.getSuperUser)());WE&&(e.session.update=function(E){if(!u){u=(0,GB.v4)();let m=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,BB.put(E)},e.login=async function(E,h){e.user=await Tt.getUser(E,h),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ci.loginPath?(f.status=302,f.headers.set("Location",Ci.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ji);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function Xte({server:e,port:t}){e.request(kB,{port:t||"all"}),HB||(HB=!0,setInterval(()=>{Zo=new Map},hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),FB.user.addListener(()=>{Zo=new Map}))}async function Zte(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 ere(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var qB,QE,GB,hs,qt,jE,FB,vB,Yte,Kte,Wte,Qte,BB,WE,xB,jte,zte,Zo,HB,zE=Re(()=>{qB=D(Er());Pr();hu();QE=D(Il());Ee();GB=require("uuid"),hs=D(j()),qt=D(R()),jE=D(U()),FB=D(el());KE();pc();vB=(0,jE.loggerWithTag)("auth-event");hs.initSync();Yte=hs.get(qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Kte=hs.get(qt.CONFIG_PARAMS.HTTP_CORS),Wte=hs.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Qte=hs.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),BB=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),WE=hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,xB=hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,jte=hs.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,zte=hs.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Zo=new Map;Tt.onInvalidatedUser(()=>{Zo=new Map});a(Jte,"bypassAuth");a(kB,"authentication");a(Xte,"start");a(Zte,"login");a(ere,"logout")});var jB=T((RRe,QB)=>{"use strict";var ge=require("joi"),$B=require("fs-extra"),VB=require("path"),ni=Ve(),YB=j(),KB=R(),WB=U(),{hdb_errors:tre}=Z(),{HDB_ERROR_MSGS:Xt}=tre,si=/^[a-zA-Z0-9-_]+$/;QB.exports={getDropCustomFunctionValidator:sre,setCustomFunctionValidator:nre,addComponentValidator:cre,dropCustomFunctionProjectValidator:ure,packageComponentValidator:lre,deployComponentValidator:_re,setComponentFileValidator:ire,getComponentFileValidator:are,dropComponentFileValidator:ore};function JE(e,t,r){try{let s=YB.get(KB.CONFIG_PARAMS.COMPONENTSROOT),n=VB.join(s,t);return $B.existsSync(n)?e?t:r.message(Xt.PROJECT_EXISTS):e?r.message(Xt.NO_PROJECT):t}catch(s){return WB.error(s),r.message(Xt.VALIDATION_ERR)}}a(JE,"checkProjectExists");function Ql(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Ql,"checkFilePath");function rre(e,t,r,s){try{let n=YB.get(KB.CONFIG_PARAMS.COMPONENTSROOT),i=VB.join(n,e,t,r+".js");return $B.existsSync(i)?r:s.message(Xt.NO_FILE)}catch(n){return WB.error(n),s.message(Xt.VALIDATION_ERR)}}a(rre,"checkFileExists");function sre(e){let t=ge.object({project:ge.string().pattern(si).custom(JE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().pattern(si).custom(rre.bind(null,e.project,e.type)).custom(Ql).required().messages({"string.pattern.base":Xt.BAD_FILE_NAME})});return ni.validateBySchema(e,t)}a(sre,"getDropCustomFunctionValidator");function nre(e){let t=ge.object({project:ge.string().pattern(si).custom(JE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().custom(Ql).required(),function_content:ge.string().required()});return ni.validateBySchema(e,t)}a(nre,"setCustomFunctionValidator");function ire(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:ge.string().custom(Ql).required(),payload:ge.string().allow("").optional(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ni.validateBySchema(e,t)}a(ire,"setComponentFileValidator");function ore(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:ge.string().custom(Ql).optional()});return ni.validateBySchema(e,t)}a(ore,"dropComponentFileValidator");function are(e){let t=ge.object({project:ge.string().required(),file:ge.string().custom(Ql).required(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ni.validateBySchema(e,t)}a(are,"getComponentFileValidator");function cre(e){let t=ge.object({project:ge.string().pattern(si).custom(JE.bind(null,!1)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return ni.validateBySchema(e,t)}a(cre,"addComponentValidator");function ure(e){let t=ge.object({project:ge.string().pattern(si).custom(JE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return ni.validateBySchema(e,t)}a(ure,"dropCustomFunctionProjectValidator");function lre(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),skip_node_modules:ge.boolean()});return ni.validateBySchema(e,t)}a(lre,"packageComponentValidator");function _re(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),payload:ge.string().optional().messages({"string.pattern.base":Xt.BAD_PACKAGE}),package:ge.string().optional()});return ni.validateBySchema(e,t)}a(_re,"deployComponentValidator")});var th=T((ORe,rH)=>{"use strict";var XE=require("joi"),ZE=require("path"),zB=require("fs-extra"),{exec:dre}=require("child_process"),fre=require("util"),JB=fre.promisify(dre),jl=R(),{handleHDBError:Sc,hdb_errors:Ere}=Z(),{HTTP_STATUS_CODES:Tc}=Ere,zl=j(),hre=Ve(),gc=U();zl.initSync();var vR=zl.get(jl.CONFIG_PARAMS.COMPONENTSROOT),XB="npm install --omit=dev --json",mre=`${XB} --dry-run`;rH.exports={installModules:gre,auditModules:Rre,installAllRootModules:pre,uninstallRootModule:Sre,linkHarperdb:Tre};async function pre(e=!1){await eh(),await Jl(e?"npm install --ignore-scripts":"npm install",zl.get(jl.CONFIG_PARAMS.ROOTPATH))}a(pre,"installAllRootModules");async function Sre(e){await Jl(`npm uninstall ${e}`,zl.get(jl.CONFIG_PARAMS.ROOTPATH))}a(Sre,"uninstallRootModule");async function Tre(){await eh(),await Jl(`npm link ${jl.PACKAGE_ROOT}`,zl.get(jl.CONFIG_PARAMS.ROOTPATH))}a(Tre,"linkHarperdb");async function Jl(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await JB(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
13
- `,""))}return s&&!s.includes("Debugger listening")&&gc.error("Error running NPM command:",e,s),gc.trace(r,s),r.replace(`
14
- `,"")}a(Jl,"runCommand");async function gre(e){gc.info(`starting installModules for request: ${e}`);let t=tH(e);if(t)throw Sc(t,t.message,Tc.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?mre:XB;await eh(),await eH(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=ZE.join(vR,u),l,d=null;try{let{stdout:f,stderr:E}=await JB(n,{cwd:_});l=f?f.replace(`
11
+ `,"")}a(uU,"runCommand");async function K8(){try{await N8.access(Kg)}catch{return!1}let e=await uU(`${Kg} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return b8.eq(t,V8)}a(K8,"checkNATSServerInstalled");async function zg(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await oU.getClusterUser();if(Ea(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}dn.trace("create nats connection called");let i=await B8({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Jt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Jt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Jt.get(Me.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),dn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&dn.error("Error with Nats client connection, connection closed",o),_U()}),i}a(zg,"createConnection");function _U(){Hn=void 0,_a=void 0,da=void 0,fa=void 0}a(_U,"clearClientCache");async function W8(){Hn&&(await Hn.drain(),Hn=void 0,_a=void 0,da=void 0,fa=void 0)}a(W8,"closeConnection");var Hn,fa;async function LE(){return fa||(fa=zg(Jt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Hn=await fa),Hn||fa}a(LE,"getConnection");async function e_(){if(_a)return _a;Ea(Hn)&&await LE();let{domain:e}=t_(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ea(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _a=await Hn.jetstreamManager({domain:e,timeout:6e4}),_a}a(e_,"getJetStreamManager");async function dU(){if(da)return da;Ea(Hn)&&await LE();let{domain:e}=t_(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ea(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return da=Hn.jetstream({domain:e,timeout:6e4}),da}a(dU,"getJetStream");async function Cr(){let e=Hn||await LE(),t=_a||await e_(),r=da||await dU();return{connection:e,jsm:t,js:r}}a(Cr,"getNATSReferences");async function Q8(e){let t=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await oU.getClusterUser(),s=await zg(t,r,n),i=jg(),o=s.subscribe(i),c=[],l,_=(async()=>{for await(let u of o){let d=lU.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 Wg.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(Q8,"getServerList");async function Jg(e,t){let{jsm:r}=await Cr(),n=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:aU.File,retention:cU.Limits,subjects:t,discard:H8.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Jg,"createLocalStream");async function fU(){let{jsm:e}=await Cr(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(fU,"listStreams");async function j8(e){let{jsm:t}=await Cr();await t.streams.delete(e)}a(j8,"deleteLocalStream");async function z8(e){let{connection:t}=await Cr(),r=[],n=jg(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(lU.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(z8,"listRemoteStreams");async function J8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Cr(),i=nU(),o={durable_name:i,ack_policy:wE.Explicit};t&&(o.deliver_policy=CE.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=Qg(u.data),f={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:d};if(u.headers&&(f.origin=u.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),u.ack(),u.info.pending===0)break}return await c.delete(),_}a(J8,"viewStream");async function*X8(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Cr(),i=nU(),o={durable_name:i,ack_policy:wE.Explicit};t&&(o.deliver_policy=CE.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=Qg(_.data);u[0]||(u=[u]);for(let d of u){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(X8,"viewStreamIterator");async function Z8(e,t,r,n){dn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=EU(n,r);let{js:s}=await Cr(),i=await r_(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:iU.encode(n);try{dn.trace(`publishToStream publishing to subject: ${o}`),k8(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"){dn.trace(`publishToStream creating stream: ${t}`);let u=o.split(".");u[2]="*",await Jg(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Z8,"publishToStream");function EU(e,t){t===void 0&&(t=x8());let r=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(EU,"addNatsMsgHeader");function t_(e){e=e.toLowerCase();let t=Zu.join(Jt.get(Me.CONFIG_PARAMS.ROOTPATH),$8);if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ea(Yg)&&(Yg={port:Ju.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ju.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Zu.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),Yg;if(e===Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ea(Vg)&&(Vg={port:Ju.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ju.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ju.getConfigFromFile(Me.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:Zu.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),Vg;dn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(t_,"getServerConfig");async function e6(e){let{jsm:t}=await Cr(),r=await r_();try{await t.streams.add({name:e.stream_name,storage:aU.File,retention:cU.Limits,max_age:U8,max_bytes:v8,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(n){if(n.code!=="400")throw n}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(n){if(n.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:wE.Explicit,durable_name:e.durable_name,deliver_policy:CE.All,max_ack_pending:1e4});else throw n}}a(e6,"createWorkQueueStream");async function t6(){let{jsm:e}=await Cr();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(dn.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),dn.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:wE.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:CE.All,max_ack_pending:1e4}))}a(t6,"updateIngestStreamConsumer");async function hU(e,t,r){let{jsm:n}=await Cr(),s=await n.streams.info(t),i=mU(n.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:l}=r,_=IE.createNatsTableStreamName(c,l),u=i===e,d,f,E=!1;if(!Array.isArray(s.config.sources)||s.config.sources.length===0)s.config.sources=[];else for(let p=0,S=s.config.sources.length;p<S;p++)if(d=s.config.sources[p],f=p,u&&d.name===_||!u&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${l}.${e}`;await n.streams.purge(t,{filter:p}),s.config.sources.splice(f,1),await n.streams.update(t,s.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};u||(h.external={api:`$JS.${e}.API`,deliver:""}),s.config.sources.push(h),await n.streams.update(t,s.config)}a(hU,"addSourceToWorkStream");function mU(e){return e.split(".")[1]}a(mU,"extractServerName");async function pU(e,t,r){let{jsm:n}=await Cr(),{schema:s,table:i}=r,o=`txn.${s}.${i}.${e}`;await n.streams.purge(t,{filter:o});let c=IE.createNatsTableStreamName(s,i),l=await n.streams.info(t);if(!Array.isArray(l.config.sources)||l.config.sources.length===0)return;let _=l.config.sources.length,u;for(;_--;)if(u=l.config.sources[_],u.name===c&&u.external.api===`$JS.${e}.API`){l.config.sources.splice(_,1);break}await n.streams.update(t,l.config)}a(pU,"removeSourceFromWorkStream");async function r6(e,t,r=6e4,n=jg()){if(!Wg.isObject(t))throw new Error("data param must be an object");let s=iU.encode(t),{connection:i}=await Cr(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Qg(c.data)}a(r6,"request");function Xg(e){return new Promise(async(t,r)=>{let n=C8(Kg,["--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(Xg,"reloadNATS");async function n6(){let{pid_file_path:e}=t_(Me.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Xg(e)}a(n6,"reloadNATSHub");async function s6(){let{pid_file_path:e}=t_(Me.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Xg(e)}a(s6,"reloadNATSLeaf");function i6(e,t,r){let n;switch(e.code){case rU.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case rU.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(i6,"requestErrorHandler");async function o6(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await SU(async()=>{e.subscribe===!0?await hU(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await pU(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(o6,"updateWorkStream");function SU(e){return L8.writeTransaction(Me.SYSTEM_SCHEMA_NAME,Me.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(SU,"exclusiveLock");async function TU(e,t){let r=IE.createNatsTableStreamName(e,t),n=await r_(),s=u6(e,t,n);await Jg(r,[s])}a(TU,"createLocalTableStream");async function a6(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(a6,"createTableStreams");async function gU(e,t,r=!1){if(Jt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=IE.createNatsTableStreamName(e,t),{jsm:s}=await Cr();r?await s.streams.purge(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name):await s.streams.purge(n)}catch(n){if(n.message==="stream not found")dn.warn(n);else throw n}}a(gU,"purgeTableStream");async function c6(e,t){if(Jt.get(Me.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await gU(e,t[r])}a(c6,"purgeSchemaTableStreams");async function l6(e){return(await e_()).streams.info(e)}a(l6,"getStreamInfo");function u6(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(u6,"createSubjectName");async function r_(){if(Xu)return Xu;if(Xu=(await e_())?.nc?.info?.server_name,Xu===void 0)throw new Error("Unable to get jetstream manager server name");return Xu}a(r_,"getJsmServerName");async function _6(){let e=await e_(),t=await r_(),r=await fU();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=d6(n),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(s.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;dn.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else if(s.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;dn.trace(`Updating stream subject name from: ${i} to: ${_}`),s.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");dn.trace(`Updating stream subject name from: ${i} to: ${u}`),s.subjects[0]=u}await e.streams.update(s.name,s)}}}a(_6,"updateLocalStreams");function d6(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let n=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Jt.get(Me.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(d6,"updateStreamLimits")});var UE=T((Uge,bU)=>{"use strict";var Ic=Tf(),wc=tU(),f6=B(),E6=require("uuid").v4,Mge=require("clone"),PE=li(),Cc=b(),h6=require("util"),io=Dn(),{handleHDBError:Lr,hdb_errors:m6}=ee(),{HDB_ERROR_MSGS:DE,HTTP_STATUS_CODES:Dr}=m6,{SchemaEventMsg:ME}=rs(),AU=pt(),{getDatabases:p6}=(me(),re(Ge)),{transformReq:Lc}=V();bU.exports={createSchema:S6,createSchemaStructure:OU,createTable:T6,createTableStructure:NU,createAttribute:N6,dropSchema:g6,dropTable:R6,dropAttribute:A6,getBackup:b6};async function S6(e){let t=await OU(e);return PE.signalSchemaChange(new ME(process.pid,e.operation,e.schema)),t}a(S6,"createSchema");async function OU(e){let t=Ic.schema_object(e);if(t)throw Lr(t,t.message,Dr.BAD_REQUEST,void 0,void 0,!0);if(Lc(e),!await wc.checkSchemaExists(e.schema))throw Lr(new Error,DE.SCHEMA_EXISTS_ERR(e.schema),Dr.BAD_REQUEST,Cc.LOG_LEVELS.ERROR,DE.SCHEMA_EXISTS_ERR(e.schema),!0);return await io.createSchema(e),`database '${e.schema}' successfully created`}a(OU,"createSchemaStructure");async function T6(e){return Lc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await NU(e)}a(T6,"createTable");async function NU(e){let t=Ic.create_table_object(e);if(t)throw Lr(t,t.message,Dr.BAD_REQUEST,void 0,void 0,!0);if(Ic.validateTableResidence(e.residence),!await wc.checkSchemaTableExists(e.schema,e.table))throw Lr(new Error,DE.TABLE_EXISTS_ERR(e.schema,e.table),Dr.BAD_REQUEST,Cc.LOG_LEVELS.ERROR,DE.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:E6(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await io.createTable(n,e);else throw Lr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Dr.BAD_REQUEST);else await io.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(NU,"createTableStructure");async function g6(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ic.schema_object(e),n=t??r;if(n)throw Lr(n,n.message,Dr.BAD_REQUEST,void 0,void 0,!0);Lc(e);let s=await wc.checkSchemaExists(e.schema);if(s)throw Lr(new Error,s,Dr.NOT_FOUND,Cc.LOG_LEVELS.ERROR,s,!0);let i=await wc.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await io.dropSchema(e),PE.signalSchemaChange(new ME(process.pid,e.operation,e.schema)),await AU.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(g6,"dropSchema");async function R6(e){let t=Ic.table_object(e);if(t)throw Lr(t,t.message,Dr.BAD_REQUEST,void 0,void 0,!0);Lc(e);let r=await wc.checkSchemaTableExists(e.schema,e.table);if(r)throw Lr(new Error,r,Dr.NOT_FOUND,Cc.LOG_LEVELS.ERROR,r,!0);return await io.dropTable(e),await AU.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(R6,"dropTable");async function A6(e){let t=Ic.attribute_object(e);if(t)throw Lr(t,t.message,Dr.BAD_REQUEST,void 0,void 0,!0);Lc(e);let r=await wc.checkSchemaTableExists(e.schema,e.table);if(r)throw Lr(new Error,r,Dr.NOT_FOUND,Cc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Lr(new Error,"You cannot drop a hash attribute",Dr.BAD_REQUEST,void 0,void 0,!0);if(Cc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Lr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Dr.BAD_REQUEST,void 0,void 0,!0);try{return await io.dropAttribute(e),O6(e),PE.signalSchemaChange(new ME(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw f6.error(`Got an error deleting attribute ${h6.inspect(e)}.`),n}}a(A6,"dropAttribute");function O6(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(O6,"dropAttributeFromGlobal");async function N6(e){Lc(e);let t=p6()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Lr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Dr.BAD_REQUEST,void 0,void 0,!0);return await io.createAttribute(e),PE.signalSchemaChange(new ME(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(N6,"createAttribute");function b6(e){return io.getBackup(e)}a(b6,"getBackup")});var IU=T((Bge,yU)=>{"use strict";var{OPERATIONS_ENUM:y6}=b(),Zg=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=y6.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};yU.exports=Zg});var eR=T((xge,PU)=>{"use strict";var I6=Dn(),qge=IU(),vE=V(),BE=b(),w6=z(),{handleHDBError:wU,hdb_errors:C6}=ee(),{HDB_ERROR_MSGS:CU,HTTP_STATUS_CODES:LU}=C6,L6=Object.values(BE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),DU="To use this operation audit log must be enabled in harperdb-config.yaml";PU.exports=D6;async function D6(e){if(vE.isEmpty(e.schema))throw new Error(CU.SCHEMA_REQUIRED_ERR);if(vE.isEmpty(e.table))throw new Error(CU.TABLE_REQUIRED_ERR);if(!w6.get(BE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw wU(new Error,DU,LU.BAD_REQUEST,BE.LOG_LEVELS.ERROR,DU,!0);let t=vE.checkSchemaTableExist(e.schema,e.table);if(t)throw wU(new Error,t,LU.NOT_FOUND,BE.LOG_LEVELS.ERROR,t,!0);if(!vE.isEmpty(e.search_type)&&L6.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await I6.readAuditLog(e)}a(D6,"readAuditLog")});var UU=T((Fge,MU)=>{"use strict";var{OPERATIONS_ENUM:P6}=b(),tR=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=P6.GET_BACKUP,this.schema=t,this.table=r}};MU.exports=tR});var HU=T((Yge,BU)=>{"use strict";var M6=Dn(),$ge=UU(),rR=V(),U6=b(),Vge=z(),{handleHDBError:v6,hdb_errors:B6}=ee(),{HDB_ERROR_MSGS:vU,HTTP_STATUS_CODES:H6}=B6;BU.exports=q6;async function q6(e){if(rR.isEmpty(e.schema))throw new Error(vU.SCHEMA_REQUIRED_ERR);if(rR.isEmpty(e.table))throw new Error(vU.TABLE_REQUIRED_ERR);let t=rR.checkSchemaTableExist(e.schema,e.table);if(t)throw v6(new Error,t,H6.NOT_FOUND,U6.LOG_LEVELS.ERROR,t,!0);return await M6.getBackup(read_audit_log_object)}a(q6,"getBackup")});var $U=T((Wge,kU)=>{var oo=require("validate.js"),xU=st(),Dc=b(),{handleHDBError:x6,hdb_errors:G6}=ee(),{HDB_ERROR_MSGS:St,HTTP_STATUS_CODES:F6}=G6,nR=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),k6={STRUCTURE_USER:"structure_user"},qU=Object.values(Dc.ROLE_TYPES_ENUM),$6="attribute_permissions",V6="attribute_name",{PERMS_CRUD_ENUM:Pc}=Dc,Y6=[$6,...Object.values(Pc)],GU=[Pc.READ,Pc.INSERT,Pc.UPDATE],K6=[V6,...GU];function W6(e){let t=nR();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,FU(e,t)}a(W6,"addRoleValidation");function Q6(e){let t=nR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,FU(e,t)}a(Q6,"alterRoleValidation");function j6(e){let t=nR();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,xU.validateObject(e,t)}a(j6,"dropRoleValidation");var z6=["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++)z6.includes(n[o])||s.push(n[o]);s.length>0&&bt(St.INVALID_ROLE_JSON_KEYS(s),r);let i=xU.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{bt(o,r)}),e.permission){let o=J6(e);o&&bt(o,r),qU.forEach(c=>{e.permission[c]&&!oo.isBoolean(e.permission[c])&&bt(St.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(qU.indexOf(o)<0){if(o===k6.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]||bt(St.SCHEMA_NOT_FOUND(d),r)}continue}bt(St.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){bt(St.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]){bt(St.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(_).forEach(u=>{Y6.includes(u)||bt(St.INVALID_PERM_KEY(u),r,o,l)}),Object.values(Pc).forEach(u=>{oo.isDefined(_[u])?oo.isBoolean(_[u])||bt(St.TABLE_PERM_NOT_BOOLEAN(u),r,o,l):bt(St.TABLE_PERM_MISSING(u),r,o,l)}),oo.isDefined(_.attribute_permissions)){if(!oo.isArray(_.attribute_permissions)){bt(St.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}}else{bt(St.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}if(_.attribute_permissions){let u=global.hdb_schema[o][l].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!K6.includes(p)&&p!==Pc.DELETE&&bt(St.INVALID_ATTR_PERM_KEY(p),r,o,l)}),!oo.isDefined(E.attribute_name)){bt(St.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=E.attribute_name;if(!u.includes(h)){bt(St.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}GU.forEach(p=>{oo.isDefined(E[p])?oo.isBoolean(E[p])||bt(St.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,l):bt(St.ATTR_PERM_MISSING(p,h),r,o,l)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${l}`;bt(St.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,l)}}}}return X6(r)}a(FU,"customValidate");kU.exports={addRoleValidation:W6,alterRoleValidation:Q6,dropRoleValidation:j6};function J6(e){let{operation:t,permission:r}=e;if(t===Dc.OPERATIONS_ENUM.ADD_ROLE||t===Dc.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 St.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Dc.ROLE_TYPES_ENUM.SUPER_USER:Dc.ROLE_TYPES_ENUM.CLUSTER_USER;return St.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(J6,"validateNoSUPerms");function X6(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:St.ROLE_PERMS_ERROR,...e};return x6(new Error,n,F6.BAD_REQUEST)}else return null}a(X6,"generateRolePermResponse");function bt(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(bt,"addPermError")});var qE=T((jge,WU)=>{"use strict";var VU=br(),YU=Nr(),Z6=ea(),iR=$U(),oR=li(),e9=require("uuid").v4,t9=require("util"),HE=b(),r9=V(),aR=YU.searchByValue,n9=YU.searchByHash,s9=t9.promisify(Z6.delete),i9=ns(),o9=Ec(),{hdb_errors:a9,handleHDBError:ha}=ee(),{HDB_ERROR_MSGS:KU,HTTP_STATUS_CODES:n_}=a9,{UserEventMsg:cR}=rs();WU.exports={addRole:c9,alterRole:l9,dropRole:u9,listRoles:_9};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 c9(e){let t=iR.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 aR(r)||[])}catch(i){throw ha(i)}if(n&&n.length>0)throw ha(new Error,KU.ROLE_ALREADY_EXISTS(e.role),n_.CONFLICT,void 0,void 0,!0);e.id||(e.id=e9());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await VU.insert(s),oR.signalUserChange(new cR(process.pid)),e=sR(e),e}a(c9,"addRole");async function l9(e){let t=iR.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 ha(s)}if(n&&n?.message==="updated 0 of 1 records")throw ha(new Error,"Invalid role id",n_.BAD_REQUEST,void 0,void 0,!0);return await oR.signalUserChange(new cR(process.pid)),e}a(l9,"alterRole");async function u9(e){let t=iR.dropRoleValidation(e);if(t)throw ha(new Error,t,n_.BAD_REQUEST,void 0,void 0,!0);let r=new o9(HE.SYSTEM_SCHEMA_NAME,HE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await n9(r));if(n.length===0)throw ha(new Error,KU.ROLE_NOT_FOUND,n_.NOT_FOUND,void 0,void 0,!0);let s=new i9(HE.SYSTEM_SCHEMA_NAME,HE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await aR(s)),o=!1;if(r9.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw ha(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,n_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await s9(c),oR.signalUserChange(new cR(process.pid)),`${n[0].role} successfully deleted`}a(u9,"dropRole");async function _9(){return aR({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(_9,"listRoles")});var JU=T((Jge,zU)=>{"use strict";var d9=z(),ao=require("joi"),f9=st(),QU=require("moment"),E9=require("fs-extra"),lR=require("path"),h9=require("lodash"),s_=b(),{LOG_LEVELS:ma}=b(),m9="YYYY-MM-DD hh:mm:ss",p9=lR.resolve(__dirname,"../logs");zU.exports=function(e){return f9.validateBySchema(e,S9)};var S9=ao.object({from:ao.custom(jU),until:ao.custom(jU),level:ao.valid(ma.NOTIFY,ma.FATAL,ma.ERROR,ma.WARN,ma.INFO,ma.DEBUG,ma.TRACE),order:ao.valid("asc","desc"),limit:ao.number().min(1),start:ao.number().min(0),log_name:ao.custom(T9)});function jU(e,t){if(QU(e,QU.ISO_8601).format(m9)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(jU,"validateDatetime");function T9(e,t){if(h9.invert(s_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=d9.get(s_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?s_.LOG_NAMES.HDB:e,i=s===s_.LOG_NAMES.INSTALL?lR.join(p9,s_.LOG_NAMES.INSTALL):lR.join(n,s);return E9.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(T9,"validateReadLogPath")});var _R=T((Zge,ZU)=>{"use strict";var xE=b(),g9=B(),R9=z(),A9=JU(),uR=require("path"),XU=require("fs-extra"),{once:O9}=require("events"),{handleHDBError:N9,hdb_errors:b9}=ee(),{PACKAGE_ROOT:y9}=b(),I9=uR.join(y9,"logs"),w9=1e3,C9=200;ZU.exports=L9;async function L9(e){let t=A9(e);if(t)throw N9(t,t.message,b9.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=R9.get(xE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?xE.LOG_NAMES.HDB:e.log_name,s=n===xE.LOG_NAMES.INSTALL?uR.join(I9,xE.LOG_NAMES.INSTALL):uR.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?w9:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!l&&!u&&(p=Math.max(XU.statSync(s).size-(h+5)*C9,0));let S=XU.createReadStream(s,{start:p});S.on("error",x=>{g9.error(x)});let A=0,g=[],N="",M;S.on("data",x=>{let D=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;x=N+x;let K=0,$;for(;($=D.exec(x))&&!S.destroyed;){M&&(M.message=x.slice(K,$.index),G(M));let[Q,se,ye]=$,oe=ye.split("] ["),dt=oe[0],Re=oe[1];oe.splice(0,2),M={timestamp:se,thread:dt,level:Re,tags:oe,message:""},K=$.index+Q.length}N=x.slice(K)}),S.on("end",x=>{S.destroyed||M&&(M.message=N.trim(),G(M))}),S.resume();function G(x){let D,K,$;switch(!0){case(i&&c&&_):D=new Date(x.timestamp),K=new Date(l),$=new Date(u),x.level===o&&D>=K&&D<=$&&A<E?A++:x.level===o&&D>=K&&D<=$&&(co(x,f,g),A++,A===h&&S.destroy());break;case(i&&c):D=new Date(x.timestamp),K=new Date(l),x.level===o&&D>=K&&A<E?A++:x.level===o&&D>=K&&(co(x,f,g),A++,A===h&&S.destroy());break;case(i&&_):D=new Date(x.timestamp),$=new Date(u),x.level===o&&D<=$&&A<E?A++:x.level===o&&D<=$&&(co(x,f,g),A++,A===h&&S.destroy());break;case(c&&_):D=new Date(x.timestamp),K=new Date(l),$=new Date(u),D>=K&&D<=$&&A<E?A++:D>=K&&D<=$&&(co(x,f,g),A++,A===h&&S.destroy());break;case i:x.level===o&&A<E?A++:x.level===o&&(co(x,f,g),A++,A===h&&S.destroy());break;case c:D=new Date(x.timestamp),K=new Date(l),D>=K&&A<E?A++:D>=K&&A>=E&&(co(x,f,g),A++,A===h&&S.destroy());break;case _:D=new Date(x.timestamp),$=new Date(u),D<=$&&A<E?A++:D<=$&&A>=E&&(co(x,f,g),A++,A===h&&S.destroy());break;default:A<E?A++:(co(x,f,g),A++,A===h&&S.destroy())}}return a(G,"onLogMessage"),await O9(S,"close"),g}a(L9,"readLog");function co(e,t,r){t==="desc"?D9(e,r):t==="asc"?P9(e,r):r.push(e)}a(co,"pushLineToResult");function D9(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(D9,"insertDescending");function P9(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(P9,"insertAscending")});var GE=T((sRe,nv)=>{"use strict";var dR=require("joi"),{string:i_,boolean:ev,date:M9}=dR.types(),U9=st(),{validateSchemaExists:tRe,validateTableExists:rRe,validateSchemaName:nRe}=ws(),v9=b(),B9=Ze(),tv=z();tv.initSync();var H9=i_.invalid(tv.get(v9.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(B9.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:i_.valid("add_node","update_node","set_node_replication"),node_name:H9,subscriptions:dR.array().items({table:i_.optional(),schema:i_.optional(),database:i_.optional(),subscribe:ev.required(),publish:ev.required().custom(x9),start_time:M9.iso()}).min(1).required()};function q9(e){return U9.validateBySchema(e,dR.object(rv))}a(q9,"addUpdateNodeValidator");function x9(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(x9,"checkForFalsy");nv.exports={addUpdateNodeValidator:q9,validation_schema:rv}});var iv=T((oRe,sv)=>{var G9=st(),F9={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sv.exports=function(e){return G9.validateObject(e,F9)}});var FE=T((aRe,ov)=>{"use strict";var k9=b().OPERATIONS_ENUM,fR=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=k9.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ov.exports=fR});var cv=T((lRe,av)=>{"use strict";var $9={OPERATION:"operation",REFRESH:"refresh"},ER=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},hR=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};av.exports={JWTTokens:ER,TOKEN_TYPE_ENUM:$9,JWTRSAKeys:hR}});var c_=T((_Re,dv)=>{"use strict";var a_=require("jsonwebtoken"),mR=require("fs-extra"),pR=V(),qn=b(),{handleHDBError:Pr,hdb_errors:V9}=ee(),{HTTP_STATUS_CODES:Mr,AUTHENTICATION_ERROR_MSGS:Ur}=V9,o_=B(),lv=Kf(),gR=Ir(),Y9=br().update,K9=FE(),W9=li(),{UserEventMsg:Q9}=rs(),lo=z();lo.initSync();var SR=require("path"),{JWTTokens:j9,JWTRSAKeys:z9,TOKEN_TYPE_ENUM:kE}=cv(),J9=lo.get(qn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?lo.get(qn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",X9=lo.get(qn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?lo.get(qn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",$E="RS256",TR;dv.exports={createTokens:Z9,validateOperationToken:t7,refreshOperationToken:e7,validateRefreshToken:_v};async function Z9(e){if(pR.isEmpty(e)||typeof e!="object")throw Pr(new Error,Ur.INVALID_AUTH_OBJECT,Mr.BAD_REQUEST,void 0,void 0,!0);if(pR.isEmpty(e.username))throw Pr(new Error,Ur.USERNAME_REQUIRED,Mr.BAD_REQUEST,void 0,void 0,!0);if(pR.isEmpty(e.password))throw Pr(new Error,Ur.PASSWORD_REQUIRED,Mr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await gR.findAndValidateUser(e.username,e.password),!t)throw Pr(new Error,Ur.INVALID_CREDENTIALS,Mr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw o_.error(f),Pr(new Error,Ur.INVALID_CREDENTIALS,Mr.UNAUTHORIZED,void 0,void 0,!0)}let r=await VE(),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 a_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:X9,algorithm:$E,subject:kE.REFRESH}),l=lv.hash(c),_=new K9(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),u,d;try{u=await Y9(_)}catch(f){o_.error(f),d=f}if(d!==void 0||u.skipped_hashes.length>0)throw Pr(new Error,Ur.REFRESH_TOKEN_SAVE_FAILED,Mr.INTERNAL_SERVER_ERROR);return W9.signalUserChange(new Q9(process.pid)),new j9(o,c)}a(Z9,"createTokens");async function uv(e,t,r){return await a_.sign(e,{key:t,passphrase:r},{expiresIn:J9,algorithm:$E,subject:kE.OPERATION})}a(uv,"signOperationToken");async function VE(){if(TR===void 0)try{let e=SR.join(lo.getHdbBasePath(),qn.LICENSE_KEY_DIR_NAME,qn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=SR.join(lo.getHdbBasePath(),qn.LICENSE_KEY_DIR_NAME,qn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=SR.join(lo.getHdbBasePath(),qn.LICENSE_KEY_DIR_NAME,qn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await mR.readFile(e)).toString(),s=(await mR.readFile(t)).toString(),i=(await mR.readFile(r)).toString();TR=new z9(i,s,n)}catch(e){throw o_.error(e),Pr(new Error,Ur.NO_ENCRYPTION_KEYS,Mr.INTERNAL_SERVER_ERROR)}return TR}a(VE,"getJWTRSAKeys");async function e7(e){if(!e)throw Pr(new Error,Ur.INVALID_BODY,Mr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Pr(new Error,Ur.REFRESH_TOKEN_REQUIRED,Mr.BAD_REQUEST,void 0,void 0,!0);await _v(e.refresh_token);let t=await VE(),r=await a_.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(e7,"refreshOperationToken");async function t7(e){try{let t=await VE(),r=await a_.verify(e,t.public_key,{algorithms:$E,subject:kE.OPERATION});return await gR.findAndValidateUser(r.username,void 0,!1)}catch(t){throw o_.warn(t),t.name&&t.name==="TokenExpiredError"?Pr(new Error,Ur.TOKEN_EXPIRED,Mr.FORBIDDEN):Pr(new Error,Ur.INVALID_TOKEN,Mr.UNAUTHORIZED)}}a(t7,"validateOperationToken");async function _v(e){let t;try{let r=await VE(),n=await a_.verify(e,r.public_key,{algorithms:$E,subject:kE.REFRESH});t=await gR.findAndValidateUser(n.username,void 0,!1)}catch(r){throw o_.warn(r),r.name&&r.name==="TokenExpiredError"?Pr(new Error,Ur.TOKEN_EXPIRED,Mr.FORBIDDEN):Pr(new Error,Ur.INVALID_TOKEN,Mr.UNAUTHORIZED)}if(!lv.validate(t.refresh_token,e))throw Pr(new Error,Ur.INVALID_TOKEN,Mr.UNAUTHORIZED);return t}a(_v,"validateRefreshToken")});var RR=T((ERe,hv)=>{"use strict";var r7=iv(),Mc=require("passport"),n7=require("passport-local").Strategy,s7=require("passport-http").BasicStrategy,i7=require("util"),o7=Ir(),Ev=i7.callbackify(o7.findAndValidateUser),fRe=zr(),a7=b(),fv=c_();Mc.use(new n7(function(e,t,r){Ev(e,t,r)}));Mc.use(new s7(function(e,t,r){Ev(e,t,r)}));Mc.serializeUser(function(e,t){t(null,e)});Mc.deserializeUser(function(e,t){t(null,e)});function c7(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":Mc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===a7.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:Mc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(c7,"authorize");function l7(e,t){let r=r7(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(l7,"checkPermissions");hv.exports={authorize:c7,checkPermissions:l7}});var Uc=T((mRe,mv)=>{"use strict";var AR=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},OR=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};mv.exports={Node:AR,NodeSubscription:OR}});var Sv=T((SRe,pv)=>{"use strict";var u7=b().OPERATIONS_ENUM,NR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=u7.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};pv.exports=NR});var l_=T((gRe,Tv)=>{"use strict";var bR=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},yR=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:bR,RemotePayloadSubscription:yR}});var Rv=T((ARe,gv)=>{"use strict";var IR=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=IR});var Nv=T((IRe,Ov)=>{"use strict";var _7=Rv(),NRe=ft(),Av=$e(),d7=B(),{getSchemaPath:bRe,getTransactionAuditStorePath:yRe}=ze(),{getDatabases:f7}=(me(),re(Ge));Ov.exports=E7;async function E7(e){let t=new _7;try{let r=f7()[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){d7.warn(`unable to stat table dbi due to ${r}`)}return t}a(E7,"lmdbGetTableSize")});var yv=T((CRe,bv)=>{"use strict";var wR=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}};bv.exports=wR});var mi=T((MRe,Lv)=>{"use strict";var h7=require("fs-extra"),m7=require("path"),lr=require("systeminformation"),uo=B(),p7=pt(),CR=Ze(),KE=b(),S7=Nv(),Cv=Ji(),{getThreadInfo:Iv}=nt(),xR=z();xR.initSync();var T7=yv(),{openEnvironment:DRe}=$e(),{getSchemaPath:PRe}=ze(),{database:g7}=(me(),re(Ge)),YE;Lv.exports={getHDBProcessInfo:MR,getNetworkInfo:vR,getDiskInfo:UR,getMemoryInfo:PR,getCPUInfo:DR,getTimeInfo:LR,getSystemInformation:BR,systemInformation:R7,getTableSize:HR,getMetrics:qR};function LR(){return lr.time()}a(LR,"getTimeInfo");async function DR(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:_,...u}=await lr.cpu();u.cpu_speed=await lr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...g}=await lr.currentLoad();return g.cpus=[],A.forEach(N=>{let{raw_load:M,raw_load_idle:G,raw_load_irq:x,raw_load_nice:D,raw_load_system:K,raw_load_user:$,...Q}=N;g.cpus.push(Q)}),u.current_load=g,u}catch(e){return uo.error(`error in getCPUInfo: ${e}`),{}}}a(DR,"getCPUInfo");async function PR(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await lr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return uo.error(`error in getMemoryInfo: ${e}`),{}}}a(PR,"getMemoryInfo");async function MR(){let e={core:[],clustering:[]};try{let t=await lr.processes(),r;try{r=Number.parseInt(await h7.readFile(m7.join(xR.get(KE.CONFIG_PARAMS.ROOTPATH),KE.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===KE.NODE_ERROR_CODES.ENOENT)uo.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return uo.error(`error in getHDBProcessInfo: ${t}`),e}}a(MR,"getHDBProcessInfo");async function UR(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await lr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,..._}=await lr.fsStats();return e.read_write=_,e.size=await lr.fsSize(),e}catch(t){return uo.error(`error in getDiskInfo: ${t}`),e}}a(UR,"getDiskInfo");async function vR(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await lr.networkInterfaceDefault(),e.latency=await lr.inetChecksite("google.com"),(await lr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:_,ieee8021xState:u,carrier_changes:d,...f}=n;e.interfaces.push(f)}),(await lr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return uo.error(`error in getNetworkInfo: ${t}`),e}}a(vR,"getNetworkInfo");async function BR(){if(YE!==void 0)return YE;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await lr.osInfo();e=c;let l=await lr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,YE=e,YE}catch(t){return uo.error(`error in getSystemInformation: ${t}`),e}}a(BR,"getSystemInformation");async function HR(){let e=[],t=await Cv.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await S7(n));return e}a(HR,"getTableSize");async function qR(){let e=await Cv.describeAll(),t={};for(let r in e){let n=t[r]={};for(let s in e[r])try{let i=g7({database:r,table:s}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[l,_,u]=c.trim().split(" ");return{pid:l,thread:_,txnid:u}}),n[s]=o}catch(i){uo.notify(`Error getting stats for table ${s}: ${i}`)}}return t}a(qR,"getMetrics");async function wv(){if(xR.get(KE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await p7.getNATSReferences(),r=await t.streams.info(CR.WORK_QUEUE_CONSUMER_NAMES.stream_name),n=await e.consumers.get(CR.WORK_QUEUE_CONSUMER_NAMES.stream_name,CR.WORK_QUEUE_CONSUMER_NAMES.durable_name),s={ingest:{stream:{...r.state},consumer:{num_ack_pending:n._info.num_ack_pending,num_redelivered:n._info.num_redelivered,num_waiting:n._info.num_waiting,num_pending:n._info.num_pending}}};return r.sources&&(s.ingest.stream.sources=r.sources),s}}a(wv,"getNatsStreamInfo");async function R7(e){let t=new T7;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await BR(),t.time=LR(),t.cpu=await DR(),t.memory=await PR(),t.disk=await UR(),t.network=await vR(),t.harperdb_processes=await MR(),t.table_size=await HR(),t.metrics=await qR(),t.threads=await Iv(),t.replication=await wv(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await BR();break;case"time":t.time=LR();break;case"cpu":t.cpu=await DR();break;case"memory":t.memory=await PR();break;case"disk":t.disk=await UR();break;case"network":t.network=await vR();break;case"harperdb_processes":t.harperdb_processes=await MR();break;case"table_size":t.table_size=await HR();break;case"database_metrics":case"metrics":t.metrics=await qR();break;case"threads":t.threads=await Iv();break;case"replication":t.replication=await wv();break;default:break}return t}a(R7,"systemInformation")});var pi=T((HRe,Uv)=>{"use strict";var A7=br(),GR=V(),O7=require("util"),pa=b(),Dv=z();Dv.initSync();var N7=RR(),Pv=Nr(),{Node:vRe,NodeSubscription:BRe}=Uc(),b7=Ec(),y7=Sv(),{RemotePayloadObject:I7,RemotePayloadSubscription:w7}=l_(),{handleHDBError:C7,hdb_errors:L7}=ee(),{HTTP_STATUS_CODES:D7,HDB_ERROR_MSGS:P7}=L7,M7=ns(),U7=mi(),v7=Bo(),{getDatabases:B7}=(me(),re(Ge)),H7=O7.promisify(N7.authorize),q7=Pv.searchByHash,x7=Pv.searchByValue;Uv.exports={authHeaderToUser:G7,isEmpty:F7,getNodeRecord:k7,upsertNodeRecord:$7,buildNodePayloads:V7,checkClusteringEnabled:Y7,getAllNodeRecords:K7,getSystemInfo:W7,reverseSubscription:Mv};async function G7(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await H7(t,null),e}a(G7,"authHeaderToUser");function F7(e){return e==null}a(F7,"isEmpty");async function k7(e){let t=new b7(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return q7(t)}a(k7,"getNodeRecord");async function $7(e){let t=new y7(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return A7.upsert(t)}a($7,"upsertNodeRecord");function Mv(e){if(GR.isEmpty(e.subscribe)||GR.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(Mv,"reverseSubscription");function V7(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=GR.getTableHashAttribute(l,_),{subscribe:d,publish:f}=Mv(c),E=B7()[l]?.[_],h=new w7(l,_,u,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);s.push(h)}return new I7(r,t,s,n)}a(V7,"buildNodePayloads");function Y7(){if(!Dv.get(pa.CONFIG_PARAMS.CLUSTERING_ENABLED))throw C7(new Error,P7.CLUSTERING_NOT_ENABLED,D7.BAD_REQUEST,void 0,void 0,!0)}a(Y7,"checkClusteringEnabled");async function K7(){let e=new M7(pa.SYSTEM_SCHEMA_NAME,pa.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await x7(e))}a(K7,"getAllNodeRecords");async function W7(){let e=await U7.getSystemInformation();return{hdb_version:v7.version(),node_version:e.node_version,platform:e.platform}}a(W7,"getSystemInfo")});var FR=T((xRe,kv)=>{"use strict";var WE=pt(),vv=V(),Bv=Ze(),Hv=b(),QE=B(),qv=UE(),Q7=Su(),{RemotePayloadObject:j7}=l_(),{handleHDBError:xv,hdb_errors:z7}=ee(),{HTTP_STATUS_CODES:Gv}=z7,{NodeSubscription:Fv}=Uc();kv.exports=J7;async function J7(e,t){let r;try{r=await WE.request(`${t}.${Bv.REQUEST_SUFFIX}`,new j7(Hv.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),QE.trace("Response from remote describe all request:",r)}catch(o){QE.error(`addNode received error from describe all request to remote node: ${o}`);let c=WE.requestErrorHandler(o,"add_node",t);throw xv(new Error,c,Gv.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Bv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw xv(new Error,o,Gv.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===Hv.SYSTEM_SCHEMA_NAME){await WE.createLocalTableStream(l,c);let h=new Fv(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=vv.doesSchemaExist(l),u=n[l]!==void 0,d=c?vv.doesTableExist(l,c):!0,f=c?n?.[l]?.[c]!==void 0:!0;if(!_&&!u||!d&&!f){s.push(o);continue}if(!_&&u&&(QE.trace(`addNode creating schema: ${l}`),await qv.createSchema({operation:"create_schema",schema:l})),!d&&f){QE.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Q7(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await qv.createTable(h)}await WE.createLocalTableStream(l,c);let E=new Fv(l,c,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:s}}a(J7,"reviewSubscriptions")});var d_=T((FRe,Yv)=>{"use strict";var{handleHDBError:jE,hdb_errors:X7}=ee(),{HTTP_STATUS_CODES:zE}=X7,{addUpdateNodeValidator:Z7}=GE(),u_=B(),Vv=b(),$v=Ze(),eee=V(),kR=pt(),__=pi(),tee=z(),ree=FR(),{Node:nee,NodeSubscription:see}=Uc(),{broadcast:iee}=nt(),oee="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",aee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",cee=tee.get(Vv.CONFIG_PARAMS.CLUSTERING_NODENAME);Yv.exports=lee;async function lee(e,t=!1){u_.trace("addNode called with:",e),__.checkClusteringEnabled();let r=Z7(e);if(r)throw jE(r,r.message,zE.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await __.getNodeRecord(n);if(!eee.isEmptyOrZeroLength(d))throw jE(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,zE.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await ree(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=oee,o;let c=__.buildNodePayloads(s,cee,Vv.OPERATIONS_ENUM.ADD_NODE,await __.getSystemInfo());u_.trace("addNode sending remote payload:",c);let l;try{l=await kR.request(`${n}.${$v.REQUEST_SUFFIX}`,c)}catch(d){u_.error(`addNode received error from request: ${d}`);let f=kR.requestErrorHandler(d,"add_node",n);throw jE(new Error,f,zE.INTERNAL_SERVER_ERROR,"error",f)}if(l.status===$v.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${l.message}`;throw jE(new Error,d,zE.INTERNAL_SERVER_ERROR,"error",d)}u_.trace(l);let _=[];for(let d=0,f=s.length;d<f;d++){let E=s[d];u_.trace("Add node updating work stream for node:",n,"subscriptions:",E),await kR.updateWorkStream(E,n),s[d].start_time===void 0&&delete s[d].start_time,_.push(new see(E.schema,E.table,E.publish,E.subscribe))}let u=new nee(n,_,l.system_info);return await __.upsertNodeRecord(u),iee({type:"nats_update"}),i.length>0?o.message=aee:o.message=`Successfully added '${n}' to manifest`,o}a(lee,"addNode")});var KR=T((VRe,Qv)=>{"use strict";var{handleHDBError:$R,hdb_errors:uee}=ee(),{HTTP_STATUS_CODES:VR}=uee,{addUpdateNodeValidator:_ee}=GE(),f_=B(),Wv=b(),Kv=Ze(),$Re=V(),YR=pt(),E_=pi(),dee=z(),{cloneDeep:fee}=require("lodash"),Eee=FR(),{Node:hee,NodeSubscription:mee}=Uc(),{broadcast:pee}=nt(),See="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Tee="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",gee=dee.get(Wv.CONFIG_PARAMS.CLUSTERING_NODENAME);Qv.exports=Ree;async function Ree(e){f_.trace("updateNode called with:",e),E_.checkClusteringEnabled();let t=_ee(e);if(t)throw $R(t,t.message,VR.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await E_.getNodeRecord(r);s.length>0&&(n=fee(s));let{added:i,skipped:o}=await Eee(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=See,c;let l=E_.buildNodePayloads(i,gee,Wv.OPERATIONS_ENUM.UPDATE_NODE,await E_.getSystemInfo());f_.trace("updateNode sending remote payload:",l);let _;try{_=await YR.request(`${r}.${Kv.REQUEST_SUFFIX}`,l)}catch(u){f_.error(`updateNode received error from request: ${u}`);let d=YR.requestErrorHandler(u,"update_node",r);throw $R(new Error,d,VR.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Kv.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw $R(new Error,u,VR.INTERNAL_SERVER_ERROR,"error",u)}f_.trace(_);for(let u=0,d=i.length;u<d;u++){let f=i[u];f_.trace(`updateNode updating work stream for node: ${r} subscription:`,f),await YR.updateWorkStream(f,r),i[u].start_time===void 0&&delete i[u].start_time}return n||(n=[new hee(r,[],_.system_info)]),await Aee(n[0],i,_.system_info),o.length>0?c.message=Tee:c.message=`Successfully updated '${r}'`,c}a(Ree,"updateNode");async function Aee(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 mee(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await E_.upsertNodeRecord(n),pee({type:"nats_update"})}a(Aee,"updateNodeTable")});var Zv=T((KRe,Xv)=>{"use strict";var Jv=require("joi"),{string:jv}=Jv.types(),Oee=st(),zv=b(),Nee=z(),bee=Ze();Xv.exports=yee;function yee(e){let t=jv.invalid(Nee.get(zv.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(bee.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=Jv.object({operation:jv.valid(zv.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Oee.validateBySchema(e,r)}a(yee,"removeNodeValidator")});var XE=T((QRe,iB)=>{"use strict";var{handleHDBError:eB,hdb_errors:Iee}=ee(),{HTTP_STATUS_CODES:tB}=Iee,wee=Zv(),h_=B(),rB=pi(),Cee=V(),JE=b(),nB=Ze(),sB=pt(),Lee=z(),{RemotePayloadObject:Dee}=l_(),{NodeSubscription:Pee}=Uc(),Mee=pu(),Uee=ea(),{broadcast:vee}=nt(),Bee=Lee.get(JE.CONFIG_PARAMS.CLUSTERING_NODENAME);iB.exports=Hee;async function Hee(e){h_.trace("removeNode called with:",e),rB.checkClusteringEnabled();let t=wee(e);if(t)throw eB(t,t.message,tB.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await rB.getNodeRecord(r);if(Cee.isEmptyOrZeroLength(n))throw eB(new Error,`Node '${r}' was not found.`,tB.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Dee(JE.OPERATIONS_ENUM.REMOVE_NODE,Bee,[]),i,o=!1;try{i=await sB.request(`${r}.${nB.REQUEST_SUFFIX}`,s),h_.trace("Remove node reply from remote node:",r,i)}catch(l){h_.error("removeNode received error from request:",l),o=!0}for(let l=0,_=n.subscriptions.length;l<_;l++){let u=n.subscriptions[l];h_.trace(`Remove node removing subscription: ${u.schema}.${u.table} for node: ${r}`);let d=new Pee(u.schema,u.table,!1,!1);await sB.updateWorkStream(d,r)}let c=new Mee(JE.SYSTEM_SCHEMA_NAME,JE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Uee.deleteRecord(c),vee({type:"nats_update"}),i?.status===nB.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(h_.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(Hee,"removeNode")});var cB=T((zRe,aB)=>{"use strict";var oB=require("joi"),{string:qee,array:xee}=oB.types(),Gee=st(),Fee=GE();aB.exports=kee;function kee(e){let t=oB.object({operation:qee.valid("configure_cluster").required(),connections:xee.items(Fee.validation_schema).required()});return Gee.validateBySchema(e,t)}a(kee,"configureClusterValidator")});var eh=T((XRe,fB)=>{"use strict";var $ee=b(),ZE=B(),Vee=V(),Yee=XE(),Kee=d_(),lB=pi(),Wee=cB(),{handleHDBError:uB,hdb_errors:Qee}=ee(),{HTTP_STATUS_CODES:_B}=Qee,jee="Configure cluster complete.",zee="Failed to configure the cluster. Check the logs for more details.",Jee="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";fB.exports=Xee;async function Xee(e){ZE.trace("configure cluster called with:",e),lB.checkClusteringEnabled();let t=Wee(e);if(t)throw uB(t,t.message,_B.BAD_REQUEST,void 0,void 0,!0);let r=await lB.getAllNodeRecords(),n=[];for(let f=0,E=r.length;f<E;f++)n.push(dB(Yee,{operation:$ee.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let s=await Promise.allSettled(n);ZE.trace("All results from configure_cluster remove node:",s);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(dB(Kee,E,E.node_name))}let c=await Promise.allSettled(i);ZE.trace("All results from configure_cluster add node:",c);let l=[],_=[],u=!1,d=s.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(ZE.error(h.reason),l.includes(h.reason.node_name)||l.push(h.reason.node_name)),h.status==="fulfilled"&&(u=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(Vee.isEmptyOrZeroLength(l))return{message:jee,connections:_};if(u)return{message:Jee,failed_nodes:l,connections:_};throw uB(new Error,zee,_B.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Xee,"configureCluster");async function dB(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){throw{node_name:r,error:n}}}a(dB,"functionWrapper")});var hB=T((eAe,EB)=>{"use strict";var th=require("joi"),Zee=st(),{validateSchemaExists:ete,validateTableExists:tte,validateSchemaName:rte}=ws(),nte=th.object({operation:th.string().valid("purge_stream"),schema:th.string().custom(ete).custom(rte).required(),table:th.string().custom(tte).required()});function ste(e){return Zee.validateBySchema(e,nte)}a(ste,"purgeStreamValidator");EB.exports=ste});var WR=T((rAe,mB)=>{"use strict";var{handleHDBError:ite,hdb_errors:ote}=ee(),{HTTP_STATUS_CODES:ate}=ote,cte=hB(),lte=pt(),ute=pi();mB.exports=_te;async function _te(e){if(e.purge_ingest!==!0){let s=cte(e);if(s)throw ite(s,s.message,ate.BAD_REQUEST,void 0,void 0,!0)}ute.checkClusteringEnabled();let{schema:t,table:r,purge_ingest:n}=e;return await lte.purgeTableStream(t,r,n),n?"Successfully purged ingest":`Successfully purged table '${t}.${r}'`}a(_te,"purgeStream")});var nh=T((sAe,AB)=>{"use strict";var jR=pi(),dte=pt(),TB=z(),rh=b(),Sa=Ze(),fte=V(),QR=B(),{RemotePayloadObject:Ete}=l_(),{ErrorCode:pB}=require("nats"),SB=TB.get(rh.CONFIG_PARAMS.CLUSTERING_ENABLED),gB=TB.get(rh.CONFIG_PARAMS.CLUSTERING_NODENAME);AB.exports={clusterStatus:hte,buildNodeStatus:RB};async function hte(){let e={node_name:gB,is_enabled:SB,connections:[]};if(!SB)return e;let t=await jR.getAllNodeRecords();if(fte.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(RB(t[n],e.connections));return await Promise.allSettled(r),e}a(hte,"clusterStatus");async function RB(e,t){let r=e.name,n=new Ete(rh.OPERATIONS_ENUM.CLUSTER_STATUS,gB,void 0,await jR.getSystemInfo()),s,i,o=Sa.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await dte.request(Sa.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Sa.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Sa.CLUSTER_STATUS_STATUSES.CLOSED,QR.error(`Error getting node status from ${r} `,s))}catch(l){QR.warn(`Error getting node status from ${r}`,l),l.code===pB.NoResponders?o=Sa.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===pB.Timeout?o=Sa.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Sa.CLUSTER_STATUS_STATUSES.CLOSED}let c=new mte(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==rh.PRE_4_0_0_VERSION&&await jR.upsertNodeRecord(l)}catch(l){QR.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(RB,"buildNodeStatus");function mte(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(mte,"NodeStatusObject")});var ih=T((oAe,OB)=>{"use strict";var{handleHDBError:pte,hdb_errors:Ste}=ee(),{HTTP_STATUS_CODES:Tte}=Ste,gte=pt(),Rte=pi(),zR=V(),sh=require("joi"),Ate=st(),Ote=2e3,Nte=sh.object({timeout:sh.number().min(1),connected_nodes:sh.boolean(),routes:sh.boolean()});OB.exports=bte;async function bte(e){Rte.checkClusteringEnabled();let t=Ate.validateBySchema(e,Nte);if(t)throw pte(t,t.message,Tte.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||zR.autoCastBoolean(n),o=s===void 0||zR.autoCastBoolean(s),c={nodes:[]},l=await gte.getServerList(r??Ote),_={};if(i)for(let u=0,d=l.length;u<d;u++){let f=l[u].statsz;f&&(_[l[u].server.name]=f.routes)}for(let u=0,d=l.length;u<d;u++){if(l[u].statsz)continue;let f=l[u].server,E=l[u].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:l[u].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:zR.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(bte,"clusterNetwork")});var IB=T((cAe,yB)=>{"use strict";var JR=require("joi"),NB=st(),{route_constraints:bB}=QT();yB.exports={setRoutesValidator:yte,deleteRoutesValidator:Ite};function yte(e){let t=JR.object({server:JR.valid("hub","leaf").required(),routes:bB.required()});return NB.validateBySchema(e,t)}a(yte,"setRoutesValidator");function Ite(e){let t=JR.object({routes:bB.required()});return NB.validateBySchema(e,t)}a(Ite,"deleteRoutesValidator")});var ah=T((uAe,DB)=>{"use strict";var Ta=mt(),XR=V(),oh=b(),wB=IB(),{handleHDBError:CB,hdb_errors:wte}=ee(),{HTTP_STATUS_CODES:LB}=wte,Cte="cluster routes successfully set",Lte="cluster routes successfully deleted";DB.exports={setRoutes:Dte,getRoutes:Pte,deleteRoutes:Mte};function Dte(e){let t=wB.setRoutesValidator(e);if(t)throw CB(t,t.message,LB.BAD_REQUEST,void 0,void 0,!0);let r=Ta.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=XR.autoCast(_.port);let u=n.some(f=>f.host===_.host&&f.port===_.port),d=s.some(f=>f.host===_.host&&f.port===_.port);u||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?Ta.updateConfigValue(oh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):Ta.updateConfigValue(oh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:Cte,set:o,skipped:i}}a(Dte,"setRoutes");function Pte(){let e=Ta.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Pte,"getRoutes");function Mte(e){let t=wB.deleteRoutesValidator(e);if(t)throw CB(t,t.message,LB.BAD_REQUEST,void 0,void 0,!0);let r=Ta.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,l=!1;for(let _=0,u=e.routes.length;_<u;_++){let d=e.routes[_],f=!1;for(let E=0,h=n.length;E<h;E++){let p=n[E];if(d.host===p.host&&d.port===p.port){n.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),l=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(n=XR.isEmptyOrZeroLength(n)?null:n,Ta.updateConfigValue(oh.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),l&&(s=XR.isEmptyOrZeroLength(s)?null:s,Ta.updateConfigValue(oh.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:Lte,deleted:i,skipped:o}}a(Mte,"deleteRoutes")});var MB=T((dAe,PB)=>{"use strict";var m_=require("alasql"),ga=require("recursive-iterator"),ds=B(),Ute=V(),p_=b(),ZR=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,Bte(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=>p_.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=>!p_.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][p_.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=vte(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(_=>!p_.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let u=new m_.yy.Column({columnid:_});s.tableid&&(u.tableid=s.tableid),this.ast.columns.push(u),l.includes(_)||l.push(_)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function vte(e){return e.filter(t=>t[p_.PERMS_CRUD_ENUM.READ])}a(vte,"filterReadRestrictedAttrs");function Bte(e,t,r,n,s){Hte(e,t,r,n,s)}a(Bte,"interpretAST");function S_(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(S_,"addSchemaTableToMap");function Hte(e,t,r,n,s){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof m_.yy.Insert?Fte(e,t,r):e instanceof m_.yy.Select?qte(e,t,r,n,s):e instanceof m_.yy.Update?xte(e,t,r):e instanceof m_.yy.Delete?Gte(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Hte,"getRecordAttributesAST");function qte(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(Ute.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{S_(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),S_(c.table,t,r,n,s)});let o=new ga(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 ga(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 ga(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 ga(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(qte,"getSelectAttributes");function xte(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new ga(e.columns),s=e.table.databaseid;S_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&eA(e.table.tableid,s,i.columnid,t,r)}a(xte,"getUpdateAttributes");function Gte(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new ga(e.where),s=e.table.databaseid;S_(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&eA(e.table.tableid,s,i.columnid,t,r)}a(Gte,"getDeleteAttributes");function Fte(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new ga(e.columns),s=e.into.databaseid;S_(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&eA(e.into.tableid,s,i.columnid,t,r)}a(Fte,"getInsertAttributes");function eA(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(eA,"pushAttribute");PB.exports=ZR});var lh=T((EAe,HB)=>{var ch=sa(),UB=require("chalk"),fn=B(),vB=require("prompt"),{promisify:kte}=require("util"),tA=b(),$te=require("fs-extra"),Vte=require("path"),Yte=V(),Kte=Bo(),BB=z();BB.initSync();var Wte=require("moment"),Qte=kte(vB.get),jte=Vte.join(BB.getHdbBasePath(),tA.LICENSE_KEY_DIR_NAME,tA.LICENSE_FILE_NAME,tA.LICENSE_FILE_NAME);HB.exports={getFingerprint:Jte,setLicense:zte,parseLicense:rA,register:Xte,getRegistrationInfo:ere};async function zte(e){if(e&&e.key&&e.company){try{fn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await rA(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw fn.error(r),fn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(zte,"setLicense");async function Jte(){let e={};try{e=await ch.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw fn.error(r),fn.error(t),new Error(r)}return e}a(Jte,"getFingerprint");async function rA(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");fn.info("Validating license input...");let r=ch.validateLicense(e,t);if(fn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(fn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(fn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{fn.info("writing license to disk"),await $te.writeFile(jte,JSON.stringify({license_key:e,company:t}))}catch(n){throw fn.error("Failed to write License"),n}return"Registration successful."}a(rA,"parseLicense");async function Xte(){let e=await Zte();return rA(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Xte,"register");async function Zte(){let e=await ch.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:UB.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:UB.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{vB.start()}catch(n){fn.error(n)}let r;try{r=await Qte(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(Zte,"promptForRegistration");async function ere(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ch.getLicense()}catch(r){throw fn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Yte.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Kte.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Wte.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(ere,"getRegistrationInfo")});var xB=T((mAe,qB)=>{"use strict";var tre=Ze(),nA=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,_,u,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+tre.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:d,routes:f,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};qB.exports=nA});var kB=T((SAe,FB)=>{"use strict";var GB=Ze(),sA=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+GB.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+GB.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"}};FB.exports=sA});var VB=T((gAe,$B)=>{"use strict";var iA=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};$B.exports=iA});var KB=T((AAe,YB)=>{"use strict";var rre=Ze(),oA=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+rre.SERVER_SUFFIX.ADMIN,this.password=r}};YB.exports=oA});var Eh=T((NAe,jB)=>{"use strict";var vc=require("path"),dh=require("fs-extra"),nre=xB(),sre=kB(),ire=VB(),ore=KB(),aA=Ir(),Hc=V(),vr=mt(),_h=b(),T_=Ze(),{CONFIG_PARAMS:Tt}=_h,g_=B(),R_=z(),WB=fi(),cA=pt(),Bc="clustering",are=1e4,QB=5;jB.exports={generateNatsConfig:lre,removeNatsConfig:ure,getHubConfigPath:cre};function cre(){let e=R_.get(Tt.ROOTPATH);return vc.join(e,Bc,T_.NATS_CONFIG_FILES.HUB_SERVER)}a(cre,"getHubConfigPath");async function lre(e=!1,t=void 0){R_.initSync();let r=R_.get(Tt.ROOTPATH),n=vc.join(r,Bc,T_.PID_FILES.HUB),s=vc.join(r,Bc,T_.PID_FILES.LEAF),i=vr.getConfigFromFile(Tt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=vc.join(r,Bc,T_.NATS_CONFIG_FILES.HUB_SERVER),c=vc.join(r,Bc,T_.NATS_CONFIG_FILES.LEAF_SERVER),l=vr.getConfigFromFile(Tt.CLUSTERING_TLS_CERTIFICATE),_=vr.getConfigFromFile(Tt.CLUSTERING_TLS_PRIVATEKEY),u=vr.getConfigFromFile(Tt.CLUSTERING_TLS_CERT_AUTH),d=vr.getConfigFromFile(Tt.CLUSTERING_TLS_INSECURE),f=vr.getConfigFromFile(Tt.CLUSTERING_TLS_VERIFY),E=vr.getConfigFromFile(Tt.CLUSTERING_NODENAME),h=vr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cA.checkNATSServerInstalled()||fh("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await aA.listUsers(),S=vr.getConfigFromFile(Tt.CLUSTERING_USER),A=await aA.getClusterUser();(Hc.isEmpty(A)||A.active!==!0)&&fh(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await uh(Tt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await uh(Tt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await uh(Tt.CLUSTERING_HUBSERVER_NETWORK_PORT),await uh(Tt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],N=[];for(let[Q,se]of p.entries())se.role.role===_h.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new ore(se.username,WB.decrypt(se.hash))),N.push(new ire(se.username,WB.decrypt(se.hash))));let M=[],{hub_routes:G}=vr.getClusteringRoutes();if(!Hc.isEmptyOrZeroLength(G))for(let Q of G)M.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${Q.host}:${Q.port}`);let x=new nre(vr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_NETWORK_PORT),E,n,l,_,u,d,f,h,vr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_CLUSTER_NAME),vr.getConfigFromFile(Tt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),M,g,N);u==null&&(delete x.tls.ca_file,delete x.leafnodes.tls.ca_file),t=Hc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===_h.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await dh.writeJson(o,x),g_.trace(`Hub server config written to ${o}`));let D=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,$=new sre(vr.getConfigFromFile(Tt.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,s,i,[D],[K],g,N,l,_,u,d);u==null&&delete $.tls.ca_file,(t===void 0||t===_h.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await dh.writeJson(c,$),g_.trace(`Leaf server config written to ${c}`))}a(lre,"generateNatsConfig");async function uh(e){let t=R_.get(e);return Hc.isEmpty(t)&&fh(`port undefined for '${e}'`),await Hc.isPortTaken(t)&&fh(`'${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(uh,"isPortAvailable");function fh(e){let t=`Error generating clustering config: ${e}`;g_.error(t),console.error(t),process.exit(1)}a(fh,"generateNatsConfigError");async function ure(e){let{port:t,config_file:r}=cA.getServerConfig(e),{username:n,decrypt_hash:s}=await aA.getClusterUser(),i=0,o=2e3;for(;i<QB;){try{let _=await cA.createConnection(t,n,s,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){g_.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=QB)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await Hc.async_set_timeout(o*(i*2))}let c="0".repeat(are),l=vc.join(R_.get(Tt.ROOTPATH),Bc,r);await dh.writeFile(l,c),await dh.remove(l),g_.notify(e,"started.")}a(ure,"removeNatsConfig")});var t0=T((yAe,e0)=>{"use strict";var En=z(),_re=sa(),fe=b(),A_=Ze(),Si=require("path"),{PACKAGE_ROOT:mh}=b(),zB=z(),hh=V(),qc="/dev/null",dre=Si.join(mh,"launchServiceScripts"),JB=Si.join(mh,"utility/scripts"),fre=Si.join(JB,fe.HDB_RESTART_SCRIPT),XB=Si.resolve(mh,"dependencies",`${process.platform}-${process.arch}`,A_.NATS_BINARY_NAME);function ZB(){let t=_re.licenseSearch().ram_allocation||fe.RAM_ALLOCATION_ENUM.DEFAULT,r=fe.MEM_SETTING_KEY+t,n={[fe.PROCESS_NAME_ENV_PROP]:fe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return hh.noBootFile()&&(n[fe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=hh.getEnvCliRootPath()),{name:fe.PROCESS_DESCRIPTORS.HDB,script:fe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:mh}}a(ZB,"generateMainServerConfig");var Ere=9930;function hre(){En.initSync(!0);let e=En.get(fe.CONFIG_PARAMS.ROOTPATH),t=Si.join(e,"clustering",A_.NATS_CONFIG_FILES.HUB_SERVER),r=Si.join(En.get(fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),fe.LOG_NAMES.HDB),n=zB.get(fe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=A_.LOG_LEVEL_FLAGS[En.get(fe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Ere?"-"+n:""),script:XB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[fe.PROCESS_NAME_ENV_PROP]:fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return En.get(fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=qc,i.error_file=qc),i}a(hre,"generateNatsHubServerConfig");var mre=9940;function pre(){En.initSync(!0);let e=En.get(fe.CONFIG_PARAMS.ROOTPATH),t=Si.join(e,"clustering",A_.NATS_CONFIG_FILES.LEAF_SERVER),r=Si.join(En.get(fe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),fe.LOG_NAMES.HDB),n=zB.get(fe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=A_.LOG_LEVEL_FLAGS[En.get(fe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==mre?"-"+n:""),script:XB,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[fe.PROCESS_NAME_ENV_PROP]:fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return En.get(fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=qc,i.error_file=qc),i}a(pre,"generateNatsLeafServerConfig");function Sre(){En.initSync();let e=Si.join(En.get(fe.CONFIG_PARAMS.LOGGING_ROOT),fe.LOG_NAMES.HDB),t={name:fe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:fe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[fe.PROCESS_NAME_ENV_PROP]:fe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:dre,autorestart:!1};return En.get(fe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=qc,t.error_file=qc),t}a(Sre,"generateClusteringUpgradeV4ServiceConfig");function Tre(){let e={[fe.PROCESS_NAME_ENV_PROP]:fe.PROCESS_DESCRIPTORS.RESTART_HDB};return hh.noBootFile()&&(e[fe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=hh.getEnvCliRootPath()),{...{name:fe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:JB},script:fre}}a(Tre,"generateRestart");function gre(){return{apps:[ZB()]}}a(gre,"generateAllServiceConfigs");e0.exports={generateAllServiceConfigs:gre,generateMainServerConfig:ZB,generateRestart:Tre,generateNatsHubServerConfig:hre,generateNatsLeafServerConfig:pre,generateClusteringUpgradeV4ServiceConfig:Sre}});var xc=T((CAe,E0)=>{"use strict";var De=b(),Rre=V(),Ti=Eh(),O_=pt(),qs=Ze(),_o=t0(),ph=z(),fo=B(),Are=pi(),{startWorker:r0,onMessageFromWorkers:Ore}=nt(),Nre=mi(),wAe=require("util"),bre=require("child_process"),yre=require("fs"),{execFile:Ire}=bre,Ne;E0.exports={enterPM2Mode:wre,start:Eo,stop:lA,reload:s0,restart:i0,list:uA,describe:a0,connect:gi,kill:Mre,startAllServices:Ure,startService:_A,getUniqueServicesList:c0,restartAllServices:vre,isServiceRegistered:l0,reloadStopStart:u0,restartHdb:o0,deleteProcess:Dre,startClusteringProcesses:d0,startClusteringThreads:f0,isHdbRestartRunning:Pre,isClusteringRunning:Hre,stopClustering:Bre,reloadClustering:qre};var N_=!1;Ore(e=>{e.type==="restart"&&ph.initSync(!0)});function wre(){N_=!0}a(wre,"enterPM2Mode");function gi(){return Ne||(Ne=require("pm2")),new Promise((e,t)=>{Ne.connect((r,n)=>{fo.setupConsoleLogging(),r&&t(r),e(n)})})}a(gi,"connect");var Br,Cre=10,n0;function Eo(e,t=!1){if(N_)return Lre(e);let r=Ire(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Br.indexOf(r);o>-1&&Br.splice(o,1),!n0&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Cre&&(yre.existsSync(Ti.getHubConfigPath())?Eo(e):(await Ti.generateNatsConfig(!0),Eo(e),await new Promise(c=>setTimeout(c,3e3)),await Ti.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ti.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=ph.get(De.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,_=0,u;for(;l=c.exec(i);){if(l.index&&qs.LOG_LEVEL_HIERARCHY[o]>=qs.LOG_LEVEL_HIERARCHY[u||"info"]){let E=u===qs.LOG_LEVELS.ERR||u===qs.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",E,n,i.slice(_,l.index).trim())}let[d,f]=l;_=l.index+d.length,u=qs.LOG_LEVELS[f]}if(qs.LOG_LEVEL_HIERARCHY[o]>=qs.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===qs.LOG_LEVELS.ERR||u===qs.LOG_LEVELS.WRN?fo.OUTPUTS.STDERR:fo.OUTPUTS.STDOUT;fo.logCustomLevel(u||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Br=[],!Br&&!t){let i=a(()=>{n0=!0,Br&&(Br.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Br.push(r)}a(Eo,"start");function Lre(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}Ne.start(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(Lre,"startWithPM2");function lA(e){if(!N_){for(let t of Br||[])t.name===e&&(Br.splice(Br.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}Ne.stop(e,async(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.delete(e,(i,o)=>{i&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(o)})})})}a(lA,"stop");function s0(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}Ne.reload(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(s0,"reload");function i0(e){if(!N_)for(let t of Br||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}Ne.restart(e,(n,s)=>{Ne.disconnect(),t(s)})})}a(i0,"restart");function Dre(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}Ne.delete(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(Dre,"deleteProcess");async function o0(){await Eo(_o.generateRestart())}a(o0,"restartHdb");async function Pre(){let e=await uA();for(let t in e)if(e[t].name===De.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Pre,"isHdbRestartRunning");function uA(){return new Promise(async(e,t)=>{try{await gi()}catch(r){t(r)}Ne.list((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(uA,"list");function a0(e){return new Promise(async(t,r)=>{try{await gi()}catch(n){r(n)}Ne.describe(e,(n,s)=>{n&&(Ne.disconnect(),r(n)),Ne.disconnect(),t(s)})})}a(a0,"describe");function Mre(){if(!N_){for(let e of Br||[])e.kill();Br=[];return}return new Promise(async(e,t)=>{try{await gi()}catch(r){t(r)}Ne.killDaemon((r,n)=>{r&&(Ne.disconnect(),t(r)),Ne.disconnect(),e(n)})})}a(Mre,"kill");async function Ure(){try{await d0(),await f0(),await Eo(_o.generateAllServiceConfigs())}catch(e){throw Ne?.disconnect(),e}}a(Ure,"startAllServices");async function _A(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case De.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=_o.generateMainServerConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=_o.generateNatsIngestServiceConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=_o.generateNatsReplyServiceConfig();break;case De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=_o.generateNatsHubServerConfig(),await Eo(r,t),await Ti.removeNatsConfig(e);return;case De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=_o.generateNatsLeafServerConfig(),await Eo(r,t),await Ti.removeNatsConfig(e);return;case De.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=_o.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Eo(r)}catch(r){throw Ne?.disconnect(),r}}a(_A,"startService");async function c0(){try{let e=await uA(),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 Ne?.disconnect(),e}}a(c0,"getUniqueServicesList");async function vre(e=[]){try{let t=!1,r=await c0();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===De.PROCESS_DESCRIPTORS.HDB?t=!0:await i0(o))}t&&await u0(De.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Ne?.disconnect(),t}}a(vre,"restartAllServices");async function l0(e){if(Br?.find(r=>r.name===e))return!0;let t=await Nre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(l0,"isServiceRegistered");async function u0(e){let t=e===De.PROCESS_DESCRIPTORS.HDB?ph.get(De.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ph.get(De.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await a0(e),n=Rre.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await lA(e),await _A(e)):e===De.PROCESS_DESCRIPTORS.HDB?await o0():await s0(e)}a(u0,"reloadStopStart");var _0;async function d0(e=!1){for(let t in De.CLUSTERING_PROCESSES){let r=De.CLUSTERING_PROCESSES[t];await _A(r,e)}}a(d0,"startClusteringProcesses");async function f0(){_0=r0(De.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:De.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await O_.createWorkQueueStream(qs.WORK_QUEUE_CONSUMER_NAMES),await O_.updateIngestStreamConsumer(),await O_.updateLocalStreams();let e=await Are.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===De.PRE_4_0_0_VERSION){fo.info("Starting clustering upgrade 4.0.0 process"),r0(De.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(f0,"startClusteringThreads");async function Bre(){for(let e in De.CLUSTERING_PROCESSES)if(e!==De.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===De.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await _0.terminate();else{let t=De.CLUSTERING_PROCESSES[e];await lA(t)}}a(Bre,"stopClustering");async function Hre(){for(let e in De.CLUSTERING_PROCESSES){let t=De.CLUSTERING_PROCESSES[e];if(await l0(t)===!1)return!1}return!0}a(Hre,"isClusteringRunning");async function qre(){await Ti.generateNatsConfig(!0),await O_.reloadNATSHub(),await O_.reloadNATSLeaf(),await Ti.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ti.removeNatsConfig(De.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(qre,"reloadClustering")});var Ra=T((DAe,R0)=>{"use strict";var xre=require("minimist"),{isMainThread:EA,parentPort:p0}=require("worker_threads"),lt=b(),{PROCESS_DESCRIPTORS_VALIDATE:b_}=lt,xs=B(),hA=V(),Sh=Eh(),Gc=pt(),dA=Ze(),S0=mt(),Gs=xc(),h0=mi(),Gre=Mo(),{restartWorkers:Th,onMessageByType:Fre}=nt(),{handleHDBError:kre,hdb_errors:$re}=ee(),{HTTP_STATUS_CODES:Vre}=$re,gh=z();gh.initSync();var y_=`Restarting HarperDB. This may take up to ${lt.RESTART_TIMEOUT_MS/1e3} seconds.`,Yre="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",m0="Clustering is not enabled so cannot be restarted",Kre="Invalid service",Fc,xn;R0.exports={restart:T0,restartService:mA};EA&&Fre(lt.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?mA({service:e.workerType}):T0({operation:"restart"})});async function T0(e){xn=Object.keys(e).length===0,Fc=await Gs.isServiceRegistered(lt.HDB_PROC_DESCRIPTOR);let t=xre(process.argv);if(t.service){await mA(t);return}if(xn&&!Fc){console.error(Yre);return}if(xn&&console.log(y_),Fc){Gs.enterPM2Mode(),xs.notify(y_);let r=Gre(Object.keys(lt.CONFIG_PARAM_MAP),!0);return hA.isEmptyOrZeroLength(Object.keys(r))||S0.updateConfigValue(void 0,void 0,r,!0,!0),Qre(),y_}return EA?(xs.notify(y_),setTimeout(()=>{Th()},50)):p0.postMessage({type:lt.ITC_EVENT_TYPES.RESTART}),y_}a(T0,"restart");async function mA(e){let{service:t}=e;if(lt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw kre(new Error,Kre,Vre.BAD_REQUEST,void 0,void 0,!0);if(Fc=await Gs.isServiceRegistered(lt.HDB_PROC_DESCRIPTOR),!EA)return p0.postMessage({type:lt.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case b_.clustering:if(!gh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=m0;break}xn&&console.log("Restarting clustering"),xs.notify("Restarting clustering"),await g0();break;case b_.clustering_config:case b_["clustering config"]:if(!gh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=m0;break}xn&&console.log("Restarting clustering_config"),xs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case b_.harperdb:case b_.http_workers:if(xn&&!Fc){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"),xs.notify("Restarting http_workers"),xn?await Gs.restart(lt.HDB_PROC_DESCRIPTOR):setTimeout(()=>{Th("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(xs.error(r),xn&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(mA,"restartService");async function Wre(){await Gc.publishToStream(`${dA.SUBJECT_PREFIXES.TXN}.${dA.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,dA.WORK_QUEUE_CONSUMER_NAMES.stream_name,Gc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Wre,"postDummyNatsMsg");async function Qre(){await g0(),await Gs.restart(lt.HDB_PROC_DESCRIPTOR),await hA.async_set_timeout(2e3),gh.get(lt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await fA(),xn&&(await Gc.closeConnection(),process.exit(0))}a(Qre,"restartPM2Mode");async function g0(){if(!S0.getConfigFromFile(lt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await h0.getHDBProcessInfo()).clustering.length===0)xs.trace("Clustering not running, restart will start clustering services"),await Sh.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await fA(),xn&&await Gc.closeConnection();else{await Wre(),await Sh.generateNatsConfig(!0),Fc?(xs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await h0.getHDBProcessInfo()).clustering.forEach(s=>{xs.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await hA.async_set_timeout(3e3),await fA(),await Gc.updateLocalStreams(),xn&&await Gc.closeConnection(),xs.trace("Restart clustering restarting ingest and reply service threads");let t=Th(lt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Th(lt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(g0,"restartClustering");async function fA(){await Sh.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Sh.removeNatsConfig(lt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(fA,"removeNatsConfig")});var P0=T((UAe,D0)=>{"use strict";var MAe=require("lodash"),Hr=b(),{handleHDBError:A0,hdb_errors:jre}=ee(),{HDB_ERROR_MSGS:zre,HTTP_STATUS_CODES:Jre}=jre,pA=B();D0.exports={getRolePermissions:Zre};var Aa=Object.create(null),Xre=a(e=>({key:e,perms:{}}),"perms_template_obj"),y0=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),I0=a((e=!1,t=!1,r=!1,n=!1)=>({[Hr.PERMS_CRUD_ENUM.READ]:e,[Hr.PERMS_CRUD_ENUM.INSERT]:t,[Hr.PERMS_CRUD_ENUM.UPDATE]:r,[Hr.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),SA=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...I0(t,r,n,s)}),"table_perms_template"),O0=a((e,t=I0())=>({attribute_name:e,describe:L0(t),[I_]:t[I_],[TA]:t[TA],[gA]:t[gA]}),"attr_perms_template"),N0=a((e,t=!1)=>({attribute_name:e,describe:t,[I_]:t}),"timestamp_attr_perms_template"),{READ:I_,INSERT:TA,UPDATE:gA}=Hr.PERMS_CRUD_ENUM,w0=Object.values(Hr.PERMS_CRUD_ENUM),C0=[I_,TA,gA];function Zre(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Hr.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Aa[t]&&Aa[t].key===n)return Aa[t].perms;let s=ene(e,r);return Aa[t]?Aa[t].key=n:Aa[t]=Xre(n),Aa[t].perms=s,s}catch(r){if(!e[Hr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Hr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Hr.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw pA.error(n),pA.debug(r),A0(new Error,zre.OUTDATED_PERMS_TRANSLATION_ERROR,Jre.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
12
+ ${r.stack}`;throw pA.error(n),A0(new Error)}}}a(Zre,"getRolePermissions");function ene(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Hr.SYSTEM_SCHEMA_NAME]=n[Hr.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=tne(t[i]);return}r[i]=y0(),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],_=rne(c,l);r[i].describe||w0.forEach(u=>{_[u]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=SA()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=SA()})}),r}a(ene,"translateRolePermissions");function tne(e){let t=y0(!0);return Object.keys(e).forEach(r=>{t.tables[r]=SA(!0,!0,!0,!0,!0)}),t}a(tne,"createStructureUserPermissions");function rne(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,u)=>{let{attribute_name:d}=u,f=u;return Hr.TIME_STAMP_NAMES.includes(d)&&(f=N0(d,u[I_])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=O0(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let u=i[_];u.describe=L0(u),s.attribute_permissions.push(u),c||nne(u,l)}else if(_!==o){let u;Hr.TIME_STAMP_NAMES.includes(_)?u=N0(_):u=O0(_),s.attribute_permissions.push(u)}}),c||s.attribute_permissions.push(l),s.describe=b0(s),s}else return e.describe=b0(e),e}a(rne,"getTableAttrPerms");function b0(e){return w0.filter(t=>e[t]).length>0}a(b0,"getSchemaTableDescribePerm");function L0(e){return C0.filter(t=>e[t]).length>0}a(L0,"getAttributeDescribePerm");function nne(e,t){C0.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(nne,"checkForHashPerms")});var M0={};je(M0,{Headers:()=>ho});var ho,Rh=Ae(()=>{ho=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];n?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var w_={};je(w_,{authentication:()=>F0,bypassAuth:()=>une,login:()=>dne,logout:()=>fne,start:()=>_ne});function une(){G0=!0}async function F0(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?ane?one:[]:ine?sne:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new ho([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ah&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ah&&o.push("Access-Control-Allow-Credentials","true")}}let l,_;if(Ah){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.indexOf(E);if(h>=0){let p=s.indexOf(";",h),S=s.indexOf("=",h);l=s.slice(S+1,p===-1?s.length:p),_=await v0.get(l)}e.session=_||(_={})}e.user=null;let u=a((E,h,p)=>{let S=new Nh.AuthAuditLog(E,h,Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,l&&(S.session_id=l),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Xt.AUTH_AUDIT_STATUS.SUCCESS?U0.notify(S):U0.error(S)},"authAuditLog"),d;if(n){if(d=Oa.get(n),!d){let[E,h]=n.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await Mt.getUser(p,S,e):null;break;case"Bearer":try{d=await(0,Oh.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,Oh.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return lne&&(Oa.get(h)||(Oa.set(h,h),u(p,Xt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:mo({error:A.message},e)})}Oa.set(n,d),cne&&u(d.username,Xt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Mt.getUser(_.user,null,e):(G0&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,H0.getSuperUser)());Ah&&(e.session.update=function(E){if(!l){l=(0,q0.v4)();let p=`${(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",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=l,v0.put(E)},e.login=async function(E,h){e.user=await Mt.getUser(E,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ki.loginPath?(f.status=302,f.headers.set("Location",Ki.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(l){throw c(l)}function c(l){let _=o.length;if(_>0){let u=l.headers;u||(l.headers=u=new ho);for(let d=0;d<_;){let f=o[d++];u.set(f,o[d++])}}return o=null,l}a(c,"applyResponseHeaders")}function _ne({server:e,port:t}){e.request(F0,{port:t||"all"}),B0||(B0=!0,setInterval(()=>{Oa=new Map},Gn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),x0.user.addListener(()=>{Oa=new Map}))}async function dne(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 fne(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var H0,Oh,q0,Gn,Xt,Nh,x0,U0,sne,ine,one,ane,v0,Ah,G0,cne,lne,Oa,B0,bh=Ae(()=>{H0=U(Ir());jr();Vl();Oh=U(c_());me();q0=require("uuid"),Gn=U(z()),Xt=U(b()),Nh=U(B()),x0=U(Lu());Rh();kc();U0=(0,Nh.loggerWithTag)("auth-event");Gn.initSync();sne=Gn.get(Xt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),ine=Gn.get(Xt.CONFIG_PARAMS.HTTP_CORS),one=Gn.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),ane=Gn.get(Xt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),v0=ht({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ah=Gn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,G0=Gn.get(Xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,cne=Gn.get(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,lne=Gn.get(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Oa=new Map;Mt.onInvalidatedUser(()=>{Oa=new Map});a(une,"bypassAuth");a(F0,"authentication");a(_ne,"start");a(dne,"login");a(fne,"logout")});var Q0=T(($Ae,W0)=>{"use strict";var be=require("joi"),k0=require("fs-extra"),$0=require("path"),Ai=st(),V0=z(),Y0=b(),K0=B(),{hdb_errors:Ene}=ee(),{HDB_ERROR_MSGS:ur}=Ene,Ri=/^[a-zA-Z0-9-_]+$/;W0.exports={getDropCustomFunctionValidator:mne,setCustomFunctionValidator:pne,addComponentValidator:Rne,dropCustomFunctionProjectValidator:Ane,packageComponentValidator:One,deployComponentValidator:Nne,setComponentFileValidator:Sne,getComponentFileValidator:gne,dropComponentFileValidator:Tne};function yh(e,t,r){try{let n=V0.get(Y0.CONFIG_PARAMS.COMPONENTSROOT),s=$0.join(n,t);return k0.existsSync(s)?e?t:r.message(ur.PROJECT_EXISTS):e?r.message(ur.NO_PROJECT):t}catch(n){return K0.error(n),r.message(ur.VALIDATION_ERR)}}a(yh,"checkProjectExists");function C_(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(C_,"checkFilePath");function hne(e,t,r,n){try{let s=V0.get(Y0.CONFIG_PARAMS.COMPONENTSROOT),i=$0.join(s,e,t,r+".js");return k0.existsSync(i)?r:n.message(ur.NO_FILE)}catch(s){return K0.error(s),n.message(ur.VALIDATION_ERR)}}a(hne,"checkFileExists");function mne(e){let t=be.object({project:be.string().pattern(Ri).custom(yh.bind(null,!0)).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().pattern(Ri).custom(hne.bind(null,e.project,e.type)).custom(C_).required().messages({"string.pattern.base":ur.BAD_FILE_NAME})});return Ai.validateBySchema(e,t)}a(mne,"getDropCustomFunctionValidator");function pne(e){let t=be.object({project:be.string().pattern(Ri).custom(yh.bind(null,!0)).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME}),type:be.string().valid("helpers","routes").required(),file:be.string().custom(C_).required(),function_content:be.string().required()});return Ai.validateBySchema(e,t)}a(pne,"setCustomFunctionValidator");function Sne(e){let t=be.object({project:be.string().pattern(Ri).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME}),file:be.string().custom(C_).required(),payload:be.string().allow("").optional(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ai.validateBySchema(e,t)}a(Sne,"setComponentFileValidator");function Tne(e){let t=be.object({project:be.string().pattern(Ri).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME}),file:be.string().custom(C_).optional()});return Ai.validateBySchema(e,t)}a(Tne,"dropComponentFileValidator");function gne(e){let t=be.object({project:be.string().required(),file:be.string().custom(C_).required(),encoding:be.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ai.validateBySchema(e,t)}a(gne,"getComponentFileValidator");function Rne(e){let t=be.object({project:be.string().pattern(Ri).custom(yh.bind(null,!1)).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME})});return Ai.validateBySchema(e,t)}a(Rne,"addComponentValidator");function Ane(e){let t=be.object({project:be.string().pattern(Ri).custom(yh.bind(null,!0)).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME})});return Ai.validateBySchema(e,t)}a(Ane,"dropCustomFunctionProjectValidator");function One(e){let t=be.object({project:be.string().pattern(Ri).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME}),skip_node_modules:be.boolean()});return Ai.validateBySchema(e,t)}a(One,"packageComponentValidator");function Nne(e){let t=be.object({project:be.string().pattern(Ri).required().messages({"string.pattern.base":ur.BAD_PROJECT_NAME}),payload:be.string().optional().messages({"string.pattern.base":ur.BAD_PACKAGE}),package:be.string().optional()});return Ai.validateBySchema(e,t)}a(Nne,"deployComponentValidator")});var Lh=T((YAe,tH)=>{"use strict";var Ih=require("joi"),wh=require("path"),j0=require("fs-extra"),{exec:bne}=require("child_process"),yne=require("util"),z0=yne.promisify(bne),L_=b(),{handleHDBError:$c,hdb_errors:Ine}=ee(),{HTTP_STATUS_CODES:Vc}=Ine,D_=z(),wne=st(),Yc=B();D_.initSync();var RA=D_.get(L_.CONFIG_PARAMS.COMPONENTSROOT),J0="npm install --omit=dev --json",Cne=`${J0} --dry-run`;tH.exports={installModules:Mne,auditModules:Une,installAllRootModules:Lne,uninstallRootModule:Dne,linkHarperdb:Pne};async function Lne(e=!1){await Ch(),await P_(e?"npm install --ignore-scripts":"npm install",D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Lne,"installAllRootModules");async function Dne(e){await P_(`npm uninstall ${e}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Dne,"uninstallRootModule");async function Pne(){await Ch(),await P_(`npm link ${L_.PACKAGE_ROOT}`,D_.get(L_.CONFIG_PARAMS.ROOTPATH))}a(Pne,"linkHarperdb");async function P_(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await z0(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
13
+ `,""))}return n&&!n.includes("Debugger listening")&&Yc.error("Error running NPM command:",e,n),Yc.trace(r,n),r?.replace(`
14
+ `,"")}a(P_,"runCommand");async function Mne(e){Yc.info(`starting installModules for request: ${e}`);let t=eH(e);if(t)throw $c(t,t.message,Vc.BAD_REQUEST);let{projects:r,dry_run:n}=e,s=n===!0?Cne:J0;await Ch(),await Z0(r);let i={};for(let o=0,c=r.length;o<c;o++){let l=r[o];i[l]={npm_output:null,npm_error:null};let _=wh.join(RA,l),u,d=null;try{let{stdout:f,stderr:E}=await z0(s,{cwd:_});u=f?f.replace(`
15
15
  `,""):null,d=E?E.replace(`
16
- `,""):null}catch(f){f.stderr?i[u].npm_error=ZB(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return gc.info(`finished installModules with response ${i}`),i}a(gre,"installModules");function ZB(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
17
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(ZB,"parseNPMStdErr");async function Rre(e){gc.info(`starting auditModules for request: ${e}`);let t=tH(e);if(t)throw Sc(t,t.message,Tc.BAD_REQUEST);let{projects:r}=e;await eh(),await eH(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=ZE.join(vR,o);s[o]={npm_output:null,npm_error:null};try{let u=await Jl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=ZB(u.stderr)}}return gc.info(`finished auditModules with response ${s}`),s}a(Rre,"auditModules");async function eh(){try{return await Jl("npm -v"),!0}catch{throw Sc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Tc.BAD_REQUEST,void 0,void 0,!0)}}a(eh,"checkNPMInstalled");async function eH(e){if(!Array.isArray(e)||e.length===0)throw Sc(new Error,"projects argument must be an array with at least 1 element",Tc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=ZE.join(vR,i.toString());if(!await zB.pathExists(o)){t.push(i);continue}let u=ZE.join(o,"package.json");await zB.pathExists(u)||r.push(i)}if(t.length>0)throw Sc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Tc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Sc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Tc.BAD_REQUEST,void 0,void 0,!0)}a(eH,"checkProjectPaths");function tH(e){let t=XE.object({projects:XE.array().min(1).items(XE.string()).required(),dry_run:XE.boolean().default(!1)});return hre.validateBySchema(e,t)}a(tH,"modulesValidator")});var HR=T((bRe,aH)=>{"use strict";var Rc=require("fs-extra"),BR=require("path"),rh=U(),sH=G(),sh=R(),oH=j(),Are=rt();aH.exports=Ore;async function Ore(){let e=Nre(),t=oH.get(sh.CONFIG_PARAMS.ROOTPATH),r=BR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+sh.PACKAGE_ROOT}},n=BR.join(t,"node_modules");await Rc.ensureDir(n);let i,o=!0,c=!1;try{i=await Rc.readJson(r)}catch(u){if(sH.isEmptyOrZeroLength(e))return;if(u.code!==sh.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!sH.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await nH(_);s.dependencies[u]=l+_}if(!o){rh.notify("Installing components"),await iH(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await nH(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(rh.notify("Removing component",u),c=!0);c&&(rh.notify("Updating components."),await iH(r,s,i))}a(Ore,"installComponents");function Nre(){let e=Are.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Nre,"getComponentsConfig");async function nH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":BR.extname(e)||await Rc.pathExists(e)?"file:":"github:"}a(nH,"getPkgPrefix");async function iH(e,t,r){rh.trace("npm installing components package.json",t),await Rc.writeFile(e,JSON.stringify(t,null," "));try{await th().installAllRootModules(oH.get(sh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Rc.writeFile(e,JSON.stringify(r,null," ")):await Rc.unlink(e),s}}a(iH,"installPackages")});var nh=T((wRe,_H)=>{"use strict";var Me=require("fs-extra"),qR=require("fast-glob"),fe=require("path"),uH=require("tar-fs"),IRe=require("uuid").v4,GR=require("normalize-path"),An=jB(),At=U(),qe=R(),dt=j(),Xl=rt(),bre=G(),{PACKAGE_ROOT:yre}=R(),{handleHDBError:Ct,hdb_errors:Ire}=Z(),{basename:wre}=require("path"),Cre=HR(),lH=j(),Lre=R(),{Readable:Dre}=require("stream"),{isMainThread:Pre}=require("worker_threads"),{HDB_ERROR_MSGS:ea,HTTP_STATUS_CODES:Lt}=Ire,Mre=fe.join(yre,"application-template"),cH=fe.join(dt.get(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Ure(){At.trace("getting custom api status");let e={};try{e={port:dt.get(qe.CONFIG_PARAMS.HTTP_PORT),directory:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ct(new Error,ea.FUNCTION_STATUS,Lt.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(Ure,"customFunctionsStatus");function vre(){At.trace("getting custom api endpoints");let e={},t=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT);try{qR.sync(GR(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:qR.sync(GR(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qR.sync(GR(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ct(new Error,ea.GET_FUNCTIONS,Lt.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(vre,"getCustomFunctions");function Bre(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=fe.join(r,s,n,i+".js");try{return Me.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ct(new Error,ea.GET_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(Bre,"getCustomFunction");function Hre(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=An.setCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("setting custom function file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Me.outputFileSync(fe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ct(new Error,ea.SET_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(Hre,"setCustomFunction");function qre(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("dropping custom function file");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Me.unlinkSync(fe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ct(new Error,ea.DROP_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(qre,"dropCustomFunction");function Gre(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.addComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("adding component");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=fe.join(r,s);return Me.mkdirSync(n,{recursive:!0}),Me.copySync(Mre,n),`Successfully added project: ${s}`}catch(n){throw Ct(new Error,ea.ADD_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,n)}}a(Gre,"addComponent");function Fre(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.dropCustomFunctionProjectValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("dropping custom function project");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=dt.get(qe.CONFIG_PARAMS.APPS);if(!bre.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Xl.updateConfigValue(qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=fe.join(r,s);return Me.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Ct(new Error,ea.DROP_FUNCTION_PROJECT,Lt.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(Fre,"dropCustomFunctionProject");async function xre(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.packageComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;At.trace("packaging component",s);let n;try{n=await Me.realpath(fe.join(r,s))}catch(u){if(u.code!==qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Me.realpath(fe.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Me.ensureDir(cH);let i=fe.join(cH,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(fe.join(n,"node_modules"))}),uH.pack(n,o).pipe(Me.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Me.readFileSync(i,{encoding:"base64"});return await Me.remove(i),{project:s,payload:c}}a(xre,"packageComponent");async function kre(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.deployComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(At.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=fe.join(r,s),i="file:"+o,await Me.ensureDir(o);let f=Dre.from(Buffer.from(n,"base64"));await new Promise((h,m)=>{f.pipe(uH.extract(o,{finish:h})).on("error",m)});let E=await Me.readdir(o);E.length===1&&E[0]==="package"&&(await Me.copy(fe.join(o,"package"),o),await Me.remove(fe.join(o,"package")))}if(await Xl.addConfig(s,{package:i}),!n){await Cre();let f=lH.get(Lre.CONFIG_PARAMS.ROOTPATH);o=fe.join(f,"node_modules",s)}if(Pre)return;let c=new Map;c.isWorker=!0;let u=(oh(),te(ih)),_;u.setErrorReporter(f=>_=f);let l=wre(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return At.info("Installed component"),`Successfully deployed: ${s}`}a(kre,"deployComponent");async function $re(){let e=Xl.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await Me.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=fe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Me.stat(d),E={name:fe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return At.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{name:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT).split(fe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(fe.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(oh(),te(ih)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a($re,"getComponents");async function Vre(e){let t=An.getComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let s=Xl.getConfigObj()[e.project]||e.project==="harperdb"?fe.join(lH.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Me.stat(fe.join(s,e.project,e.file));return{message:await Me.readFile(fe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${fe.join(e.project,e.file)}'`):i}}a(Vre,"getComponentFile");async function Yre(e){let t=An.setComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=fe.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Me.ensureFile(s),await Me.outputFile(s,e.payload,r)):await Me.ensureDir(s),"Successfully set component: "+e.file}a(Yre,"setComponentFile");async function Kre(e){let t=An.dropComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=e.file?fe.join(e.project,e.file):e.project,s=fe.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Me.pathExists(s)&&await Me.remove(s),Xl.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Kre,"dropComponent");_H.exports={customFunctionsStatus:Ure,getCustomFunctions:vre,getCustomFunction:Bre,setCustomFunction:Hre,dropCustomFunction:qre,addComponent:Gre,dropCustomFunctionProject:Fre,packageComponent:xre,deployComponent:kre,getComponents:$re,getComponentFile:Vre,setComponentFile:Yre,dropComponent:Kre}});var FR=T((LRe,fH)=>{"use strict";var On=require("joi"),dH=Ve();fH.exports={readTransactionLogValidator:Wre,deleteTransactionLogsBeforeValidator:Qre};function Wre(e){let t=On.object({schema:On.string().required(),table:On.string().required(),from:On.date().timestamp(),to:On.date().timestamp(),limit:On.number().min(1)});return dH.validateBySchema(e,t)}a(Wre,"readTransactionLogValidator");function Qre(e){let t=On.object({schema:On.string().required(),table:On.string().required(),timestamp:On.date().timestamp().required()});return dH.validateBySchema(e,t)}a(Qre,"deleteTransactionLogsBeforeValidator")});var ch=T((PRe,SH)=>{"use strict";var xR=R(),ah=st(),EH=G(),hH=j(),mH=Qn(),{handleHDBError:Ac,hdb_errors:jre}=Z(),{HTTP_STATUS_CODES:Oc}=jre,{readTransactionLogValidator:zre,deleteTransactionLogsBeforeValidator:Jre}=FR(),pH="This operation relies on clustering and cannot run with it disable.",Xre="Logs successfully deleted from transaction log.",Zre="All logs successfully deleted from transaction log.";SH.exports={readTransactionLog:ese,deleteTransactionLogsBefore:tse};async function*ese(e){let t=zre(e);if(t)throw Ac(t,t.message,Oc.BAD_REQUEST,void 0,void 0,!0);if(!hH.get(xR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ac(new Error,pH,Oc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=EH.checkSchemaTableExist(r,s);if(n)throw Ac(new Error,n,Oc.NOT_FOUND,void 0,void 0,!0);let i=mH.createNatsTableStreamName(r,s),o=await ah.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===xR.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(ese,"readTransactionLog");async function tse(e){let t=Jre(e);if(t)throw Ac(t,t.message,Oc.BAD_REQUEST,void 0,void 0,!0);if(!hH.get(xR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ac(new Error,pH,Oc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=EH.checkSchemaTableExist(r,s);if(i)throw Ac(new Error,i,Oc.NOT_FOUND,void 0,void 0,!0);let o=mH.createNatsTableStreamName(r,s),{jsm:c}=await ah.getNATSReferences(),u=await ah.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=Xre,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=Zre):d=(await ah.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(tse,"deleteTransactionLogsBefore")});var gH=T((URe,TH)=>{"use strict";var kR=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};TH.exports=kR});var AH=T((BRe,RH)=>{"use strict";var $R=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};RH.exports=$R});var YR=T((qRe,NH)=>{"use strict";var OH=gH(),rse=AH(),{HDB_ERROR_MSGS:sse}=Mr(),VR=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=sse.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new OH(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new rse(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new OH(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};NH.exports=VR});var dh=T((FRe,FH)=>{"use strict";var KR=dr(),uh=_r(),ps=tE(),t_=Ui(),WR=Ho(),nse=mg(),ise=qM(),r_=Er(),lh=oE(),Ot=U(),ose=Ig(),ase=Dl(),cse=oR(),use=OE(),lse=bE(),_se=aR(),dse=wE(),fse=LE(),QR=PE(),ii=G(),Ese=Uv(),jR=UE(),IH=Jo(),ms=R(),wH=MB(),hse=Xn(),CH=Il(),LH=(zE(),te(Wl)),DH=rt(),jr=nh(),mse=require("alasql"),PH=ch(),MH=th(),UH=YR(),{handleHDBError:br,hdb_errors:vH}=Z(),{HDB_ERROR_MSGS:Gt,HTTP_STATUS_CODES:Zl}=vH,H=new Map,BH="delete",Zi="insert",oi="read",ta="update",e_="describe",bH=t_.describeSchema.name,yH=t_.describeTable.name,HH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},pse="catchup",Sse="handleGetJob",Tse="handleGetJobsByStartDate",_h={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},gse=[ps.createTable.name,ps.createAttribute.name,ps.dropTable.name,ps.dropAttribute.name],qH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},x=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};H.set(KR.insert.name,new x(!1,[Zi]));H.set(KR.update.name,new x(!1,[ta]));H.set(KR.upsert.name,new x(!1,[Zi,ta]));H.set(uh.searchByConditions.name,new x(!1,[oi]));H.set(uh.searchByHash.name,new x(!1,[oi]));H.set(uh.searchByValue.name,new x(!1,[oi]));H.set(uh.search.name,new x(!1,[oi]));H.set(ps.createSchema.name,new x(!0,[]));H.set(ps.createTable.name,new x(!0,[]));H.set(ps.createAttribute.name,new x(!1,[Zi]));H.set(ps.dropSchema.name,new x(!0,[]));H.set(ps.dropTable.name,new x(!0,[]));H.set(ps.dropAttribute.name,new x(!0,[]));H.set(t_.describeSchema.name,new x(!1,[oi]));H.set(t_.describeTable.name,new x(!1,[oi]));H.set(WR.deleteRecord.name,new x(!1,[BH]));H.set(r_.addUser.name,new x(!0,[]));H.set(r_.alterUser.name,new x(!0,[]));H.set(r_.dropUser.name,new x(!0,[]));H.set(r_.listUsersExternal.name,new x(!0,[]));H.set(lh.listRoles.name,new x(!0,[]));H.set(lh.addRole.name,new x(!0,[]));H.set(lh.alterRole.name,new x(!0,[]));H.set(lh.dropRole.name,new x(!0,[]));H.set(ose.name,new x(!0,[]));H.set(ase.name,new x(!0,[]));H.set(cse.name,new x(!0,[]));H.set(use.name,new x(!0,[]));H.set(lse.name,new x(!0,[]));H.set(_se.name,new x(!0,[]));H.set(QR.setRoutes.name,new x(!0,[]));H.set(QR.getRoutes.name,new x(!0,[]));H.set(QR.deleteRoutes.name,new x(!0,[]));H.set(DH.setConfiguration.name,new x(!0,[]));H.set(dse.clusterStatus.name,new x(!0,[]));H.set(fse.name,new x(!0,[]));H.set(jR.getFingerprint.name,new x(!0,[]));H.set(jR.setLicense.name,new x(!0,[]));H.set(WR.deleteFilesBefore.name,new x(!0,[]));H.set(WR.deleteAuditLogsBefore.name,new x(!0,[]));H.set(IH.restart.name,new x(!0,[]));H.set(IH.restartService.name,new x(!0,[]));H.set(nse.name,new x(!0,[]));H.set(ise.name,new x(!0,[oi]));H.set(hse.systemInformation.name,new x(!0,[]));H.set(DH.getConfiguration.name,new x(!0,[]));H.set(PH.readTransactionLog.name,new x(!0,[]));H.set(PH.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(MH.installModules.name,new x(!0,[]));H.set(MH.auditModules.name,new x(!0,[]));H.set(CH.createTokens.name,new x(!1,[]));H.set(CH.refreshOperationToken.name,new x(!1,[]));H.set(LH.login.name,new x(!1,[]));H.set(LH.logout.name,new x(!1,[]));H.set(jr.customFunctionsStatus.name,new x(!0,[]));H.set(jr.getCustomFunctions.name,new x(!0,[]));H.set(jr.getComponents.name,new x(!0,[]));H.set(jr.getComponentFile.name,new x(!0,[]));H.set(jr.setComponentFile.name,new x(!0,[]));H.set(jr.dropComponent.name,new x(!0,[]));H.set(jr.getCustomFunction.name,new x(!0,[]));H.set(jr.setCustomFunction.name,new x(!0,[]));H.set(jr.dropCustomFunction.name,new x(!0,[]));H.set(jr.addComponent.name,new x(!0,[]));H.set(jr.dropCustomFunctionProject.name,new x(!0,[]));H.set(jr.packageComponent.name,new x(!0,[]));H.set(jr.deployComponent.name,new x(!0,[]));H.set(jR.getRegistrationInfo.name,new x(!1,[]));H.set(r_.userInfo.name,new x(!1,[]));H.set(t_.describeAll.name,new x(!1,[]));H.set(Sse,new x(!1,[]));H.set(Tse,new x(!0,[]));H.set(pse,new x(!0,[]));H.set(_h.CSV_DATA_LOAD,new x(!1,[Zi,ta]));H.set(_h.CSV_URL_LOAD,new x(!1,[Zi,ta]));H.set(_h.CSV_FILE_LOAD,new x(!1,[Zi,ta]));H.set(_h.IMPORT_FROM_S3,new x(!1,[Zi,ta]));H.set(qH.EXPORT_TO_S3,new x(!0,[]));H.set(qH.EXPORT_LOCAL,new x(!0,[]));H.set(ms.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[BH]));H.set(ms.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[oi]));H.set(ms.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[Zi]));H.set(ms.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[ta]));FH.exports={verifyPerms:Ase,verifyPermsAst:Rse,verifyBulkLoadAttributePerms:Nse};function Rse(e,t,r){if(ii.isEmptyOrZeroLength(e))throw Ot.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ii.isEmptyOrZeroLength(t))throw Ot.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ii.isEmptyOrZeroLength(r))throw Ot.info("verify_perms_ast has a null operation parameter"),br(new Error);try{let s=new UH,n=new Ese(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Ot.info("No schemas defined in verifyPermsAst(), will not continue."),br(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&HH[r])throw br(new Error,Gt.DROP_SYSTEM,Zl.FORBIDDEN);if(c&&!u)return null;let _=wH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof mse.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=GH(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),m=JR(t.role.permission,f,d[E]);zR(h,m,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw br(s)}}a(Rse,"verifyPermsAst");function Ase(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ot.info("null required parameter in verifyPerms"),br(new Error,Gt.DEFAULT_INVALID_REQUEST,Zl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new UH;if(ii.isEmptyOrZeroLength(e.hdb_user.role)||ii.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ot.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Gt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(ms.SYSTEM_SCHEMA_NAME)||n===ms.SYSTEM_SCHEMA_NAME;if(l&&HH[r])throw br(new Error,Gt.DROP_SYSTEM,Zl.FORBIDDEN);if(u&&!l||_===!0&&(r===ps.createSchema.name||r===ps.dropSchema.name))return null;if(gse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=wH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===bH||r===yH){if(n===ms.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Gt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===bH&&(!d[n]||!d[n][e_]))return c.handleInvalidItem(Gt.SCHEMA_NOT_FOUND(n));if(r===yH&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][e_]))return c.handleInvalidItem(Gt.TABLE_NOT_FOUND(n,i))}}let f=GH(e.hdb_user,r,o,c,s);if(f)return f;if(H.get(r)&&H.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&ms.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[n].tables[i];S[ms.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[ms.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=m)}let E=Ose(e),h=JR(e.hdb_user.role.permission,n,i);return zR(E,h,r,i,n,c,s),c.getPermsResponse()}a(Ase,"verifyPerms");function GH(e,t,r,s,n){if(ii.arrayHasEmptyValues([e,t,r]))throw Ot.info("hasPermissions has an invalid parameter"),br(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||H.get(t).requires_su))return null;if(!H.get(t))throw Ot.info(`operation ${t} not found.`),br(new Error,Gt.OP_NOT_FOUND(t),Zl.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return Ot.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Gt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][e_]===!1){s.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[e_]===!1)s.addInvalidItem(Gt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=H.get(t).perms;!ii.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Ot.info(`Required ${m} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Gt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ot.error(E),Ot.error(f),br(vH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(GH,"hasPermissions");function zR(e,t,r,s,n,i,o){if(!e||!t)throw Ot.info("no attributes specified in checkAttributePerms."),br(new Error);let c=H.get(r).perms;if(!c||c==="")throw Ot.info(`no permissions found for ${r} in checkAttributePerms().`),br(new Error);if(ii.isEmptyOrZeroLength(t))return Ot.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[e_]===!1){i.addInvalidItem(Gt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(ms.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==oi)throw br(new Error,Gt.SYSTEM_TIMESTAMP_PERMS_ERR,Zl.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Gt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(zR,"checkAttributePerms");function Ose(e){let t=new Set;try{if(e.action)return t;if(e.operation===ms.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Ot.info(r)}return t}a(Ose,"getRecordAttributes");function JR(e,t,r){let s=new Map;if(ii.isEmpty(e))return Ot.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Ot.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(JR,"getAttributePermissions");function Nse(e,t,r,s,n,i,o){let c=new Set(i),u=JR(e,s,n);zR(c,u,t,n,s,o,r)}a(Nse,"verifyBulkLoadAttributePerms")});var Eh=T((kRe,YH)=>{"use strict";YH.exports={evaluateSQL:Hse,processAST:VH,convertSQLToAST:$H,checkASTPermissions:kH};var bse=dr(),xH=require("util"),yse=xH.callbackify(bse.insert),Ise=_r().search,wse=zP().update,Cse=xH.callbackify(wse),Lse=XP().convertDelete,eo=require("alasql"),Dse=dh(),fh=U(),Pse=Jd(),Mse=G(),s_=R(),{hdb_errors:Use,handleHDBError:XR}=Z(),{HTTP_STATUS_CODES:ZR}=Use;Pse(eo);var vse=403,Bse="There was a problem performing this insert. Please check the logs and try again.",eA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Hse(e,t){let r=e.parsed_sql_object;if(!r){r=$H(e.sql);let s,n=r.ast.statements[0];if(n instanceof eo.yy.Insert?s=n.into.databaseid:n instanceof eo.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof eo.yy.Update||n instanceof eo.yy.Delete?s=n.table.databaseid:fh.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof eo.yy.Select)&&Mse.isEmptyOrZeroLength(s))return t("No schema specified",null)}VH(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Hse,"evaluateSQL");function kH(e,t){let r;try{r=Dse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(kH,"checkASTPermissions");function $H(e){let t=new eA;if(!e)throw XR(new Error,"The 'sql' parameter is missing from the request body",ZR.BAD_REQUEST);try{let r=e.trim(),s=eo.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
18
- `);throw s[1]?XR(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ZR.BAD_REQUEST):XR(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ZR.BAD_REQUEST)}return t}a($H,"convertSQLToAST");function VH(e,t,r){try{let s=qse;if(!e.bypass_auth&&!t.permissions_checked){let i=kH(e,t);if(i&&i.length>0)return r(vse,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case s_.VALID_SQL_OPS_ENUM.SELECT:s=Ise,n=t.ast.statements[0];break;case s_.VALID_SQL_OPS_ENUM.INSERT:s=Gse;break;case s_.VALID_SQL_OPS_ENUM.UPDATE:s=Cse;break;case s_.VALID_SQL_OPS_ENUM.DELETE:s=Lse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(VH,"processAST");function qse(e,t){fh.info(e),t("unknown sql statement")}a(qse,"nullFunction");function Gse({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=Fse(i,e.values)}catch(o){return r(o)}yse(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){fh.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Gse,"convertInsert");function Fse(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=eo.compile(`SELECT ${n.toString()} AS [${s_.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw fh.error(r),new Error(Bse)}}a(Fse,"createDataObjects")});var tA=T((VRe,WH)=>{"use strict";var{S3:xse,GetObjectCommand:kse}=require("@aws-sdk/client-s3");WH.exports={getFileStreamFromS3:$se,getS3AuthObj:KH};async function $se(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await KH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new kse(r))).Body}a($se,"getFileStreamFromS3");function KH(e,t,r){return new xse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(KH,"getS3AuthObj")});var hh=T((KRe,s0)=>{"use strict";var zH=_r(),Vse=Eh(),Yse=tA(),{AsyncParser:Kse,Transform:Wse}=require("json2csv"),i_=require("stream"),zr=G(),rA=require("fs-extra"),Qse=require("path"),Ss=U(),{promisify:JH}=require("util"),n_=G(),{handleHDBError:ft,hdb_errors:jse}=Z(),{HDB_ERROR_MSGS:yr,HTTP_STATUS_CODES:Et}=jse,{streamAsJSON:zse}=tg(),{Upload:Jse}=require("@aws-sdk/lib-storage"),QH=["search_by_value","search_by_hash","sql"],jH=["json","csv"],XH="json",ZH="csv",Xse="Successfully exported JSON locally.",Zse="Successfully exported CSV locally.",ene=1e3,tne=zH.searchByHash,rne=zH.searchByValue,sne=JH(Vse.evaluateSQL),nne=JH(i_.finished);s0.exports={export_to_s3:cne,export_local:ine,toCsvStream:e0};async function ine(e){Ss.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=t0(e);if(!zr.isEmpty(t))throw Ss.error(t),ft(new Error,t,Et.BAD_REQUEST,void 0,void 0,!0);if(zr.isEmpty(e.path))throw Ss.error(yr.MISSING_VALUE("path")),ft(new Error,yr.MISSING_VALUE("path"),Et.BAD_REQUEST,void 0,void 0,!0);let r=(zr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Qse.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=zr.buildFolderPath(e.path,r);await one(e.path);let n=await r0(e);return await ane(s,e.format,n)}a(ine,"export_local");async function one(e){if(Ss.trace("in confirmPath"),zr.isEmptyOrZeroLength(e))throw ft(new Error,`Invalid path: ${e}`,Et.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await rA.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Ss.error(s),ft(new Error,s,Et.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 Ss.error(r),ft(new Error,r,Et.BAD_REQUEST,void 0,void 0,!0)}return!0}a(one,"confirmPath");async function ane(e,t,r){if(Ss.trace("in saveToLocal"),n_.isEmptyOrZeroLength(e))throw ft(new Error,yr.INVALID_VALUE("file_path"),Et.BAD_REQUEST,void 0,void 0,!0);if(n_.isEmptyOrZeroLength(t))throw ft(new Error,yr.INVALID_VALUE("Source format"),Et.BAD_REQUEST,void 0,void 0,!0);if(n_.isEmpty(r))throw ft(new Error,yr.NOT_FOUND("Data"),Et.BAD_REQUEST,void 0,void 0,!0);if(t===XH){let s=rA.createWriteStream(e);return zse(r).pipe(s),await nne(s),{message:Xse,path:e}}else if(t===ZH){let s=rA.createWriteStream(e),n=i_.Readable.from(r),i={},o={objectMode:!0};return await new Kse(i,o).fromInput(n).toOutput(s).promise(!1),{message:Zse,path:e}}throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST)}a(ane,"saveToLocal");async function cne(e){if(!e.s3||Object.keys(e.s3).length===0)throw ft(new Error,yr.MISSING_VALUE("S3 object"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ft(new Error,yr.MISSING_VALUE("aws_access_key_id"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ft(new Error,yr.MISSING_VALUE("aws_secret_access_key"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.bucket))throw ft(new Error,yr.MISSING_VALUE("bucket"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.key))throw ft(new Error,yr.MISSING_VALUE("key"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.region))throw ft(new Error,yr.MISSING_VALUE("region"),Et.BAD_REQUEST);let t=t0(e);if(!zr.isEmpty(t))throw ft(new Error,t,Et.BAD_REQUEST);Ss.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await r0(e)}catch(u){throw Ss.error(u),u}let s,n=await Yse.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new i_.PassThrough;if(e.format===ZH){i=e.s3.key+".csv";let u=e0(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===XH){i=e.s3.key+".json";let u=new i_.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%ene===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST);return new Jse({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(cne,"export_to_s3");function e0(e){let t=i_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Wse(r,s);return t.pipe(n)}a(e0,"toCsvStream");function t0(e){if(Ss.trace("in exportCoreValidation"),zr.isEmpty(e.format))return"format missing";if(jH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${jH.join(", ")}`;let t=e.search_operation.operation;if(zr.isEmpty(t))return"search_operation.operation missing";if(QH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${QH.join(", ")}`}a(t0,"exportCoreValidation");async function r0(e){Ss.trace("in getRecords");let t,r;if(n_.isEmpty(e.search_operation)||n_.isEmptyOrZeroLength(e.search_operation.operation))throw ft(new Error,yr.INVALID_VALUE("Search operation"),Et.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=rne;break;case"search_by_hash":t=tne;break;case"sql":t=sne;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ss.error(r),ft(new Error,r,Et.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(r0,"getRecords")});var _0={};Fe(_0,{contentTypes:()=>nA,findBestSerializer:()=>Sh,getDeserializer:()=>Nc,registerContentHandlers:()=>iA,serialize:()=>Th,serializeMessage:()=>Xi});function une(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function iA(e){e.register(_ne,{serializers:[{regex:/^application\/json$/,serializer:mh.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new ra.EncoderStream(o_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?ph.Readable.from((0,Nn.encodeIter)(t,o_)):(0,Nn.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sA.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Nn.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ra.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Sh(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Ft.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Ft.keys()).join(", "))}};s=Ft.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function Th(e,t,r){let s=i0&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Sh(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ai.createBrotliCompress)({params:{[ai.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ai.constants.BROTLI_MODE_TEXT:ai.constants.BROTLI_MODE_GENERIC,[ai.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>i0?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ai.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Xi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Sh(t);return r=t.serialize=s.serializer.serialize,r(e)}function dne(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function Nc(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ft.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ft.get(e)?.deserialize||o0(e,s);return o=>dne(o).then(i)}return e&&Ft.get(e)?.deserialize||o0(e,s)}function o0(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function fne(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var mh,sA,Nn,ra,ai,ph,a0,c0,u0,o_,Ft,nA,n0,l0,lne,_ne,i0,pc=Re(()=>{mh=D(tg()),sA=D(hh()),Nn=require("msgpackr"),ra=require("cbor-x"),ai=require("zlib"),ph=require("stream");Pr();a0=require("../index"),c0=D(j()),u0=D(R()),o_={useRecords:!1,useToJSON:!0},Ft=new Map,nA=Ft;Tt.contentTypes=nA;(0,a0._assignPackageExport)("contentTypes",nA);Ft.set("application/json",{serializeStream:mh.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});n0=new ra.Encoder(o_);Ft.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ra.EncoderStream(o_).end(e)},serialize:n0.encode,deserialize:n0.decode,q:1});Ft.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?ph.Readable.from((0,Nn.encodeIter)(e,o_)):(0,Nn.pack)(e)},serialize:Nn.pack,deserialize:Nn.unpack,q:.9});Ft.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sA.toCsvStream)(e)},q:.1});Ft.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ft.set("text/event-stream",{serializeStream:function(e){return ph.Readable.from(fne(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
19
- `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
16
+ `,""):null}catch(f){f.stderr?i[l].npm_error=X0(f.stderr):i[l].npm_error=f.message;continue}try{i[l].npm_output=JSON.parse(u)}catch{i[l].npm_output=u}try{i[l].npm_error=JSON.parse(d)}catch{i[l].npm_error=d}}return Yc.info(`finished installModules with response ${i}`),i}a(Mne,"installModules");function X0(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
17
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(X0,"parseNPMStdErr");async function Une(e){Yc.info(`starting auditModules for request: ${e}`);let t=eH(e);if(t)throw $c(t,t.message,Vc.BAD_REQUEST);let{projects:r}=e;await Ch(),await Z0(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=wh.join(RA,o);n[o]={npm_output:null,npm_error:null};try{let l=await P_("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=X0(l.stderr)}}return Yc.info(`finished auditModules with response ${n}`),n}a(Une,"auditModules");async function Ch(){try{return await P_("npm -v"),!0}catch{throw $c(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Vc.BAD_REQUEST,void 0,void 0,!0)}}a(Ch,"checkNPMInstalled");async function Z0(e){if(!Array.isArray(e)||e.length===0)throw $c(new Error,"projects argument must be an array with at least 1 element",Vc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=wh.join(RA,i.toString());if(!await j0.pathExists(o)){t.push(i);continue}let l=wh.join(o,"package.json");await j0.pathExists(l)||r.push(i)}if(t.length>0)throw $c(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Vc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw $c(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Vc.BAD_REQUEST,void 0,void 0,!0)}a(Z0,"checkProjectPaths");function eH(e){let t=Ih.object({projects:Ih.array().min(1).items(Ih.string()).required(),dry_run:Ih.boolean().default(!1)});return wne.validateBySchema(e,t)}a(eH,"modulesValidator")});var OA=T((WAe,oH)=>{"use strict";var Kc=require("fs-extra"),AA=require("path"),Dh=B(),rH=V(),Ph=b(),iH=z(),vne=mt();oH.exports=Bne;async function Bne(){let e=Hne(),t=iH.get(Ph.CONFIG_PARAMS.ROOTPATH),r=AA.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Ph.PACKAGE_ROOT}},s=AA.join(t,"node_modules");await Kc.ensureDir(s);let i,o=!0,c=!1;try{i=await Kc.readJson(r)}catch(l){if(rH.isEmptyOrZeroLength(e))return;if(l.code!==Ph.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!rH.isEmptyOrZeroLength(e)){for(let{name:l,package:_}of e){let u=await nH(_);n.dependencies[l]=u+_}if(!o){Dh.notify("Installing components"),await sH(r,n,null);return}for(let{name:l,package:_}of e){let u=i.dependencies[l],d=await nH(_);if(u===void 0||u!==d+_){c=!0;break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Dh.notify("Removing component",l),c=!0);c&&(Dh.notify("Updating components."),await sH(r,n,i))}a(Bne,"installComponents");function Hne(){let e=vne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Hne,"getComponentsConfig");async function nH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":AA.extname(e)||await Kc.pathExists(e)?"file:":"github:"}a(nH,"getPkgPrefix");async function sH(e,t,r){Dh.trace("npm installing components package.json",t),await Kc.writeFile(e,JSON.stringify(t,null," "));try{await Lh().installAllRootModules(iH.get(Ph.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?await Kc.writeFile(e,JSON.stringify(r,null," ")):await Kc.unlink(e),n}}a(sH,"installPackages")});var Mh=T((zAe,uH)=>{"use strict";var Ve=require("fs-extra"),NA=require("fast-glob"),he=require("path"),cH=require("tar-fs"),jAe=require("uuid").v4,bA=require("normalize-path"),Fs=Q0(),Bt=B(),Je=b(),yt=z(),M_=mt(),qne=V(),{PACKAGE_ROOT:xne}=b(),{handleHDBError:Yt,hdb_errors:Gne}=ee(),{basename:Fne}=require("path"),kne=OA(),lH=z(),$ne=b(),{Readable:Vne}=require("stream"),{isMainThread:Yne}=require("worker_threads"),{HDB_ERROR_MSGS:Na,HTTP_STATUS_CODES:Kt}=Gne,Kne=he.join(xne,"application-template"),aH=he.join(yt.get(Je.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Wne(){Bt.trace("getting custom api status");let e={};try{e={port:yt.get(Je.CONFIG_PARAMS.HTTP_PORT),directory:yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,Na.FUNCTION_STATUS,Kt.INTERNAL_SERVER_ERROR,Bt.ERR,t)}return e}a(Wne,"customFunctionsStatus");function Qne(){Bt.trace("getting custom api endpoints");let e={},t=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT);try{NA.sync(bA(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:NA.sync(bA(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:NA.sync(bA(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,Na.GET_FUNCTIONS,Kt.INTERNAL_SERVER_ERROR,Bt.ERR,r)}return e}a(Qne,"getCustomFunctions");function jne(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=Fs.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);Bt.trace("getting custom api endpoint file content");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=he.join(r,n,s,i+".js");try{return Ve.readFileSync(o,{encoding:"utf8"})}catch(c){throw Yt(new Error,Na.GET_FUNCTION,Kt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(jne,"getCustomFunction");function zne(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=Fs.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);Bt.trace("setting custom function file content");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{return Ve.outputFileSync(he.join(r,n,s,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Yt(new Error,Na.SET_FUNCTION,Kt.INTERNAL_SERVER_ERROR,Bt.ERR,c)}}a(zne,"setCustomFunction");function Jne(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=Fs.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);Bt.trace("dropping custom function file");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{return Ve.unlinkSync(he.join(r,n,s,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Yt(new Error,Na.DROP_FUNCTION,Kt.INTERNAL_SERVER_ERROR,Bt.ERR,o)}}a(Jne,"dropCustomFunction");function Xne(e){e.project&&(e.project=he.parse(e.project).name);let t=Fs.addComponentValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);Bt.trace("adding component");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=he.join(r,n);return Ve.mkdirSync(s,{recursive:!0}),Ve.copySync(Kne,s),`Successfully added project: ${n}`}catch(s){throw Yt(new Error,Na.ADD_FUNCTION,Kt.INTERNAL_SERVER_ERROR,Bt.ERR,s)}}a(Xne,"addComponent");function Zne(e){e.project&&(e.project=he.parse(e.project).name);let t=Fs.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);Bt.trace("dropping custom function project");let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=yt.get(Je.CONFIG_PARAMS.APPS);if(!qne.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return M_.updateConfigValue(Je.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=he.join(r,n);return Ve.rmSync(i,{recursive:!0}),`Successfully deleted project: ${n}`}catch(i){throw Yt(new Error,Na.DROP_FUNCTION_PROJECT,Kt.INTERNAL_SERVER_ERROR,Bt.ERR,i)}}a(Zne,"dropCustomFunctionProject");async function ese(e){e.project&&(e.project=he.parse(e.project).name);let t=Fs.packageComponentValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Bt.trace("packaging component",n);let s;try{s=await Ve.realpath(he.join(r,n))}catch(l){if(l.code!==Je.NODE_ERROR_CODES.ENOENT)throw l;try{s=await Ve.realpath(he.join(yt.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(_){if(_.code===Je.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}await Ve.ensureDir(aH);let i=he.join(aH,`${n}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:l=>l.includes(he.join(s,"node_modules"))}),cH.pack(s,o).pipe(Ve.createWriteStream(i,{overwrite:!0})),await new Promise(l=>setTimeout(l,2e3));let c=Ve.readFileSync(i,{encoding:"base64"});return await Ve.remove(i),{project:n,payload:c}}a(ese,"packageComponent");async function tse(e){e.project&&(e.project=he.parse(e.project).name);let t=Fs.deployComponentValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);let r=yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i}=e;if(Bt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(s){o=he.join(r,n),i="file:"+o,await Ve.ensureDir(o);let f=Vne.from(Buffer.from(s,"base64"));await new Promise((h,p)=>{f.pipe(cH.extract(o,{finish:h})).on("error",p)});let E=await Ve.readdir(o);E.length===1&&E[0]==="package"&&(await Ve.copy(he.join(o,"package"),o),await Ve.remove(he.join(o,"package")))}if(await M_.addConfig(n,{package:i}),!s){await kne();let f=lH.get($ne.CONFIG_PARAMS.ROOTPATH);o=he.join(f,"node_modules",n)}if(Yne)return;let c=new Map;c.isWorker=!0;let l=(vh(),re(Uh)),_;l.setErrorReporter(f=>_=f);let u=Fne(o),d=l.component_errors.get(u);try{await l.loadComponent(o,c)}finally{l.component_errors.set(u,d)}if(_)throw _;return Bt.info("Installed component"),`Successfully deployed: ${n}`}a(tse,"deployComponent");async function rse(){let e=M_.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let l=await Ve.readdir(o,{withFileTypes:!0});for(let _ of l){let u=_.name;if(u.startsWith(".")||u==="node_modules")continue;let d=he.join(o,u);if(_.isDirectory()||_.isSymbolicLink()){let f={name:u,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ve.stat(d),E={name:he.basename(u),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(l){return Bt.warn("Error loading package",l),{error:l.toString(),entries:[]}}},"walk_dir"),n=await r(yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),{name:yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT).split(he.sep).slice(-1).pop(),entries:t});for(let o of n.entries)if(o.package){let c=await r(he.join(yt.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(vh(),re(Uh)).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(rse,"getComponents");async function nse(e){let t=Fs.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);let n=M_.getConfigObj()[e.project]||e.project==="harperdb"?he.join(lH.get(Je.CONFIG_PARAMS.ROOTPATH),"node_modules"):yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ve.stat(he.join(n,e.project,e.file));return{message:await Ve.readFile(he.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Je.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${he.join(e.project,e.file)}'`):i}}a(nse,"getComponentFile");async function sse(e){let t=Fs.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=he.join(yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ve.ensureFile(n),await Ve.outputFile(n,e.payload,r)):await Ve.ensureDir(n),"Successfully set component: "+e.file}a(sse,"setComponentFile");async function ise(e){let t=Fs.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST);let r=e.file?he.join(e.project,e.file):e.project,n=he.join(yt.get(Je.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ve.pathExists(n)&&await Ve.remove(n),M_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(ise,"dropComponent");uH.exports={customFunctionsStatus:Wne,getCustomFunctions:Qne,getCustomFunction:jne,setCustomFunction:zne,dropCustomFunction:Jne,addComponent:Xne,dropCustomFunctionProject:Zne,packageComponent:ese,deployComponent:tse,getComponents:rse,getComponentFile:nse,setComponentFile:sse,dropComponent:ise}});var yA=T((XAe,dH)=>{"use strict";var ks=require("joi"),_H=st();dH.exports={readTransactionLogValidator:ose,deleteTransactionLogsBeforeValidator:ase};function ose(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),from:ks.date().timestamp(),to:ks.date().timestamp(),limit:ks.number().min(1)});return _H.validateBySchema(e,t)}a(ose,"readTransactionLogValidator");function ase(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),timestamp:ks.date().timestamp().required()});return _H.validateBySchema(e,t)}a(ase,"deleteTransactionLogsBeforeValidator")});var Hh=T((eOe,pH)=>{"use strict";var IA=b(),Bh=pt(),fH=V(),EH=z(),hH=fi(),{handleHDBError:Wc,hdb_errors:cse}=ee(),{HTTP_STATUS_CODES:Qc}=cse,{readTransactionLogValidator:lse,deleteTransactionLogsBeforeValidator:use}=yA(),mH="This operation relies on clustering and cannot run with it disable.",_se="Logs successfully deleted from transaction log.",dse="All logs successfully deleted from transaction log.";pH.exports={readTransactionLog:fse,deleteTransactionLogsBefore:Ese};async function*fse(e){let t=lse(e);if(t)throw Wc(t,t.message,Qc.BAD_REQUEST,void 0,void 0,!0);if(!EH.get(IA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Wc(new Error,mH,Qc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n}=e,s=fH.checkSchemaTableExist(r,n);if(s)throw Wc(new Error,s,Qc.NOT_FOUND,void 0,void 0,!0);let i=hH.createNatsTableStreamName(r,n),o=await Bh.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===IA.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(fse,"readTransactionLog");async function Ese(e){let t=use(e);if(t)throw Wc(t,t.message,Qc.BAD_REQUEST,void 0,void 0,!0);if(!EH.get(IA.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Wc(new Error,mH,Qc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:n,timestamp:s}=e,i=fH.checkSchemaTableExist(r,n);if(i)throw Wc(new Error,i,Qc.NOT_FOUND,void 0,void 0,!0);let o=hH.createNatsTableStreamName(r,n),{jsm:c}=await Bh.getNATSReferences(),l=await Bh.getStreamInfo(o),_=new Date(l.state.first_ts).getTime();if(s<=_)return`No transactions exist before: ${s}`;let u=_se,d,f=new Date(l.state.last_ts).getTime();return s>f?(d=l.state.last_seq+1,u=dse):d=(await Bh.viewStream(o,parseInt(s),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),u}a(Ese,"deleteTransactionLogsBefore")});var TH=T((rOe,SH)=>{"use strict";var wA=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}};SH.exports=wA});var RH=T((sOe,gH)=>{"use strict";var CA=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};gH.exports=CA});var DA=T((oOe,OH)=>{"use strict";var AH=TH(),hse=RH(),{HDB_ERROR_MSGS:mse}=zr(),LA=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=mse.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 AH(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new hse(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 AH(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}};OH.exports=LA});var Fh=T((cOe,xH)=>{"use strict";var PA=br(),qh=Nr(),kn=UE(),B_=Ji(),MA=ea(),pse=eR(),Sse=HU(),H_=Ir(),xh=qE(),Ht=B(),Tse=_R(),gse=d_(),Rse=KR(),Ase=XE(),Ose=eh(),Nse=WR(),bse=nh(),yse=ih(),UA=ah(),Oi=V(),Ise=MB(),vA=lh(),yH=Ra(),Fn=b(),IH=P0(),wse=mi(),wH=c_(),CH=(bh(),re(w_)),LH=mt(),hn=Mh(),Cse=require("alasql"),DH=Hh(),PH=Lh(),MH=DA(),{handleHDBError:qr,hdb_errors:UH}=ee(),{HDB_ERROR_MSGS:Zt,HTTP_STATUS_CODES:U_}=UH,F=new Map,vH="delete",po="insert",Ni="read",ba="update",v_="describe",NH=B_.describeSchema.name,bH=B_.describeTable.name,BH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Lse="catchup",Dse="handleGetJob",Pse="handleGetJobsByStartDate",Gh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Mse=[kn.createTable.name,kn.createAttribute.name,kn.dropTable.name,kn.dropAttribute.name],HH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Y=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};F.set(PA.insert.name,new Y(!1,[po]));F.set(PA.update.name,new Y(!1,[ba]));F.set(PA.upsert.name,new Y(!1,[po,ba]));F.set(qh.searchByConditions.name,new Y(!1,[Ni]));F.set(qh.searchByHash.name,new Y(!1,[Ni]));F.set(qh.searchByValue.name,new Y(!1,[Ni]));F.set(qh.search.name,new Y(!1,[Ni]));F.set(kn.createSchema.name,new Y(!0,[]));F.set(kn.createTable.name,new Y(!0,[]));F.set(kn.createAttribute.name,new Y(!1,[po]));F.set(kn.dropSchema.name,new Y(!0,[]));F.set(kn.dropTable.name,new Y(!0,[]));F.set(kn.dropAttribute.name,new Y(!0,[]));F.set(B_.describeSchema.name,new Y(!1,[Ni]));F.set(B_.describeTable.name,new Y(!1,[Ni]));F.set(MA.deleteRecord.name,new Y(!1,[vH]));F.set(H_.addUser.name,new Y(!0,[]));F.set(H_.alterUser.name,new Y(!0,[]));F.set(H_.dropUser.name,new Y(!0,[]));F.set(H_.listUsersExternal.name,new Y(!0,[]));F.set(xh.listRoles.name,new Y(!0,[]));F.set(xh.addRole.name,new Y(!0,[]));F.set(xh.alterRole.name,new Y(!0,[]));F.set(xh.dropRole.name,new Y(!0,[]));F.set(Tse.name,new Y(!0,[]));F.set(gse.name,new Y(!0,[]));F.set(Rse.name,new Y(!0,[]));F.set(Ase.name,new Y(!0,[]));F.set(Ose.name,new Y(!0,[]));F.set(Nse.name,new Y(!0,[]));F.set(UA.setRoutes.name,new Y(!0,[]));F.set(UA.getRoutes.name,new Y(!0,[]));F.set(UA.deleteRoutes.name,new Y(!0,[]));F.set(LH.setConfiguration.name,new Y(!0,[]));F.set(bse.clusterStatus.name,new Y(!0,[]));F.set(yse.name,new Y(!0,[]));F.set(vA.getFingerprint.name,new Y(!0,[]));F.set(vA.setLicense.name,new Y(!0,[]));F.set(MA.deleteFilesBefore.name,new Y(!0,[]));F.set(MA.deleteAuditLogsBefore.name,new Y(!0,[]));F.set(yH.restart.name,new Y(!0,[]));F.set(yH.restartService.name,new Y(!0,[]));F.set(pse.name,new Y(!0,[]));F.set(Sse.name,new Y(!0,[Ni]));F.set(wse.systemInformation.name,new Y(!0,[]));F.set(LH.getConfiguration.name,new Y(!0,[]));F.set(DH.readTransactionLog.name,new Y(!0,[]));F.set(DH.deleteTransactionLogsBefore.name,new Y(!0,[]));F.set(PH.installModules.name,new Y(!0,[]));F.set(PH.auditModules.name,new Y(!0,[]));F.set(wH.createTokens.name,new Y(!1,[]));F.set(wH.refreshOperationToken.name,new Y(!1,[]));F.set(CH.login.name,new Y(!1,[]));F.set(CH.logout.name,new Y(!1,[]));F.set(hn.customFunctionsStatus.name,new Y(!0,[]));F.set(hn.getCustomFunctions.name,new Y(!0,[]));F.set(hn.getComponents.name,new Y(!0,[]));F.set(hn.getComponentFile.name,new Y(!0,[]));F.set(hn.setComponentFile.name,new Y(!0,[]));F.set(hn.dropComponent.name,new Y(!0,[]));F.set(hn.getCustomFunction.name,new Y(!0,[]));F.set(hn.setCustomFunction.name,new Y(!0,[]));F.set(hn.dropCustomFunction.name,new Y(!0,[]));F.set(hn.addComponent.name,new Y(!0,[]));F.set(hn.dropCustomFunctionProject.name,new Y(!0,[]));F.set(hn.packageComponent.name,new Y(!0,[]));F.set(hn.deployComponent.name,new Y(!0,[]));F.set(vA.getRegistrationInfo.name,new Y(!1,[]));F.set(H_.userInfo.name,new Y(!1,[]));F.set(B_.describeAll.name,new Y(!1,[]));F.set(Dse,new Y(!1,[]));F.set(Pse,new Y(!0,[]));F.set(Lse,new Y(!0,[]));F.set(Gh.CSV_DATA_LOAD,new Y(!1,[po,ba]));F.set(Gh.CSV_URL_LOAD,new Y(!1,[po,ba]));F.set(Gh.CSV_FILE_LOAD,new Y(!1,[po,ba]));F.set(Gh.IMPORT_FROM_S3,new Y(!1,[po,ba]));F.set(HH.EXPORT_TO_S3,new Y(!0,[]));F.set(HH.EXPORT_LOCAL,new Y(!0,[]));F.set(Fn.VALID_SQL_OPS_ENUM.DELETE,new Y(!1,[vH]));F.set(Fn.VALID_SQL_OPS_ENUM.SELECT,new Y(!1,[Ni]));F.set(Fn.VALID_SQL_OPS_ENUM.INSERT,new Y(!1,[po]));F.set(Fn.VALID_SQL_OPS_ENUM.UPDATE,new Y(!1,[ba]));xH.exports={verifyPerms:vse,verifyPermsAst:Use,verifyBulkLoadAttributePerms:Hse};function Use(e,t,r){if(Oi.isEmptyOrZeroLength(e))throw Ht.info("verify_perms_ast has an empty user parameter"),qr(new Error);if(Oi.isEmptyOrZeroLength(t))throw Ht.info("verify_perms_ast has an empty user parameter"),qr(new Error);if(Oi.isEmptyOrZeroLength(r))throw Ht.info("verify_perms_ast has a null operation parameter"),qr(new Error);try{let n=new MH,s=new Ise(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ht.info("No schemas defined in verifyPermsAst(), will not continue."),qr(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&BH[r])throw qr(new Error,Zt.DROP_SYSTEM,U_.FORBIDDEN);if(c&&!l)return null;let _=IH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof Cse.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=s.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let u=qH(t,r,o,n);return u||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=s.getAttributesBySchemaTableName(f,d[E]),p=HA(t.role.permission,f,d[E]);BA(h,p,r,d[E],f,n)}}),n.getPermsResponse())}catch(n){throw qr(n)}}a(Use,"verifyPermsAst");function vse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ht.info("null required parameter in verifyPerms"),qr(new Error,Zt.DEFAULT_INVALID_REQUEST,U_.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new MH;if(Oi.isEmptyOrZeroLength(e.hdb_user.role)||Oi.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ht.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Zt.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&&BH[r])throw qr(new Error,Zt.DROP_SYSTEM,U_.FORBIDDEN);if(l&&!u||_===!0&&(r===kn.createSchema.name||r===kn.dropSchema.name))return null;if(Mse.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=IH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===NH||r===bH){if(s===Fn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Zt.SCHEMA_PERM_ERROR(s));if(!d.super_user){if(r===NH&&(!d[s]||!d[s][v_]))return c.handleInvalidItem(Zt.SCHEMA_NOT_FOUND(s));if(r===bH&&(!d[s]||!d[s].tables[i]||!d[s].tables[i][v_]))return c.handleInvalidItem(Zt.TABLE_NOT_FOUND(s,i))}}let f=qH(e.hdb_user,r,o,c,n);if(f)return f;if(F.get(r)&&F.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Fn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[s].tables[i];S[Fn.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[Fn.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=Bse(e),h=HA(e.hdb_user.role.permission,s,i);return BA(E,h,r,i,s,c,n),c.getPermsResponse()}a(vse,"verifyPerms");function qH(e,t,r,n,s){if(Oi.arrayHasEmptyValues([e,t,r]))throw Ht.info("hasPermissions has an invalid parameter"),qr(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||F.get(t).requires_su))return null;if(!F.get(t))throw Ht.info(`operation ${t} not found.`),qr(new Error,Zt.OP_NOT_FOUND(t),U_.BAD_REQUEST);if(F.get(t)&&F.get(t).requires_su)return Ht.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Zt.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][v_]===!1){n.addInvalidItem(Zt.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Zt.SCHEMA_NOT_FOUND(l));continue}let _=r.get(l);for(let u of _){let d=o[l].tables[u];if(!d||d[v_]===!1)n.addInvalidItem(Zt.TABLE_NOT_FOUND(l,u));else try{let f=[],E=F.get(t).perms;!Oi.isEmpty(s)&&E.includes(s)&&(E=[s]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(Ht.info(`Required ${p} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&n.addUnauthorizedTable(l,u,f)}catch(f){let E=Zt.UNKNOWN_OP_AUTH_ERROR(t,l,u);throw Ht.error(E),Ht.error(f),qr(UH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?n.getPermsResponse():null}a(qH,"hasPermissions");function BA(e,t,r,n,s,i,o){if(!e||!t)throw Ht.info("no attributes specified in checkAttributePerms."),qr(new Error);let c=F.get(r).perms;if(!c||c==="")throw Ht.info(`no permissions found for ${r} in checkAttributePerms().`),qr(new Error);if(Oi.isEmptyOrZeroLength(t))return Ht.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let u of e){let d=t.get(u);if(d){if(d[v_]===!1){i.addInvalidItem(Zt.ATTR_NOT_FOUND(s,n,u),s,n);continue}if(c)for(let f of c){if(Fn.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Ni)throw qr(new Error,Zt.SYSTEM_TIMESTAMP_PERMS_ERR,U_.FORBIDDEN);d[f]===!1&&(l[d.attribute_name]?l[d.attribute_name].push(f):l[d.attribute_name]=[f])}}else i.addInvalidItem(Zt.ATTR_NOT_FOUND(s,n,u),s,n)}let _=Object.keys(l);_.length>0&&i.addUnauthorizedAttributes(_,s,n,l)}a(BA,"checkAttributePerms");function Bse(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){Ht.info(r)}return t}a(Bse,"getRecordAttributes");function HA(e,t,r){let n=new Map;if(Oi.isEmpty(e))return Ht.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Ht.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(HA,"getAttributePermissions");function Hse(e,t,r,n,s,i,o){let c=new Set(i),l=HA(e,n,s);BA(c,l,t,s,n,o,r)}a(Hse,"verifyBulkLoadAttributePerms")});var $h=T((uOe,VH)=>{"use strict";VH.exports={evaluateSQL:zse,processAST:$H,convertSQLToAST:kH,checkASTPermissions:FH};var qse=br(),GH=require("util"),xse=GH.callbackify(qse.insert),Gse=Nr().search,Fse=QM().update,kse=GH.callbackify(Fse),$se=zM().convertDelete,So=require("alasql"),Vse=Fh(),kh=B(),Yse=vf(),Kse=V(),q_=b(),{hdb_errors:Wse,handleHDBError:qA}=ee(),{HTTP_STATUS_CODES:xA}=Wse;Yse(So);var Qse=403,jse="There was a problem performing this insert. Please check the logs and try again.",GA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function zse(e,t){let r=e.parsed_sql_object;if(!r){r=kH(e.sql);let n,s=r.ast.statements[0];if(s instanceof So.yy.Insert?n=s.into.databaseid:s instanceof So.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof So.yy.Update||s instanceof So.yy.Delete?n=s.table.databaseid:kh.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof So.yy.Select)&&Kse.isEmptyOrZeroLength(n))return t("No schema specified",null)}$H(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(zse,"evaluateSQL");function FH(e,t){let r;try{r=Vse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(FH,"checkASTPermissions");function kH(e){let t=new GA;if(!e)throw qA(new Error,"The 'sql' parameter is missing from the request body",xA.BAD_REQUEST);try{let r=e.trim(),n=So.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
18
+ `);throw n[1]?qA(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,xA.BAD_REQUEST):qA(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",xA.BAD_REQUEST)}return t}a(kH,"convertSQLToAST");function $H(e,t,r){try{let n=Jse;if(!e.bypass_auth&&!t.permissions_checked){let i=FH(e,t);if(i&&i.length>0)return r(Qse,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case q_.VALID_SQL_OPS_ENUM.SELECT:n=Gse,s=t.ast.statements[0];break;case q_.VALID_SQL_OPS_ENUM.INSERT:n=Xse;break;case q_.VALID_SQL_OPS_ENUM.UPDATE:n=kse;break;case q_.VALID_SQL_OPS_ENUM.DELETE:n=$se;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($H,"processAST");function Jse(e,t){kh.info(e),t("unknown sql statement")}a(Jse,"nullFunction");function Xse({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=Zse(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){kh.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(Xse,"convertInsert");function Zse(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=So.compile(`SELECT ${s.toString()} AS [${q_.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw kh.error(r),new Error(jse)}}a(Zse,"createDataObjects")});var FA=T((dOe,KH)=>{"use strict";var{S3:eie,GetObjectCommand:tie}=require("@aws-sdk/client-s3");KH.exports={getFileStreamFromS3:rie,getS3AuthObj:YH};async function rie(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await YH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new tie(r))).Body}a(rie,"getFileStreamFromS3");function YH(e,t,r){return new eie({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(YH,"getS3AuthObj")});var Vh=T((EOe,tq)=>{"use strict";var $A=Nr(),nie=$h(),sie=FA(),{AsyncParser:iie,Transform:oie}=require("json2csv"),G_=require("stream"),mn=V(),kA=require("fs-extra"),aie=require("path"),$n=B(),{promisify:jH}=require("util"),x_=V(),{handleHDBError:It,hdb_errors:cie}=ee(),{HDB_ERROR_MSGS:xr,HTTP_STATUS_CODES:wt}=cie,{streamAsJSON:lie}=(xg(),re($M)),{Upload:uie}=require("@aws-sdk/lib-storage"),WH=["search_by_value","search_by_hash","sql","search_by_conditions"],QH=["json","csv"],zH="json",JH="csv",_ie="Successfully exported JSON locally.",die="Successfully exported CSV locally.",fie=1e3,Eie=$A.searchByHash,hie=$A.searchByValue,mie=jH(nie.evaluateSQL),pie=jH(G_.finished);tq.exports={export_to_s3:Rie,export_local:Sie,toCsvStream:XH};async function Sie(e){$n.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=ZH(e);if(!mn.isEmpty(t))throw $n.error(t),It(new Error,t,wt.BAD_REQUEST,void 0,void 0,!0);if(mn.isEmpty(e.path))throw $n.error(xr.MISSING_VALUE("path")),It(new Error,xr.MISSING_VALUE("path"),wt.BAD_REQUEST,void 0,void 0,!0);let r=(mn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(aie.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=mn.buildFolderPath(e.path,r);await Tie(e.path);let s=await eq(e);return await gie(n,e.format,s)}a(Sie,"export_local");async function Tie(e){if($n.trace("in confirmPath"),mn.isEmptyOrZeroLength(e))throw It(new Error,`Invalid path: ${e}`,wt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await kA.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),It(new Error,n,wt.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw $n.error(r),It(new Error,r,wt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Tie,"confirmPath");async function gie(e,t,r){if($n.trace("in saveToLocal"),x_.isEmptyOrZeroLength(e))throw It(new Error,xr.INVALID_VALUE("file_path"),wt.BAD_REQUEST,void 0,void 0,!0);if(x_.isEmptyOrZeroLength(t))throw It(new Error,xr.INVALID_VALUE("Source format"),wt.BAD_REQUEST,void 0,void 0,!0);if(x_.isEmpty(r))throw It(new Error,xr.NOT_FOUND("Data"),wt.BAD_REQUEST,void 0,void 0,!0);if(t===zH){let n=kA.createWriteStream(e);return lie(r).pipe(n),await pie(n),{message:_ie,path:e}}else if(t===JH){let n=kA.createWriteStream(e),s=G_.Readable.from(r),i={},o={objectMode:!0};return await new iie(i,o).fromInput(s).toOutput(n).promise(!1),{message:die,path:e}}throw It(new Error,xr.INVALID_VALUE("format"),wt.BAD_REQUEST)}a(gie,"saveToLocal");async function Rie(e){if(!e.s3||Object.keys(e.s3).length===0)throw It(new Error,xr.MISSING_VALUE("S3 object"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw It(new Error,xr.MISSING_VALUE("aws_access_key_id"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw It(new Error,xr.MISSING_VALUE("aws_secret_access_key"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.bucket))throw It(new Error,xr.MISSING_VALUE("bucket"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.key))throw It(new Error,xr.MISSING_VALUE("key"),wt.BAD_REQUEST);if(mn.isEmptyOrZeroLength(e.s3.region))throw It(new Error,xr.MISSING_VALUE("region"),wt.BAD_REQUEST);let t=ZH(e);if(!mn.isEmpty(t))throw It(new Error,t,wt.BAD_REQUEST);$n.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await eq(e)}catch(l){throw $n.error(l),l}let n,s=await sie.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new G_.PassThrough;if(e.format===JH){i=e.s3.key+".csv";let l=XH(r);l.on("error",_=>{throw _}),l.pipe(o)}else if(e.format===zH){i=e.s3.key+".json";let l=new G_.Readable;l.pipe(o),l.on("error",d=>{throw d}),l.push("[");let _=r.length,u="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";u+=E,d!==0&&d%fie===0&&(l.push(u),u="")}u.length!==0&&l.push(u),l.push("]"),l.push(null)}else throw It(new Error,xr.INVALID_VALUE("format"),wt.BAD_REQUEST);return new uie({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Rie,"export_to_s3");function XH(e){let t=G_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},n={objectMode:!0},s=new oie(r,n);return t.pipe(s)}a(XH,"toCsvStream");function ZH(e){if($n.trace("in exportCoreValidation"),mn.isEmpty(e.format))return"format missing";if(QH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${QH.join(", ")}`;let t=e.search_operation.operation;if(mn.isEmpty(t))return"search_operation.operation missing";if(WH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${WH.join(", ")}`}a(ZH,"exportCoreValidation");async function eq(e){$n.trace("in getRecords");let t,r;if(x_.isEmpty(e.search_operation)||x_.isEmptyOrZeroLength(e.search_operation.operation))throw It(new Error,xr.INVALID_VALUE("Search operation"),wt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=hie;break;case"search_by_hash":t=Eie;break;case"search_by_conditions":t=$A.searchByConditions;break;case"sql":t=mie;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,$n.error(r),It(new Error,r,wt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(eq,"getRecords")});var cq={};je(cq,{contentTypes:()=>QA,findBestSerializer:()=>Kh,getDeserializer:()=>Ia,registerContentHandlers:()=>jA,serialize:()=>Wh,serializeMessage:()=>mo});function Aie(e){try{return e?.[0]===123?WA(e):e}catch{return e}}function jA(e){e.register(Nie,{serializers:[{regex:/^application\/json$/,serializer:zu},{regex:/^application\/cbor$/,serializer:function(t){return new ya.EncoderStream(k_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Yh.Readable.from((0,$s.encodeIter)(t,k_)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,VA.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,ya.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function Kh(e){let r=(e.headers.asObject||e.headers).accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[_,...u]=l.split(/\s*;\s*/),d=1,f={q:1};for(let h of u){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=er.get(_);if(E){let h=(E.q||1)*d;h>s&&(n=E,i=E.type||_,s=h,o=f)}}if(!n){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(er.keys()).join(", "))}};n=er.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Wh(e,t,r){let n=nq&&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=Kh(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,bi.createBrotliCompress)({params:{[bi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?bi.constants.BROTLI_MODE_TEXT:bi.constants.BROTLI_MODE_GENERIC,[bi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e)}return n&&s?.length>nq?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,bi.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function mo(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return F_(e);let r=t.serialize;if(r)return r(e);let n=Kh(t);return r=t.serialize=n.serializer.serialize,r(e)}function bie(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 Ia(e,t){e||(e="");let r=e.indexOf(";"),n;r>-1&&(n=e.slice(r+1),e=e.slice(0,r));let s=er.get(e);if(t){if(s?.deserializeStream)return s.deserializeStream;let i=er.get(e)?.deserialize||sq(e,n);return o=>bie(o).then(i)}return e&&er.get(e)?.deserialize||sq(e,n)}function sq(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 WA(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function yie(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 VA,$s,ya,bi,Yh,iq,YA,KA,oq,F_,WA,k_,er,QA,rq,aq,Oie,Nie,nq,kc=Ae(()=>{xg();VA=U(Vh()),$s=require("msgpackr"),ya=require("cbor-x"),bi=require("zlib"),Yh=require("stream");jr();iq=require("../index"),YA=U(z()),KA=U(b()),oq=YA.default.get(KA.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,F_=oq?ua:JSON.stringify,WA=oq?qg:JSON.parse,k_={useRecords:!1,useToJSON:!0},er=new Map,QA=er;Mt.contentTypes=QA;(0,iq._assignPackageExport)("contentTypes",QA);er.set("application/json",{serializeStream:zu,serialize:F_,deserialize:WA,q:.8});rq=new ya.Encoder(k_);er.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ya.EncoderStream(k_).end(e)},serialize:rq.encode,deserialize:rq.decode,q:1});er.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Yh.Readable.from((0,$s.encodeIter)(e,k_)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});er.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,VA.toCsvStream)(e)},q:.1});er.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});er.set("text/event-stream",{serializeStream:function(e){return Yh.Readable.from(yie(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
19
+ `),e.data){let r=e.data;typeof r=="object"&&(r=F_(r)),t+="data: "+r+`
20
20
  `}return e.id&&(t+="id: "+e.id+`
21
21
  `),e.retry&&(t+="retry: "+e.retry+`
22
22
  `),t+`
23
- `}else return typeof e=="object"?`data: ${JSON.stringify(e)}
23
+ `}else return typeof e=="object"?`data: ${F_(e)}
24
24
 
25
25
  `:`data: ${e}
26
26
 
27
- `},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});l0={type:"application/json",serializeStream:mh.streamAsJSON,serialize:JSON.stringify,deserialize:une,q:.8};Ft.set("*/*",l0);Ft.set("",l0);a(une,"tryJSONParse");a(iA,"registerContentHandlers");lne=require("fastify-plugin"),_ne=lne(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Sh(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Sh,"findBestSerializer");i0=c0.default.get(u0.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Th,"serialize");a(Xi,"serializeMessage");a(dne,"streamToBuffer");a(Nc,"getDeserializer");a(o0,"deserializerUnknownType");a(fne,"transformIterable")});var gh={};Fe(gh,{start:()=>mne});async function hne(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&fd(e);let n=new Ji;try{e.responseHeaders=n;let i=e.url.slice(1),o=aA.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let m=_.match(/max-age=(\d+)/)?.[1];m&&(e.expiresAt=m*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await We(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=Nc(r["content-type"],!0)(e.body)}catch(m){throw new c_.ClientError(m,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new c_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new c_.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,oA.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){Ene[0]=f;let m=String.fromCharCode(34,(xt[0]&63)+62,(xt[0]>>6)+(xt[1]<<2&63)+62,(xt[1]>>4)+(xt[2]<<4&63)+62,(xt[2]>>2)+62,(xt[3]&63)+62,(xt[3]>>6)+(xt[4]<<2&63)+62,(xt[4]>>4)+(xt[5]<<4&63)+62,(xt[5]>>2)+62,(xt[6]&63)+62,(xt[6]>>6)+(xt[7]<<2&63)+62,34),S=r["if-none-match"];S&&m==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",m),oA.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=Th(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?sa.warn(i):sa.info(i):sa.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=Th(i.contentType?i:i.toString(),e,o),o}}function mne(e){oA=e,!d0&&(d0=!0,aA=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return hne(t,r)}),e.server.ws(async(t,r,s)=>{a_++;let n=new ws;f0||(f0=!0,nl(l=>{a_>0&&l.push({metric:"ws-connections",connections:a_,byThread:!0})}));let i;t.on("error",l=>{i=!0,sa.warn(l)});let o;t.on("message",a(function(d){o||(o=Nc(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{a_--,us(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=aA.getMatch(u);if(us(!!_,"connection","ws","connect"),!_)t.send(Xi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,kr(h=>({count:h.count,total:a_}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Xi(E.value,r);t.send(h),kr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var sa,c_,xt,Ene,oA,d0,aA,f0,a_,E0=Re(()=>{pc();zn();sa=D(U()),c_=D(Z());Ed();fu();No();KE();xt=new Uint8Array(8),Ene=new Float64Array(xt.buffer,0,1),oA={};a(hne,"http");a_=0;a(mne,"start")});var cA=T((sAe,h0)=>{var{recordAction:Rh,recordActionBinary:pne}=(zn(),te(il)),Sne=require("fastify-plugin"),Tne=200;h0.exports=Sne(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Rh(o,"duration",_,d,l),pne(n.raw.statusCode<400,"success",_,d,l);let f=Tne;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Rh(performance.now()-c,"transfer",_,d,l),Rh(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Rh(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var dA=T((nAe,g0)=>{var yh=require("clone"),Ih=Ve(),gne=G(),Nh=R(),Rne=U(),Ah=require("fs"),uA=require("joi"),{string:bh}=uA.types(),{hdb_errors:Ane,handleHDBError:u_}=Z(),{HDB_ERROR_MSGS:One,HTTP_STATUS_CODES:Oh}=Ane,{common_validators:bc}=cn(),m0=1e9,p0=" is required",Nne=["insert","update","upsert"],lA={database:{presence:!1,format:bc.schema_format,length:bc.schema_length},schema:{presence:!1,format:bc.schema_format,length:bc.schema_length},table:{presence:!0,format:bc.schema_format,length:bc.schema_length},action:{inclusion:{within:Nne,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},bne={schema:bh.required(),table:bh.required(),action:bh.valid("insert","update","upsert")},{AWS_ACCESS_KEY:yne,AWS_SECRET:Ine,AWS_BUCKET:wne,AWS_FILE_KEY:Cne,REGION:Lne}=Nh.S3_BUCKET_AUTH_KEYS,Dne={s3:{presence:!0},[`s3.${yne}`]:{presence:!0,type:"String"},[`s3.${Ine}`]:{presence:!0,type:"String"},[`s3.${wne}`]:{presence:!0,type:"String"},[`s3.${Cne}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Lne}`]:{presence:!0,type:"String"}},S0=yh(lA);S0.data.presence={message:p0};var T0=yh(lA);T0.file_path.presence={message:p0};var Pne=Object.assign(yh(lA),Dne),_A=yh(bne);_A.csv_url=bh.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_A.passthrough_headers=uA.object();function Mne(e){let t=Ih.validateObject(e,S0);return wh(e,t)}a(Mne,"dataObject");function Une(e){let t=Ih.validateBySchema(e,uA.object(_A));return wh(e,t)}a(Une,"urlObject");function vne(e){let t=Ih.validateObject(e,T0);return wh(e,t)}a(vne,"fileObject");function Bne(e){let t=Ih.validateObject(e,Pne);return wh(e,t)}a(Bne,"s3FileObject");function wh(e,t){if(!t){let r=gne.checkGlobalSchemaTable(e.schema,e.table);if(r)return u_(new Error,r,Oh.BAD_REQUEST);if(e.operation===Nh.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Ah.accessSync(e.file_path,Ah.constants.R_OK|Ah.constants.F_OK)}catch(s){return s.code===Nh.NODE_ERROR_CODES.ENOENT?u_(s,`No such file or directory ${s.path}`,Oh.BAD_REQUEST):s.code===Nh.NODE_ERROR_CODES.EACCES?u_(s,`Permission denied ${s.path}`,Oh.BAD_REQUEST):u_(s)}try{let s=Ah.statSync(e.file_path).size;if(s>m0)return u_(new Error,One.MAX_FILE_SIZE_ERR(s,m0),Oh.BAD_REQUEST)}catch(s){Rne.error(s),console.error(s)}}}return t}a(wh,"postValidateChecks");g0.exports={dataObject:Mne,urlObject:Une,fileObject:vne,s3FileObject:Bne}});var fA=T((oAe,R0)=>{"use strict";var l_=U(),Ch=R();async function Hne(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Ch.OPERATIONS_ENUM.INSERT||t.operation===Ch.OPERATIONS_ENUM.UPDATE||t.operation===Ch.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Ch.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(l_.info(i.message),i):i.http_resp_msg?(l_.error(`Error calling operation: ${e.name}`),l_.error(i.http_resp_msg),i):(l_.error(`Error calling operation: ${e.name}`),l_.error(i),i)}}a(Hne,"callOperationFunctionAsAwait");R0.exports={callOperationFunctionAsAwait:Hne}});var O0=T((cAe,A0)=>{"use strict";var EA=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},hA=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};A0.exports={BulkLoadFileObject:EA,BulkLoadDataObject:hA}});var b0=T((lAe,N0)=>{"use strict";var mA=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};N0.exports=mA});var AA=T((mAe,k0)=>{"use strict";var Lh=dr(),Ph=dA(),qne=require("needle"),Ks=R(),dAe=ke(),yc=G(),{handleHDBError:Ze,hdb_errors:U0}=Z(),{HTTP_STATUS_CODES:kt,HDB_ERROR_MSGS:Nt,CHECK_LOGS_WRAPPER:ia}=U0,Ic=U(),pA=require("papaparse");yc.promisifyPapaParse();var Ws=require("fs-extra"),Gne=require("path"),{chain:y0}=require("stream-chain"),I0=require("stream-json/streamers/StreamArray"),w0=require("stream-json/utils/Batch"),C0=require("stream-chain/utils/comp"),{finished:L0}=require("stream"),Fne=j(),v0=fA(),xne=tA(),{BulkLoadFileObject:TA,BulkLoadDataObject:kne}=O0(),gA=YR(),{verifyBulkLoadAttributePerms:B0}=dh(),fAe=b0(),EAe=st(),hAe=Qn(),{databases:$ne}=(Ee(),te(Le)),{coerceType:Vne}=(Mf(),te(HT)),D0="No records parsed from csv file.",na=`${Fne.get("HDB_ROOT")}/tmp`,{schema_regex:Yne}=cn(),P0=1024*1024*2,M0=5e3,Kne={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};k0.exports={csvDataLoad:Wne,csvURLLoad:Qne,csvFileLoad:jne,importFromS3:zne};async function Wne(e,t){let r=Ph.dataObject(e);if(r)throw Ze(r,r.message,kt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=G0(e.schema,e.table),i=pA.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SA.bind(null,n),dynamicTyping:!1}),o=new gA;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&B0(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 Ze(new Error,c,kt.BAD_REQUEST,void 0,void 0,!0);let u=new kne(e.action,e.schema,e.table,i.data);return s=await v0.callOperationFunctionAsAwait(F0,u,null),s.message===D0?D0:x0(s.records,s.number_written)}catch(n){throw oa(n)}}a(Wne,"csvDataLoad");async function Qne(e){let t=Ph.urlObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${na}/${r}`;try{await Jne(e,r)}catch(n){throw Ic.error(Nt.DOWNLOAD_FILE_ERR(r)+" - "+n),Ze(n,ia(Nt.DOWNLOAD_FILE_ERR(r)))}try{let n=new TA(this.job_operation_function.name,e.action,e.schema,e.table,s,Ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await RA(n);return await Dh(s),i}catch(n){throw await Dh(s),oa(n)}}a(Qne,"csvURLLoad");async function jne(e){let t=Ph.fileObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=new TA(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await RA(r)}catch(s){throw oa(s)}}a(jne,"csvFileLoad");async function zne(e){let t=Ph.s3FileObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Gne.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${na}/${n}`;let i=new TA(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Xne(n,e);let o=await RA(i);return await Dh(r),o}catch(s){throw await Dh(r),oa(s)}}a(zne,"importFromS3");async function Jne(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await qne("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ze(s,n,s.statusCode,Ks.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}eie(r,e.csv_url),await Zne(t,r.raw)}a(Jne,"downloadCSVFile");async function Xne(e,t){try{let r=`${na}/${e}`;await Ws.mkdirp(na),await Ws.writeFile(`${na}/${e}`,"",{flag:"a+"});let s=await Ws.createWriteStream(r),n=await xne.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Ic.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ic.error(Nt.S3_DOWNLOAD_ERR+" - "+r),Ze(r,ia(Nt.S3_DOWNLOAD_ERR))}}a(Xne,"downloadFileFromS3");async function Zne(e,t){try{await Ws.mkdirp(na),await Ws.writeFile(`${na}/${e}`,t)}catch(r){throw Ic.error(Nt.WRITE_TEMP_FILE_ERR),Ze(r,ia(Nt.DEFAULT_BULK_LOAD_ERR))}}a(Zne,"writeFileToTempFolder");async function Dh(e){if(e)try{await Ws.access(e),await Ws.unlink(e)}catch{Ic.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Dh,"deleteTempFile");function eie(e,t){if(e.statusCode!==U0.HTTP_STATUS_CODES.OK)throw Ze(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,kt.BAD_REQUEST);if(!Kne[e.headers["content-type"]])throw Ze(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,kt.BAD_REQUEST);if(!e.raw)throw Ze(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,kt.BAD_REQUEST)}a(eie,"validateURLResponse");async function RA(e){try{let t;switch(e.file_type){case Ks.VALID_S3_FILE_TYPES.CSV:t=await tie(e);break;case Ks.VALID_S3_FILE_TYPES.JSON:t=await rie(e);break;default:throw Ze(new Error,Nt.DEFAULT_BULK_LOAD_ERR,kt.BAD_REQUEST,Ks.LOG_LEVELS.ERROR,Nt.INVALID_FILE_EXT_ERR(e))}return x0(t.records,t.number_written)}catch(t){throw oa(t)}}a(RA,"fileLoad");async function H0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Lh.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&B0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ze(c);r(u)}}a(H0,"validateChunk");async function q0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;yc.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!yc.isEmpty(c)&&!yc.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await v0.callOperationFunctionAsAwait(F0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ze(c,ia(Nt.INSERT_CSV_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.INSERT_CSV_ERR+" - "+c);r(u)}}a(q0,"insertChunk");async function tie(e){let t={records:0,number_written:0},r=G0(e.schema,e.table);try{let s=new gA,n=Ws.createReadStream(e.file_path,{highWaterMark:P0});n.setEncoding("utf8"),await pA.parsePromise(n,H0.bind(null,e,s),SA.bind(null,r));let i=s.getPermsResponse();if(i)throw Ze(new Error,i,kt.BAD_REQUEST);return n=Ws.createReadStream(e.file_path,{highWaterMark:P0}),n.setEncoding("utf8"),await pA.parsePromise(n,q0.bind(null,e,t),SA.bind(null,r)),n.destroy(),t}catch(s){throw Ze(s,ia(Nt.PAPA_PARSE_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.PAPA_PARSE_ERR+s)}}a(tie,"callPapaParse");function G0(e,t){let r=$ne[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Vne(i,n));return s}a(G0,"createTransformMap");function SA(e,t,r){let s=e.get(r);return s?s(t):yc.autoCast(t)}a(SA,"typeFunction");async function rie(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new gA,n=y0([Ws.createReadStream(e.file_path,{encoding:"utf-8"}),I0.withParser(),c=>c.value,new w0({batchSize:M0}),C0(async c=>{await H0(e,s,r,c)})]);await new Promise((c,u)=>{L0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ze(new Error,i,kt.BAD_REQUEST);let o=y0([Ws.createReadStream(e.file_path,{encoding:"utf-8"}),I0.withParser(),c=>c.value,new w0({batchSize:M0}),C0(async c=>{await q0(e,t,r,c)})]);return await new Promise((c,u)=>{L0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ze(s,ia(Nt.INSERT_JSON_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.INSERT_JSON_ERR+s)}}a(rie,"insertJson");async function F0(e){let t={};try{e.data&&e.data.length>0&&sie(e.data[0])?t=await nie(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ic.info(t.message))}catch(r){throw oa(r)}return t}a(F0,"callBulkFileLoad");function sie(e){let t=Object.keys(e);for(let r of t)if(!Yne.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(sie,"validateColumnNames");async function nie(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Lh.insert;break;case"update":i=Lh.update;break;case"upsert":i=Lh.upsert;break;default:throw Ze(new Error,Nt.INVALID_ACTION_PARAM_ERR(s),kt.BAD_REQUEST,Ks.LOG_LEVELS.ERROR,Nt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=yc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw oa(o)}}a(nie,"bulkFileLoad");function x0(e,t){return`successfully loaded ${t} of ${e} records`}a(x0,"buildResponseMsg");function oa(e){return Ze(e,ia(Nt.DEFAULT_BULK_LOAD_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(oa,"buildTopLevelErrMsg")});var V0=T((SAe,$0)=>{"use strict";var OA=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};$0.exports=OA});var W0=T((gAe,K0)=>{"use strict";var iie=R(),Y0=require("moment"),oie=require("uuid").v4,NA=class{static{a(this,"JobObject")}constructor(){this.id=oie(),this.type=void 0,this.start_datetime=Y0().valueOf(),this.created_datetime=Y0().valueOf(),this.end_datetime=void 0,this.status=iie.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};K0.exports=NA});var bA=T((AAe,Z0)=>{"use strict";var aie=require("uuid").v4,z0=dr(),J0=_r(),cie=vs(),uie=qa(),lie=V0(),et=R(),_ie=W0(),die=lE(),Ts=U(),fie=Lu(),wc=G(),{promisify:Eie}=require("util"),aa=require("moment"),hie=Eh(),Mh=dA(),Q0=ZS(),{deleteTransactionLogsBeforeValidator:mie}=FR(),{handleHDBError:pie,hdb_errors:Sie}=Z(),{HTTP_STATUS_CODES:Tie}=Sie,j0=J0.searchByValue,gie=J0.searchByHash,Rie=z0.insert,Aie=Eie(hie.evaluateSQL),Oie=z0.update;Z0.exports={addJob:yie,updateJob:wie,handleGetJob:Nie,handleGetJobsByStartDate:bie,getJobById:X0};async function Nie(e){try{let t=await X0(e.id);return wc.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 Ts.error("There was an error getting job",t),new Error(r)}}a(Nie,"handleGetJob");async function bie(e){try{let t=await Iie(e);if(Ts.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=aa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=aa(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 Ts.error(r),new Error(r)}}a(bie,"handleGetJobsByStartDate");async function yie(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wc.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ts.info(l),t.error=l,t}if(!et.JOB_TYPE_ENUM[e.operation])return Ts.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Mh.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:s=Mh.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Mh.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Mh.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=Q0(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=Q0(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=mie(e);break;default:break}if(s)throw pie(s,s.message,Tie.BAD_REQUEST,void 0,void 0,!0);let n=new _ie;n.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new cie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await j0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=aie();try{o=await j0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ts.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new fie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await Rie(u)}catch(l){return Ts.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ts.trace(l)}return t}a(yie,"addJob");async function Iie(e){let t=aa(e.from_date,aa.ISO_8601),r=aa(e.to_date,aa.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new lie(s,e.hdb_user);try{return await Aie(n)}catch(i){throw Ts.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(Iie,"getJobsInDateRange");async function X0(e){if(wc.isEmptyOrZeroLength(e))return wc.errorizeMessage("Invalid job ID specified.");let t=new uie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await gie(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ts.error(s),wc.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(X0,"getJobById");async function wie(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wc.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=aa().valueOf());let t=new die(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Oie(t),r}a(wie,"updateJob")});var iq=T((NAe,nq)=>{"use strict";var eq=G(),Ir=R(),Cie=require("moment"),Uh=AA(),vh=U(),tq=bA(),rq=hh(),sq=Ho(),Lie=Qe(),Die=ch(),yA=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Pie(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(eq.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(eq.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ir.JOB_TYPE_ENUM.csv_file_load:await ci(e,Uh.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await ci(e,Uh.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await ci(e,Uh.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await ci(e,Uh.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await ci(e,rq.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await ci(e,rq.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await ci(e,sq.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await ci(e,sq.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await ci(e,Die.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Pie,"parseMessage");async function ci(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Cie().valueOf(),await tq.updateJob(e.job),await Mie(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):vh.error(`There was an error running ${t.name} job with id ${e.job.id}`),vh.error(s),e.job.message=s,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await tq.updateJob(e.job)}catch(n){throw vh.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(ci,"runJob");async function Mie(e){vh.trace("launching job thread:",e),Lie.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Mie,"launchJobThread");nq.exports={parseMessage:Pie,RunnerMessage:yA}});var aq=T((yAe,oq)=>{"use strict";var IA=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};oq.exports=IA});var Oq=T((wAe,MA)=>{"use strict";var Gh=_r(),LA=Eh(),Bh=AA(),ui=tE(),Hh=Ui(),d_=Ho(),Uie=mg(),__=Er(),qh=oE(),$t=nh(),bt=U(),vie=Ig(),Bie=Dl(),Hie=oR(),qie=OE(),Gie=bE(),Fie=aR(),xie=wE(),kie=LE(),wA=PE(),cq=hh(),$ie=dh(),DA=bA(),v=R(),{hdb_errors:E_,handleHDBError:f_}=Z(),{HTTP_STATUS_CODES:uq}=E_,CA=UE(),lq=Jo(),Tq=require("util"),Cc=dr(),Vie=cs(),Yie=Xn(),_q=iq(),dq=Il(),fq=(zE(),te(Wl)),Eq=rt(),hq=ch(),mq=th(),{setServerUtilities:Kie}=(Mf(),te(HT)),{CONTEXT:Wie}=(Ls(),te(op)),{_assignPackageExport:Qie}=require("../index"),{transformReq:jie}=G(),{server:zie}=(Pr(),te(Ro)),Jie=fA(),pq=Gh.searchByHash,Xie=Gh.searchByValue,Zie=Tq.promisify(Gh.search),eoe=Tq.promisify(LA.evaluateSQL),toe={[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},q=aq();async function gq(e,t){try{if(e.body.operation!=="read_log"&&(bt.log_level===v.LOG_LEVELS.INFO||bt.log_level===v.LOG_LEVELS.DEBUG||bt.log_level===v.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;bt.info(o)}}catch(s){bt.error(s)}let r=await Jie.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return toe[e.body.operation]&&Vie.setSchemaDataToGlobal(s=>{s&&bt.error(s)}),r}a(gq,"processLocalTransaction");var Sq=soe();MA.exports={chooseOperation:Rq,getOperationFunction:Aq,operation:PA,processLocalTransaction:gq};Kie(MA.exports);zie.operation=PA;function Rq(e){let t;try{t=Aq(e)}catch(n){throw bt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=LA.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LA.checkASTPermissions(e,i);if(o)throw bt.error(`${uq.FORBIDDEN} from operation ${e.operation}`),bt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),f_(new Error,o,E_.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 n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=$ie.verifyPerms(i,n);if(o)throw bt.error(`${uq.FORBIDDEN} from operation ${e.operation}`),bt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),f_(new Error,o,E_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw f_(n,"There was an error when trying to choose an operation path")}return r}a(Rq,"chooseOperation");function Aq(e){if(bt.trace(`getOperationFunction with operation: ${e.operation}`),Sq.has(e.operation))return Sq.get(e.operation);throw f_(new Error,E_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),E_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Aq,"getOperationFunction");Qie("operation",PA);function PA(e,t){e.hdb_user=this[Wie]?.user,e.bypass_auth=!t;let r=Rq(e);return gq({body:e},r)}a(PA,"operation");async function roe(e){bt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[v.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case v.OPERATIONS_ENUM.INSERT:o=await Cc.insert(i);break;case v.OPERATIONS_ENUM.UPDATE:o=await Cc.update(i);break;case v.OPERATIONS_ENUM.UPSERT:o=await Cc.upsert(i);break;case v.OPERATIONS_ENUM.DELETE:o=await d_.deleteRecord(i);break;default:bt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){bt.info("Invalid operation in transaction"),bt.error(o)}}a(roe,"catchup");async function bn(e){jie(e);let t,r;try{r=await DA.addJob(e),t=r.createdJob,bt.info("addJob result",r);let s=new _q.RunnerMessage(t,e);return await _q.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw bt.error(n),f_(s,n)}}a(bn,"executeJob");function soe(){let e=new Map;return e.set(v.OPERATIONS_ENUM.INSERT,new q(Cc.insert)),e.set(v.OPERATIONS_ENUM.UPDATE,new q(Cc.update)),e.set(v.OPERATIONS_ENUM.UPSERT,new q(Cc.upsert)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Gh.searchByConditions)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(pq)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_ID,new q(pq)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Xie)),e.set(v.OPERATIONS_ENUM.SEARCH,new q(Zie)),e.set(v.OPERATIONS_ENUM.SQL,new q(eoe)),e.set(v.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(bn,Bh.csvDataLoad)),e.set(v.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(bn,Bh.csvFileLoad)),e.set(v.OPERATIONS_ENUM.CSV_URL_LOAD,new q(bn,Bh.csvURLLoad)),e.set(v.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(bn,Bh.importFromS3)),e.set(v.OPERATIONS_ENUM.CREATE_SCHEMA,new q(ui.createSchema)),e.set(v.OPERATIONS_ENUM.CREATE_DATABASE,new q(ui.createSchema)),e.set(v.OPERATIONS_ENUM.CREATE_TABLE,new q(ui.createTable)),e.set(v.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(ui.createAttribute)),e.set(v.OPERATIONS_ENUM.DROP_SCHEMA,new q(ui.dropSchema)),e.set(v.OPERATIONS_ENUM.DROP_DATABASE,new q(ui.dropSchema)),e.set(v.OPERATIONS_ENUM.DROP_TABLE,new q(ui.dropTable)),e.set(v.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(ui.dropAttribute)),e.set(v.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(Hh.describeSchema)),e.set(v.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(Hh.describeSchema)),e.set(v.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(Hh.describeTable)),e.set(v.OPERATIONS_ENUM.DESCRIBE_ALL,new q(Hh.describeAll)),e.set(v.OPERATIONS_ENUM.DELETE,new q(d_.deleteRecord)),e.set(v.OPERATIONS_ENUM.ADD_USER,new q(__.addUser)),e.set(v.OPERATIONS_ENUM.ALTER_USER,new q(__.alterUser)),e.set(v.OPERATIONS_ENUM.DROP_USER,new q(__.dropUser)),e.set(v.OPERATIONS_ENUM.LIST_USERS,new q(__.listUsersExternal)),e.set(v.OPERATIONS_ENUM.LIST_ROLES,new q(qh.listRoles)),e.set(v.OPERATIONS_ENUM.ADD_ROLE,new q(qh.addRole)),e.set(v.OPERATIONS_ENUM.ALTER_ROLE,new q(qh.alterRole)),e.set(v.OPERATIONS_ENUM.DROP_ROLE,new q(qh.dropRole)),e.set(v.OPERATIONS_ENUM.USER_INFO,new q(__.userInfo)),e.set(v.OPERATIONS_ENUM.READ_LOG,new q(vie)),e.set(v.OPERATIONS_ENUM.ADD_NODE,new q(Bie)),e.set(v.OPERATIONS_ENUM.UPDATE_NODE,new q(Hie)),e.set(v.OPERATIONS_ENUM.REMOVE_NODE,new q(qie)),e.set(v.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(Gie)),e.set(v.OPERATIONS_ENUM.PURGE_STREAM,new q(Fie)),e.set(v.OPERATIONS_ENUM.SET_CONFIGURATION,new q(Eq.setConfiguration)),e.set(v.OPERATIONS_ENUM.CLUSTER_STATUS,new q(xie.clusterStatus)),e.set(v.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(kie)),e.set(v.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(wA.setRoutes)),e.set(v.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(wA.getRoutes)),e.set(v.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(wA.deleteRoutes)),e.set(v.OPERATIONS_ENUM.EXPORT_TO_S3,new q(bn,cq.export_to_s3)),e.set(v.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(bn,d_.deleteFilesBefore)),e.set(v.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(bn,d_.deleteFilesBefore)),e.set(v.OPERATIONS_ENUM.EXPORT_LOCAL,new q(bn,cq.export_local)),e.set(v.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(DA.handleGetJobsByStartDate)),e.set(v.OPERATIONS_ENUM.GET_JOB,new q(DA.handleGetJob)),e.set(v.OPERATIONS_ENUM.GET_FINGERPRINT,new q(CA.getFingerprint)),e.set(v.OPERATIONS_ENUM.SET_LICENSE,new q(CA.setLicense)),e.set(v.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(CA.getRegistrationInfo)),e.set(v.OPERATIONS_ENUM.RESTART,new q(lq.restart)),e.set(v.OPERATIONS_ENUM.RESTART_SERVICE,new q(lq.restartService)),e.set(v.OPERATIONS_ENUM.CATCHUP,new q(roe)),e.set(v.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(Yie.systemInformation)),e.set(v.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(bn,d_.deleteAuditLogsBefore)),e.set(v.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(Uie)),e.set(v.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(dq.createTokens)),e.set(v.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(dq.refreshOperationToken)),e.set(v.OPERATIONS_ENUM.LOGIN,new q(fq.login)),e.set(v.OPERATIONS_ENUM.LOGOUT,new q(fq.logout)),e.set(v.OPERATIONS_ENUM.GET_CONFIGURATION,new q(Eq.getConfiguration)),e.set(v.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q($t.customFunctionsStatus)),e.set(v.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q($t.getCustomFunctions)),e.set(v.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q($t.getComponentFile)),e.set(v.OPERATIONS_ENUM.GET_COMPONENTS,new q($t.getComponents)),e.set(v.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q($t.setComponentFile)),e.set(v.OPERATIONS_ENUM.DROP_COMPONENT,new q($t.dropComponent)),e.set(v.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q($t.getCustomFunction)),e.set(v.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q($t.setCustomFunction)),e.set(v.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q($t.dropCustomFunction)),e.set(v.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q($t.addComponent)),e.set(v.OPERATIONS_ENUM.ADD_COMPONENT,new q($t.addComponent)),e.set(v.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q($t.dropCustomFunctionProject)),e.set(v.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q($t.packageComponent)),e.set(v.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q($t.packageComponent)),e.set(v.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q($t.deployComponent)),e.set(v.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q($t.deployComponent)),e.set(v.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(hq.readTransactionLog)),e.set(v.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(bn,hq.deleteTransactionLogsBefore)),e.set(v.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(mq.installModules)),e.set(v.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(mq.auditModules)),e.set(v.OPERATIONS_ENUM.GET_BACKUP,new q(ui.getBackup)),e}a(soe,"initializeOperationFunctionMap")});var xh=T((LAe,yq)=>{"use strict";var UA=R(),noe=G(),h_=U(),{handleHDBError:vA,hdb_errors:Fh}=Z(),{isMainThread:ioe}=require("worker_threads"),{Readable:ooe}=require("stream"),Nq=require("os"),aoe=require("util"),coe=Hg(),uoe=aoe.promisify(coe.authorize),bq=Oq(),{createGzip:loe,constants:_oe}=require("zlib");function doe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Nq.EOL}Stack: ${e.stack} ${Nq.EOL}Terminating ${ioe?"HDB":"thread"}.`;console.error(t),h_.fatal(t),process.exit(1)}a(doe,"handleServerUncaughtException");function foe(e,t,r){if(h_[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Fh.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(foe,"serverErrorHandler");function Eoe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=vA(new Error,"Invalid JSON.",Fh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(noe.isEmpty(e.body.operation)){let s=vA(new Error,"Request body must include an 'operation' property.",Fh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Eoe,"reqBodyValidationHandler");function hoe(e,t,r){let s;e.body.operation!==UA.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==UA.OPERATIONS_ENUM.LOGIN&&e.body.operation!==UA.OPERATIONS_ENUM.LOGOUT?uoe(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{h_.warn(n),h_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(vA(n,i,Fh.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(hoe,"authHandler");async function moe(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=bq.chooseOperation(e.body);let n=await bq.processLocalTransaction(e,s);if(n instanceof ooe&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(loe({level:_oe.Z_BEST_SPEED})))}return n}catch(n){throw h_.error(n),n}}a(moe,"handlePostRequest");yq.exports={authHandler:hoe,handlePostRequest:moe,handleServerUncaughtException:doe,serverErrorHandler:foe,reqBodyValidationHandler:Eoe}});var Lq=T((PAe,Cq)=>{"use strict";var poe=require("fastify-plugin"),{handlePostRequest:Iq,authHandler:Soe,reqBodyValidationHandler:Toe}=xh();async function goe(e){e.decorate("hdbCore",{preValidation:[Toe,Soe],request:t=>wq(Iq(t,response)),requestWithoutAuthentication:(t,r)=>wq(Iq(t,r,!0))})}a(goe,"hdbCore");async function wq(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(wq,"convertAsyncIterators");Cq.exports=poe(goe)});var Pq=T((UAe,Dq)=>{"use strict";var BA=require("fs"),Lc=j();Lc.initSync();var{CONFIG_PARAMS:m_}=R(),Roe=1024*1024*1024;function Aoe(e){let t=Lc.get(m_.HTTP_TIMEOUT),r=Lc.get(m_.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:Roe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Lc.get(m_.TLS_PRIVATEKEY),i=Lc.get(m_.TLS_CERTIFICATE),o=Lc.get(m_.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:BA.readFileSync(`${n}`),cert:BA.readFileSync(i)+(o?`
28
-
29
- `+BA.readFileSync(o):"")},s.http2=!0}return s}a(Aoe,"getServerOptions");Dq.exports=Aoe});var vq=T((BAe,Uq)=>{"use strict";var HA=j();HA.initSync();var{CONFIG_PARAMS:Mq}=R();function Ooe(){let e=HA.get(Mq.HTTP_CORSACCESSLIST),t=HA.get(Mq.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Ooe,"getCORSOptions");Uq.exports=Ooe});var qq=T((qAe,Hq)=>{"use strict";var Bq=j();Bq.initSync();var Noe=R();function boe(){return Bq.get(Noe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(boe,"getHeaderTimeoutConfig");Hq.exports=boe});var FA={};Fe(FA,{customFunctionsServer:()=>woe,handleFile:()=>Ioe,ready:()=>Doe});async function Ioe(e,t,r,s){if(!li){let c=qA.get(GA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);li=Jq(c),Tt.http((await li).server)}let n=await li,i=(0,Fq.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Gq.has(i)){Gq.add(i);try{n.register(Loe(i,o))}catch(c){if(c.message==="Root plugin has already booted")Ue.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function woe(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await Coe();let e=qA.get(GA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=li=await Jq(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function Coe(){try{Ue.info("Custom Functions starting configuration."),await Kq.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function Loe(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,xq.existsSync)(e)&&r.register(Yq.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Jq(e){Ue.info("Custom Functions starting buildServer.");let t=(0,Wq.default)(e),r=(0,kq.default)(t);r.server.headersTimeout=(0,jq.default)(),r.setErrorHandler(zq.serverErrorHandler);let s=(0,Qq.default)();return s&&r.register($q.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Vq.default),await r.register(yoe),await r.after(),iA(r),Ue.info("Custom Functions completed buildServer."),r}function Doe(){if(li)return li.then?li.then(e=>e.ready()):li.ready()}var Fq,xq,kq,$q,Vq,Yq,qA,GA,Ue,yoe,Kq,Wq,Qq,jq,zq,li,Gq,Xq=Re(()=>{Fq=require("path"),xq=require("fs"),kq=D(require("fastify")),$q=D(require("@fastify/cors")),Vq=D(cA()),Yq=D(require("@fastify/autoload")),qA=D(j()),GA=D(R()),Ue=D(U()),yoe=D(Lq()),Kq=D(Er()),Wq=D(Pq()),Qq=D(vq()),jq=D(qq()),zq=D(xh());pc();Pr();Gq=new Set;a(Ioe,"handleFile");a(woe,"customFunctionsServer");a(Coe,"setUp");a(Loe,"buildRouteFolder");a(Jq,"buildServer");a(Doe,"ready")});var xA={};Fe(xA,{start:()=>Poe});function Poe(e){return{handleFile(t,r,s){eG||(eG=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Zq.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,tG.default)(n,(0,rG.realpathSync)(o))}}return i(n)},{runFirst:!0})),Zq.set(r,s)}}}var tG,rG,Zq,eG,sG=Re(()=>{tG=D(require("send")),rG=require("fs"),Zq=new Map;a(Poe,"start")});var aG=T((WAe,oG)=>{"use strict";var Moe=require("cluster"),Qs=j();Qs.initSync();var iG=R(),VAe=require("util"),_i=U(),kA=require("fs"),Uoe=require("fastify"),YAe=To(),voe=require("@fastify/cors"),Boe=require("@fastify/compress"),Hoe=require("@fastify/static"),qoe=cA(),Goe=require("path"),{PACKAGE_ROOT:Foe}=R(),xoe=cs(),koe=G(),$oe=Er(),Voe=Xu(),{server:Yoe}=(Pr(),te(Ro)),{authHandler:Koe,handlePostRequest:Woe,serverErrorHandler:Qoe,reqBodyValidationHandler:joe}=xh(),KAe=require("net"),{registerContentHandlers:zoe}=(pc(),te(_0)),Joe=6e4,Xoe=1024*1024*1024,Zoe="TRUE",{CONFIG_PARAMS:di}=iG,ca;oG.exports={hdbServer:nG,start:nG};async function nG(e){try{_i.info("In Fastify server"+process.cwd()),_i.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),_i.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Moe.isMaster,await eae();let t=Qs.get(di.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;ca=tae(t),await ca.ready(),e||(e={}),e.isOperationsServer=!0,ca.server.cantCleanupProperly=!0;try{Yoe.http(ca.server,e),ca.server.closeIdleConnections||await ca.listen({port:0,host:"::"})}catch(r){throw ca.close(),_i.error(r),_i.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),_i.fatal(t),process.exit(1)}}a(nG,"operationsServer");async function eae(){_i.trace("Configuring HarperDB process."),xoe.setSchemaDataToGlobal(),await $oe.setUsersToGlobal(),await Voe.getLicense()}a(eae,"setUp");function tae(e){_i.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=rae(e),r=Uoe(t);r.server.headersTimeout=nae(),r.setErrorHandler(Qoe);let s=sae();s&&r.register(voe,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(qoe),r.register(Boe),r.register(Hoe,{root:Goe.join(Foe,"studio")}),zoe(r);let n=Qs.get(iG.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!koe.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[joe,Koe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Woe(i,o)}),r.get("/health",()=>"HarperDB is running."),_i.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(tae,"buildServer");function rae(e){let t=Qs.get(di.OPERATIONSAPI_NETWORK_TIMEOUT),r=Qs.get(di.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Xoe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qs.get(di.OPERATIONSAPI_TLS_PRIVATEKEY),i=Qs.get(di.OPERATIONSAPI_TLS_CERTIFICATE),o=Qs.get(di.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:kA.readFileSync(n),cert:kA.readFileSync(i)+(o?`
30
-
31
- `+kA.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(rae,"getServerOptions");function sae(){let e=Qs.get(di.OPERATIONSAPI_NETWORK_CORS),t=Qs.get(di.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Zoe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(sae,"getCORSOpts");function nae(){return Qs.get(di.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Joe}a(nae,"getHeaderTimeoutConfig")});var TG=T((XAe,SG)=>{"use strict";var{decode:iae}=require("msgpackr"),{isMainThread:jAe,parentPort:oae,threadId:zAe}=require("worker_threads"),lG=st(),fi=ke(),aae=R(),to=U(),cG=j(),_G=R();Qe();var cae=Qn(),{recordAction:uae,recordActionBinary:lae}=(zn(),te(il)),{publishToStream:_ae}=lG,{ConsumerEvents:dae}=require("nats"),JAe={durable:fi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:fi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},fae,Eae,hae,dG,fG;SG.exports={initialize:EG,workQueueListener:pG,setSubscription:mae,setIgnoreOrigin:Sae,getDatabaseSubscriptions:pae};async function EG(){fG=!0,to.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await lG.getNATSReferences();fae=e,Eae=e.info.server_name,hae=t,dG=r}a(EG,"initialize");var $h=new Map;function mae(e,t,r){let s=$h.get(e);s||$h.set(e,s=new Map),s.set(t,r),fG||EG().then(pG)}a(mae,"setSubscription");function pae(){return $h}a(pae,"getDatabaseSubscriptions");var hG;function Sae(e){hG=e}a(Sae,"setIgnoreOrigin");var mG=100,uG=new Array(mG),kh=0;async function pG(){let e=await dG.consumers.get(fi.WORK_QUEUE_CONSUMER_NAMES.stream_name,fi.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(oae?.on("message",async s=>{let{type:n}=s;n===_G.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let s of await r.status())if(s.type===dae.HeartbeatsMissed){let n=s.data;to.trace(`${n} clustering ingest consumer heartbeats missed`),n===2&&(to.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let s of r)await uG[kh],uG[kh]=Tae(s).catch(n=>{to.error(n)}),++kh>=mG&&(kh=0)}catch(s){to.error("Error consuming clustering ingest, restarting consumer",s)}}}a(pG,"workQueueListener");async function Tae(e){let t=iae(e.data);uae(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=cG.get(aae.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(fi.MSG_HEADERS.TRANSACTED_NODES)&&r.values(fi.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(fi.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!hG),lae(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(fi.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;to.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),to.trace(`messageProcessor nats msg id: ${e.headers.get(fi.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:m,user:S,node_name:A}=f||{},g=$h.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(l.length===1&&!u)g.send({type:$A(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:m,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((V,$)=>({type:$A(o),value:V,expiresAt:E,id:d?.[$],table:_}));for(;u;)N.push({type:$A(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:N,table:_,timestamp:m,onCommit:h,user:S,nodeName:A})}cG.get(_G.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&_ae(e.subject.split(".").slice(0,-1).join("."),cae.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){to.error(o)}e.ack()}a(Tae,"messageProcessor");function $A(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a($A,"convertOperation")});var jA={};Fe(jA,{disableNATS:()=>Rae,publishToStream:()=>Qh,setNATSReplicator:()=>VA,setPublishToStream:()=>Aae,setSubscription:()=>QA,start:()=>gae});function gae(){Yh.default.get(Kh.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Nae()}function Rae(e=!0){NG=e}function Aae(e,t){Qh=e,QA=t}function Nae(){if(NG||process.env._DISABLE_NATS)return;let e=Hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];VA(n,r,i)}}kT((r,s)=>{VA(r.tableName,r.databaseName,r),s&&yG(r)}),!gG&&(gG=!0)}function VA(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Ut{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Ce],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Ce]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Ce],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Ce]})}static defineSchema(i){yG(i)}static subscribe(){let i=new ws;return QA(t,e,i),i}static subscribeOnThisThread(i){return i<Oae}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Vh(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=bG;return i}a(s,"getNATSTransaction")}function yG(e){let t=Yh.default.get(Kh.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Qh(`${KA.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,WA.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 RG,KA,WA,AG,OG,Yh,Kh,Wh,NG,Qh,QA,Oae,bG,gG,Vh,YA,IG=Re(()=>{Ee();Ls();RG=D(st()),KA=D(ke()),WA=D(Qn());fu();AG=D(TG()),OG=D(or()),Yh=D(j()),Kh=D(R()),Wh=D(U());a(gae,"start");a(Rae,"disableNATS");Qh=RG.publishToStream,QA=AG.setSubscription;a(Aae,"setPublishToStream");Oae=2;a(Nae,"assignReplicationSource");a(VA,"setNATSReplicator");a(yG,"publishSchema");Vh=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=Yh.default.get(Kh.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Wh.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(Qh(`${KA.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,WA.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Wh.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},YA=class extends Vh{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,OG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};bG=new YA});async function CG({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await zA.getResource(e,{});n=new XA(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await zA.get(e);i&&i.delete()}n=new zh(e,t)}return n}function JA(){return jh++,jh>65500&&(jh=1),jh}var wG,Dc,zA,jh,zh,XA,LG=Re(()=>{Ee();hu();wG=D(or()),Dc=D(U());No();zA=ut({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"}]}}]});a(CG,"getSession");jh=1;a(JA,"getNextMessageId");zh=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(g=>g.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,Dc.trace)("Resuming subscription from",n,"from",o);let h=Ci.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let m=h.path,S=h.Resource,A=await We(E,async()=>{let g=await S.subscribe(E);if(!g)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of g)try{let V;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,V=this.needsAcknowledge(N)):(N.acknowledge?.(),V=JA());let $=N.id;Array.isArray($)&&($=Na($)),$==null&&($=""),this.listener(m+"/"+$,N.value,V,t)}catch(V){(0,Dc.warn)(V)}})(),g});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=JA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Ci.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return We(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},XA=class extends zh{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=JA(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Dc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,wG.getNextMonotonicTime)()),(0,Dc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),zA.put(this.sessionRecord)),t.qos}}});var eO={};Fe(eO,{start:()=>yae});async function yae({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=MG(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,gs.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;bae&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,UG.getSuperUser)());let{onMessage:u,onClose:_}=MG(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,gs.info)("Socket error",l)})},{port:t,securePort:s})}function MG(e,t,r,s,n){PG||(PG=!0,nl(d=>{Jh>0&&d.push({metric:"mqtt-connections",connections:Jh,byThread:!0})}));let i;Jh++;let o,c={protocolVersion:4},u=(0,Xh.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Jh--,i||(i=!0,o?.disconnect(),us(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await Tt.getUser(d.username,d.password.toString()),(0,ZA.get)(Ei.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DG.notify({username:s.username,status:Ei.AUTH_AUDIT_STATUS.SUCCESS,type:Ei.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ZA.get)(Ei.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DG.error({username:s.username,status:Ei.AUTH_AUDIT_STATUS.FAILURE,type:Ei.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=CG({user:s,...d}),o=await o}catch(N){return(0,gs.error)(N),us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}us(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,V,$,F)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,gs.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let V;try{V=(await o.addSubscription(N,N.qos>=1)).qos||0}catch($){(0,gs.error)($),V=128}h.push(V)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Nc(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,A)}catch(N){(0,gs.warn)(N),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),us(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,gs.error)(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,Xh.generate)(h,c);t(S),kr(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Xi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Xh,UG,ZA,Ei,gs,DG,bae,PG,Jh,vG=Re(()=>{Xh=require("mqtt-packet");LG();UG=D(Er());pc();zn();Pr();ZA=D(j()),Ei=D(R()),gs=D(U()),DG=(0,gs.loggerWithTag)("auth-event"),bae=!0;a(yae,"start");Jh=0;a(MG,"onSocket")});var HG={};Fe(HG,{Request:()=>tO,createReuseportFd:()=>Zh});var BG,tO,rO,sO,Zh,nO=Re(()=>{BG=require("os"),tO=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new sO(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new rO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},rO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},sO=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,BG.platform)()!="win32"&&(Zh=require("node-unix-socket").createReuseportFd)});var ih={};Fe(ih,{component_errors:()=>Pc,loadComponent:()=>em,loadComponentDirectories:()=>KG,setErrorReporter:()=>Lae});function KG(e,t){t&&(oO=t),e&&(aO=e);let r=[];if((0,js.existsSync)(iO)){let n=(0,js.readdirSync)(iO,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Dt.join)(iO,o);r.push(em(c,oO,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(em(s,oO,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{YG=!0})}function Lae(e){T_=e}async function em(e,t,r,s,n,i){if(!GG.has(e)){GG.set(e,!0),n&&(aO=n);try{let o;s&&(Pc=new Map);let c=(0,Dt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,js.existsSync)(c)?o=s?(0,VG.getConfigObj)():(0,FG.parseDocument)((0,js.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=cO;let u=[],_=s;for(let l in o){let d=o[l];if(Pc.set(s?l:(0,Dt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,N;for(;!(0,js.existsSync)(N=(0,Dt.join)(g,"node_modules",l));)if(g=(0,Dt.dirname)(g),g.length<(0,$G.getHdbBasePath)().length){N=null;break}if(N)f=await em(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Cae[l];if(!f)continue;u.push(f);let h=a(g=>(g.origin=r,ut(g)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,A=!m?.https&&m?.port;if(p_.isMainThread&&(f=await f.startOnMainThread?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&m))for(let g of[A,S])try{if(+g&&!qG.includes(g)){let N=uO.get(lO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&S_.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!Zh)&&(qG.push(g),_O(g,N))}}catch(N){console.error("Error listening on socket",g,N,l)}if(t.isWorker&&(f=await f.start?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),aO.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,kG.handleHDBError)("Can not reference parent directories");let g=(0,Dt.join)(e,d.files).replace(/\\/g,"/"),N=g.indexOf("/*");if(N>-1&&d.files!==cO[l]?.files&&!(0,js.existsSync)(g.slice(0,N)))throw new Error(`The path '${g.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let V of await(0,xG.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:$,dirent:F}=V;_=!0;let w=(0,Dt.relative)(e,$).replace(/\\/g,"/");if(d.root){let k=d.root;if(k.startsWith("/")&&(k=k.slice(1)),k.endsWith("/")&&(k=k.slice(0,-1)),k+="/",w.startsWith(k))w=w.slice(k.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Dt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let k=await wae($);p_.isMainThread&&await f.setupFile?.(k,B,$,t),t.isWorker&&await f.handleFile?.(k,B,$,t)}else p_.isMainThread&&await f.setupDirectory?.(B,$,t),t.isWorker&&await f.handleDirectory?.(B,$,t)}catch(k){k.message=`Could not load ${F.isFile()?"file":"directory"} '${$}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${k.message}`,T_?.(k),((0,Mc.getWorkerIndex)()===0?console:S_.default).error(k),t.set(d.path||"/",new g_(k)),Pc.set(s?l:(0,Dt.basename)(e),k.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Dt.basename)(e)}' due to: ${h.message}`,T_?.(h),((0,Mc.getWorkerIndex)()===0?console:S_.default).error(h),t.set(d.path||"/",new g_(h),null,!0),Pc.set(s?l:(0,Dt.basename)(e),h.message)}}if(p_.isMainThread&&!YG&&i&&(0,Mc.watchDir)(e,async()=>KG()),o.extensionModule)return await Kf((0,Dt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;T_?.(new Error(l)),((0,Mc.getWorkerIndex)()===0?console:S_.default).error(l),Pc.set((0,Dt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,T_?.(o),t.set("",new g_(o))}}}var js,Dt,p_,FG,uO,lO,xG,Mc,S_,kG,$G,Iae,VG,wae,iO,aO,YG,oO,Pc,Cae,cO,qG,GG,T_,g_,oh=Re(()=>{js=require("fs"),Dt=require("path"),p_=require("worker_threads"),FG=require("yaml"),uO=D(j()),lO=D(R());HP();xP();kP();E0();Xq();sG();xG=D(require("fast-glob")),Mc=D(Qe()),S_=D(U());jT();Pr();kG=D(Z());Ls();Ee();tm();$G=D(j()),Iae=D(aG());zE();IG();vG();VG=D(rt());nO();({readFile:wae}=js.promises),iO=uO.get(lO.CONFIG_PARAMS.COMPONENTSROOT),aO=new Map,Pc=new Map;a(KG,"loadComponentDirectories");Cae={REST:gh,rest:gh,graphqlSchema:QT,jsResource:JT,fastifyRoutes:FA,login:ZT,static:xA,operationsApi:Iae,customFunctions:{},http:{},clustering:jA,authentication:Wl,mqtt:eO},cO={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(cO,"static",{value:{files:"web/**"}});qG=[],GG=new Map;a(Lae,"setErrorReporter");a(em,"loadComponent");g_=class extends Ut{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 rm=T((wOe,QG)=>{var{isMainThread:WG}=require("worker_threads"),{getTables:Dae}=(Ee(),te(Le)),{loadComponentDirectories:Pae,loadComponent:Mae}=(oh(),te(ih)),{resetResources:Uae}=(hu(),te(Xb)),vae=HR(),Bae=rt(),{dirname:Hae}=require("path"),{getConnection:qae}=st(),Gae=j(),Fae=R(),dO=new Map;async function xae(e=!1){!WG&&Gae.get(Fae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&qae();try{WG&&await vae()}catch(s){console.error(s)}let t=Uae();Dae(),t.isWorker=e,await Mae(Hae(Bae.getConfigFilePath()),t,"hdb",!0,dO),await Pae(dO,t);let r=[];for(let[s]of dO)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(xae,"loadRootComponents");QG.exports.loadRootComponents=xae});var Qe=T((LOe,so)=>{"use strict";var{Worker:kae,MessageChannel:$ae,parentPort:yn,isMainThread:pO,threadId:Vae,workerData:hi}=require("worker_threads"),{PACKAGE_ROOT:Yae}=R(),{join:XG,isAbsolute:Kae,extname:Wae}=require("path"),{server:ZG}=(Pr(),te(Ro)),{watch:Qae,readdir:jae}=require("fs/promises"),{totalmem:jG}=require("os"),im=R(),zae=j(),mi=U(),{randomBytes:Jae}=require("crypto"),{_assignPackageExport:Xae}=require("../index"),Zae=R(),zG=1024*1024,ro=[],Rs=[],ece=50,SO=1e4,tce="restart",eF="request_thread_info",tF="resource_report",rF="thread_info",sF="added-port",rce="ack",fO;Xae("threads",Rs);so.exports={startWorker:EO,restartWorkers:gO,shutdownWorkers:ace,workers:ro,setMonitorListener:hce,onMessageFromWorkers:cce,onMessageByType:uF,broadcast:lce,broadcastWithAcknowledgement:dce,setChildListenerByType:oce,getWorkerIndex:nF,getWorkerCount:iF,getTicketKeys:oF,setMainIsWorker:nce,setTerminateTimeout:sce,restartNumber:hi?.restartNumber||1};Rs.onMessageByType=uF;Rs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rs.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var TO;function sce(e){SO=e}a(sce,"setTerminateTimeout");function nF(){return hi?hi.workerIndex:TO?0:void 0}a(nF,"getWorkerIndex");function iF(){return hi?hi.workerCount:TO?1:void 0}a(iF,"getWorkerCount");function nce(e){TO=e}a(nce,"setMainIsWorker");var sm;function oF(){return sm||(sm=pO?Jae(48):hi.ticketKeys,sm)}a(oF,"getTicketKeys");Object.defineProperty(ZG,"workerIndex",{get(){return nF()}});Object.defineProperty(ZG,"workerCount",{get(){return iF()}});var aF={[eF](e,t){fce(t)},[tF](e,t){Ece(t,e)}};function EO(e,t={}){let r=process.constrainedMemory?.()||jG();r=Math.min(r,jG(),2e4*zG);let s=Math.max(Math.floor(r/zG/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Rs){let _=new $ae;_.existingPort=u,i.push(_),o.push(_.port2)}Wae(e)||(e+=".js");let c=new kae(Kae(e)?e:XG(Yae,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:so.exports.restartNumber,ticketKeys:oF()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:sF,port:u,threadId:c.threadId},[u]);return om(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>EO(e,t),c.on("error",u=>{console.error("Worker error:",u),mi.error("Worker error:",u)}),c.on("exit",u=>{ro.splice(ro.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<ece?(t.unexpectedRestarts=c.unexpectedRestarts+1,EO(e,t)):mi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{aF[u.type]?.(u,c)}),ro.push(c),pce(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(EO,"startWorker");var ice=[im.THREAD_TYPES.HTTP];async function gO(e=null,t=2,r=!0){if(pO){if(r){let{loadRootComponents:o}=rm();await o()}so.exports.restartNumber++,t<1&&(t=t*ro.length);let s=[],n=[];for(let o of ro.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;mi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:so.exports.restartNumber,type:im.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=ice.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),SO*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Zae.ITC_EVENT_TYPES.CHILD_STARTED&&(mi.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");mi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Jo();r&&(e==="http"||!e)&&zae.get(im.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else yn.postMessage({type:tce,workerType:e})}a(gO,"restartWorkers");function oce(e,t){aF[e]=t}a(oce,"setChildListenerByType");function ace(e){return gO(e,1/0,!1)}a(ace,"shutdownWorkers");var cF=[];function cce(e){cF.push(e)}a(cce,"onMessageFromWorkers");var hO=new Map;function uF(e,t){let r=hO.get(e);r||hO.set(e,r=[]),r.push(t)}a(uF,"onMessageByType");var uce=10;async function lce(e){let t=0;for(let r of Rs)try{r.postMessage(e),t++>uce&&(t=0,await new Promise(setImmediate))}catch(s){mi.error("Unable to send message to worker",s)}}a(lce,"broadcast");var nm=new Map,_ce=1;function dce(e){return new Promise(t=>{let r=0;for(let s of Rs)try{let n=_ce++,i=a(()=>{nm.delete(n),--r===0&&t(),s!==yn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,nm.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of nm)o.port===s&&o()})),s.postMessage(e),r++}catch(n){mi.error("Unable to send message to worker",n)}r===0&&t()})}a(dce,"broadcastWithAcknowledgement");function fce(e){e.postMessage({type:rF,workers:lF()})}a(fce,"sendThreadInfo");function lF(){let e=Date.now();return ro.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(lF,"getChildWorkerInfo");function Ece(e,t){e.resources=t,e.resources.updated=Date.now()}a(Ece,"recordResourceReport");var mO;function hce(e){mO=e}a(hce,"setMonitorListener");var mce=1e3,JG=!1;function pce(){JG||(JG=!0,setInterval(()=>{for(let e of ro){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}mO&&mO()},mce).unref())}a(pce,"startMonitoring");var Sce=1e3;if(yn){om(yn);for(let e=0,t=hi.addPorts.length;e<t;e++){let r=hi.addPorts[e];r.threadId=hi.addThreadIds[e],om(r)}setInterval(()=>{let e=process.memoryUsage();yn.postMessage({type:tF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Sce).unref(),fO=a(()=>new Promise((e,t)=>{yn.on("message",r),yn.postMessage({type:eF});function r(s){s.type===rF&&(yn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else fO=lF;so.exports.getThreadInfo=fO;function om(e,t){Rs.push(e),e.on("message",r=>{if(r.type===sF)r.port.threadId=r.threadId,om(r.port);else if(r.type===rce){let s=nm.get(r.id);s&&s()}else{for(let n of cF)n(r,e);let s=hO.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){mi.error(i)}}}).on("close",()=>{Rs.splice(Rs.indexOf(e),1)}).on("exit",()=>{Rs.splice(Rs.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(om,"addPort");if(pO){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await jae(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(XG(s,i.name));try{for await(let{filename:i}of Qae(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await gO(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");so.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else yn.on("message",async e=>{let{type:t}=e;t===im.ITC_EVENT_TYPES.SHUTDOWN&&(so.exports.restartNumber=e.restartNumber,yn.unref(),setTimeout(()=>{mi.warn("Thread did not voluntarily terminate",Vae),process.exit(0)},SO).unref())})});var gF=T(N_=>{"use strict";var{isMainThread:Tce,parentPort:O_,threadId:R_}=require("worker_threads"),{Socket:gce,createServer:Rce}=require("net"),{createServer:Ace,IncomingMessage:Oce}=require("http"),{createServer:Nce}=require("https"),{readFileSync:Uc}=require("fs"),In=U(),Pt=j(),pi=R(),{server:cm}=(Pr(),te(Ro)),{WebSocketServer:bce}=require("ws"),{createServer:yce}=require("tls"),{getTicketKeys:Ice,restartNumber:wce}=Qe(),{Headers:EF}=(KE(),te(UB)),{recordAction:A_,recordActionBinary:Cce}=(zn(),te(il)),{Request:hF,node_request_key:POe,createReuseportFd:_F}=(nO(),te(HG));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){wce<=1&&In.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:MOe,CONFIG_PARAMS:Lce}=pi;Pt.initSync();var Dce=Pt.get(Lce.HTTP_SESSIONAFFINITY),wn={};N_.registerServer=yO;N_.httpServer=IO;N_.deliverSocket=bO;N_.startServers=mF;cm.http=IO;cm.request=vce;cm.socket=Bce;cm.ws=Hce;var RO=[],AO=[],Pce,ua={},am={},Mce=[],OO=[];function mF(){return rm().loadRootComponents(!0).then(()=>{O_?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)bO(s,r,n);else if(t.requestId)Uce(t);else if(t.type===pi.ITC_EVENT_TYPES.SHUTDOWN){In.trace("received shutdown request",R_);for(let i in wn){let o=wn[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),In.info("Closed all http connections",i,R_)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,R_),o.cantCleanupProperly||In.warn("Had to forcefully exit the thread",R_),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(_F&&!Dce)for(let t in wn){let r=wn[t],s;try{s=_F(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),In.trace("Listening on port "+t,R_)}).on("error",i)}))}Promise.all(e).then(()=>{O_?.postMessage({type:pi.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(mF,"startServers");Tce||mF();function bO(e,t,r){let s=e?.read?e:new gce({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=wn[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=wn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(In.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(bO,"deliverSocket");var dF=new Map;function Uce(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=dF.get(n),r){case"connection":i=bO(void 0,t),dF.set(n,i),i.write=(c,u,_)=>(O_.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(O_.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),O_.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(Uce,"proxyRequest");function yO(e,t){+t||(t=parseInt(Pt.get(pi.CONFIG_PARAMS.HTTP_PORT),10));let r=wn[t];if(r){let s=r.lastServer||r;s.off("unhandled",fF),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else wn[t]=e;e.on("unhandled",fF)}a(yO,"registerServer");function pF(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=[],Pt.get(pi.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Pt.get(pi.CONFIG_PARAMS.HTTP_PORT),secure:Pt.get(pi.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pt.get(pi.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Pt.get(pi.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(pF,"getPorts");function IO(e,t){for(let{port:r,secure:s}of pF(t))SF(r,s,t?.isOperationsServer),typeof e=="function"?OO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):yO(e,r),am[r]=NO(OO,r),Pce=NO(Mce,r)}a(IO,"httpServer");function SF(e,t,r){if(!ua[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Pt.get(s+"_keepAliveTimeout"),headersTimeout:Pt.get(s+"_headersTimeout"),requestTimeout:Pt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Pt.get(s+"tls_privateKey"),o=Pt.get(s+"tls_certificate"),c=Pt.get(s+"tls_certificateAuthority");Object.assign(n,{key:Uc(i),cert:Uc(o)+(c?`
32
-
33
- `+Uc(c):""),ticketKeys:Ice()})}ua[e]=(t?Nce:Ace)(n,async(i,o)=>{try{let u=performance.now(),_=new hF(i,o);r&&(_.isOperationsServer=!0);let l=await am[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=TF(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let g of l.headers||[])o.setHeader(g[0],g[1]);return i.baseRequest=_,o.baseResponse=l,ua[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,m;if(!l.handlesHeaders){let g=l.headers||new EF;if(h?h.length>=0&&(typeof h=="string"?g.set("Content-Length",Buffer.byteLength(h)):g.set("Content-Length",h.length),m=!0):(g.set("Content-Length","0"),m=!0),g.append){let N=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(N+=", miss"),g.append("Server-Timing",N,!0)}o.writeHead(d,g&&(g[Symbol.iterator]?Array.from(g):g)),m&&o.end(h)}let S=_.handlerPath,A=_.method;if(A_(E,"duration",S,A,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Cce(d<400,"success",S,A),!m)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let g=0;h.on("data",N=>{g+=N.length}),h.on("end",()=>{A_(performance.now()-f,"transfer",S,A),A_(g,"bytes-sent",S,A)})}else h?.then?h.then(g=>{o.end(g)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?In.warn(u):In.info(u):In.error(u)}a(c,"onError")}),t&&(ua[e].on("secureConnection",i=>{i._parent.startTime&&A_(performance.now()-i._parent.startTime,"tls-handshake",e),A_(i.isSessionReused(),"tls-reused",e)}),ua[e].isSecure=!0),yO(ua[e],e)}return ua[e]}a(SF,"getHTTPServer");function NO(e,t){let r=TF;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(NO,"makeCallbackChain");function TF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new EF}}a(TF,"unhandled");function vce(e,t){IO(e,{requestOnly:!0,...t})}a(vce,"onRequest");function Bce(e,t){if(t.securePort){let r=Pt.get("tls_privateKey"),s=Pt.get("tls_certificate"),n=Pt.get("tls_certificateAuthority"),i=yce({key:Uc(r),cert:Uc(s)+(n?`
34
-
35
- `+Uc(n):"")},e);wn[t.securePort]=i}if(t.port){let r=Rce(e);wn[t.port]=r}}a(Bce,"onSocket");Object.defineProperty(Oce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Hce(e,t){for(let{port:r,secure:s}of pF(t)){AO[r]||(AO[r]=new bce({server:SF(r,s)}),AO[r].on("connection",async(i,o)=>{try{let c=new hF(o);c.isWebSocket=!0;let u=am[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<RO.length;l++){let d=RO[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){In.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";RO.push({listener:e,protocol:n}),am[r]=NO(OO,r)}}a(Hce,"onWebSocket");function fF(e,t){t.writeHead(404),t.end(`Not found
36
- `)}a(fF,"defaultNotFound")});var PO={};Fe(PO,{startHTTPThreads:()=>Gce,startSocketServer:()=>_O,updateWorkerIdleness:()=>yF});async function Gce(e=2,t){if(t)CO(0,1,!0);else{let{loadRootComponents:r}=rm();if(e===0)return(0,no.setMainIsWorker)(!0),await gF().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)CO(r,e);return Promise.all(bF)}function CO(e,t=1,r){if(wO++,(0,no.startWorker)("server/threads/threadServer.js",{name:_m.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===_m.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});bF.push(n),await n,vc.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=lm.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=vc.indexOf(s);o>-1&&vc.splice(o,1)}if(a(i,"removeWorker"),Bc){let o=Bc;Bc=[];for(let c of o)NF[c.localPort](null,c)}}}),r){let s=setInterval(()=>{LO?LO=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,no.shutdownWorkers)(),wO=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function _O(e=0,t){if(typeof e=="string")try{(0,dm.existsSync)(e)&&(0,dm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Fce:r=xce(t):r=DO;let s=(0,Hc.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=NF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),LO=!0,r(o,(c,u)=>{if(!c){if(RF){let l=o._socket||new Hc.Socket({handle:o,writable:!0,readable:!0});RF.deliverSocket(l,e,u),l.resume()}else wO>0?(Bc.length===0&&setTimeout(()=>{Bc.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,Bc.push(o)):(console.log("start up a dynamic thread to handle request"),CO(0));kr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Hc.Socket({handle:o,writable:!0,readable:!0});Vce(l,c,e)}kr(!0,"socket-routed")})};let n=To();OF.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function DO(e,t){let r,s=0;for(let n of vc){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=um)return um=i,t(r);s=i}um=0,t(r)}function Fce(e,t){let r={};e.getpeername(r);let s=r.address,n=qc.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);DO(e,o=>{qc.set(s,{worker:o,lastUsed:i}),t(o)})}function xce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Hc.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=qc.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);DO(s,d=>{qc.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function yF(){um=0;for(let e of vc)e.expectedIdle=e.recentELU.idle+kce,e.requests=1;vc.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Vce(e,t,r){let s=$ce++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),lm.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),lm.delete(s)),n.event=="destroy"&&(e.destroy(),lm.delete(s))})}var no,Hc,_m,OF,dm,qce,vc,Bc,NF,RF,wO,bF,LO,um,AF,qc,kce,lm,$ce,tm=Re(()=>{no=D(Qe()),Hc=require("net"),_m=D(R()),OF=D(U()),dm=require("fs");zn();({isMainThread:qce}=require("worker_threads")),vc=[],Bc=[],NF=[],wO=0,bF=[];qce&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Gce,"startHTTPThreads");a(CO,"startHTTPWorker");a(_O,"startSocketServer");um=0;a(DO,"findMostIdleWorker");AF=36e5,qc=new Map;a(Fce,"findByRemoteAddressAffinity");a(xce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of qc)r.lastUsed+AF<e&&qc.delete(t)},AF).unref();kce=1e3;a(yF,"updateWorkerIdleness");(0,no.setMonitorListener)(yF);lm=new Map,$ce=1;a(Vce,"proxySocket")});var UO=T((qOe,IF)=>{"use strict";var b_=j();b_.initSync();var Gc=require("fs-extra"),MO=require("path"),Fc=R(),Yce=require("crypto"),Kce=require("uuid").v4;IF.exports=Wce;function Wce(){if(b_.getHdbBasePath()!==void 0){let e=MO.join(b_.getHdbBasePath(),Fc.LICENSE_KEY_DIR_NAME,Fc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=MO.join(b_.getHdbBasePath(),Fc.LICENSE_KEY_DIR_NAME,Fc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=MO.join(b_.getHdbBasePath(),Fc.LICENSE_KEY_DIR_NAME,Fc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Gc.accessSync(r),Gc.accessSync(e),Gc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Kce(),i=Yce.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Gc.writeFileSync(r,n),Gc.writeFileSync(e,i.privateKey),Gc.writeFileSync(t,i.publicKey)}else throw s}}}a(Wce,"checkJWTTokenExist")});var CF=T((FOe,wF)=>{"use strict";var vO=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};wF.exports={HdbInfoInsertObject:vO}});var PF=T((kOe,DF)=>{"use strict";var LF=R(),BO=class{static{a(this,"UpgradeObject")}constructor(t,r){this[LF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[LF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};DF.exports={UpgradeObject:BO}});var fm=T((VOe,UF)=>{"use strict";var As=require("prompt"),xc=require("chalk"),MF=U(),zs=require("os"),HO=po(),qO=["yes","y"];async function Qce(e){let t=`${zs.EOL}`+xc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${zs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${zs.EOL}${zs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${zs.EOL}`;As.override=HO(["CONFIRM_UPGRADE"]),As.start(),As.message=t;let r={properties:{CONFIRM_UPGRADE:{description:xc.magenta(`${zs.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}}},s;try{s=await As.get([r])}catch(n){return MF.error("There was an error when prompting user about an upgrade."),MF.error(n),!1}return qO.includes(s.CONFIRM_UPGRADE)}a(Qce,"forceUpdatePrompt");async function jce(e){let t=`${zs.EOL}`+xc.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.${zs.EOL}`);As.override=HO(["CONFIRM_DOWNGRADE"]),As.start(),As.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:xc.magenta(`${zs.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}}},s=await As.get([r]);return qO.includes(s.CONFIRM_DOWNGRADE)}a(jce,"forceDowngradePrompt");async function zce(){let e=`${zs.EOL}`+xc.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");As.override=HO(["GENERATE_CERTS"]),As.start(),As.message=e;let t={properties:{GENERATE_CERTS:{description:xc.magenta(`${zs.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 As.get([t]);return qO.includes(r.GENERATE_CERTS)}a(zce,"upgradeCertsPrompt");UF.exports={forceUpdatePrompt:Qce,forceDowngradePrompt:jce,upgradeCertsPrompt:zce}});var FO=T((KOe,vF)=>{"use strict";var GO=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};vF.exports=GO});var HF=T((XOe,BF)=>{"use strict";var Jce=G(),Xce=rt(),QOe=U(),jOe=require("path"),zOe=require("fs"),JOe=R();BF.exports={getOldPropsValue:Zce};function Zce(e,t,r=!1){let s=t.getRaw(e);return Jce.isNotEmptyAndHasValue(s)?s:r?Xce.getDefaultConfig(e):""}a(Zce,"getOldPropsValue")});var xF=T((eNe,FF)=>{"use strict";var io=require("path"),oo=require("fs-extra"),eue=require("properties-reader"),tue=FO(),ht=U(),{getOldPropsValue:ve}=HF(),{HDB_SETTINGS_NAMES:X,CONFIG_PARAMS:la}=R(),_a=rt(),Em=j(),qF=G(),Cn=R(),xO=new tue("3.1.0"),GF=[];function rue(){let e=eue(Em.get(X.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ht.info(t);let r=` ;Settings for the HarperDB process.
27
+ `},compressible:!1,q:.8});er.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()}});aq={type:"application/json",serializeStream:zu,serialize:F_,deserialize:Aie,q:.8};er.set("*/*",aq);er.set("",aq);a(Aie,"tryJSONParse");a(jA,"registerContentHandlers");Oie=require("fastify-plugin"),Nie=Oie(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Kh(n.raw);s.type(c),s.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Kh,"findBestSerializer");nq=YA.default.get(KA.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Wh,"serialize");a(mo,"serializeMessage");a(bie,"streamToBuffer");a(Ia,"getDeserializer");a(sq,"deserializerUnknownType");a(yie,"transformIterable")});var Qh={};je(Qh,{start:()=>Cie});async function wie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&zd(e);let s=new ho;try{e.responseHeaders=s;let i=e.url.slice(1),o=JA.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},l=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let u=await Xe(e,()=>{if(n==="POST"||n==="PUT"||n==="PATCH"||n==="QUERY")try{e.data=Ia(r["content-type"],!0)(e.body)}catch(p){throw new V_.ClientError(p,400)}switch(e.authorize=!0,n){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new V_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new V_.ServerError(`Method ${n} is not recognized`,501)}}),d=200,f;if(u==null)d=n==="GET"||n==="HEAD"?404:204,zA.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){Iie[0]=f;let p=String.fromCharCode(34,(tr[0]&63)+62,(tr[0]>>6)+(tr[1]<<2&63)+62,(tr[1]>>4)+(tr[2]<<4&63)+62,(tr[2]>>2)+62,(tr[3]&63)+62,(tr[3]>>6)+(tr[4]<<2&63)+62,(tr[4]>>4)+(tr[5]<<4&63)+62,(tr[5]>>2)+62,(tr[6]&63)+62,(tr[6]>>6)+(tr[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(u?.onDone&&u.onDone(),d=304,u=void 0):s.setIfNone("ETag",p),zA.lastModified&&s.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:d,headers:s,body:void 0},h=u?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),u!==void 0&&(E.body=Wh(u,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?wa.warn(i):wa.info(i):wa.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=Wh(i.contentType?i:i.toString(),e,o),o}}function Cie(e){zA=e,!lq&&(lq=!0,JA=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return wie(t,r)}),e.server.ws(async(t,r,n)=>{$_++;let s=new Xn;uq||(uq=!0,Uu(u=>{$_>0&&u.push({metric:"ws-connections",connections:$_,byThread:!0})}));let i;t.on("error",u=>{i=!0,wa.warn(u)});let o;t.on("message",a(function(d){o||(o=Ia(r.headers.asObject["content-type"]));let f=o(d);s.push(f)},"message"));let c;t.on("close",()=>{$_--,Un(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()}),await n;let l=r.url.slice(1),_=JA.getMatch(l);if(Un(!!_,"connection","ws","connect"),!_)t.send(mo(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,an(h=>({count:h.count,total:$_}),"connections",r.handlerPath,"connect","ws");let u={url:_.relativeURL,async:!0},d=_.Resource;c=(await Xe(r,()=>d.connect(u,s,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=mo(E.value,r);t.send(h),an(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var wa,V_,tr,Iie,zA,lq,JA,uq,$_,_q=Ae(()=>{kc();Ei();wa=U(B()),V_=U(ee());Jd();ql();Go();Rh();tr=new Uint8Array(8),Iie=new Float64Array(tr.buffer,0,1),zA={};a(wie,"http");$_=0;a(Cie,"start")});var XA=T((yOe,dq)=>{var{recordAction:jh,recordActionBinary:Lie}=(Ei(),re(vu)),Die=require("fastify-plugin"),Pie=200;dq.exports=Die(function(e,t,r){e.addHook("onResponse",async(n,s)=>{s.getResponseTime()}),e.addHook("onSend",async(n,s,i)=>{let o=s.getResponseTime(),c=performance.now(),l=s.request.routeOptions,_,u,d;l.config?.isOperation?(_=n.body?.operation,u="operation"):(_=l.url,u="fastify-route",d=l.method),jh(o,"duration",_,d,u),Lie(s.raw.statusCode<400,"success",_,d,u);let f=Pie;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{jh(performance.now()-c,"transfer",_,d,u),jh(f,"bytes-sent",_,d,u)})):(f+=i?.length||0,jh(f,"bytes-sent",_,d,u));let E=o.toFixed(3);s.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var rO=T((IOe,pq)=>{var em=require("clone"),tm=st(),Mie=V(),Xh=b(),Uie=B(),zh=require("fs"),ZA=require("joi"),{string:Zh}=ZA.types(),{hdb_errors:vie,handleHDBError:Y_}=ee(),{HDB_ERROR_MSGS:Bie,HTTP_STATUS_CODES:Jh}=vie,{common_validators:jc}=ws(),fq=1e9,Eq=" is required",Hie=["insert","update","upsert"],eO={database:{presence:!1,format:jc.schema_format,length:jc.schema_length},schema:{presence:!1,format:jc.schema_format,length:jc.schema_length},table:{presence:!0,format:jc.schema_format,length:jc.schema_length},action:{inclusion:{within:Hie,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},qie={schema:Zh.required(),table:Zh.required(),action:Zh.valid("insert","update","upsert")},{AWS_ACCESS_KEY:xie,AWS_SECRET:Gie,AWS_BUCKET:Fie,AWS_FILE_KEY:kie,REGION:$ie}=Xh.S3_BUCKET_AUTH_KEYS,Vie={s3:{presence:!0},[`s3.${xie}`]:{presence:!0,type:"String"},[`s3.${Gie}`]:{presence:!0,type:"String"},[`s3.${Fie}`]:{presence:!0,type:"String"},[`s3.${kie}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${$ie}`]:{presence:!0,type:"String"}},hq=em(eO);hq.data.presence={message:Eq};var mq=em(eO);mq.file_path.presence={message:Eq};var Yie=Object.assign(em(eO),Vie),tO=em(qie);tO.csv_url=Zh.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();tO.passthrough_headers=ZA.object();function Kie(e){let t=tm.validateObject(e,hq);return rm(e,t)}a(Kie,"dataObject");function Wie(e){let t=tm.validateBySchema(e,ZA.object(tO));return rm(e,t)}a(Wie,"urlObject");function Qie(e){let t=tm.validateObject(e,mq);return rm(e,t)}a(Qie,"fileObject");function jie(e){let t=tm.validateObject(e,Yie);return rm(e,t)}a(jie,"s3FileObject");function rm(e,t){if(!t){let r=Mie.checkGlobalSchemaTable(e.schema,e.table);if(r)return Y_(new Error,r,Jh.BAD_REQUEST);if(e.operation===Xh.OPERATIONS_ENUM.CSV_FILE_LOAD){try{zh.accessSync(e.file_path,zh.constants.R_OK|zh.constants.F_OK)}catch(n){return n.code===Xh.NODE_ERROR_CODES.ENOENT?Y_(n,`No such file or directory ${n.path}`,Jh.BAD_REQUEST):n.code===Xh.NODE_ERROR_CODES.EACCES?Y_(n,`Permission denied ${n.path}`,Jh.BAD_REQUEST):Y_(n)}try{let n=zh.statSync(e.file_path).size;if(n>fq)return Y_(new Error,Bie.MAX_FILE_SIZE_ERR(n,fq),Jh.BAD_REQUEST)}catch(n){Uie.error(n),console.error(n)}}}return t}a(rm,"postValidateChecks");pq.exports={dataObject:Kie,urlObject:Wie,fileObject:Qie,s3FileObject:jie}});var nO=T((COe,Sq)=>{"use strict";var K_=B(),nm=b();async function zie(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===nm.OPERATIONS_ENUM.INSERT||t.operation===nm.OPERATIONS_ENUM.UPDATE||t.operation===nm.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===nm.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(K_.info(i.message),i):i.http_resp_msg?(K_.error(`Error calling operation: ${e.name}`),K_.error(i.http_resp_msg),i):(K_.error(`Error calling operation: ${e.name}`),K_.error(i),i)}}a(zie,"callOperationFunctionAsAwait");Sq.exports={callOperationFunctionAsAwait:zie}});var gq=T((DOe,Tq)=>{"use strict";var sO=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}},iO=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Tq.exports={BulkLoadFileObject:sO,BulkLoadDataObject:iO}});var Aq=T((MOe,Rq)=>{"use strict";var oO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};Rq.exports=oO});var dO=T((xOe,xq)=>{"use strict";var sm=br(),om=rO(),Jie=require("needle"),Es=b(),vOe=Ze(),zc=V(),{handleHDBError:ut,hdb_errors:Dq}=ee(),{HTTP_STATUS_CODES:rr,HDB_ERROR_MSGS:qt,CHECK_LOGS_WRAPPER:La}=Dq,Jc=B(),aO=require("papaparse");zc.promisifyPapaParse();var hs=require("fs-extra"),Xie=require("path"),{chain:Oq}=require("stream-chain"),Nq=require("stream-json/streamers/StreamArray"),bq=require("stream-json/utils/Batch"),yq=require("stream-chain/utils/comp"),{finished:Iq}=require("stream"),Zie=z(),Pq=nO(),eoe=FA(),{BulkLoadFileObject:lO,BulkLoadDataObject:toe}=gq(),uO=DA(),{verifyBulkLoadAttributePerms:Mq}=Fh(),BOe=Aq(),HOe=pt(),qOe=fi(),{databases:roe}=(me(),re(Ge)),{coerceType:noe}=(dE(),re(gg)),wq="No records parsed from csv file.",Ca=`${Zie.get("HDB_ROOT")}/tmp`,{schema_regex:soe}=ws(),Cq=1024*1024*2,Lq=5e3,ioe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};xq.exports={csvDataLoad:ooe,csvURLLoad:aoe,csvFileLoad:coe,importFromS3:loe};async function ooe(e,t){let r=om.dataObject(e);if(r)throw ut(r,r.message,rr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Bq(e.schema,e.table),i=aO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:cO.bind(null,s),dynamicTyping:!1}),o=new uO;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Mq(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 ut(new Error,c,rr.BAD_REQUEST,void 0,void 0,!0);let l=new toe(e.action,e.schema,e.table,i.data);return n=await Pq.callOperationFunctionAsAwait(Hq,l,null),n.message===wq?wq:qq(n.records,n.number_written)}catch(s){throw Da(s)}}a(ooe,"csvDataLoad");async function aoe(e){let t=om.urlObject(e);if(t)throw ut(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Ca}/${r}`;try{await uoe(e,r)}catch(s){throw Jc.error(qt.DOWNLOAD_FILE_ERR(r)+" - "+s),ut(s,La(qt.DOWNLOAD_FILE_ERR(r)))}try{let s=new lO(this.job_operation_function.name,e.action,e.schema,e.table,n,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await _O(s);return await im(n),i}catch(s){throw await im(n),Da(s)}}a(aoe,"csvURLLoad");async function coe(e){let t=om.fileObject(e);if(t)throw ut(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r=new lO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Es.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await _O(r)}catch(n){throw Da(n)}}a(coe,"csvFileLoad");async function loe(e){let t=om.s3FileObject(e);if(t)throw ut(t,t.message,rr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Xie.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Ca}/${s}`;let i=new lO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user.role.permission);await _oe(s,e);let o=await _O(i);return await im(r),o}catch(n){throw await im(r),Da(n)}}a(loe,"importFromS3");async function uoe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Jie("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 ut(n,s,n.statusCode,Es.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}foe(r,e.csv_url),await doe(t,r.raw)}a(uoe,"downloadCSVFile");async function _oe(e,t){try{let r=`${Ca}/${e}`;await hs.mkdirp(Ca),await hs.writeFile(`${Ca}/${e}`,"",{flag:"a+"});let n=await hs.createWriteStream(r),s=await eoe.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(){Jc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Jc.error(qt.S3_DOWNLOAD_ERR+" - "+r),ut(r,La(qt.S3_DOWNLOAD_ERR))}}a(_oe,"downloadFileFromS3");async function doe(e,t){try{await hs.mkdirp(Ca),await hs.writeFile(`${Ca}/${e}`,t)}catch(r){throw Jc.error(qt.WRITE_TEMP_FILE_ERR),ut(r,La(qt.DEFAULT_BULK_LOAD_ERR))}}a(doe,"writeFileToTempFolder");async function im(e){if(e)try{await hs.access(e),await hs.unlink(e)}catch{Jc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(im,"deleteTempFile");function foe(e,t){if(e.statusCode!==Dq.HTTP_STATUS_CODES.OK)throw ut(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rr.BAD_REQUEST);if(!ioe[e.headers["content-type"]])throw ut(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rr.BAD_REQUEST);if(!e.raw)throw ut(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rr.BAD_REQUEST)}a(foe,"validateURLResponse");async function _O(e){try{let t;switch(e.file_type){case Es.VALID_S3_FILE_TYPES.CSV:t=await Eoe(e);break;case Es.VALID_S3_FILE_TYPES.JSON:t=await hoe(e);break;default:throw ut(new Error,qt.DEFAULT_BULK_LOAD_ERR,rr.BAD_REQUEST,Es.LOG_LEVELS.ERROR,qt.INVALID_FILE_EXT_ERR(e))}return qq(t.records,t.number_written)}catch(t){throw Da(t)}}a(_O,"fileLoad");async function Uq(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 sm.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Mq(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=ut(c);r(l)}}a(Uq,"validateChunk");async function vq(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;zc.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!zc.isEmpty(c)&&!zc.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 Pq.callOperationFunctionAsAwait(Hq,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=ut(c,La(qt.INSERT_CSV_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,qt.INSERT_CSV_ERR+" - "+c);r(l)}}a(vq,"insertChunk");async function Eoe(e){let t={records:0,number_written:0},r=Bq(e.schema,e.table);try{let n=new uO,s=hs.createReadStream(e.file_path,{highWaterMark:Cq});s.setEncoding("utf8"),await aO.parsePromise(s,Uq.bind(null,e,n),cO.bind(null,r));let i=n.getPermsResponse();if(i)throw ut(new Error,i,rr.BAD_REQUEST);return s=hs.createReadStream(e.file_path,{highWaterMark:Cq}),s.setEncoding("utf8"),await aO.parsePromise(s,vq.bind(null,e,t),cO.bind(null,r)),s.destroy(),t}catch(n){throw ut(n,La(qt.PAPA_PARSE_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,qt.PAPA_PARSE_ERR+n)}}a(Eoe,"callPapaParse");function Bq(e,t){let r=roe[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>noe(i,s));return n}a(Bq,"createTransformMap");function cO(e,t,r){let n=e.get(r);return n?n(t):zc.autoCast(t)}a(cO,"typeFunction");async function hoe(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new uO,s=Oq([hs.createReadStream(e.file_path,{encoding:"utf-8"}),Nq.withParser(),c=>c.value,new bq({batchSize:Lq}),yq(async c=>{await Uq(e,n,r,c)})]);await new Promise((c,l)=>{Iq(s,_=>{_?l(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw ut(new Error,i,rr.BAD_REQUEST);let o=Oq([hs.createReadStream(e.file_path,{encoding:"utf-8"}),Nq.withParser(),c=>c.value,new bq({batchSize:Lq}),yq(async c=>{await vq(e,t,r,c)})]);return await new Promise((c,l)=>{Iq(o,_=>{_?l(_):c()}),o.resume()}),t}catch(n){throw ut(n,La(qt.INSERT_JSON_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,qt.INSERT_JSON_ERR+n)}}a(hoe,"insertJson");async function Hq(e){let t={};try{e.data&&e.data.length>0&&moe(e.data[0])?t=await poe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Jc.info(t.message))}catch(r){throw Da(r)}return t}a(Hq,"callBulkFileLoad");function moe(e){let t=Object.keys(e);for(let r of t)if(!soe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(moe,"validateColumnNames");async function poe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=sm.insert;break;case"update":i=sm.update;break;case"upsert":i=sm.upsert;break;default:throw ut(new Error,qt.INVALID_ACTION_PARAM_ERR(n),rr.BAD_REQUEST,Es.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=zc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw Da(o)}}a(poe,"bulkFileLoad");function qq(e,t){return`successfully loaded ${t} of ${e} records`}a(qq,"buildResponseMsg");function Da(e){return ut(e,La(qt.DEFAULT_BULK_LOAD_ERR),rr.INTERNAL_SERVER_ERROR,Es.LOG_LEVELS.ERROR,qt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Da,"buildTopLevelErrMsg")});var Fq=T((FOe,Gq)=>{"use strict";var fO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Gq.exports=fO});var Vq=T(($Oe,$q)=>{"use strict";var Soe=b(),kq=require("moment"),Toe=require("uuid").v4,EO=class{static{a(this,"JobObject")}constructor(){this.id=Toe(),this.type=void 0,this.start_datetime=kq().valueOf(),this.created_datetime=kq().valueOf(),this.end_datetime=void 0,this.status=Soe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};$q.exports=EO});var hO=T((YOe,zq)=>{"use strict";var goe=require("uuid").v4,Wq=br(),Qq=Nr(),Roe=ns(),Aoe=Ec(),Ooe=Fq(),_t=b(),Noe=Vq(),boe=FE(),Vn=B(),yoe=iu(),Xc=V(),{promisify:Ioe}=require("util"),Pa=require("moment"),woe=$h(),am=rO(),Yq=vT(),{deleteTransactionLogsBeforeValidator:Coe}=yA(),{handleHDBError:Loe,hdb_errors:Doe}=ee(),{HTTP_STATUS_CODES:Poe}=Doe,Kq=Qq.searchByValue,Moe=Qq.searchByHash,Uoe=Wq.insert,voe=Ioe(woe.evaluateSQL),Boe=Wq.update;zq.exports={addJob:xoe,updateJob:Foe,handleGetJob:Hoe,handleGetJobsByStartDate:qoe,getJobById:jq};async function Hoe(e){try{let t=await jq(e.id);return Xc.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 Vn.error("There was an error getting job",t),new Error(r)}}a(Hoe,"handleGetJob");async function qoe(e){try{let t=await Goe(e);if(Vn.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=Pa(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Pa(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 Vn.error(r),new Error(r)}}a(qoe,"handleGetJobsByStartDate");async function xoe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Xc.isEmptyOrZeroLength(e.operation)){let u="job parameter is invalid";return Vn.info(u),t.error=u,t}if(!_t.JOB_TYPE_ENUM[e.operation])return Vn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case _t.OPERATIONS_ENUM.CSV_FILE_LOAD:n=am.fileObject(e);break;case _t.OPERATIONS_ENUM.CSV_URL_LOAD:n=am.urlObject(e);break;case _t.OPERATIONS_ENUM.CSV_DATA_LOAD:n=am.dataObject(e);break;case _t.OPERATIONS_ENUM.IMPORT_FROM_S3:n=am.s3FileObject(e);break;case _t.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case _t.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Yq(e,"date");break;case _t.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Yq(e,"timestamp");break;case _t.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Coe(e);break;default:break}if(n)throw Loe(n,n.message,Poe.BAD_REQUEST,void 0,void 0,!0);let s=new Noe;s.type=e.operation===_t.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?_t.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user.username;let i=new Roe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await Kq(i))}catch(u){let d=`There was an error inserting a new job: ${u}`;return Vn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=goe();try{o=await Kq(i)}catch(u){let d=`There was an error inserting a new job: ${u}`;return Vn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Vn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new yoe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await Uoe(l)}catch(u){return Vn.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,Vn.trace(u)}return t}a(xoe,"addJob");async function Goe(e){let t=Pa(e.from_date,Pa.ISO_8601),r=Pa(e.to_date,Pa.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 Ooe(n,e.hdb_user);try{return await voe(s)}catch(i){throw Vn.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(Goe,"getJobsInDateRange");async function jq(e){if(Xc.isEmptyOrZeroLength(e))return Xc.errorizeMessage("Invalid job ID specified.");let t=new Aoe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Moe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Vn.error(n),Xc.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(jq,"getJobById");async function Foe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Xc.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===_t.JOB_STATUS_ENUM.COMPLETE||e.status===_t.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Pa().valueOf());let t=new boe(_t.SYSTEM_SCHEMA_NAME,_t.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Boe(t),r}a(Foe,"updateJob")});var rx=T((WOe,tx)=>{"use strict";var Jq=V(),Gr=b(),koe=require("moment"),cm=dO(),lm=B(),Xq=hO(),Zq=Vh(),ex=ea(),$oe=nt(),Voe=Hh(),mO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Yoe(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(Jq.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Jq.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Gr.JOB_TYPE_ENUM.csv_file_load:await yi(e,cm.csvFileLoad);break;case Gr.JOB_TYPE_ENUM.csv_url_load:await yi(e,cm.csvURLLoad);break;case Gr.JOB_TYPE_ENUM.csv_data_load:await yi(e,cm.csvDataLoad);break;case Gr.JOB_TYPE_ENUM.import_from_s3:await yi(e,cm.importFromS3);break;case Gr.JOB_TYPE_ENUM.empty_trash:break;case Gr.JOB_TYPE_ENUM.export_local:await yi(e,Zq.export_local);break;case Gr.JOB_TYPE_ENUM.export_to_s3:await yi(e,Zq.export_to_s3);break;case Gr.JOB_TYPE_ENUM.delete_files_before:case Gr.JOB_TYPE_ENUM.delete_records_before:await yi(e,ex.deleteFilesBefore);break;case Gr.JOB_TYPE_ENUM.delete_audit_logs_before:await yi(e,ex.deleteAuditLogsBefore);break;case Gr.JOB_TYPE_ENUM.delete_transaction_logs_before:await yi(e,Voe.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Yoe,"parseMessage");async function yi(e,t){try{e.job.status=Gr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=koe().valueOf(),await Xq.updateJob(e.job),await Koe(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):lm.error(`There was an error running ${t.name} job with id ${e.job.id}`),lm.error(n),e.job.message=n,e.job.status=Gr.JOB_STATUS_ENUM.ERROR;try{await Xq.updateJob(e.job)}catch(s){throw lm.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(yi,"runJob");async function Koe(e){lm.trace("launching job thread:",e),$oe.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Gr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Koe,"launchJobThread");tx.exports={parseMessage:Yoe,RunnerMessage:mO}});var sx=T((jOe,nx)=>{"use strict";var pO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};nx.exports=pO});var Rx=T((JOe,OO)=>{"use strict";var fm=Nr(),gO=$h(),um=dO(),Ii=UE(),_m=Ji(),Q_=ea(),Woe=eR(),W_=Ir(),dm=qE(),nr=Mh(),xt=B(),Qoe=_R(),joe=d_(),ix=KR(),zoe=XE(),Joe=eh(),Xoe=WR(),Zoe=nh(),eae=ih(),SO=ah(),ox=Vh(),tae=Fh(),RO=hO(),v=b(),{hdb_errors:z_,handleHDBError:j_}=ee(),{HTTP_STATUS_CODES:ax}=z_,TO=lh(),cx=Ra(),px=require("util"),Zc=br(),rae=Pn(),nae=mi(),lx=rx(),ux=c_(),_x=(bh(),re(w_)),dx=mt(),fx=Hh(),Ex=Lh(),{setServerUtilities:sae}=(dE(),re(gg)),{CONTEXT:iae}=(Zn(),re(kp)),{_assignPackageExport:oae}=require("../index"),{transformReq:aae}=V(),{server:cae}=(jr(),re(Ho)),lae=nO(),hx=fm.searchByHash,uae=fm.searchByValue,_ae=px.promisify(fm.search),dae=px.promisify(gO.evaluateSQL),fae={[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=sx();async function Sx(e,t){try{if(e.body.operation!=="read_log"&&(xt.log_level===v.LOG_LEVELS.INFO||xt.log_level===v.LOG_LEVELS.DEBUG||xt.log_level===v.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;xt.info(o)}}catch(n){xt.error(n)}let r=await lae.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return fae[e.body.operation]&&rae.setSchemaDataToGlobal(n=>{n&&xt.error(n)}),r}a(Sx,"processLocalTransaction");var mx=hae();OO.exports={chooseOperation:Tx,getOperationFunction:gx,operation:AO,processLocalTransaction:Sx};sae(OO.exports);cae.operation=AO;function Tx(e){let t;try{t=gx(e)}catch(s){throw xt.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=gO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=gO.checkASTPermissions(e,i);if(o)throw xt.error(`${ax.FORBIDDEN} from operation ${e.operation}`),xt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),j_(new Error,o,z_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==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=tae.verifyPerms(i,s);if(o)throw xt.error(`${ax.FORBIDDEN} from operation ${e.operation}`),xt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),j_(new Error,o,z_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw j_(s,"There was an error when trying to choose an operation path")}return r}a(Tx,"chooseOperation");function gx(e){if(xt.trace(`getOperationFunction with operation: ${e.operation}`),mx.has(e.operation))return mx.get(e.operation);throw j_(new Error,z_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),z_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(gx,"getOperationFunction");oae("operation",AO);function AO(e,t){e.hdb_user=this[iae]?.user,e.bypass_auth=!t;let r=Tx(e);return Sx({body:e},r)}a(AO,"operation");async function Eae(e){xt.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 Zc.insert(i);break;case v.OPERATIONS_ENUM.UPDATE:o=await Zc.update(i);break;case v.OPERATIONS_ENUM.UPSERT:o=await Zc.upsert(i);break;case v.OPERATIONS_ENUM.DELETE:o=await Q_.deleteRecord(i);break;default:xt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){xt.info("Invalid operation in transaction"),xt.error(o)}}a(Eae,"catchup");async function Vs(e){aae(e);let t,r;try{r=await RO.addJob(e),t=r.createdJob,xt.info("addJob result",r);let n=new lx.RunnerMessage(t,e);return await lx.parseMessage(n),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw xt.error(s),j_(n,s)}}a(Vs,"executeJob");function hae(){let e=new Map;return e.set(v.OPERATIONS_ENUM.INSERT,new k(Zc.insert)),e.set(v.OPERATIONS_ENUM.UPDATE,new k(Zc.update)),e.set(v.OPERATIONS_ENUM.UPSERT,new k(Zc.upsert)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new k(fm.searchByConditions)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_HASH,new k(hx)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_ID,new k(hx)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_VALUE,new k(uae)),e.set(v.OPERATIONS_ENUM.SEARCH,new k(_ae)),e.set(v.OPERATIONS_ENUM.SQL,new k(dae)),e.set(v.OPERATIONS_ENUM.CSV_DATA_LOAD,new k(Vs,um.csvDataLoad)),e.set(v.OPERATIONS_ENUM.CSV_FILE_LOAD,new k(Vs,um.csvFileLoad)),e.set(v.OPERATIONS_ENUM.CSV_URL_LOAD,new k(Vs,um.csvURLLoad)),e.set(v.OPERATIONS_ENUM.IMPORT_FROM_S3,new k(Vs,um.importFromS3)),e.set(v.OPERATIONS_ENUM.CREATE_SCHEMA,new k(Ii.createSchema)),e.set(v.OPERATIONS_ENUM.CREATE_DATABASE,new k(Ii.createSchema)),e.set(v.OPERATIONS_ENUM.CREATE_TABLE,new k(Ii.createTable)),e.set(v.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new k(Ii.createAttribute)),e.set(v.OPERATIONS_ENUM.DROP_SCHEMA,new k(Ii.dropSchema)),e.set(v.OPERATIONS_ENUM.DROP_DATABASE,new k(Ii.dropSchema)),e.set(v.OPERATIONS_ENUM.DROP_TABLE,new k(Ii.dropTable)),e.set(v.OPERATIONS_ENUM.DROP_ATTRIBUTE,new k(Ii.dropAttribute)),e.set(v.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new k(_m.describeSchema)),e.set(v.OPERATIONS_ENUM.DESCRIBE_DATABASE,new k(_m.describeSchema)),e.set(v.OPERATIONS_ENUM.DESCRIBE_TABLE,new k(_m.describeTable)),e.set(v.OPERATIONS_ENUM.DESCRIBE_ALL,new k(_m.describeAll)),e.set(v.OPERATIONS_ENUM.DELETE,new k(Q_.deleteRecord)),e.set(v.OPERATIONS_ENUM.ADD_USER,new k(W_.addUser)),e.set(v.OPERATIONS_ENUM.ALTER_USER,new k(W_.alterUser)),e.set(v.OPERATIONS_ENUM.DROP_USER,new k(W_.dropUser)),e.set(v.OPERATIONS_ENUM.LIST_USERS,new k(W_.listUsersExternal)),e.set(v.OPERATIONS_ENUM.LIST_ROLES,new k(dm.listRoles)),e.set(v.OPERATIONS_ENUM.ADD_ROLE,new k(dm.addRole)),e.set(v.OPERATIONS_ENUM.ALTER_ROLE,new k(dm.alterRole)),e.set(v.OPERATIONS_ENUM.DROP_ROLE,new k(dm.dropRole)),e.set(v.OPERATIONS_ENUM.USER_INFO,new k(W_.userInfo)),e.set(v.OPERATIONS_ENUM.READ_LOG,new k(Qoe)),e.set(v.OPERATIONS_ENUM.ADD_NODE,new k(joe)),e.set(v.OPERATIONS_ENUM.UPDATE_NODE,new k(ix)),e.set(v.OPERATIONS_ENUM.SET_NODE_REPLICATION,new k(ix)),e.set(v.OPERATIONS_ENUM.REMOVE_NODE,new k(zoe)),e.set(v.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new k(Joe)),e.set(v.OPERATIONS_ENUM.PURGE_STREAM,new k(Xoe)),e.set(v.OPERATIONS_ENUM.SET_CONFIGURATION,new k(dx.setConfiguration)),e.set(v.OPERATIONS_ENUM.CLUSTER_STATUS,new k(Zoe.clusterStatus)),e.set(v.OPERATIONS_ENUM.CLUSTER_NETWORK,new k(eae)),e.set(v.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new k(SO.setRoutes)),e.set(v.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new k(SO.getRoutes)),e.set(v.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new k(SO.deleteRoutes)),e.set(v.OPERATIONS_ENUM.EXPORT_TO_S3,new k(Vs,ox.export_to_s3)),e.set(v.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new k(Vs,Q_.deleteFilesBefore)),e.set(v.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new k(Vs,Q_.deleteFilesBefore)),e.set(v.OPERATIONS_ENUM.EXPORT_LOCAL,new k(Vs,ox.export_local)),e.set(v.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new k(RO.handleGetJobsByStartDate)),e.set(v.OPERATIONS_ENUM.GET_JOB,new k(RO.handleGetJob)),e.set(v.OPERATIONS_ENUM.GET_FINGERPRINT,new k(TO.getFingerprint)),e.set(v.OPERATIONS_ENUM.SET_LICENSE,new k(TO.setLicense)),e.set(v.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new k(TO.getRegistrationInfo)),e.set(v.OPERATIONS_ENUM.RESTART,new k(cx.restart)),e.set(v.OPERATIONS_ENUM.RESTART_SERVICE,new k(cx.restartService)),e.set(v.OPERATIONS_ENUM.CATCHUP,new k(Eae)),e.set(v.OPERATIONS_ENUM.SYSTEM_INFORMATION,new k(nae.systemInformation)),e.set(v.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new k(Vs,Q_.deleteAuditLogsBefore)),e.set(v.OPERATIONS_ENUM.READ_AUDIT_LOG,new k(Woe)),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(_x.login)),e.set(v.OPERATIONS_ENUM.LOGOUT,new k(_x.logout)),e.set(v.OPERATIONS_ENUM.GET_CONFIGURATION,new k(dx.getConfiguration)),e.set(v.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new k(nr.customFunctionsStatus)),e.set(v.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new k(nr.getCustomFunctions)),e.set(v.OPERATIONS_ENUM.GET_COMPONENT_FILE,new k(nr.getComponentFile)),e.set(v.OPERATIONS_ENUM.GET_COMPONENTS,new k(nr.getComponents)),e.set(v.OPERATIONS_ENUM.SET_COMPONENT_FILE,new k(nr.setComponentFile)),e.set(v.OPERATIONS_ENUM.DROP_COMPONENT,new k(nr.dropComponent)),e.set(v.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new k(nr.getCustomFunction)),e.set(v.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new k(nr.setCustomFunction)),e.set(v.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new k(nr.dropCustomFunction)),e.set(v.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new k(nr.addComponent)),e.set(v.OPERATIONS_ENUM.ADD_COMPONENT,new k(nr.addComponent)),e.set(v.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new k(nr.dropCustomFunctionProject)),e.set(v.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new k(nr.packageComponent)),e.set(v.OPERATIONS_ENUM.PACKAGE_COMPONENT,new k(nr.packageComponent)),e.set(v.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new k(nr.deployComponent)),e.set(v.OPERATIONS_ENUM.DEPLOY_COMPONENT,new k(nr.deployComponent)),e.set(v.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new k(fx.readTransactionLog)),e.set(v.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new k(Vs,fx.deleteTransactionLogsBefore)),e.set(v.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new k(Ex.installModules)),e.set(v.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new k(Ex.auditModules)),e.set(v.OPERATIONS_ENUM.GET_BACKUP,new k(Ii.getBackup)),e}a(hae,"initializeOperationFunctionMap")});var hm=T((ZOe,Nx)=>{"use strict";var NO=b(),mae=V(),J_=B(),{handleHDBError:bO,hdb_errors:Em}=ee(),{isMainThread:pae}=require("worker_threads"),{Readable:Sae}=require("stream"),Ax=require("os"),Tae=require("util"),gae=RR(),Rae=Tae.promisify(gae.authorize),Ox=Rx(),{createGzip:Aae,constants:Oae}=require("zlib");function Nae(e){let t=`Found an uncaught exception with message: ${e.message}. ${Ax.EOL}Stack: ${e.stack} ${Ax.EOL}Terminating ${pae?"HDB":"thread"}.`;console.error(t),J_.fatal(t),process.exit(1)}a(Nae,"handleServerUncaughtException");function bae(e,t,r){if(J_[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:Em.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(bae,"serverErrorHandler");function yae(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=bO(new Error,"Invalid JSON.",Em.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(mae.isEmpty(e.body.operation)){let n=bO(new Error,"Request body must include an 'operation' property.",Em.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(yae,"reqBodyValidationHandler");function Iae(e,t,r){let n;e.body.operation!==NO.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==NO.OPERATIONS_ENUM.LOGIN&&e.body.operation!==NO.OPERATIONS_ENUM.LOGOUT?Rae(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{J_.warn(s),J_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(bO(s,i,Em.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(Iae,"authHandler");async function wae(e,t,r=!1){let n;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),n=Ox.chooseOperation(e.body);let s=await Ox.processLocalTransaction(e,n);if(s instanceof Sae&&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(Aae({level:Oae.Z_BEST_SPEED})))}return s}catch(s){throw J_.error(s),s}}a(wae,"handlePostRequest");Nx.exports={authHandler:Iae,handlePostRequest:wae,handleServerUncaughtException:Nae,serverErrorHandler:bae,reqBodyValidationHandler:yae}});var wx=T((tNe,Ix)=>{"use strict";var Cae=require("fastify-plugin"),{handlePostRequest:bx,authHandler:Lae,reqBodyValidationHandler:Dae}=hm();async function Pae(e){e.decorate("hdbCore",{preValidation:[Dae,Lae],request:t=>yx(bx(t,response)),requestWithoutAuthentication:(t,r)=>yx(bx(t,r,!0))})}a(Pae,"hdbCore");async function yx(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(yx,"convertAsyncIterators");Ix.exports=Cae(Pae)});var Dx=T((sNe,Lx)=>{"use strict";var nNe=require("fs"),yO=z();yO.initSync();var{CONFIG_PARAMS:Cx}=b(),Mae=1024*1024*1024;function Uae(e){let t=yO.get(Cx.HTTP_TIMEOUT),r=yO.get(Cx.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Mae,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Uae,"getServerOptions");Lx.exports=Uae});var Ux=T((oNe,Mx)=>{"use strict";var IO=z();IO.initSync();var{CONFIG_PARAMS:Px}=b();function vae(){let e=IO.get(Px.HTTP_CORSACCESSLIST),t=IO.get(Px.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(vae,"getCORSOptions");Mx.exports=vae});var Hx=T((cNe,Bx)=>{"use strict";var vx=z();vx.initSync();var Bae=b();function Hae(){return vx.get(Bae.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Hae,"getHeaderTimeoutConfig");Bx.exports=Hae});var wO={};je(wO,{customFunctionsServer:()=>Gae,ready:()=>$ae,start:()=>xae});function xae(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){wi||(wi=Xx(t),Mt.http((await wi).server));let o=await wi,c=(0,xx.dirname)(s),l=n.replace(/\/routes\/.*/g,"");if(l.startsWith("/")&&(l=l.slice(1)),!qx.has(c)){qx.add(c);try{o.register(kae(c,l))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}}}}async function Gae(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await Fae();let e=Yx.get(Kx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=wi=await Xx(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function Fae(){try{Ye.info("Custom Functions starting configuration."),await Wx.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function kae(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,Gx.existsSync)(e)&&r.register(Vx.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Xx(e){Ye.info("Custom Functions starting buildServer.");let t=(0,Qx.default)(e),r=(0,Fx.default)(t);r.server.headersTimeout=(0,zx.default)(),r.setErrorHandler(Jx.serverErrorHandler);let n=(0,jx.default)();return n&&r.register(kx.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register($x.default),await r.register(qae),await r.after(),jA(r),Ye.info("Custom Functions completed buildServer."),r}function $ae(){if(wi)return wi.then?wi.then(e=>e.ready()):wi.ready()}var xx,Gx,Fx,kx,$x,Vx,Yx,Kx,Ye,qae,Wx,Qx,jx,zx,Jx,wi,qx,Zx=Ae(()=>{xx=require("path"),Gx=require("fs"),Fx=U(require("fastify")),kx=U(require("@fastify/cors")),$x=U(XA()),Vx=U(require("@fastify/autoload")),Yx=U(z()),Kx=U(b()),Ye=U(B()),qae=U(wx()),Wx=U(Ir()),Qx=U(Dx()),jx=U(Ux()),zx=U(Hx()),Jx=U(hm());kc();jr();qx=new Set;a(xae,"start");a(Gae,"customFunctionsServer");a(Fae,"setUp");a(kae,"buildRouteFolder");a(Xx,"buildServer");a($ae,"ready")});var CO={};je(CO,{start:()=>Vae});function Vae(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,sG.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){tG||(tG=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=eG.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,rG.default)(s,(0,nG.realpathSync)(o))}}return i(s)},{runFirst:!0})),eG.set(r,n)}}}var rG,nG,sG,eG,tG,iG=Ae(()=>{rG=U(require("send")),nG=require("fs"),sG=U(require("serve-static")),eG=new Map;a(Vae,"start")});var MO={};je(MO,{Request:()=>LO,createReuseportFd:()=>mm});var oG,LO,DO,PO,mm,pm=Ae(()=>{oG=require("os"),LO=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 PO(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get body(){return this.#e||(this.#e=new DO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},DO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},PO=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,oG.platform)()!="win32"&&(mm=require("node-unix-socket").createReuseportFd)});var uG=T((gNe,lG)=>{"use strict";var Yae=require("cluster"),Ma=z();Ma.initSync();var cG=b(),hNe=require("util"),Ci=B(),mNe=require("fs"),Kae=require("fastify"),pNe=vo(),Wae=require("@fastify/cors"),Qae=require("@fastify/compress"),jae=require("@fastify/static"),zae=XA(),Jae=require("path"),{PACKAGE_ROOT:Xae}=b(),Zae=Pn(),ece=V(),tce=Ir(),rce=sa(),{server:nce}=(jr(),re(Ho)),{node_request_key:SNe}=(pm(),re(MO)),{authHandler:sce,handlePostRequest:ice,serverErrorHandler:oce,reqBodyValidationHandler:ace}=hm(),TNe=require("net"),{registerContentHandlers:cce}=(kc(),re(cq)),lce=6e4,uce=1024*1024*1024,_ce="TRUE",{CONFIG_PARAMS:X_}=cG,el;lG.exports={hdbServer:aG,start:aG};async function aG(e){try{Ci.info("In Fastify server"+process.cwd()),Ci.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ci.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Yae.isMaster,await dce();let t=e.securePort>0;el=fce(t),await el.ready(),e||(e={}),e.isOperationsServer=!0;try{nce.http(el.server,e),el.server.closeIdleConnections||await el.listen({port:0,host:"::"})}catch(r){throw el.close(),Ci.error(r),Ci.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ci.fatal(t),process.exit(1)}}a(aG,"operationsServer");async function dce(){Ci.trace("Configuring HarperDB process."),Zae.setSchemaDataToGlobal(),await tce.setUsersToGlobal(),await rce.getLicense()}a(dce,"setUp");function fce(e){Ci.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Ece(e),r=Kae(t);r.server.headersTimeout=mce(),r.setErrorHandler(oce);let n=hce();n&&r.register(Wae,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,_){r.server.emit("unhandled",l.raw,_.raw)}),c()}),r.register(zae),r.register(Qae),r.register(jae,{root:Jae.join(Xae,"studio/build-local")}),cce(r);let s=Ma.get(cG.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!ece.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[ace,sce],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ice(i,o)}),r.get("/health",()=>"HarperDB is running."),Ci.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(fce,"buildServer");function Ece(e){let t=Ma.get(X_.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ma.get(X_.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:uce,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Ece,"getServerOptions");function hce(){let e=Ma.get(X_.OPERATIONSAPI_NETWORK_CORS),t=Ma.get(X_.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===_ce)&&(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(hce,"getCORSOpts");function mce(){return Ma.get(X_.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??lce}a(mce,"getHeaderTimeoutConfig")});var gG=T((bNe,TG)=>{"use strict";var{decode:pce}=require("msgpackr"),{isMainThread:ANe,parentPort:Sce,threadId:ONe}=require("worker_threads"),vO=pt(),Li=Ze(),Tce=b(),To=B(),_G=z(),fG=b();nt();var gce=fi(),{recordAction:Rce,recordActionBinary:Ace}=(Ei(),re(vu)),{publishToStream:Oce}=vO,{ConsumerEvents:Nce}=require("nats"),NNe={durable:Li.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Li.WORK_QUEUE_CONSUMER_NAMES.deliver_group},bce,yce,Ice,EG,hG;TG.exports={initialize:BO,workQueueListener:SG,setSubscription:wce,setIgnoreOrigin:Lce,getDatabaseSubscriptions:Cce};async function BO(){hG=!0,To.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await vO.getNATSReferences();bce=e,yce=e.info.server_name,Ice=t,EG=r}a(BO,"initialize");var Tm=new Map;function wce(e,t,r){let n=Tm.get(e);n||Tm.set(e,n=new Map),n.set(t,r),hG||BO().then(SG)}a(wce,"setSubscription");function Cce(){return Tm}a(Cce,"getDatabaseSubscriptions");var mG;function Lce(e){mG=e}a(Lce,"setIgnoreOrigin");var pG=100,dG=new Array(pG),Sm=0;async function SG(){let e=await EG.consumers.get(Li.WORK_QUEUE_CONSUMER_NAMES.stream_name,Li.WORK_QUEUE_CONSUMER_NAMES.durable_name),t=!1,r;for(Sce?.on("message",async n=>{let{type:s}=n;s===fG.ITC_EVENT_TYPES.SHUTDOWN&&(t=!0,r&&r.close?.()&&r.close())});!t;){r=await e.consume(),(async()=>{for await(let n of await r.status())if(n.type===Nce.HeartbeatsMissed){let s=n.data;To.trace(`${s} clustering ingest consumer heartbeats missed`),s===2&&(To.warn("Restarting clustering ingest consumer due to missed heartbeat threshold being met"),r.stop())}})();try{for await(let n of r)await dG[Sm],dG[Sm]=Dce(n).catch(s=>{To.error(s)}),++Sm>=pG&&(Sm=0)}catch(n){To.error("Error consuming clustering ingest, restarting consumer",n)}vO.clearClientCache(),await BO()}}a(SG,"workQueueListener");async function Dce(e){let t=pce(e.data);Rce(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,n=!1,s=_G.get(Tce.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Li.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Li.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Li.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!mG),Ace(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Li.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:_,records:u,hash_values:d,__origin:f,expiresAt:E}=t;To.trace("processing message:",o,c,_,(u?"records: "+u.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),To.trace(`messageProcessor nats msg id: ${e.headers.get(Li.MSG_HEADERS.NATS_MSG_ID)}`);let h;u||(u=d);let{timestamp:p,user:S,node_name:A}=f||{},g=Tm.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(u.length===1&&!l)g.send({type:UO(o),value:u[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=u.map((M,G)=>({type:UO(o),value:M,expiresAt:E,id:d?.[G],table:_}));for(;l;)N.push({type:UO(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;g.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}_G.get(fG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Oce(e.subject.split(".").slice(0,-1).join("."),gce.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){To.error(o)}e.ack()}a(Dce,"messageProcessor");function UO(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(UO,"convertOperation")});var kO={};je(kO,{disableNATS:()=>Mce,publishToStream:()=>Nm,setNATSReplicator:()=>HO,setPublishToStream:()=>Uce,setSubscription:()=>FO,start:()=>Pce});function Pce(){Rm.default.get(Am.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Bce()}function Mce(e=!0){bG=e}function Uce(e,t){Nm=e,FO=t}function Bce(){if(bG||process.env._DISABLE_NATS)return;let e=is(),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];HO(s,r,i)}}bg((r,n)=>{HO(r.tableName,r.databaseName,r),n&&IG(r)}),!RG&&(RG=!0)}function HO(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends jt{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Pe],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Pe]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Pe],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Pe]})}static defineSchema(i){IG(i)}static subscribe(){let i=new Xn;return FO(t,e,i),i}static subscribeOnThisThread(i){return i<vce}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 gm(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=yG;return i}a(n,"getNATSTransaction")}function IG(e){let t=Rm.default.get(Am.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Nm(`${xO.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,GO.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 AG,xO,GO,OG,NG,Rm,Am,Om,bG,Nm,FO,vce,yG,RG,gm,qO,wG=Ae(()=>{me();Zn();AG=U(pt()),xO=U(Ze()),GO=U(fi());ql();OG=U(gG()),NG=U(Sr()),Rm=U(z()),Am=U(b()),Om=U(B());a(Pce,"start");a(Mce,"disableNATS");Nm=AG.publishToStream,FO=OG.setSubscription;a(Uce,"setPublishToStream");vce=2;a(Bce,"assignReplicationSource");a(HO,"setNATSReplicator");a(IG,"publishSchema");gm=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=Rm.default.get(Am.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,_;for(let u of i){let d=u.table,f=u.operation=="put"?"upsert":u.operation;l||(Om.trace(`Sending transaction event ${f}`),_=l={operation:f,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,f!=="delete"&&f!=="invalidate"&&(l.records=o)),l.table===d&&l.operation===f?(o.push(u.record),c.push(u.id)):_=_.next={operation:f,table:d,id:u.id,record:u.record},u.expiresAt&&(_.expiresAt=u.expiresAt)}l&&n.push(Nm(`${xO.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,GO.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(u=>{throw Om.error("An error has occurred trying to replicate transaction",l,u),u.statusCode=504,u}))}return Promise.all(n)}},qO=class extends gm{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,NG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};yG=new qO});async function DG({clientId:e,user:t,clean:r,will:n}){let s;if(e&&!r){let i=await $O.getResource(e,{});s=new KO(e,t,i),i&&(s.sessionWasPresent=!0)}else{if(e){let i=await $O.get(e);i&&i.delete()}s=new ym(e,t)}return n&&(n.id=e,n.user={username:t?.username},Z_.put(n)),s}function VO(){return bm++,bm>65500&&(bm=1),bm}function YO(e,t,r=e){let{topic:n,retain:s}=e;e.data=t,e.async=!0,e.authorize=!0;let i=Ki.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Xe(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var CG,Ua,LG,$O,Z_,bm,ym,KO,PG=Ae(()=>{me();Vl();CG=U(Sr()),Ua=U(B());Go();LG=U(nt()),$O=ht({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"}]}}]}),Z_=ht({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,LG.getWorkerIndex)()===0&&(async()=>{for await(let e of Z_.search({})){let t=e.data,r=Object.assign({},e);Xe(r,()=>{YO(r,t),Z_.delete(e.id,r)})}})();a(DG,"getSession");bm=1;a(VO,"getNextMessageId");ym=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,_;if(c>-1?(l=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let u=this.subscriptions.find(A=>A.topic===s),d;u?(d=i>0,u.end(),this.subscriptions.splice(this.subscriptions.indexOf(u),1)):d=i===2;let f={search:l,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Ua.trace)("Resuming subscription from",s,"from",o);let E=Ki.getMatch(_);if(!E){let A=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw A.statusCode=404,A}if(f.url=E.relativeURL,f.url.indexOf("+")>-1||f.url.indexOf("#")>-1){let A=f.url.slice(1);if(A.indexOf("#")>-1&&A.indexOf("#")!==A.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(f.isCollection=!0,A.indexOf("+")===A.length-1)f.onlyChildren=!0,f.url="/"+A.slice(0,A.length-1);else{let g=A.split("/"),N;for(let x=0;x<g.length;x++)if(g[x].indexOf("+")>-1)if(g[x]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let M=!0;g[g.length-1]==="#"&&(g.length--,M=!1),N&&(n=a(x=>{let D=x.id;if(!Array.isArray(D)||M&&D.length!==g.length)return!1;for(let K=0;K<g.length;K++)if(g[K]!=="+"&&g[K]!==D[K])return!1;return!0},"filter"));let G=g.indexOf("+");f.url="/"+(G>-1?g.slice(0,G):g).concat("").join("/")}}let h=E.path,p=E.Resource,S=await Xe(f,async()=>{let A=await p.subscribe(f);if(!A)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!A[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);return(async()=>{for await(let g of A)try{let N;if(g.type&&g.type!=="put"&&g.type!=="delete"&&g.type!=="message"||n&&!n(g))continue;r?(g.topic=s,N=this.needsAcknowledge(g)):(g.acknowledge?.(),N=VO());let M=g.id;Array.isArray(M)&&(M=ec(M)),M==null&&(M=""),this.listener(h+"/"+M,g.value,N,t)}catch(N){(0,Ua.warn)(N)}})(),A});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=VO();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),!0}async publish(t,r){return t.user=this.user,YO(t,r)}setListener(t){this.listener=t}disconnect(t){let r={};Xe(r,async()=>{if(!t){let n=await Z_.get(this.sessionId,r);n.doesExist()&&await YO(n,n.data,r)}await Z_.delete(this.sessionId,r)}).catch(n=>{(0,Ua.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}};a(YO,"publish");KO=class extends ym{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=VO(),n={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ua.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,CG.getNextMonotonicTime)()),(0,Ua.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),$O.put(this.sessionRecord)),t.qos}}});var WO={};je(WO,{start:()=>qce});function qce({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){let o=e.mqtt={requireAuthentication:i},c,l=r?.mtls;return n&&(c=e.ws((_,u,d)=>{if(_.protocol==="mqtt"){let{onMessage:f,onClose:E}=vG(_,(h,p)=>{if(_.send(h),p&&_._socket.writableNeedDrain)return new Promise(S=>this._socket.once("drain",S))},u,Promise.resolve(d).then(()=>u?.user),o);_.on("message",f),_.on("close",E),_.on("error",h=>{(0,Fr.info)("WebSocket error",h)})}},{subProtocol:"mqtt"})),(t||s)&&(c=e.socket(async _=>{let u;if(l)if(_.authorized)try{let E=l.user;u!==null&&((E===void 0||E==="Common Name"||E==="CN")&&(E=_.getPeerCertificate().subject.CN),u=await e.getUser(E,null,null))}catch(E){(0,Fr.error)(E)}else return(0,Fr.info)(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end();!u&&Hce&&_.remoteAddress.includes("127.0.0.1")&&(u=await(0,BG.getSuperUser)());let{onMessage:d,onClose:f}=vG(_,E=>_.write(E),null,u,o);_.on("data",d),_.on("close",f),_.on("error",E=>{(0,Fr.info)("Socket error",E)})},{port:t,securePort:s,mtls:l})),c}function vG(e,t,r,n,s){UG||(UG=!0,Uu(d=>{Im>0&&d.push({metric:"mqtt-connections",connections:Im,byThread:!0})}));let i;Im++;let o,c={protocolVersion:4},l=(0,Cm.parser)({protocolVersion:5});function _(d){l.parse(d)}a(_,"onMessage");function u(){Im--,i||(i=!0,o?.disconnect(),Un(!1,"connection","mqtt","disconnect"))}return a(u,"onClose"),l.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await Mt.getUser(d.username,d.password.toString(),r),(0,wm.get)(Ys.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&MG.notify({username:n.username,status:Ys.AUTH_AUDIT_STATUS.SUCCESS,type:Ys.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,wm.get)(Ys.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&MG.error({username:n.username,status:Ys.AUTH_AUDIT_STATUS.FAILURE,type:Ys.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let N=e.deserialize||(e.deserialize=Ia(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?N(d.will.payload):void 0,delete d.will.payload}o=DG({user:n,...d}),o=await o}catch(N){return(0,Fr.error)(N),Un(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}Un(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,M,G,x)=>{try{let D=N.indexOf("/",1),K=D>0?N.slice(0,D):N;f({cmd:"publish",topic:N,payload:E(M),messageId:G||Math.floor(Math.random()*1e8),qos:x.qos},K)}catch(D){(0,Fr.error)(D),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let M;try{M=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(G){(0,Fr.error)(G),M=c.protocolVersion<5?128:G.statusCode===403?135:G.statusCode===404?143:128}h.push(M)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":{let N=[];for(let M of d.unsubscriptions)N.push(o.removeSubscription(M)?0:17);f({cmd:"unsuback",granted:N,messageId:d.messageId});break}case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ia(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,A)}catch(N){(0,Fr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),Un(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Fr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Cm.generate)(h,c);t(S),an(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return mo(h,r)}a(E,"serialize")}),{onMessage:_,onClose:u}}var Cm,BG,wm,Ys,Fr,MG,Hce,UG,Im,HG=Ae(()=>{Cm=require("mqtt-packet");PG();BG=U(Ir());kc();Ei();jr();wm=U(z()),Ys=U(b()),Fr=U(B()),MG=(0,Fr.loggerWithTag)("auth-event"),Hce=(0,wm.get)(Ys.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(qce,"start");Im=0;a(vG,"onSocket")});var Uh={};je(Uh,{component_errors:()=>rl,loadComponent:()=>Lm,loadComponentDirectories:()=>KG,setErrorReporter:()=>kce});function KG(e,t){t&&(jO=t),e&&(zO=e);let r=[];if((0,ms.existsSync)(QO)){let s=(0,ms.readdirSync)(QO,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ct.join)(QO,o);r.push(Lm(c,jO,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(Lm(n,jO,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{YG=!0})}function kce(e){td=e}async function Lm(e,t,r,n,s,i){if(!xG.has(e)){xG.set(e,!0),s&&(zO=s);try{let o;n&&(rl=new Map);let c=(0,Ct.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,ms.existsSync)(c)?o=n?(0,VG.getConfigObj)():(0,GG.parseDocument)((0,ms.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=JO;let l=[],_=n;for(let u in o){let d=o[u];if(rl.set(n?u:(0,Ct.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,N;for(;!(0,ms.existsSync)(N=(0,Ct.join)(g,"node_modules",u));)if(g=(0,Ct.dirname)(g),g.length<(0,$G.getHdbBasePath)().length){N=null;break}if(N)f=await Lm(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${u}:${E}`)}else f=Fce[u];if(!f)continue;l.push(f);let h=a(g=>(g.origin=r,ht(g)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(tl.isMainThread&&(f=await f.startOnMainThread?.({server:Mt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,n&&p))for(let g of[A,S])try{if(+g&&!qG.includes(g)){let N=XO.get(ZO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&ed.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!mm)&&(qG.push(g),eN(g,N))}}catch(N){console.error("Error listening on socket",g,N,u)}if(t.isWorker&&(f=await f.start?.({server:Mt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),zO.set(f,!0),(f.handleFile||f.handleDirectory)&&d.files){if(d.files.includes(".."))throw(0,kG.handleHDBError)("Can not reference parent directories");let g=(0,Ct.join)(e,d.files).replace(/\\/g,"/"),N=g.indexOf("/*");if(N>-1&&d.files!==JO[u]?.files&&!(0,ms.existsSync)(g.slice(0,N)))throw new Error(`The path '${g.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);let M=(0,Ct.basename)(e),G=d.path||"/";G=G.startsWith("/")?G:G.startsWith("./")?"/"+M+G.slice(2):G==="."?"/"+M:"/"+M+"/"+G;let x,D,K;if(d.root){let Q=d.root;Q.startsWith("/")&&(Q=Q.slice(1)),Q.endsWith("/")&&(Q=Q.slice(0,-1)),Q+="/",D=(0,Ct.join)(e,Q)}else(K=g.indexOf("/*"))>-1&&(D=g.slice(0,K+1),x=(0,Ct.relative)(e,D));let $=!1;if(tl.isMainThread&&f.setupDirectory&&($=await f.setupDirectory?.(G,D,t)),t.isWorker&&f.handleDirectory&&($=await f.handleDirectory?.(G,D,t)),$)continue;for(let Q of await(0,FG.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:se,dirent:ye}=Q;_=!0;let oe=(0,Ct.relative)(e,se).replace(/\\/g,"/");if(x)if(oe.startsWith(x))oe=oe.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let dt=G+(G.endsWith("/")?"":"/")+oe;try{if(ye.isFile()){let Re=await Gce(se);tl.isMainThread&&await f.setupFile?.(Re,dt,se,t),t.isWorker&&await f.handleFile?.(Re,dt,se,t)}else tl.isMainThread&&await f.setupDirectory?.(dt,se,t),t.isWorker&&await f.handleDirectory?.(dt,se,t)}catch(Re){Re.message=`Could not load ${ye.isFile()?"file":"directory"} '${se}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${Re.message}`,td?.(Re),((0,nl.getWorkerIndex)()===0?console:ed.default).error(Re),t.set(d.path||"/",new rd(Re)),rl.set(n?u:(0,Ct.basename)(e),Re.message)}}}}catch(h){h.message=`Could not load component '${u}' for application '${(0,Ct.basename)(e)}' due to: ${h.message}`,td?.(h),((0,nl.getWorkerIndex)()===0?console:ed.default).error(h),t.set(d.path||"/",new rd(h),null,!0),rl.set(n?u:(0,Ct.basename)(e),h.message)}}if(tl.isMainThread&&!YG&&i&&(0,nl.watchDir)(e,async()=>KG()),o.extensionModule)return await bE((0,Ct.join)(e,o.extensionModule));if(!_){let u=`${e} did not load any modules, resources, or files, is this a valid component?`;td?.(new Error(u)),((0,nl.getWorkerIndex)()===0?console:ed.default).error(u),rl.set((0,Ct.basename)(e),u)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,td?.(o),t.set("",new rd(o))}}}var ms,Ct,tl,GG,XO,ZO,FG,nl,ed,kG,$G,xce,VG,Gce,QO,zO,YG,jO,rl,Fce,JO,qG,xG,td,rd,vh=Ae(()=>{ms=require("fs"),Ct=require("path"),tl=require("worker_threads"),GG=require("yaml"),XO=U(z()),ZO=U(b());DM();vM();BM();_q();Zx();iG();FG=U(require("fast-glob")),nl=U(nt()),ed=U(B());Pg();jr();kG=U(ee());Zn();me();Dm();$G=U(z()),xce=U(uG());bh();wG();HG();VG=U(mt());pm();({readFile:Gce}=ms.promises),QO=XO.get(ZO.CONFIG_PARAMS.COMPONENTSROOT),zO=new Map,rl=new Map;a(KG,"loadComponentDirectories");Fce={REST:Qh,rest:Qh,graphqlSchema:Dg,jsResource:Ug,fastifyRoutes:wO,login:Bg,static:CO,operationsApi:xce,customFunctions:{},http:{},clustering:kO,authentication:w_,mqtt:WO},JO={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(JO,"static",{value:{files:"web/**"}});qG=[],xG=new Map;a(kce,"setErrorReporter");a(Lm,"loadComponent");rd=class extends jt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Pm=T((ebe,QG)=>{var{isMainThread:WG}=require("worker_threads"),{getTables:$ce}=(me(),re(Ge)),{loadComponentDirectories:Vce,loadComponent:Yce}=(vh(),re(Uh)),{resetResources:Kce}=(Vl(),re(Vy)),Wce=OA(),Qce=mt(),{dirname:jce}=require("path"),{getConnection:zce}=pt(),Jce=z(),Xce=b(),tN=new Map;async function Zce(e=!1){!WG&&Jce.get(Xce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&zce();try{WG&&await Wce()}catch(n){console.error(n)}let t=Kce();$ce(),t.isWorker=e,await Yce(jce(Qce.getConfigFilePath()),t,"hdb",!0,tN),await Vce(tN,t);let r=[];for(let[n]of tN)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Zce,"loadRootComponents");QG.exports.loadRootComponents=Zce});var nt=T((rbe,Ro)=>{"use strict";var{Worker:ele,MessageChannel:tle,parentPort:Ks,isMainThread:oN,threadId:rle,workerData:Di}=require("worker_threads"),{PACKAGE_ROOT:nle}=b(),{join:XG,isAbsolute:sle,extname:ile}=require("path"),{server:ZG}=(jr(),re(Ho)),{watch:ole,readdir:ale}=require("fs/promises"),{totalmem:jG}=require("os"),nd=b(),eF=z(),Pi=B(),{randomBytes:cle}=require("crypto"),{_assignPackageExport:lle}=require("../index"),ule=b(),zG=1024*1024,go=[],Yn=[],_le=50,aN=1e4,dle="restart",tF="request_thread_info",rF="resource_report",nF="thread_info",sF="added-port",fle="ack",rN;lle("threads",Yn);Ro.exports={startWorker:nN,restartWorkers:lN,shutdownWorkers:Sle,workers:go,setMonitorListener:yle,onMessageFromWorkers:Tle,onMessageByType:uF,broadcast:Rle,broadcastWithAcknowledgement:Ole,setChildListenerByType:ple,getWorkerIndex:iF,getWorkerCount:oF,getTicketKeys:aF,setMainIsWorker:hle,setTerminateTimeout:Ele,restartNumber:Di?.restartNumber||1};Yn.onMessageByType=uF;Yn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Yn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var cN;function Ele(e){aN=e}a(Ele,"setTerminateTimeout");function iF(){return Di?Di.workerIndex:cN?0:void 0}a(iF,"getWorkerIndex");function oF(){return Di?Di.workerCount:cN?1:void 0}a(oF,"getWorkerCount");function hle(e){cN=e}a(hle,"setMainIsWorker");var Mm;function aF(){return Mm||(Mm=oN?cle(48):Di.ticketKeys,Mm)}a(aF,"getTicketKeys");Object.defineProperty(ZG,"workerIndex",{get(){return iF()}});Object.defineProperty(ZG,"workerCount",{get(){return oF()}});var cF={[tF](e,t){Nle(t)},[rF](e,t){ble(t,e)}};function nN(e,t={}){let r=process.constrainedMemory?.()||jG();r=Math.min(r,jG(),2e4*zG);let n=eF.get(nd.CONFIG_PARAMS.MAXHEAPMEMORY)??Math.max(Math.floor(r/zG/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Yn){let _=new tle;_.existingPort=l,i.push(_),o.push(_.port2)}ile(e)||(e+=".js");let c=new ele(sle(e)?e:XG(nle,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:t.threadCount,name:t.name,restartNumber:Ro.exports.restartNumber,ticketKeys:aF()},transferList:o},t));for(let{port1:l,existingPort:_}of i)_.postMessage({type:sF,port:l,threadId:c.threadId},[l]);return vm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>nN(e,t),c.on("error",l=>{console.error("Worker error:",l),Pi.error("Worker error:",l)}),c.on("exit",l=>{go.splice(go.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<_le?(t.unexpectedRestarts=c.unexpectedRestarts+1,nN(e,t)):Pi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{cF[l.type]?.(l,c)}),go.push(c),wle(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(nN,"startWorker");var mle=[nd.THREAD_TYPES.HTTP];async function lN(e=null,t=2,r=!0){if(oN){if(r){let{loadRootComponents:o}=Pm();await o()}Ro.exports.restartNumber++,t<1&&(t=t*go.length);let n=[],s=[];for(let o of go.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Pi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Ro.exports.restartNumber,type:nd.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=mle.indexOf(o.name)>-1,l=new Promise(_=>{let u=setTimeout(()=>o.terminate(),aN*2).unref();o.on("exit",()=>{clearTimeout(u),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),_()})});if(n.push(l),c&&r){let _=o.startCopy(),u=new Promise(d=>{let f=a(E=>{E.type===ule.ITC_EVENT_TYPES.CHILD_STARTED&&(Pi.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(u)),_.off("message",f))},"startListener");Pi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});s.push(u),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Ra();r&&(e==="http"||!e)&&eF.get(nd.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ks.postMessage({type:dle,workerType:e})}a(lN,"restartWorkers");function ple(e,t){cF[e]=t}a(ple,"setChildListenerByType");function Sle(e){return lN(e,1/0,!1)}a(Sle,"shutdownWorkers");var lF=[];function Tle(e){lF.push(e)}a(Tle,"onMessageFromWorkers");var sN=new Map;function uF(e,t){let r=sN.get(e);r||sN.set(e,r=[]),r.push(t)}a(uF,"onMessageByType");var gle=10;async function Rle(e){let t=0;for(let r of Yn)try{r.postMessage(e),t++>gle&&(t=0,await new Promise(setImmediate))}catch(n){Pi.error("Unable to send message to worker",n)}}a(Rle,"broadcast");var Um=new Map,Ale=1;function Ole(e){return new Promise(t=>{let r=0;for(let n of Yn)try{let s=Ale++,i=a(()=>{Um.delete(s),--r===0&&t(),n!==Ks&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,Um.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of Um)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Pi.error("Unable to send message to worker",s)}r===0&&t()})}a(Ole,"broadcastWithAcknowledgement");function Nle(e){e.postMessage({type:nF,workers:_F()})}a(Nle,"sendThreadInfo");function _F(){let e=Date.now();return go.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(_F,"getChildWorkerInfo");function ble(e,t){e.resources=t,e.resources.updated=Date.now()}a(ble,"recordResourceReport");var iN;function yle(e){iN=e}a(yle,"setMonitorListener");var Ile=1e3,JG=!1;function wle(){JG||(JG=!0,setInterval(()=>{for(let e of go){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}iN&&iN()},Ile).unref())}a(wle,"startMonitoring");var Cle=1e3;if(Ks){vm(Ks);for(let e=0,t=Di.addPorts.length;e<t;e++){let r=Di.addPorts[e];r.threadId=Di.addThreadIds[e],vm(r)}setInterval(()=>{let e=process.memoryUsage();Ks.postMessage({type:rF,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Cle).unref(),rN=a(()=>new Promise((e,t)=>{Ks.on("message",r),Ks.postMessage({type:tF});function r(n){n.type===nF&&(Ks.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else rN=_F;Ro.exports.getThreadInfo=rN;function vm(e,t){Yn.push(e),e.on("message",r=>{if(r.type===sF)r.port.threadId=r.threadId,vm(r.port);else if(r.type===fle){let n=Um.get(r.id);n&&n()}else{for(let s of lF)s(r,e);let n=sN.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Pi.error(i)}}}).on("close",()=>{Yn.splice(Yn.indexOf(e),1)}).on("exit",()=>{Yn.splice(Yn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(vm,"addPort");if(oN){let e,t,r=a(async(n,s)=>{s&&(e=s);for(let i of await ale(n,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(XG(n,i.name));try{for await(let{filename:i}of ole(n,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await lN(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",n,i)}},"watch_dir");Ro.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ks.on("message",async e=>{let{type:t}=e;t===nd.ITC_EVENT_TYPES.SHUTDOWN&&(Ro.exports.restartNumber=e.restartNumber,Ks.unref(),setTimeout(()=>{Pi.warn("Thread did not voluntarily terminate",rle),process.exit(0)},aN).unref())})});var bF=T(ad=>{"use strict";var{isMainThread:Lle,parentPort:od,threadId:sd}=require("worker_threads"),{Socket:Dle,createServer:Ple}=require("net"),{createServer:Mle,IncomingMessage:Ule}=require("http"),{createServer:vle}=require("https"),{readFileSync:sl,unlinkSync:dF,existsSync:Ble}=require("fs"),ps=B(),Ke=z(),kr=b(),{server:qm}=(jr(),re(Ho)),{WebSocketServer:Hle}=require("ws"),{createServer:qle}=require("tls"),{getTicketKeys:xle,restartNumber:Gle,getWorkerIndex:fF}=nt(),{Headers:SF}=(Rh(),re(M0)),{recordAction:id,recordActionBinary:Fle}=(Ei(),re(vu)),{Request:TF,createReuseportFd:EF}=(pm(),re(MO)),{checkMemoryLimit:kle}=sa(),gF=require("tls"),hF=gF.createSecureContext;gF.createSecureContext=function(e){if(!e.cert||!e.key)return hF(e);let t={...e};delete t.key,delete t.cert;let r=hF(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Gle<=1&&ps.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:sbe,CONFIG_PARAMS:$le}=kr;Ke.initSync();var Vle=Ke.get($le.HTTP_SESSIONAFFINITY),Ws={};ad.registerServer=EN;ad.httpServer=hN;ad.deliverSocket=fN;ad.startServers=RF;qm.http=hN;qm.request=Qle;qm.socket=jle;qm.ws=zle;var uN=[],Bm=[],Yle,va={},Hm={},Kle=[],_N=[];function RF(){return Pm().loadRootComponents(!0).then(()=>{od?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)fN(n,r,s);else if(t.requestId)Wle(t);else if(t.type===kr.ITC_EVENT_TYPES.SHUTDOWN){ps.trace("received shutdown request",sd);for(let i in Ws){let o=Ws[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),ps.info("Closed all http connections",i,sd)},4e3).unref()),o.close?.(()=>{if(Ke.get(kr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&fF()==0)try{dF(Ke.get(kr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,sd),o.cantCleanupProperly||ps.warn("Had to forcefully exit the thread",sd),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(EF&&!Vle)for(let t in Ws){let r=Ws[t];if(isNaN(t)&&fF()==0){Ble(t)&&dF(t),e.push(new Promise((s,i)=>{r.listen({path:t},()=>{s(),ps.info("Domain socket listening on "+t)}).on("error",i)}));continue}let n;try{n=EF(+t,"::")}catch(s){console.error(`Unable to bind to port ${t}`,s);continue}e.push(new Promise((s,i)=>{r.listen({fd:n},()=>{s(),ps.trace("Listening on port "+t,sd)}).on("error",i)}))}Promise.all(e).then(()=>{od?.postMessage({type:kr.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(RF,"startServers");Lle||RF();function fN(e,t,r){let n=e?.read?e:new Dle({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):(ps.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(fN,"deliverSocket");var mF=new Map;function Wle(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=mF.get(s),r){case"connection":i=fN(void 0,t),mF.set(s,i),i.write=(c,l,_)=>(od.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,l,_)=>(od.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),od.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(Wle,"proxyRequest");function EN(e,t){!+t&&t!==Ke.get(kr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(Ke.get(kr.CONFIG_PARAMS.HTTP_PORT),10));let r=Ws[t];if(r){let n=r.lastServer||r;if(n===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(!!n.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);n.off("unhandled",pF),n.on("unhandled",(s,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",s,i)}),r.lastServer=e}else Ws[t]=e;e.on("unhandled",pF)}a(EN,"registerServer");function AF(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(kr.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Ke.get(kr.CONFIG_PARAMS.HTTP_PORT),secure:Ke.get(kr.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Ke.get(kr.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Ke.get(kr.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Ke.get(kr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:Ke.get(kr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(AF,"getPorts");function hN(e,t){for(let{port:r,secure:n}of AF(t))OF(r,n,t?.isOperationsServer),typeof e=="function"?_N[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,EN(e,r)),Hm[r]=dN(_N,r),Yle=dN(Kle,r)}a(hN,"httpServer");function OF(e,t,r){if(!va[e]){let n=r?"operationsApi_network":"http",s={keepAliveTimeout:Ke.get(n+"_keepAliveTimeout"),headersTimeout:Ke.get(n+"_headersTimeout"),requestTimeout:Ke.get(n+"_timeout")},i=Ke.get(n+"_mtls");if(t){n=r?"operationsApi_":"";let c=Ke.get(n+"tls_privateKey"),l=Ke.get(n+"tls_certificate"),_=Ke.get(n+"tls_certificateAuthority");Object.assign(s,{allowHTTP1:!0,key:sl(c),ciphers:Ke.get("tls_ciphers"),cert:sl(l),ca:_&&sl(_),requestCert:!!i,ticketKeys:xle()})}let o=kle();va[e]=(t?vle:Mle)(s,async(c,l)=>{try{let u=performance.now(),d=new TF(c,l);r&&(d.isOperationsServer=!0);let f=await Hm[e](d);if(!f){if(d._nodeResponse.statusCode)return;f=NF(d)}if(o?f.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):f.headers?.set?.("Server","HarperDB"),f.status===-1){for(let M of f.headers||[])l.setHeader(M[0],M[1]);return c.baseRequest=d,l.baseResponse=f,va[e].emit("unhandled",c,l)}let E=f.status||200,h=performance.now(),p=h-u,S=f.body,A;if(!f.handlesHeaders){let M=f.headers||new SF;if(S?S.length>=0&&(typeof S=="string"?M.set("Content-Length",Buffer.byteLength(S)):M.set("Content-Length",S.length),A=!0):(M.set("Content-Length","0"),A=!0),M.append){let G=`hdb;dur=${p.toFixed(2)}`;f.wasCacheMiss&&(G+=", miss"),M.append("Server-Timing",G,!0)}l.writeHead(E,M&&(M[Symbol.iterator]?Array.from(M):M)),A&&l.end(S)}let g=d.handlerPath,N=d.method;if(id(p,"duration",g,N,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),Fle(E<400,"success",g,N),!A)if(S?.pipe){S.pipe(l),S.destroy&&l.on("close",()=>{S.destroy()});let M=0;S.on("data",G=>{M+=G.length}),S.on("end",()=>{id(performance.now()-h,"transfer",g,N),id(M,"bytes-sent",g,N)})}else S?.then?S.then(M=>{l.end(M)},_):l.end(S)}catch(u){_(u)}function _(u){let d=u.headers;l.writeHead(u.statusCode||500,d&&(d[Symbol.iterator]?Array.from(d):d)),l.end(u.toString()),u.statusCode?u.statusCode===500?ps.warn(u):ps.info(u):ps.error(u)}a(_,"onError")}),t&&(va[e].on("secureConnection",c=>{c._parent.startTime&&id(performance.now()-c._parent.startTime,"tls-handshake",e),id(c.isSessionReused(),"tls-reused",e)}),va[e].isSecure=!0),EN(va[e],e)}return va[e]}a(OF,"getHTTPServer");function dN(e,t){let r=NF;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(dN,"makeCallbackChain");function NF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new SF}}a(NF,"unhandled");function Qle(e,t){hN(e,{requestOnly:!0,...t})}a(Qle,"onRequest");function jle(e,t){let r;if(t.securePort){let n=Ke.get("tls_privateKey"),s=Ke.get("tls_certificate"),i=t.mtls?.certificateAuthority||Ke.get("tls_certificateAuthority");r=qle({ciphers:Ke.get("tls_ciphers"),key:sl(n),cert:sl(s),ca:i&&sl(i),requestCert:!!t.mtls},e),Ws[t.securePort]=r}return t.port&&(r=Ple(e),Ws[t.port]=r),r}a(jle,"onSocket");Object.defineProperty(Ule.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function zle(e,t){for(let{port:r,secure:n}of AF(t)){Bm[r]||(Bm[r]=new Hle({server:OF(r,n)}),Bm[r].on("connection",async(i,o)=>{try{let c=new TF(o);c.isWebSocket=!0;let l=Hm[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let u=0;u<uN.length;u++){let d=uN[u];if(d.protocol){if(d.protocol===_){d.listener(i,c,l);break}}else d.listener(i,c,l)}}catch(c){ps.warn("Error handling WebSocket connection",c)}}),Bm[r].on("error",i=>{console.log("Error in setting up WebSocket server",i)}));let s=t?.subProtocol||"";uN.push({listener:e,protocol:s}),Hm[r]=dN(_N,r)}}a(zle,"onWebSocket");function pF(e,t){t.writeHead(404),t.end(`Not found
28
+ `)}a(pF,"defaultNotFound")});var gN={};je(gN,{startHTTPThreads:()=>Xle,startSocketServer:()=>eN,updateWorkerIdleness:()=>PF});async function Xle(e=2,t){if(t)pN(0,1,!0);else{let{loadRootComponents:n}=Pm();if(e===0)return(0,Ao.setMainIsWorker)(!0),await bF().startServers(),Promise.resolve([]);await n()}let r=(0,CF.checkMemoryLimit)();r&&!process.env.DEV_MODE&&(console.error(r),setInterval(()=>{km.notify(r)},Jle).unref());for(let n=0;n<e;n++)pN(n,e);return Promise.all(DF)}function pN(e,t=1,r){if(mN++,(0,Ao.startWorker)("server/threads/threadServer.js",{name:Fm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(_){_.type===Fm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});DF.push(s),await s,il.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=Gm.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=il.indexOf(n);o>-1&&il.splice(o,1)}if(a(i,"removeWorker"),ol){let o=ol;ol=[];for(let c of o)LF[c.localPort](null,c)}}}),r){let n=setInterval(()=>{SN?SN=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ao.shutdownWorkers)(),mN=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function eN(e=0,t){if(typeof e=="string")try{(0,$m.existsSync)(e)&&(0,$m.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Zle:r=eue(t):r=TN;let n=(0,al.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=LF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),SN=!0,r(o,(c,l)=>{if(!c){if(yF){let u=o._socket||new al.Socket({handle:o,writable:!0,readable:!0});yF.deliverSocket(u,e,l),u.resume()}else mN>0?(ol.length===0&&setTimeout(()=>{ol.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,ol.push(o)):(console.log("start up a dynamic thread to handle request"),pN(0));an(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:l});else{let u=o._socket||new al.Socket({handle:o,writable:!0,readable:!0});nue(u,c,e)}an(!0,"socket-routed")})};let s=vo();km.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function TN(e,t){let r,n=0;for(let s of il){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=xm)return xm=i,t(r);n=i}xm=0,t(r)}function Zle(e,t){let r={};e.getpeername(r);let n=r.address,s=cl.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);TN(e,o=>{cl.set(n,{worker:o,lastUsed:i}),t(o)})}function eue(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new al.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],_=cl.get(l),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,s(_.worker);TN(n,d=>{cl.set(l,{worker:d,lastUsed:u}),s(d,o)})})}a(r,"findByHeaderAffinity")}function PF(){xm=0;for(let e of il)e.expectedIdle=e.recentELU.idle+tue,e.requests=1;il.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function nue(e,t,r){let n=rue++;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(),Gm.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")),Gm.delete(n)),s.event=="destroy"&&(e.destroy(),Gm.delete(n))})}var Ao,al,Fm,km,$m,wF,CF,il,ol,LF,yF,mN,DF,Jle,SN,xm,IF,cl,tue,Gm,rue,Dm=Ae(()=>{Ao=U(nt()),al=require("net"),Fm=U(b()),km=U(B()),$m=require("fs");Ei();wF=require("worker_threads"),CF=U(sa()),il=[],ol=[],LF=[],mN=0,DF=[];wF.isMainThread&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});Jle=6e5;a(Xle,"startHTTPThreads");a(pN,"startHTTPWorker");a(eN,"startSocketServer");xm=0;a(TN,"findMostIdleWorker");IF=36e5,cl=new Map;a(Zle,"findByRemoteAddressAffinity");a(eue,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of cl)r.lastUsed+IF<e&&cl.delete(t)},IF).unref();tue=1e3;a(PF,"updateWorkerIdleness");(0,Ao.setMonitorListener)(PF);Gm=new Map,rue=1;a(nue,"proxySocket")});var vF=T((lbe,UF)=>{"use strict";var Ym=z();Ym.initSync();var Vm=b(),{httpRequest:sue}=V(),iue=require("path"),MF=require("fs-extra"),oue=require("yaml"),aue={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};UF.exports={cliOperations:lue,buildRequest:cue};function cue(){let e={};for(let t of process.argv){if(aue[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(cue,"buildRequest");async function lue(e){await MF.exists(iue.join(Ym.get(Vm.CONFIG_PARAMS.ROOTPATH),Vm.HDB_PID_FILE))||(console.error("HarperDB must be running to perform this operation"),process.exit()),await MF.exists(Ym.get(Vm.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))||(console.error("No domain socket found, unable to perform this operation"),process.exit());try{let t=await sue({method:"POST",protocol:"http:",socketPath:Ym.get(Vm.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(oue.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(lue,"cliOperations")});var AN=T((_be,BF)=>{"use strict";var cd=z();cd.initSync();var ll=require("fs-extra"),RN=require("path"),ul=b(),uue=require("crypto"),_ue=require("uuid").v4;BF.exports=due;function due(){if(cd.getHdbBasePath()!==void 0){let e=RN.join(cd.getHdbBasePath(),ul.LICENSE_KEY_DIR_NAME,ul.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=RN.join(cd.getHdbBasePath(),ul.LICENSE_KEY_DIR_NAME,ul.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=RN.join(cd.getHdbBasePath(),ul.LICENSE_KEY_DIR_NAME,ul.JWT_ENUM.JWT_PASSPHRASE_NAME);try{ll.accessSync(r),ll.accessSync(e),ll.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=_ue(),i=uue.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});ll.writeFileSync(r,s),ll.writeFileSync(e,i.privateKey),ll.writeFileSync(t,i.publicKey)}else throw n}}}a(due,"checkJWTTokenExist")});var qF=T((fbe,HF)=>{"use strict";var ON=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};HF.exports={HdbInfoInsertObject:ON}});var FF=T((hbe,GF)=>{"use strict";var xF=b(),NN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[xF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[xF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};GF.exports={UpgradeObject:NN}});var Km=T((pbe,$F)=>{"use strict";var Kn=require("prompt"),_l=require("chalk"),kF=B(),Ss=require("os"),bN=Mo(),yN=["yes","y"];async function fue(e){let t=`${Ss.EOL}`+_l.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ss.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ss.EOL}${Ss.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ss.EOL}`;Kn.override=bN(["CONFIRM_UPGRADE"]),Kn.start(),Kn.message=t;let r={properties:{CONFIRM_UPGRADE:{description:_l.magenta(`${Ss.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Kn.get([r])}catch(s){return kF.error("There was an error when prompting user about an upgrade."),kF.error(s),!1}return yN.includes(n.CONFIRM_UPGRADE)}a(fue,"forceUpdatePrompt");async function Eue(e){let t=`${Ss.EOL}`+_l.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.${Ss.EOL}`);Kn.override=bN(["CONFIRM_DOWNGRADE"]),Kn.start(),Kn.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:_l.magenta(`${Ss.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Kn.get([r]);return yN.includes(n.CONFIRM_DOWNGRADE)}a(Eue,"forceDowngradePrompt");async function hue(){let e=`${Ss.EOL}`+_l.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Kn.override=bN(["GENERATE_CERTS"]),Kn.start(),Kn.message=e;let t={properties:{GENERATE_CERTS:{description:_l.magenta(`${Ss.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Kn.get([t]);return yN.includes(r.GENERATE_CERTS)}a(hue,"upgradeCertsPrompt");$F.exports={forceUpdatePrompt:fue,forceDowngradePrompt:Eue,upgradeCertsPrompt:hue}});var wN=T((Tbe,VF)=>{"use strict";var IN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};VF.exports=IN});var KF=T((bbe,YF)=>{"use strict";var mue=V(),pue=mt(),Rbe=B(),Abe=require("path"),Obe=require("fs"),Nbe=b();YF.exports={getOldPropsValue:Sue};function Sue(e,t,r=!1){let n=t.getRaw(e);return mue.isNotEmptyAndHasValue(n)?n:r?pue.getDefaultConfig(e):""}a(Sue,"getOldPropsValue")});var zF=T((Ibe,jF)=>{"use strict";var Oo=require("path"),No=require("fs-extra"),Tue=require("properties-reader"),gue=wN(),Lt=B(),{getOldPropsValue:We}=KF(),{HDB_SETTINGS_NAMES:Z,CONFIG_PARAMS:Ba}=b(),Ha=mt(),Wm=z(),WF=V(),Qs=b(),CN=new gue("3.1.0"),QF=[];function Rue(){let e=Tue(Wm.get(Z.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Lt.info(t);let r=` ;Settings for the HarperDB process.
37
29
 
38
30
  ;The directory selected during install where the database files reside.
39
- ${X.HDB_ROOT_KEY} = ${ve(X.HDB_ROOT_KEY,e)}
31
+ ${Z.HDB_ROOT_KEY} = ${We(Z.HDB_ROOT_KEY,e)}
40
32
  ;The port the HarperDB REST interface will listen on.
41
- ${X.SERVER_PORT_KEY} = ${ve(X.SERVER_PORT_KEY,e)}
33
+ ${Z.SERVER_PORT_KEY} = ${We(Z.SERVER_PORT_KEY,e)}
42
34
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
43
- ${X.HTTP_SECURE_ENABLED_KEY} = ${ve(X.HTTP_SECURE_ENABLED_KEY,e)}
35
+ ${Z.HTTP_SECURE_ENABLED_KEY} = ${We(Z.HTTP_SECURE_ENABLED_KEY,e)}
44
36
  ;The path to the SSL certificate used when running with HTTPS enabled.
45
- ${X.CERT_KEY} = ${ve(X.CERT_KEY,e)}
37
+ ${Z.CERT_KEY} = ${We(Z.CERT_KEY,e)}
46
38
  ;The path to the SSL private key used when running with HTTPS enabled.
47
- ${X.PRIVATE_KEY_KEY} = ${ve(X.PRIVATE_KEY_KEY,e)}
39
+ ${Z.PRIVATE_KEY_KEY} = ${We(Z.PRIVATE_KEY_KEY,e)}
48
40
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
49
- ${X.CORS_ENABLED_KEY} = ${ve(X.CORS_ENABLED_KEY,e)}
41
+ ${Z.CORS_ENABLED_KEY} = ${We(Z.CORS_ENABLED_KEY,e)}
50
42
  ;Allows for setting allowable domains with CORS. Comma separated list.
51
- ${X.CORS_WHITELIST_KEY} = ${ve(X.CORS_WHITELIST_KEY,e)}
43
+ ${Z.CORS_WHITELIST_KEY} = ${We(Z.CORS_WHITELIST_KEY,e)}
52
44
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
53
- ${X.SERVER_TIMEOUT_KEY} = ${ve(X.SERVER_TIMEOUT_KEY,e,!0)}
45
+ ${Z.SERVER_TIMEOUT_KEY} = ${We(Z.SERVER_TIMEOUT_KEY,e,!0)}
54
46
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
55
- ${X.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${ve(X.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
47
+ ${Z.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${We(Z.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
56
48
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
57
- ${X.SERVER_HEADERS_TIMEOUT_KEY} = ${ve(X.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
49
+ ${Z.SERVER_HEADERS_TIMEOUT_KEY} = ${We(Z.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
58
50
  ;Define whether to log to file or not.
59
- ${X.LOG_TO_FILE} = ${_a.getDefaultConfig(la.LOGGING_FILE)}
51
+ ${Z.LOG_TO_FILE} = ${Ha.getDefaultConfig(Ba.LOGGING_FILE)}
60
52
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
61
- ${X.LOG_TO_STDSTREAMS} = ${_a.getDefaultConfig(la.LOGGING_STDSTREAMS)}
53
+ ${Z.LOG_TO_STDSTREAMS} = ${Ha.getDefaultConfig(Ba.LOGGING_STDSTREAMS)}
62
54
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
63
- ${X.LOG_LEVEL_KEY} = ${ve(X.LOG_LEVEL_KEY,e)}
55
+ ${Z.LOG_LEVEL_KEY} = ${We(Z.LOG_LEVEL_KEY,e)}
64
56
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
65
- ${X.LOG_PATH_KEY} = ${ve(X.LOG_PATH_KEY,e)}
57
+ ${Z.LOG_PATH_KEY} = ${We(Z.LOG_PATH_KEY,e)}
66
58
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
67
- ${X.LOG_DAILY_ROTATE_KEY} = ${ve(X.LOG_DAILY_ROTATE_KEY,e)}
59
+ ${Z.LOG_DAILY_ROTATE_KEY} = ${We(Z.LOG_DAILY_ROTATE_KEY,e)}
68
60
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
69
61
  ;daily log files which may consume a large amount of storage depending on your log settings.
70
- ${X.LOG_MAX_DAILY_FILES_KEY} = ${ve(X.LOG_MAX_DAILY_FILES_KEY,e)}
62
+ ${Z.LOG_MAX_DAILY_FILES_KEY} = ${We(Z.LOG_MAX_DAILY_FILES_KEY,e)}
71
63
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
72
- ${X.PROPS_ENV_KEY} = ${ve(X.PROPS_ENV_KEY,e)}
64
+ ${Z.PROPS_ENV_KEY} = ${We(Z.PROPS_ENV_KEY,e)}
73
65
  ;This allows self signed certificates to be used in clustering. This is a security risk
74
66
  ;as clustering will not validate the cert, so should only be used internally.
75
67
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
76
- ${X.ALLOW_SELF_SIGNED_SSL_CERTS} = ${ve(X.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
68
+ ${Z.ALLOW_SELF_SIGNED_SSL_CERTS} = ${We(Z.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
77
69
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
78
- ${X.MAX_HDB_PROCESSES} = ${ve(X.MAX_HDB_PROCESSES,e)}
70
+ ${Z.MAX_HDB_PROCESSES} = ${We(Z.MAX_HDB_PROCESSES,e)}
79
71
  ;Set to true to enable clustering. Requires a valid enterprise license.
80
- ${X.CLUSTERING_ENABLED_KEY} = ${ve(X.CLUSTERING_ENABLED_KEY,e,!0)}
72
+ ${Z.CLUSTERING_ENABLED_KEY} = ${We(Z.CLUSTERING_ENABLED_KEY,e,!0)}
81
73
  ;The port that will be used for HarperDB clustering.
82
- ${X.CLUSTERING_PORT_KEY} = ${ve(X.CLUSTERING_PORT_KEY,e)}
74
+ ${Z.CLUSTERING_PORT_KEY} = ${We(Z.CLUSTERING_PORT_KEY,e)}
83
75
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
84
- ${X.CLUSTERING_NODE_NAME_KEY} = ${ve(X.CLUSTERING_NODE_NAME_KEY,e)}
76
+ ${Z.CLUSTERING_NODE_NAME_KEY} = ${We(Z.CLUSTERING_NODE_NAME_KEY,e)}
85
77
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
86
- ${X.CLUSTERING_USER_KEY} = ${ve(X.CLUSTERING_USER_KEY,e)}
78
+ ${Z.CLUSTERING_USER_KEY} = ${We(Z.CLUSTERING_USER_KEY,e)}
87
79
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
88
- ${X.DISABLE_TRANSACTION_LOG_KEY} = ${ve(X.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
80
+ ${Z.DISABLE_TRANSACTION_LOG_KEY} = ${We(Z.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
89
81
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
90
- ${X.OPERATION_TOKEN_TIMEOUT_KEY} = ${ve(X.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
82
+ ${Z.OPERATION_TOKEN_TIMEOUT_KEY} = ${We(Z.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
91
83
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
92
- ${X.REFRESH_TOKEN_TIMEOUT_KEY} = ${ve(X.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
84
+ ${Z.REFRESH_TOKEN_TIMEOUT_KEY} = ${We(Z.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
93
85
  ;The port the IPC server will run on.
94
- ${X.IPC_SERVER_PORT} = ${_a.getDefaultConfig(la.IPC_NETWORK_PORT)}
86
+ ${Z.IPC_SERVER_PORT} = ${Ha.getDefaultConfig(Ba.IPC_NETWORK_PORT)}
95
87
  ;Run HDB in the foreground.
96
- ${X.RUN_IN_FOREGROUND} = ${_a.getDefaultConfig(la.OPERATIONSAPI_FOREGROUND)}
88
+ ${Z.RUN_IN_FOREGROUND} = ${Ha.getDefaultConfig(Ba.OPERATIONSAPI_FOREGROUND)}
97
89
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
98
- ${X.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${_a.getDefaultConfig(la.CUSTOMFUNCTIONS_ENABLED)}
90
+ ${Z.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ha.getDefaultConfig(Ba.CUSTOMFUNCTIONS_ENABLED)}
99
91
  ;The port used to access the custom functions server.
100
- ${X.CUSTOM_FUNCTIONS_PORT_KEY} = ${_a.getDefaultConfig(la.HTTP_PORT)}
92
+ ${Z.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ha.getDefaultConfig(Ba.HTTP_PORT)}
101
93
  ;The path to the folder containing HarperDB custom function files.
102
- ${X.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${io.join(ve(X.HDB_ROOT_KEY,e),"custom_functions")}
94
+ ${Z.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Oo.join(We(Z.HDB_ROOT_KEY,e),"custom_functions")}
103
95
  ;Set the max number of processes HarperDB will start for the Custom Functions server
104
- ${X.MAX_CUSTOM_FUNCTION_PROCESSES} = ${_a.getDefaultConfig(la.HTTP_THREADS)}
105
- `,s=Em.get("settings_path"),n=io.dirname(s),i=io.join(n,"3_1_0_upgrade_settings.bak");try{ht.info(`Backing up old settings file to: ${i}`),oo.copySync(s,i)}catch(c){throw ht.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ht.info("New settings file values for 3.1.0 upgrade:",r),ht.info(`Creating new/upgraded settings file at '${s}'`),oo.writeFileSync(s,r),ht.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."),ht.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ht.error(c),oo.copySync(i,s),c}Em.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ht.info(o),o}a(rue,"updateSettingsFile_3_1_0");function sue(){let e=io.join(qF.getHomeDir(),Cn.HDB_HOME_DIR_NAME,Cn.LICENSE_KEY_DIR_NAME,Cn.LICENSE_FILE_NAME),t=io.join(qF.getHomeDir(),Cn.HDB_HOME_DIR_NAME,Cn.LICENSE_KEY_DIR_NAME,Cn.REG_KEY_FILE_NAME),r=io.join(Em.getHdbBasePath(),Cn.LICENSE_KEY_DIR_NAME,Cn.LICENSE_FILE_NAME),s=io.join(r,Cn.LICENSE_FILE_NAME),n=io.join(r,Cn.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ht.info(i);let o="Creating .license directory";console.log(o),ht.info(o),oo.mkdirpSync(r);try{oo.accessSync(e);try{let c="Moving licence file";console.log(c),ht.info(c),oo.moveSync(e,s);let u="License file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving license file failed";console.error(u),ht.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),ht.warn(u)}try{oo.accessSync(t);try{let c="Moving registration file";console.log(c),ht.info(c),oo.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving registration file failed";console.error(u),ht.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),ht.warn(u)}}a(sue,"moveLicenseFiles");xO.sync_functions.push(rue);xO.sync_functions.push(sue);GF.push(xO);FF.exports=GF});var KF=T((rNe,YF)=>{"use strict";var Jr=Pe(),{insertRecords:nue}=Io(),iue=or(),ao=Ke(),oue=G(),Si=U(),aue=G(),Ln=require("fs-extra"),Ti=require("path"),cue=require("cli-progress"),y_=require("assert"),uue=require("pino"),lue=j();YF.exports=_ue;var hm,kF,mm,kO,Zt,I_=!1;async function _ue(e=!0){return hm=lue.getHdbBasePath(),kF=Ti.join(hm,"schema"),mm=Ti.join(hm,"4_0_0_upgrade_tmp"),kO=Ti.join(hm,"transactions"),console.info("Reindexing upgrade started for schemas"),Si.notify("Reindexing upgrade started for schemas"),await $F(kF,!1,e),await Ln.pathExists(kO)&&(console.info(`
96
+ ${Z.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ha.getDefaultConfig(Ba.HTTP_THREADS)}
97
+ `,n=Wm.get("settings_path"),s=Oo.dirname(n),i=Oo.join(s,"3_1_0_upgrade_settings.bak");try{Lt.info(`Backing up old settings file to: ${i}`),No.copySync(n,i)}catch(c){throw Lt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Lt.info("New settings file values for 3.1.0 upgrade:",r),Lt.info(`Creating new/upgraded settings file at '${n}'`),No.writeFileSync(n,r),Lt.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Lt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Lt.error(c),No.copySync(i,n),c}Wm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),Lt.info(o),o}a(Rue,"updateSettingsFile_3_1_0");function Aue(){let e=Oo.join(WF.getHomeDir(),Qs.HDB_HOME_DIR_NAME,Qs.LICENSE_KEY_DIR_NAME,Qs.LICENSE_FILE_NAME),t=Oo.join(WF.getHomeDir(),Qs.HDB_HOME_DIR_NAME,Qs.LICENSE_KEY_DIR_NAME,Qs.REG_KEY_FILE_NAME),r=Oo.join(Wm.getHdbBasePath(),Qs.LICENSE_KEY_DIR_NAME,Qs.LICENSE_FILE_NAME),n=Oo.join(r,Qs.LICENSE_FILE_NAME),s=Oo.join(r,Qs.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Lt.info(i);let o="Creating .license directory";console.log(o),Lt.info(o),No.mkdirpSync(r);try{No.accessSync(e);try{let c="Moving licence file";console.log(c),Lt.info(c),No.moveSync(e,n);let l="License file successfully moved.";console.log(l),Lt.info(l)}catch{let l="moving license file failed";console.error(l),Lt.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Lt.warn(l)}try{No.accessSync(t);try{let c="Moving registration file";console.log(c),Lt.info(c),No.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Lt.info(l)}catch{let l="moving registration file failed";console.error(l),Lt.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Lt.warn(l)}}a(Aue,"moveLicenseFiles");CN.sync_functions.push(Rue);CN.sync_functions.push(Aue);QF.push(CN);jF.exports=QF});var tk=T((Cbe,ek)=>{"use strict";var pn=$e(),{insertRecords:Oue}=Vo(),Nue=Sr(),bo=ft(),bue=V(),Mi=B(),yue=V(),js=require("fs-extra"),Ui=require("path"),Iue=require("cli-progress"),ld=require("assert"),wue=require("pino"),Cue=z();ek.exports=Lue;var Qm,JF,jm,LN,_r,ud=!1;async function Lue(e=!0){return Qm=Cue.getHdbBasePath(),JF=Ui.join(Qm,"schema"),jm=Ui.join(Qm,"4_0_0_upgrade_tmp"),LN=Ui.join(Qm,"transactions"),console.info("Reindexing upgrade started for schemas"),Mi.notify("Reindexing upgrade started for schemas"),await XF(JF,!1,e),await js.pathExists(LN)&&(console.info(`
106
98
 
107
- Reindexing upgrade started for transaction logs`),Si.notify("Reindexing upgrade started for transaction logs"),await $F(kO,!0,e)),Si.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(I_?", but errors occurred":"")}a(_ue,"reindexUpgrade");async function $F(e,t,r){let s=await Ln.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=Ti.join(e,o.toString());if(o===".DS_Store")continue;let u=await Ln.readdir(c),_=u.length;for(let l=0;l<_;l++){let d=u[l];if(d!==".DS_Store"&&Ln.statSync(Ti.join(c,d)).isDirectory())try{await due(o,d,t),Zt.info(`Reindexing started for ${o}.${d}`),Si.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Eue(o,d,c,t,r),Zt.info(`Reindexing completed for ${o}.${d}`),Si.notify(`Reindexing completed for ${o}.${d}`)}catch(f){I_=!0,f.schema_path=c,f.table_name=d,Si.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Si.error(f),Zt.error(f),console.error(f)}}}if(!I_)try{await Ln.rm(mm,{recursive:!0})}catch{}}a($F,"processTables");async function due(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ti.join(mm,n);await Ln.ensureDir(mm),await Ln.writeFile(i,""),Zt=uue({level:"debug",formatters:{bindings(){}}},i)}a(due,"initPinoLogger");var fue=20;async function Eue(e,t,r,s,n){let i;try{i=await Jr.openEnvironment(r,t,s)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Si.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`),Zt.error(g);return}throw g}let o=pue(i.dbis),c=Jr.openDBI(i,o),u=Object.keys(i.dbis),_=Jr.statDBI(i,o);Zt.info(`Old environment stats: ${JSON.stringify(_)}`);let l=new cue.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(_.entryCount,0,{});let d=await Jr.createEnvironment(r,t,!1);Jr.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),s||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>fue&&await E();await E()}catch(g){throw I_=!0,Zt.error(g),g}async function E(){let g,N=f.map(({value:$})=>$);s?g=await Promise.all(N.map($=>hue(d,$))):g=await nue(d,o,u.filter($=>$!=="__blob__"),N,!1);for(let $=0,F=f.length;$<F;$++){let{key:w,value:K}=f[$];Zt.info(`Record hash value: ${w} hash: ${o}`);let B;s?B=g[$]:B=g.written_hashes.indexOf(w)>-1,y_(B,!0),mue(d,o,K[o],s),Zt.info(`Insert success, written hashes: ${g.written_hashes}`),l.increment()}f=[],l.value/l.total*100%10===0&&Si.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),Zt.info(`${l.value}/${l.total} records inserted`)}a(E,"finishOutstanding"),l.stop();let h=Jr.statDBI(i,o),m=Jr.statDBI(d,o);if(Zt.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),y_.deepStrictEqual(h.entryCount,m.entryCount),await Jr.closeEnvironment(i),await Jr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=Ti.join(r,t),N=Ti.join(g,"data.mdb"),V=Ti.join(g,"lock.mdb");await Ln.unlink(N),await Ln.unlink(V),await Ln.rmdir(g),Zt.info(`Deleted old environment files from schema folder: ${N}, ${V}`)}let S=await Jr.openEnvironment(r,t),A=Jr.statDBI(S,o);Zt.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(A)}`),y_.deepStrictEqual(A.entryCount,m.entryCount),await Jr.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(Eue,"processTable");async function hue(e,t){Jr.initializeDBIs(e,ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ao.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[ao.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),aue.isEmpty(t.user_name)||e.dbis[ao.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[ao.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(hue,"insertTransaction");function mue(e,t,r,s){let i=e.dbis[t].get(r);y_.deepStrictEqual(typeof i,"object");let o;if(s){let c={[ao.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[ao.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,u]of o)if(c!==t&&e.dbis[c]!==void 0&&!oue.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let _=0,l=u.length;_<l;_++){let d=u[_];VF(e,c,d,r)}else VF(e,c,u,r)}a(mue,"validateIndices");function VF(e,t,r,s){try{let n=!1,i=iue.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||Zt.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),y_.deepStrictEqual(n,!0)}catch(n){I_=!0,Zt.error(n),console.error(n)}}a(VF,"validateIndex");function pue(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(pue,"getHashDBI")});var KO=T((nNe,QF)=>{"use strict";var Sue=require("mkcert"),pm=require("path"),$O=require("fs-extra"),VO=U(),Tue=j(),YO=R(),kc=lT(),gue=po(),Rue=rt();QF.exports={generateKeys:Aue,updateConfigCert:WF};async function Aue(){let e=Tue.getHdbBasePath(),t=pm.join(e,YO.LICENSE_KEY_DIR_NAME),r=await Sue.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:kc.CERTIFICATE_VALUES.key,caCert:kc.CERTIFICATE_VALUES.cert}),s=pm.join(t,kc.CERTIFICATE_PEM_NAME),n=pm.join(t,kc.PRIVATEKEY_PEM_NAME),i=pm.join(t,kc.CA_PEM_NAME);try{await $O.writeFile(s,r.cert)}catch(o){throw VO.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await $O.writeFile(n,r.key)}catch(o){throw VO.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await $O.writeFile(i,kc.CERTIFICATE_VALUES.cert)}catch(o){throw VO.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}WF(s,n,i)}a(Aue,"generateKeys");function WF(e,t,r){let s=gue(Object.keys(YO.CONFIG_PARAM_MAP),!0),n=YO.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.TLS_CERTIFICATE]:s[n.TLS_CERTIFICATE.toLowerCase()]?s[n.TLS_CERTIFICATE.toLowerCase()]:e,[n.TLS_PRIVATEKEY]:s[n.TLS_PRIVATEKEY.toLowerCase()]?s[n.TLS_PRIVATEKEY.toLowerCase()]:t,[n.TLS_CERTIFICATEAUTHORITY]:s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATE]=s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_PRIVATEKEY]=s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),Rue.updateConfigValue(void 0,void 0,i,!1,!0)}a(WF,"updateConfigCert")});var ZF=T((aNe,XF)=>{"use strict";var Sm=require("path"),co=require("fs-extra"),Oue=FO(),da=U(),jF=rt(),WO=j(),Js=R(),Tm=G(),Nue=require("properties-reader"),bue=vs(),yue=lE(),Iue=_r(),oNe=require("util"),wue=Iue.searchByValue,Cue=dr(),Lue=PE(),Due=ke(),Pue=KF(),zF=KO(),Mue=fm(),L_=new Oue("4.0.0"),JF=[],w_,C_;async function Uue(){try{if(await Mue.upgradeCertsPrompt()){if(console.log("Generating new certificates."),w_){let t=Tm.changeExtension(w_,".bak");await co.move(w_,t)}if(C_){let t=Tm.changeExtension(C_,".bak");await co.move(C_,t)}await zF.generateKeys()}else console.log("Using existing certificates."),zF.updateConfigCert(w_,C_,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Uue,"generateNewKeys");async function vue(){console.log("Updating HarperDB nodes."),da.info("Updating HarperDB nodes.");let e=[];try{let t=new bue(Js.SYSTEM_SCHEMA_NAME,Js.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await wue(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Due.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let l=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let u={host:c.host,port:c.port};e.push(u);let _=[];for(let l=0,d=c.subscriptions.length;l<d;l++){let f=c.subscriptions[l],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}s.push({name:c.name,subscriptions:_,system_info:{hdb_version:Js.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Tm.isEmptyOrZeroLength(s))return;let n=new yue(Js.SYSTEM_SCHEMA_NAME,Js.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await Cue.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Lue.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(vue,"updateNodes");async function Bue(){let e=WO.get(Js.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Sm.join("config","settings.js"))){da.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),da.info(t);let r=Sm.dirname(e),s=WO.get(Js.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=Sm.join(s,"backup","4_0_0_upgrade_settings.bak"),i=Sm.join(s,Js.HDB_CONFIG_FILE);try{da.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),co.copySync(e,n)}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{da.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),da.info("Updating env variables with new settings values");let d=jF.initOldConfig(e);w_=d[Js.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],C_=d[Js.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],jF.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=Tm.getPropsFilePath();co.accessSync(o,co.constants.F_OK|co.constants.R_OK);let u=Nue(o).get(Js.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
108
- install_user = ${u}`;try{co.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{WO.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let l="New settings file for 4.0.0 upgrade successfully created.";try{co.removeSync(r),console.log(l),da.info(l)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Bue,"updateSettingsFile_4_0_0");L_.async_functions.push(Bue);L_.async_functions.push(Uue);L_.async_functions.push(Pue);L_.async_functions.push(vue);JF.push(L_);XF.exports=JF});var QO=T((uNe,sx)=>{"use strict";var fa=G(),Hue=R(),ex=U(),{DATA_VERSION:que,UPGRADE_VERSION:Gue}=Hue.UPGRADE_JSON_FIELD_NAMES_ENUM,tx=xF(),gm=ZF(),Ea=new Map;tx&&tx.forEach(e=>{Ea.set(e.version,e)});gm&&gm.forEach(e=>{Ea.set(e.version,e)});gm&&gm.forEach(e=>{Ea.set(e.version,e)});function Fue(){return[...Ea.keys()].sort(fa.compareVersions)}a(Fue,"getSortedVersions");function rx(e){let t=e[que],r=e[Gue];return fa.isEmptyOrZeroLength(t)||fa.isEmptyOrZeroLength(r)?(ex.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),ex.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."),[]):[...Ea.keys()].sort(fa.compareVersions).filter(function(s){return fa.compareVersions(s,t)>0&&fa.compareVersions(s,r)<=0})}a(rx,"getVersionsForUpgrade");function xue(e){return rx(e).length>0}a(xue,"hasUpgradesRequired");function kue(e){return fa.isEmptyOrZeroLength(e)?null:Ea.has(e)?Ea.get(e):null}a(kue,"getDirectiveByVersion");sx.exports={getSortedVersions:Fue,getDirectiveByVersion:kue,getVersionsForUpgrade:rx,hasUpgradesRequired:xue}});var Rm=T((_Ne,cx)=>{"use strict";var $ue=require("util"),jO=require("chalk"),Vue=require("os"),ix=dr(),Yue=_r(),Xr=R(),ox=CF(),JO=nT(),{UpgradeObject:nx}=PF(),{forceDowngradePrompt:Kue}=fm(),Wue=go(),D_=U(),$c=G(),XO=cs(),Que=(Ee(),te(Le)),jue=QO(),zue=$ue.promisify(XO.setSchemaDataToGlobal),Jue=Yue.searchByValue,Xue="info_id",Zue="2.9.9",ele="3.0.0";async function tle(e){let t=new ox.HdbInfoInsertObject(1,e,e),r=new JO.InsertObject(Xr.OPERATIONS_ENUM.INSERT,Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return XO.setSchemaDataToGlobal(),ix.insert(r)}a(tle,"insertHdbInstallInfo");async function zO(e){let t,r=await ax(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new ox.HdbInfoInsertObject(i,e,e);let o=new JO.InsertObject(Xr.OPERATIONS_ENUM.INSERT,Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await zue(),ix.insert(o)}a(zO,"insertHdbUpgradeInfo");async function ax(){let e=new JO.NoSQLSeachObject(Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Xue,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Jue(e))}catch(r){D_.info(r)}return t}a(ax,"getAllHdbInfoRecords");async function rle(){let e=await ax();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}a(rle,"getLatestHdbInfoRecord");async function sle(){D_.info("Checking if HDB software has been updated");try{let e=Wue.version(),t=await rle(),r;if($c.isEmpty(t))r=Zue;else if(r=t.data_version_num,$c.compareVersions(r.toString(),e.toString())>0){if(!$c.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jO.yellow(`This instance's data was last run on version ${r}`)),console.error(jO.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.${Vue.EOL}${Xr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");$c.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(jO.yellow(`This instance's data was last run on version ${r}`)),await Kue(new nx(r,e))?await zO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(XO.setSchemaDataToGlobal(),nle(r),e.toString()===r.toString())return;let s=new nx(r,e);if(jue.hasUpgradesRequired(s))return s;$c.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await zO(s.upgrade_version),D_.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw D_.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),D_.fatal(e),e}}a(sle,"getVersionUpdateInfo");function nle(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 ${Xr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Que.databases.system))throw console.log(t),new Error(t);if(!$c.isEmpty(e)&&e<ele)throw console.log(t),new Error(t)}a(nle,"checkIfInstallIsSupported");cx.exports={insertHdbInstallInfo:tle,insertHdbUpgradeInfo:zO,getVersionUpdateInfo:sle}});var fx=T((fNe,dx)=>{"use strict";var ZO=require("joi"),{boolean:ile,string:ux,number:ole}=ZO.types(),lx=require("fs-extra"),P_=R(),_x=require("path"),ale=Ve();dx.exports=cle;function cle(e){let t=ux.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=ZO.object({[P_.INSTALL_PROMPTS.ROOTPATH]:ZO.custom(ule),[P_.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ole.min(0),[P_.INSTALL_PROMPTS.TC_AGREEMENT]:ux.valid("yes","YES","Yes"),[P_.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[P_.INSTALL_PROMPTS.CLUSTERING_ENABLED]:ile});return ale.validateBySchema(e,r)}a(cle,"installValidator");function ule(e,t){if(lx.existsSync(_x.join(e,"system/hdb_user/data.mdb"))||lx.existsSync(_x.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(ule,"validateRootAvailable")});var hx=T((hNe,Ex)=>{"use strict";var{mkdirpSync:lle}=require("fs-extra"),Dn=require("path"),Vc=R(),tN=U(),_le=as(),eN=Fn(),dle=He();Ex.exports=fle;async function fle(e){tN.trace("Mounting HarperDB"),Xs(e),Xs(Dn.join(e,"backup")),Xs(Dn.join(e,"trash")),Xs(Dn.join(e,"keys")),Xs(Dn.join(e,"keys",Vc.LICENSE_FILE_NAME)),Xs(Dn.join(e,"log")),Xs(Dn.join(e,"doc")),Xs(Dn.join(e,"database")),Xs(Dn.join(e,Vc.TRANSACTIONS_DIR_NAME)),Xs(Dn.join(e,"clustering","leaf")),Xs(Dn.join(e,"components")),await Ele()}a(fle,"mountHdb");async function Ele(){let e=ku(),t=Object.keys(eN);for(let r=0;r<t.length;r++){let s=t[r],n=eN[s].hash_attribute;try{dle.initSystemSchemaPaths(Vc.SYSTEM_SCHEMA_NAME,s);let i=new e(Vc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=eN[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await _le.createTable(s,i)}catch(i){throw tN.error(`issue creating environment for ${Vc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(Ele,"createLMDBTables");function Xs(e){lle(e,{mode:Vc.HDB_FILE_PERMISSIONS}),tN.info(`Directory ${e} created`)}a(Xs,"makeDirectory")});var Om=T((pNe,yx)=>{"use strict";var sN=require("os"),Tx=require("inquirer"),Os=require("fs-extra"),hle=require("properties-reader"),ha=require("chalk"),Un=require("path"),mle=require("human-readable-ids").hri,ple=require("ora"),Sle=require("yaml"),mt=U(),_o=j(),M_=G(),Am=po(),gx=Rm(),Rx=go(),ee=R(),Tle=fx(),gle=hx(),nN=rt(),Rle=Er(),Ale=oE(),Ole=UO(),Nle=cs(),ble=require("util").promisify,yle=ble(Nle.setSchemaDataToGlobal),Ile=KO(),Yc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),er=a(e=>ha.magenta.bold(e),"HDB_PROMPT_MSG"),wle="https://harperdb.io/legal/end-user-license-agreement",fo=sN.EOL,uo="",Cle="yes",mx="Starting HarperDB install...",px="HarperDB installation was successful.",Sx="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Lle="An out of date version of HarperDB is already installed.",rN="It appears that HarperDB is already installed. Exiting install...",Dle="Aborting install",Ple=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])$/),Mle=new RegExp(/^[^\s.,*>]+$/),Ule=sN.homedir(),vle=Un.join(Ule,ee.HDB_ROOT_DIR_NAME),Ble=9925,Hle="HDB_ADMIN",qle="CLUSTER_USER",wr={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:"},Kc=Am([ee.INSTALL_PROMPTS.HDB_CONFIG]),Mn,Ax=!1;yx.exports=Ox;Ox.createSuperUser=bx;async function Ox(){console.log(er(fo+mx+fo)),mt.notify(mx);let e;Kc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Gle());let t=xle();Object.assign(t,e);let r=Tle(t);if(r)throw r.message;await kle(),await $le(t);let s=await Fle(t);Mn=s[ee.INSTALL_PROMPTS.ROOTPATH],Kc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Un.dirname(Kc[ee.INSTALL_PROMPTS.HDB_CONFIG])===Mn&&(Ax=!0),!Kc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Os.pathExists(Un.join(Mn,ee.HDB_CONFIG_FILE))&&(console.error(rN),process.exit());let n=ple({prefixText:er("Installing"),color:"magenta",spinner:"simpleDots"});if(n.start(),M_.isEmpty(Mn))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");_o.setHdbBasePath(Mn),await gle(Mn),await Vle(),await Yle(s),mt.initLogSettings(!0),await bx(s),await Wle(s),await Ile.generateKeys(),await Qle(),Ole(),n.stop(),console.log(er(fo+px+fo)),mt.notify(px)}a(Ox,"install");function Gle(){let e=Sle.parseDocument(Os.readFileSync(Kc[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=nN.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Gle,"getConfigFromFile");async function Fle(e){mt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Yc,when:lo(e[ee.INSTALL_PROMPTS.ROOTPATH],wr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:uo,default:vle,validate:async n=>Pn(n)?Pn(n):await Os.pathExists(Un.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:er(wr.DESTINATION)},{type:"input",transformer:Yc,when:lo(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],wr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:uo,default:Ble,validate:n=>Ple.test(n)?!0:"Invalid port.",message:er(wr.HDB_PORT)},{type:"input",transformer:Yc,when:lo(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],wr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:uo,default:Hle,validate:n=>Pn(n)?Pn(n):(t=n,!0),message:er(wr.HDB_USERNAME)},{type:"password",when:lo(e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],wr.HDB_PASS),name:ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:uo,validate:n=>Pn(n)?Pn(n):!0,message:er(wr.HDB_PASS)}];if(M_.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Yc,when:lo(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],wr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:uo,default:mle.random(),validate:i=>Mle.test(i)?!0:"Invalid node name, must not contain ., * or >",message:er(wr.NODE_NAME)},{type:"input",transformer:Yc,when:lo(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],wr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:uo,default:qle,validate:i=>Pn(i)?Pn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:er(wr.CLUSTER_USERNAME)},{type:"password",when:lo(e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],wr.CLUSTER_PASS),name:ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:uo,validate:i=>Pn(i)?Pn(i):!0,message:er(wr.CLUSTER_PASS)}];r.push(...n)}let s=await Tx.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}a(Fle,"installPrompts");function lo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${er(t)} ${ha.gray("[hidden]")}`),mt.trace(`${er(t)} [hidden]`)):(console.log(`${er(t)} ${e}`),mt.trace(`${er(t)} ${e}`)),!1):!0}a(lo,"displayCmdEnvVar");function Pn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Pn,"checkForEmptyValue");function xle(){let e=Object.keys(ee.INSTALL_PROMPTS),t=Am(e),r=Am(Object.keys(ee.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=ee.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}a(xle,"checkForPromptOverride");async function kle(){mt.trace("Checking for existing install.");let e=M_.getPropsFilePath(),t=await Os.pathExists(e),r;if(t){mt.trace(`Install found an existing boot prop file at:${e}`);let s=hle(e),n=nN.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Os.pathExists(n)}if(!t&&M_.noBootFile()&&(r=!0),r){if(mt.trace(`Install found existing HDB config at:${e}`),await gx.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${Rx.version()}. Exiting install...`;console.log(fo+ha.magenta.bold(Lle)),console.log(ha.magenta.bold(n)),mt.error(n)}else console.log(fo+ha.magenta.bold(rN)),mt.error(rN);process.exit(0)}}a(kle,"checkForExistingInstall");async function $le(e){mt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${wle}${fo}and can be viewed by typing or copying and pasting the URL into your web browser.${fo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:uo,transformer:Yc,when:lo(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:er(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:ha.yellow("Please enter 'yes' or 'no'")},s=await Tx.prompt([r]);s[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&s[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Cle&&(console.log(ha.yellow(Sx)),mt.error(Sx),process.exit(0))}a($le,"termsAgreement");async function Vle(){let e=Un.join(Mn,ee.HDB_CONFIG_FILE),t;try{t=sN.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}
109
- install_user = ${t}`,s=M_.getHomeDir(),n=Un.join(s,ee.HDB_HOME_DIR_NAME),i=Un.join(n,ee.LICENSE_KEY_DIR_NAME);try{Os.mkdirpSync(n,{mode:ee.HDB_FILE_PERMISSIONS}),Os.mkdirpSync(i,{mode:ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Un.join(n,ee.BOOT_PROPS_FILE_NAME);try{await Os.writeFile(o,r)}catch(c){throw mt.error(`There was an error creating the boot file at path: ${o}`),c}_o.setProperty(ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),_o.setProperty(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),_o.setProperty(_o.BOOT_PROPS_FILE_PATH,o)}}a(Vle,"createBootPropertiesFile");async function Yle(e){mt.trace("Creating HarperDB config file");let t=Am(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{nN.createConfigFile(t),_o.initSync()}catch(r){Kle(r)}}a(Yle,"createConfigFile");function Kle(e){mt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Dle);let t=Un.resolve(_o.get(_o.BOOT_PROPS_FILE_PATH),"../");t&&Os.removeSync(t),Mn&&(Ax?Os.readdirSync(Mn,{withFileTypes:!0}).forEach(s=>{let n=Un.join(s.path,s.name);n!==Kc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Os.removeSync(n)}):Os.removeSync(Mn)),process.exit(1)}a(Kle,"rollbackInstall");async function Nx(e,t){mt.trace("Creating admin user"),await yle();let r;try{r=await Ale.addRole(e)}catch(s){if(s.message.includes("already exists"))t=void 0;else throw s.message+="Error creating role",s}if(t)try{t.role=r.role,await Rle.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(Nx,"createAdminUser");async function bx(e){mt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Nx(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(bx,"createSuperUser");async function Wle(e){mt.trace("Creating Cluster user.");let t;e[ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Nx({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Wle,"createClusterUser");async function Qle(){let e=Rx.version();if(e)await gx.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Qle,"insertHdbVersionInfo")});var Cx=T((TNe,wx)=>{"use strict";var iN=G(),Zr=U(),Ix=QO();wx.exports={processDirectives:jle};async function jle(e){console.log("Starting upgrade process...");let t=Ix.getVersionsForUpgrade(e),r=Xle(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Zr.notify(c),console.log(c);let u=[],_=[];try{u=zle(o.sync_functions)}catch(l){throw Zr.error(`Error while running an upgrade script for ${o.version}`),l}try{_=await Jle(o.async_functions)}catch(l){throw Zr.error(`Error while running an upgrade script for ${o.version}`),l}s.push(...u,..._)}return s}a(jle,"processDirectives");function zle(e){if(iN.isEmptyOrZeroLength(e))return Zr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Zr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Zr.info(`Running function ${r.name}`),!(r instanceof Function)){Zr.info("Variable being processed is not a function");continue}let s=r();Zr.info(s),t.push(s)}return t}a(zle,"runSyncFunctions");async function Jle(e){if(iN.isEmptyOrZeroLength(e))return Zr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Zr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Zr.info(`Running function ${n.name}`),!(n instanceof Function)){Zr.info("Variable being processed is not a function");continue}let i=await n();Zr.info(i),t.push(i)}return t}a(Jle,"runAsyncFunctions");function Xle(e){if(iN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Ix.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Xle,"getUpgradeDirectivesToInstall")});var cN=T((RNe,vx)=>{"use strict";var Nm=j();Nm.initSync();var Mx=require("chalk"),Lx=require("fs-extra"),Ri=U(),gi=R(),Dx=go(),Zle=Cx(),oN=G(),Ux=Rm(),e_e=fm(),Px=Qm(),t_e=cs(),r_e=require("util").promisify,s_e=r_e(t_e.setSchemaDataToGlobal),aN,{UPGRADE_VERSION:bm}=gi.UPGRADE_JSON_FIELD_NAMES_ENUM;vx.exports={upgrade:n_e};async function n_e(e){await s_e(),aN===void 0&&(aN=Ec()),Lx.existsSync(Nm.get(Nm.BOOT_PROPS_FILE_PATH))||(U_("The hdb_boot_properties file was not found. Please install HDB.",gi.LOG_LEVELS.ERROR),process.exit(1)),Lx.existsSync(Nm.get(gi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(U_("The hdb settings file was not found. Please make sure HDB is installed.",gi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Ux.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),U_(`This version of HarperDB is ${Dx.version()}`,gi.LOG_LEVELS.INFO);let r=t[bm]?t[bm]:Dx.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${gi.HDB_SUPPORT_ADDRESS}`),Ri.notify("Missing new version field from upgrade info object"),process.exit(1)),await i_e();let s,n=0;try{s=await e_e.forceUpdatePrompt(t)}catch(i){Ri.error("There was an error when prompting user about upgrade."),Ri.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Ri.info(`Starting upgrade to version ${r}`),await o_e(t),U_(`HarperDB was successfully upgraded to version ${t[bm]}`,gi.LOG_LEVELS.INFO)}a(n_e,"upgrade");async function i_e(){let e=!1,t=await Px.findPs(gi.HDB_PROC_NAME);if(oN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Px.findPs("hdb_express");oN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await aN.list();oN.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(Mx.red(r)),Ri.error(r),process.exit(1)}}a(i_e,"checkIfRunning");async function o_e(e){try{await Zle.processDirectives(e)}catch(t){throw U_("There was an error during the data upgrade. Please check the logs.",gi.LOG_LEVELS.ERROR),t}try{await Ux.insertHdbUpgradeInfo(e[bm])}catch(t){Ri.error("Error updating the 'hdb_info' system table."),Ri.error(t)}}a(o_e,"runUpgrade");function U_(e,t=void 0){t||(t=Ri.info),Ri[t](e),console.log(Mx.magenta(e))}a(U_,"printToLogAndConsole")});var Fx=T((ONe,Gx)=>{"use strict";var{promises:lN,createReadStream:a_e,createWriteStream:c_e}=require("fs"),{createGzip:u_e}=require("zlib"),{promisify:l_e}=require("util"),{pipeline:__e}=require("stream"),d_e=l_e(__e),f_e=require("path"),pa=j();pa.initSync();var ma=U(),{CONFIG_PARAMS:v_,ITC_EVENT_TYPES:E_e}=R(),{onMessageFromWorkers:h_e}=Qe(),m_e=6e4,p_e="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",S_e="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",uN,Hx;Gx.exports=qx;h_e(e=>{e.type===E_e.RESTART&&(pa.initSync(!0),clearInterval(Hx),pa.get(v_.LOGGING_ROTATION_ENABLED)&&qx())});async function qx(){try{let e=ma.getLogFilePath(),t=pa.get(v_.LOGGING_ROTATION_MAXSIZE),r=pa.get(v_.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ma.error(p_e);return}let s=pa.get(v_.LOGGING_ROTATION_PATH);if(!s){ma.error(S_e);return}let n;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?n=c*1e9:o==="M"?n=c*1e6:n=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}uN=Date.now()/6e4,ma.trace("Log rotate enabled, maxSize:",t,"interval:",r),Hx=setInterval(async()=>{if(n){let o;o=await lN.stat(e),o.size>=n&&await Bx(e,s)}i&&Date.now()/6e4-uN>=i&&(await Bx(e,s),uN=Date.now()/6e4)},m_e).unref()}catch(e){ma.error(e)}}a(qx,"logRotator");async function Bx(e,t){let r=pa.get(v_.LOGGING_ROTATION_COMPRESS),s=f_e.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await d_e(a_e(e),u_e(),c_e(s)),await lN.unlink(e)):await lN.rename(e,s),ma.closeLogFile(),ma.notify(`hdb.log rotated, old log moved to ${s}`)}a(Bx,"moveLogFile")});var Sa=T((MNe,Qx)=>{"use strict";var Ns=j();Ns.initSync();var bNe=Jo(),yt=R(),Bn=U(),Ai=require("fs-extra"),Eo=require("path"),T_e=require("systeminformation"),g_e=UO(),R_e=Om(),_N=require("chalk"),A_e=To(),Oi=G(),kx=rt(),$x=po(),xx=GE(),O_e=cN(),N_e=Fx(),b_e=require("minimist"),{PACKAGE_ROOT:y_e}=R(),{startHTTPThreads:I_e,startSocketServer:yNe,mostIdleRouting:INe,remoteAffinityRouting:wNe}=(tm(),te(PO)),w_e=Rm(),{isMainThread:C_e}=require("worker_threads"),CNe=Fn(),LNe=Ui(),DNe=bS(),PNe=ku(),dN=R(),vn,Wc,Vx=!1,L_e="Upgrade complete. Starting HarperDB.",D_e="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",P_e="HarperDB not found, starting install process.",M_e="There was an error during install, check install_log.log for more details. Exiting.",U_e="HarperDB successfully started.";function v_e(){if(!Vx){let e=a(()=>{Ai.removeSync(Eo.join(Ns.get(yt.CONFIG_PARAMS.ROOTPATH),yt.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(v_e,"addExitListeners");async function Yx(e=!1,t=!1){if(console.log(_N.magenta("Starting HarperDB...")),await Wx()===!1){console.log(P_e);try{await R_e()}catch(o){console.error(M_e,o),Bn.error(o),process.exit(1)}}let r,s=Wc?.service==="clustering";Wc?.service&&!s&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Ai.readFile(Eo.join(Ns.get(yt.CONFIG_PARAMS.ROOTPATH),yt.HDB_PID_FILE),"utf8")),c=await T_e.processes();for(let u of c.list)if(u.pid===o){s?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}vn===void 0&&(vn=Ec()),s&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await xx.generateNatsConfig(),await vn.startClusteringProcesses(!0),process.exit()),v_e(),await Ai.writeFile(Eo.join(Ns.get(dN.CONFIG_PARAMS.ROOTPATH),dN.HDB_PID_FILE),`${process.pid}`),Bn.info("HarperDB PID",process.pid);let n;try{let o=await w_e.getVersionUpdateInfo();o!==void 0&&(n=o[yt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await O_e.upgrade(o),console.log(L_e))}catch(o){n?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${n}. Exiting HarperDB.`),Bn.error(o)):(console.error(D_e),Bn.error(o)),process.exit(1)}if(!e){let o=$x(Object.keys(yt.CONFIG_PARAM_MAP),!0);!Oi.isEmpty(o)&&!Oi.isEmptyOrZeroLength(Object.keys(o))&&kx.updateConfigValue(void 0,void 0,o,!0,!0)}g_e(),q_e(),Oi.autoCastBoolean(Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&C_e&&await xx.generateNatsConfig(t)}a(Yx,"initialize");async function B_e(e=!1){try{Wc=b_e(process.argv),Wc.ROOTPATH&&kx.updateConfigObject("settings_path",Eo.join(Wc.ROOTPATH,yt.HDB_CONFIG_FILE)),await Yx(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Wc.service;Oi.autoCastBoolean(Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await vn.startClusteringProcesses(),await vn.startClusteringThreads()),await I_e(process.env.DEV_MODE?1:Ns.get(dN.CONFIG_PARAMS.THREADS)),Ns.get(yt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await N_e(),t||Kx()}catch(t){console.error(t),Bn.error(t),process.exit(1)}}a(B_e,"main");function Kx(){Bn.suppressLogging(()=>{console.log(_N.magenta(""+Ai.readFileSync(Eo.join(y_e,"utility/install/ascii_logo.txt")))),console.log(_N.magenta(`|------------- HarperDB ${A_e.version} successfully started ------------|`))}),Bn.notify(U_e)}a(Kx,"started");async function H_e(e=!0){Vx=!e;try{vn===void 0&&(vn=Ec()),vn.enterPM2Mode(),await Yx(),Oi.autoCastBoolean(Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await vn.startClusteringProcesses(),await vn.startService(yt.PROCESS_DESCRIPTORS.HDB),Kx(),e&&process.exit(0)}catch(t){console.error(t),Bn.error(t),process.exit(1)}}a(H_e,"launch");function q_e(){let e=Eo.join(Ns.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.LICENSE_FILE_NAME),t=Eo.join(e,yt.LICENSE_FILE_NAME),r=Eo.join(e,yt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=$x(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Oi.isEmpty(s)||Oi.isEmpty(n))return;Ai.mkdirpSync(e),Ai.writeFileSync(r,s),Ai.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Bn.error(n)}}a(q_e,"writeLicenseFromVars");Qx.exports={launch:H_e,main:B_e,isHdbInstalled:Wx};async function Wx(){try{await Ai.stat(Oi.getPropsFilePath()),await Ai.stat(Ns.get(yt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Oi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Bn.error(`Error checking for HDB install - ${e}`),e}return!0}a(Wx,"isHdbInstalled")});var fN=T((vNe,Jx)=>{"use strict";var G_e=U(),F_e=R(),x_e=require("util"),k_e=require("child_process"),jx=x_e.promisify(k_e.exec),$_e=Xn(),B_=Ec(),zx="Stopping HarperDB.";Jx.exports=V_e;async function V_e(){if(console.log(zx),G_e.notify(zx),await B_.isServiceRegistered(F_e.HDB_PROC_DESCRIPTOR)){B_.enterPM2Mode();let r=await B_.getUniqueServicesList();for(let s in r)await B_.stop(s)}await B_.kill();let t=await $_e.getHDBProcessInfo();t.clustering.forEach(r=>{jx(`kill ${r.pid}`)}),t.core.forEach(r=>{jx(`kill ${r.pid}`)})}a(V_e,"stop")});var gN=T((HNe,ok)=>{"use strict";var Y_e=require("os"),Im=require("https"),Xx=require("http"),Ni=require("fs-extra"),K_e=require("yaml"),W_e=require("human-readable-ids").hri,{pipeline:Zx}=require("stream/promises"),{createWriteStream:wm,ensureDir:Cm}=require("fs-extra"),{join:en}=require("path"),SN=require("lodash"),sk=j(),Q_e=Xn(),nk=U(),q_=rt(),{restart:j_e}=Jo(),z_e=fN(),hN=G(),ek=st(),J_e=cs(),{isHdbInstalled:X_e,main:ik,launch:Z_e}=Sa(),ede=Om(),Lm=R(),{SYSTEM_TABLE_NAMES:tk,SYSTEM_SCHEMA_NAME:tde,CONFIG_PARAMS:H_,OPERATIONS_ENUM:tr}=Lm,rde=9925,sde="info",nde=1e4,ide="clone-node-config.yaml",TN=[tk.ROLE_TABLE_NAME,tk.USER_TABLE_NAME],G_=process.env.HDB_LEADER_USERNAME,F_=process.env.HDB_LEADER_PASSWORD,Qc=process.env.HDB_LEADER_URL,EN=process.env.HDB_LEADER_CLUSTERING_HOST,ode=process.env.HDB_LEADER_CLUSTERING_PORT,ade=process.env.HDB_FULLY_CONNECTED==="true",ho=process.env.HDB_CLONE_OVERTOP==="true",mN,Be,ot,at,zc,jc,es,Zs,pN;ok.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await X_e();if(!ho&&r)return console.info("HarperDB is already installed, no clone node will be performed"),ik();if(ho&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let s=ho?`Cloning node ${Qc} overtop of existing HarperDB install`:`Cloning node: ${Qc}`;if(console.info(s),ho)pN=q_.readConfigFile(),jc=pN.rootPath,await z_e();else try{jc=process.env.ROOTPATH?process.env.ROOTPATH:en(Y_e.homedir(),Lm.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let n;try{n=en(jc,ide),Be=K_e.parseDocument(Ni.readFileSync(n,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(n+" not found, using default config values.")}zc=Be?.clustering?.nodeName??W_e.random(),ot=await x_({operation:tr.GET_CONFIGURATION}),ot=await JSON.parse(ot.body),process.env.HDB_FETCH==="true"?(await _de(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await lde(),ho||await ude(),await cde(),await dde(),await fde(t),console.info("Successfully cloned node: "+Qc),t&&process.exit()},"cloneNode");async function cde(){console.info("Cloning configuration"),mN=ot?.clustering?.enabled;let e={[H_.ROOTPATH]:jc};if(mN&&Be?.clustering?.enabled!==!1){if(EN==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[H_.CLUSTERING_ENABLED]=!0;let s=ot?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(ode)||ot?.clustering?.hubServer?.cluster?.network?.port;e[H_.CLUSTERING_USER]=ot?.clustering?.user;let i=sk.get(H_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:EN,port:n}):i=[{host:EN,port:n}],Array.isArray(s)&&(i=i.concat(s)),e[H_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Be?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in ot)ot[s]?.package&&!t[s]&&await q_.addConfig(s,ot[s]);Be?.databases&&await q_.addConfig("databases",ot?.schemas);let r;Be&&(r=q_.flattenConfig(Be));for(let s in r){let n=Lm.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(ho?e.clustering_nodeName=pN?.clustering?.nodeName??zc:e.clustering_nodeName=zc),nk.info("Cloning config:",e),SN.isEmpty(e)||q_.updateConfigValue(void 0,void 0,e,!1,!0)}a(cde,"cloneConfig");async function ude(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=jc,!G_)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=G_,!F_)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=F_,process.env.OPERATIONSAPI_NETWORK_PORT=Be?.operationsApi?.network?.port??rde,process.env.CLUSTERING_NODENAME=zc,process.env.CLUSTERING_LOGLEVEL=Be?.clustering?.logLevel??sde,await ede()}a(ude,"installHDB");async function lde(){console.info("Cloning system database");let e=Ta("system");await Cm(e);let t=en(e,"system.mdb"),r=wm(t,{overwrite:!0}),s={operation:tr.GET_BACKUP,database:"system"};ho||(s.tables=TN);let n=await rk(s,r);if(await Ni.utimes(t,Date.now(),new Date(n.date)),at=await x_({operation:tr.DESCRIBE_ALL}),at=await JSON.parse(at.body),es=Be?.databaseConfig?.excludeDatabases,es=es?es.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},ot.schemas)for(let i in ot.schemas)Object.keys(ot.schemas[i]).includes("tables")&&(es[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));Zs=Be?.databaseConfig?.excludeTables,Zs=Zs?Zs.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in at){if(es[i]){at[i]="excluded";continue}if(SN.isEmpty(at[i]))continue;let o=[],c=!1;for(let E in at[i])Zs[i+E]?(c=!0,at[i][E]="excluded"):o.push(E);let u;c?(console.info(`Cloning database: ${i} tables: ${o}`),u={operation:tr.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),u={operation:tr.GET_BACKUP,database:i});let _=Ta(i);await Cm(_);let l=en(_,i+".mdb"),d=wm(l,{overwrite:!0}),f=await rk(u,d);await Ni.utimes(l,Date.now(),new Date(f.date))}}a(lde,"cloneTables");async function _de(){console.info("Cloning system database using fetch");let e={operation:tr.GET_BACKUP,database:"system"};ho||(e.tables=TN);let t=await ym(e,!0),r=Ta("system");await Cm(r);let s=en(r,"system.mdb");if(await Zx(t.body,wm(s,{overwrite:!0})),await Ni.utimes(s,Date.now(),new Date(t.headers.get("date"))),at=await ym({operation:tr.DESCRIBE_ALL}),at=await at.json(),es=Be?.databaseConfig?.excludeDatabases,es=es?es.reduce((n,i)=>({...n,[i.database]:!0}),{}):{},ot.schemas)for(let n in ot.schemas)Object.keys(ot.schemas[n]).includes("tables")&&(es[n]=!0,console.info(`Excluding database '${n}' from clone because leader node has custom pathing configured for one or more of its tables`));Zs=Be?.databaseConfig?.excludeTables,Zs=Zs?Zs.reduce((n,i)=>({...n,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let n in at){if(es[n]){at[n]="excluded";continue}if(SN.isEmpty(at[n]))continue;let i=[],o=!1;for(let f in at[n])Zs[n+f]?(o=!0,at[n][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${n} tables: ${i}`),c=await ym({operation:tr.GET_BACKUP,database:n,tables:i},!0)):(console.info(`Cloning database: ${n}`),c=await ym({operation:tr.GET_BACKUP,database:n},!0));let u=Ta(n);await Cm(u);let _=new Date(c.headers.get("date")),l=en(u,`${_.getTime()}-${n}.mdb`);await Zx(c.body,wm(l,{overwrite:!0}));let d=en(u,n+".mdb");await Ni.rename(l,d),await Ni.utimes(d,Date.now(),_)}}a(_de,"cloneTablesFetch");async function ym(e,t=!1){let r=Be?.httpsRejectUnauthorized??!1,s=new Im.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(G_+":"+F_).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Qc,{method:"POST",headers:i,body:JSON.stringify(e),agent:s,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(ym,"leaderHttpReqFetch");function Ta(e){return Be?.databases&&Be?.databases[e]?.path||Be?.storage&&Be?.storage?.path||en(jc,"database")}a(Ta,"getDbFileDir");async function dde(){let{deployComponent:e}=nh(),t=await x_({operation:tr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let n of t.entries){if(!n.entries)continue;let i=!1;if(Be?.componentConfig?.exclude){for(let o of Be.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=Be?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await x_({operation:tr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(dde,"cloneComponents");async function fde(e){if(!mN)return;let t=await Q_e.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await Z_e(!1):await ik():(console.info(await j_e({operation:tr.RESTART})),await hN.async_set_timeout(nde)),console.info("Clustering cloned tables"),e&&await hN.async_set_timeout(2e3);let r=Be?.clusteringConfig?.subscribeToLeaderNode!==!1,s=Be?.clusteringConfig?.publishToLeaderNode!==!1;await J_e.setSchemaDataToGlobalAsync();let n=Dl(),i=await x_({operation:tr.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await Ni.stat(en(Ta("system"),"system.mdb"));for(let _ of TN)o.push({schema:tde,table:_,subscribe:r,publish:s,start_time:c.mtime.toISOString()});for(let _ in at){if(at[_]==="excluded")continue;let l=await Ni.stat(en(Ta(_),_+".mdb"));l.mtime.setSeconds(l.mtime.getSeconds()-10);for(let d in at[_])at[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:s,start_time:l.mtime.toISOString()})}await ek.createTableStreams(o),nk.info("Sending add_node request to node:",ot?.clustering?.nodeName,"with subscriptions:",o);let u;if(ade==="true"&&i.connections.length>0){let _=bE(),l=[{node_name:ot?.clustering?.nodeName,subscriptions:o}],d=!1;zc=sk.get(Lm.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===zc)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(es[h.schema]||Zs[h.schema+h.table])continue;d=!0;let m=await Ni.stat(en(Ta(h.schema),h.schema+".mdb"));m.mtime.setSeconds(m.mtime.getSeconds()-10),h.start_time=m.mtime.toISOString(),E.subscriptions.push(h)}l.push(E)}d&&(u=await _({operation:tr.CONFIGURE_CLUSTER,connections:l}),console.info(JSON.stringify(u)))}u||await n({operation:tr.ADD_NODE,node_name:ot?.clustering?.nodeName,subscriptions:o},!0),await ek.closeConnection()}a(fde,"clusterTables");async function x_(e){let t=new Im.Agent({rejectUnauthorized:Be?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(G_+":"+F_).toString("base64"),"Content-Type":"application/json"},n=new URL(Qc),i={protocol:n.protocol,host:n.hostname,method:"POST",headers:s};return n.protocol==="https:"&&(i.agent=t),n.port&&(i.port=n.port),await hN.httpRequest(i,e)}a(x_,"leaderHttpReq");async function rk(e,t){let r=new Im.Agent({rejectUnauthorized:Be?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(G_+":"+F_).toString("base64"),"Content-Type":"application/json"},i=new URL(Qc),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r,Xx=Im),i.port&&(o.port=i.port),new Promise((c,u)=>{let _=Xx.request(o,l=>{l.statusCode!==200&&u("Request to leader node failed with code: "+l.statusCode),l.pipe(t),l.on("end",()=>{t.close(),c(l.headers)})});_.on("error",l=>{u(l)}),_.write(JSON.stringify(e)),_.end()})}a(rk,"leaderHttpStream")});var ck=T((GNe,ak)=>{var Ede=Om(),hde=U();ak.exports=mde;async function mde(){try{await Ede()}catch(e){console.error("There was an error during the install."),console.error(e),hde.error(e),process.exit(1)}}a(mde,"install")});var _k=T((xNe,lk)=>{"use strict";var pde=UE(),Sde=U(),uk="Registration failed.";async function Tde(){let e;try{e=await pde.register()}catch(t){return Sde.error(`Registration error ${t}`),uk}return e||uk}a(Tde,"register");lk.exports={register:Tde}});var hk=T(($Ne,Ek)=>{"use strict";var AN=require("fs-extra"),ON=require("path"),RN=require("yaml"),k_=st(),$_=R(),dk=ke(),NN=U(),gde=Er(),Rde=LE(),Ade=wE(),Ode=Xn(),fk=j(),{isHdbInstalled:Nde}=Sa();fk.initSync();var bs={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Cr={LEAF:"leaf server",HUB:"hub server"},Dm;Ek.exports=bde;async function bde(){let e={harperdb:{status:bs.STOPPED}};if(!await Nde()){e.harperdb.status=bs.NOT_INSTALLED,console.log(RN.stringify(e));return}Dm=fk.get($_.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await AN.readFile(ON.join(Dm,$_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===$_.NODE_ERROR_CODES.ENOENT){NN.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=bs.STOPPED,console.log(RN.stringify(e));return}throw s}let r=await Ode.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=bs.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await yde(r),e.clustering[Cr.HUB].status===bs.RUNNING&&e.clustering[Cr.LEAF].status===bs.RUNNING){let s=[],n=await Rde({});for(let o of n.nodes){let c={};for(let u in o)c[u.replace("_"," ")]=o[u];s.push(c)}e.clustering.network=s;let i=await Ade.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 k_.closeConnection()}console.log(RN.stringify(e)),process.exit()}a(bde,"status");async function yde(e){let t={[Cr.HUB]:{},[Cr.LEAF]:{}};if(e.clustering.length===0)return t[Cr.HUB].status=bs.STOPPED,t[Cr.LEAF].status=bs.STOPPED,t;let{port:r}=k_.getServerConfig($_.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await gde.getClusterUser();try{(await k_.createConnection(r,s,n,!1)).close(),t[Cr.HUB].status=bs.RUNNING}catch{t[Cr.HUB].status=bs.ERRORED}let{port:i}=k_.getServerConfig($_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await k_.createConnection(i,s,n,!1)).close(),t[Cr.LEAF].status=bs.RUNNING}catch{t[Cr.LEAF].status=bs.ERRORED}try{t[Cr.HUB].pid=Number.parseInt(await AN.readFile(ON.join(Dm,"clustering",dk.PID_FILES.HUB),"utf8"))}catch(o){NN.error(o),t[Cr.HUB].pid=void 0}try{t[Cr.LEAF].pid=Number.parseInt(await AN.readFile(ON.join(Dm,"clustering",dk.PID_FILES.LEAF),"utf8"))}catch(o){NN.error(o),t[Cr.LEAF].pid=void 0}return t}a(yde,"getHubLeafStatus")});var Jc=U(),Ide=go(),bN=R(),Pm=require("fs"),mk=require("path"),YNe=require("os"),{PACKAGE_ROOT:wde}=R(),Cde=lb(),KNe=(tm(),te(PO)),{SERVICE_ACTIONS_ENUM:tn}=bN;Lde();function Lde(){let e=Cde();if(e)if(e.error){console.error(e.error),Jc.error(e.error);return}else e.warn&&(console.warn(e.warn),Jc.warn(e.warn));let t;Pm.readdir(mk.join(wde,"bin"),r=>{if(r)return Jc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case tn.DEV:process.env.DEV_MODE=!0;case tn.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Pm.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Pm.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Pm.existsSync(mk.join(n,bN.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),Sa().main();break;case tn.START:process.env.HDB_LEADER_URL?gN()(!0).catch(f=>{console.log(f)}):s=Sa().launch();break;case tn.INSTALL:ck()().then(()=>Sa().main(!0)).catch(d=>{console.error(d)});break;case tn.REGISTER:_k().register().then(d=>{console.log(d)}).catch(d=>{console.error(d)});break;case tn.STOP:fN()().then(()=>{process.exit(0)}).catch(d=>{console.error(d)});break;case tn.RESTART:Jo().restart({}).then().catch(d=>{Jc.error(d),console.error(`There was an error restarting harperdb. ${d}`),process.exit(1)});break;case tn.VERSION:Ide.printVersion();break;case tn.UPGRADE:Jc.setLogLevel(bN.LOG_LEVELS.INFO),cN().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(d=>{Jc.error(`Got an error during upgrade ${d}`)});break;case tn.STATUS:hk()().then().catch(d=>{console.error(d)});break;case void 0:process.env.HDB_LEADER_URL?gN()().catch(f=>{console.log(f)}):Sa().main();break;default:console.warn(`The "${t}" command is not understood.`);case tn.HELP:console.log(`
99
+ Reindexing upgrade started for transaction logs`),Mi.notify("Reindexing upgrade started for transaction logs"),await XF(LN,!0,e)),Mi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(ud?", but errors occurred":"")}a(Lue,"reindexUpgrade");async function XF(e,t,r){let n=await js.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=Ui.join(e,o.toString());if(o===".DS_Store")continue;let l=await js.readdir(c),_=l.length;for(let u=0;u<_;u++){let d=l[u];if(d!==".DS_Store"&&js.statSync(Ui.join(c,d)).isDirectory())try{await Due(o,d,t),_r.info(`Reindexing started for ${o}.${d}`),Mi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Mue(o,d,c,t,r),_r.info(`Reindexing completed for ${o}.${d}`),Mi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){ud=!0,f.schema_path=c,f.table_name=d,Mi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Mi.error(f),_r.error(f),console.error(f)}}}if(!ud)try{await js.rm(jm,{recursive:!0})}catch{}}a(XF,"processTables");async function Due(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ui.join(jm,s);await js.ensureDir(jm),await js.writeFile(i,""),_r=wue({level:"debug",formatters:{bindings(){}}},i)}a(Due,"initPinoLogger");var Pue=20;async function Mue(e,t,r,n,s){let i;try{i=await pn.openEnvironment(r,t,n)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Mi.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`),_r.error(g);return}throw g}let o=Bue(i.dbis),c=pn.openDBI(i,o),l=Object.keys(i.dbis),_=pn.statDBI(i,o);_r.info(`Old environment stats: ${JSON.stringify(_)}`);let u=new Iue.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});u.start(_.entryCount,0,{});let d=await pn.createEnvironment(r,t,!1);pn.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),n||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>Pue&&await E();await E()}catch(g){throw ud=!0,_r.error(g),g}async function E(){let g,N=f.map(({value:G})=>G);n?g=await Promise.all(N.map(G=>Uue(d,G))):g=await Oue(d,o,l.filter(G=>G!=="__blob__"),N,!1);for(let G=0,x=f.length;G<x;G++){let{key:D,value:K}=f[G];_r.info(`Record hash value: ${D} hash: ${o}`);let $;n?$=g[G]:$=g.written_hashes.indexOf(D)>-1,ld($,!0),vue(d,o,K[o],n),_r.info(`Insert success, written hashes: ${g.written_hashes}`),u.increment()}f=[],u.value/u.total*100%10===0&&Mi.notify(`${e}.${t} ${u.value}/${u.total} records inserted`),_r.info(`${u.value}/${u.total} records inserted`)}a(E,"finishOutstanding"),u.stop();let h=pn.statDBI(i,o),p=pn.statDBI(d,o);if(_r.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),ld.deepStrictEqual(h.entryCount,p.entryCount),await pn.closeEnvironment(i),await pn.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],s){let g=Ui.join(r,t),N=Ui.join(g,"data.mdb"),M=Ui.join(g,"lock.mdb");await js.unlink(N),await js.unlink(M),await js.rmdir(g),_r.info(`Deleted old environment files from schema folder: ${N}, ${M}`)}let S=await pn.openEnvironment(r,t),A=pn.statDBI(S,o);_r.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(A)}`),ld.deepStrictEqual(A.entryCount,p.entryCount),await pn.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(Mue,"processTable");async function Uue(e,t){pn.initializeDBIs(e,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),yue.isEmpty(t.user_name)||e.dbis[bo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[bo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Uue,"insertTransaction");function vue(e,t,r,n){let i=e.dbis[t].get(r);ld.deepStrictEqual(typeof i,"object");let o;if(n){let c={[bo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[bo.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&&!bue.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let _=0,u=l.length;_<u;_++){let d=l[_];ZF(e,c,d,r)}else ZF(e,c,l,r)}a(vue,"validateIndices");function ZF(e,t,r,n){try{let s=!1,i=Nue.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||_r.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),ld.deepStrictEqual(s,!0)}catch(s){ud=!0,_r.error(s),console.error(s)}}a(ZF,"validateIndex");function Bue(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(Bue,"getHashDBI")});var Jm=T((Dbe,nk)=>{"use strict";var Hue=require("mkcert"),zm=require("path"),DN=require("fs-extra"),PN=B(),que=z(),MN=b(),dl=KT(),xue=Mo(),Gue=mt();nk.exports={generateKeys:Fue,updateConfigCert:rk};async function Fue(){let e=que.getHdbBasePath(),t=zm.join(e,MN.LICENSE_KEY_DIR_NAME),r=await Hue.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:3650,caKey:dl.CERTIFICATE_VALUES.key,caCert:dl.CERTIFICATE_VALUES.cert}),n=zm.join(t,dl.CERTIFICATE_PEM_NAME),s=zm.join(t,dl.PRIVATEKEY_PEM_NAME),i=zm.join(t,dl.CA_PEM_NAME);try{await DN.writeFile(n,r.cert)}catch(o){throw PN.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await DN.writeFile(s,r.key)}catch(o){throw PN.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await DN.writeFile(i,dl.CERTIFICATE_VALUES.cert)}catch(o){throw PN.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}rk(n,s,i)}a(Fue,"generateKeys");function rk(e,t,r){let n=xue(Object.keys(MN.CONFIG_PARAM_MAP),!0),s=MN.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()]),Gue.updateConfigValue(void 0,void 0,i,!1,!0)}a(rk,"updateConfigCert")});var ck=T((Ube,ak)=>{"use strict";var Xm=require("path"),yo=require("fs-extra"),kue=wN(),qa=B(),sk=mt(),UN=z(),Ts=b(),Zm=V(),$ue=require("properties-reader"),Vue=ns(),Yue=FE(),Kue=Nr(),Mbe=require("util"),Wue=Kue.searchByValue,Que=br(),jue=ah(),zue=Ze(),Jue=tk(),ik=Jm(),Xue=Km(),fd=new kue("4.0.0"),ok=[],_d,dd;async function Zue(){try{if(await Xue.upgradeCertsPrompt()){if(console.log("Generating new certificates."),_d){let t=Zm.changeExtension(_d,".bak");await yo.move(_d,t)}if(dd){let t=Zm.changeExtension(dd,".bak");await yo.move(dd,t)}await ik.generateKeys()}else console.log("Using existing certificates."),ik.updateConfigCert(_d,dd,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Zue,"generateNewKeys");async function e_e(){console.log("Updating HarperDB nodes."),qa.info("Updating HarperDB nodes.");let e=[];try{let t=new Vue(Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Wue(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!zue.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let u=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(u),u}let l={host:c.host,port:c.port};e.push(l);let _=[];for(let u=0,d=c.subscriptions.length;u<d;u++){let f=c.subscriptions[u],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}n.push({name:c.name,subscriptions:_,system_info:{hdb_version:Ts.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Zm.isEmptyOrZeroLength(n))return;let s=new Yue(Ts.SYSTEM_SCHEMA_NAME,Ts.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Que.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{jue.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(e_e,"updateNodes");async function t_e(){let e=UN.get(Ts.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Xm.join("config","settings.js"))){qa.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),qa.info(t);let r=Xm.dirname(e),n=UN.get(Ts.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=Xm.join(n,"backup","4_0_0_upgrade_settings.bak"),i=Xm.join(n,Ts.HDB_CONFIG_FILE);try{qa.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),yo.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{qa.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),qa.info("Updating env variables with new settings values");let d=sk.initOldConfig(e);_d=d[Ts.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],dd=d[Ts.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],sk.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=Zm.getPropsFilePath();yo.accessSync(o,yo.constants.F_OK|yo.constants.R_OK);let l=$ue(o).get(Ts.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
100
+ install_user = ${l}`;try{yo.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{UN.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{yo.removeSync(r),console.log(u),qa.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(t_e,"updateSettingsFile_4_0_0");fd.async_functions.push(t_e);fd.async_functions.push(Zue);fd.async_functions.push(Jue);fd.async_functions.push(e_e);ok.push(fd);ak.exports=ok});var vN=T((Bbe,dk)=>{"use strict";var xa=V(),r_e=b(),lk=B(),{DATA_VERSION:n_e,UPGRADE_VERSION:s_e}=r_e.UPGRADE_JSON_FIELD_NAMES_ENUM,uk=zF(),ep=ck(),Ga=new Map;uk&&uk.forEach(e=>{Ga.set(e.version,e)});ep&&ep.forEach(e=>{Ga.set(e.version,e)});ep&&ep.forEach(e=>{Ga.set(e.version,e)});function i_e(){return[...Ga.keys()].sort(xa.compareVersions)}a(i_e,"getSortedVersions");function _k(e){let t=e[n_e],r=e[s_e];return xa.isEmptyOrZeroLength(t)||xa.isEmptyOrZeroLength(r)?(lk.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),lk.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."),[]):[...Ga.keys()].sort(xa.compareVersions).filter(function(n){return xa.compareVersions(n,t)>0&&xa.compareVersions(n,r)<=0})}a(_k,"getVersionsForUpgrade");function o_e(e){return _k(e).length>0}a(o_e,"hasUpgradesRequired");function a_e(e){return xa.isEmptyOrZeroLength(e)?null:Ga.has(e)?Ga.get(e):null}a(a_e,"getDirectiveByVersion");dk.exports={getSortedVersions:i_e,getDirectiveByVersion:a_e,getVersionsForUpgrade:_k,hasUpgradesRequired:o_e}});var tp=T((qbe,pk)=>{"use strict";var c_e=require("util"),BN=require("chalk"),l_e=require("os"),Ek=br(),u_e=Nr(),Sn=b(),hk=qF(),qN=GT(),{UpgradeObject:fk}=FF(),{forceDowngradePrompt:__e}=Km(),d_e=Bo(),Ed=B(),fl=V(),xN=Pn(),f_e=(me(),re(Ge)),E_e=vN(),h_e=c_e.promisify(xN.setSchemaDataToGlobal),m_e=u_e.searchByValue,p_e="info_id",S_e="2.9.9",T_e="3.0.0";async function g_e(e){let t=new hk.HdbInfoInsertObject(1,e,e),r=new qN.InsertObject(Sn.OPERATIONS_ENUM.INSERT,Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Sn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return xN.setSchemaDataToGlobal(),Ek.insert(r)}a(g_e,"insertHdbInstallInfo");async function HN(e){let t,r=await mk(),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 hk.HdbInfoInsertObject(i,e,e);let o=new qN.InsertObject(Sn.OPERATIONS_ENUM.INSERT,Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Sn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await h_e(),Ek.insert(o)}a(HN,"insertHdbUpgradeInfo");async function mk(){let e=new qN.NoSQLSeachObject(Sn.SYSTEM_SCHEMA_NAME,Sn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,p_e,Sn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await m_e(e))}catch(r){Ed.info(r)}return t}a(mk,"getAllHdbInfoRecords");async function R_e(){let e=await mk();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(R_e,"getLatestHdbInfoRecord");async function A_e(){Ed.info("Checking if HDB software has been updated");try{let e=d_e.version(),t=await R_e(),r;if(fl.isEmpty(t))r=S_e;else if(r=t.data_version_num,fl.compareVersions(r.toString(),e.toString())>0){if(!fl.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(BN.yellow(`This instance's data was last run on version ${r}`)),console.error(BN.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.${l_e.EOL}${Sn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");fl.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(BN.yellow(`This instance's data was last run on version ${r}`)),await __e(new fk(r,e))?await HN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(xN.setSchemaDataToGlobal(),O_e(r),e.toString()===r.toString())return;let n=new fk(r,e);if(E_e.hasUpgradesRequired(n))return n;fl.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await HN(n.upgrade_version),Ed.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Ed.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Ed.fatal(e),e}}a(A_e,"getVersionUpdateInfo");function O_e(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Sn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in f_e.databases.system))throw console.log(t),new Error(t);if(!fl.isEmpty(e)&&e<T_e)throw console.log(t),new Error(t)}a(O_e,"checkIfInstallIsSupported");pk.exports={insertHdbInstallInfo:g_e,insertHdbUpgradeInfo:HN,getVersionUpdateInfo:A_e}});var Ak=T((Gbe,Rk)=>{"use strict";var GN=require("joi"),{boolean:N_e,string:Sk,number:b_e}=GN.types(),Tk=require("fs-extra"),hd=b(),gk=require("path"),y_e=st();Rk.exports=I_e;function I_e(e){let t=Sk.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=GN.object({[hd.INSTALL_PROMPTS.ROOTPATH]:GN.custom(w_e),[hd.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:b_e.min(0),[hd.INSTALL_PROMPTS.TC_AGREEMENT]:Sk.valid("yes","YES","Yes"),[hd.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[hd.INSTALL_PROMPTS.CLUSTERING_ENABLED]:N_e});return y_e.validateBySchema(e,r)}a(I_e,"installValidator");function w_e(e,t){if(Tk.existsSync(gk.join(e,"system/hdb_user/data.mdb"))||Tk.existsSync(gk.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(w_e,"validateRootAvailable")});var Nk=T((kbe,Ok)=>{"use strict";var{mkdirpSync:C_e}=require("fs-extra"),zs=require("path"),El=b(),kN=B(),L_e=Dn(),FN=oi(),D_e=ze();Ok.exports=P_e;async function P_e(e){kN.trace("Mounting HarperDB"),gs(e),gs(zs.join(e,"backup")),gs(zs.join(e,"trash")),gs(zs.join(e,"keys")),gs(zs.join(e,"keys",El.LICENSE_FILE_NAME)),gs(zs.join(e,"log")),gs(zs.join(e,"doc")),gs(zs.join(e,"database")),gs(zs.join(e,El.TRANSACTIONS_DIR_NAME)),gs(zs.join(e,"clustering","leaf")),gs(zs.join(e,"components")),await M_e()}a(P_e,"mountHdb");async function M_e(){let e=Su(),t=Object.keys(FN);for(let r=0;r<t.length;r++){let n=t[r],s=FN[n].hash_attribute;try{D_e.initSystemSchemaPaths(El.SYSTEM_SCHEMA_NAME,n);let i=new e(El.SYSTEM_SCHEMA_NAME,n,s);i.attributes=FN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,await L_e.createTable(n,i)}catch(i){throw kN.error(`issue creating environment for ${El.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(M_e,"createLMDBTables");function gs(e){C_e(e,{mode:El.HDB_FILE_PERMISSIONS}),kN.info(`Directory ${e} created`)}a(gs,"makeDirectory")});var np=T((Vbe,vk)=>{"use strict";var VN=require("os"),wk=require("inquirer"),Wn=require("fs-extra"),U_e=require("properties-reader"),Fa=require("chalk"),Zs=require("path"),v_e=require("human-readable-ids").hri,B_e=require("ora"),H_e=require("yaml"),Dt=B(),Co=z(),md=V(),rp=Mo(),Ck=tp(),Lk=Bo(),te=b(),q_e=Ak(),x_e=Nk(),YN=mt(),G_e=Ir(),F_e=qE(),k_e=AN(),$_e=Pn(),V_e=require("util").promisify,Y_e=V_e($_e.setSchemaDataToGlobal),K_e=Jm(),hl=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),dr=a(e=>Fa.magenta.bold(e),"HDB_PROMPT_MSG"),W_e="https://harperdb.io/legal/end-user-license-agreement",Lo=VN.EOL,Io="",Q_e="yes",bk="Starting HarperDB install...",yk="HarperDB installation was successful.",Ik="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",j_e="An out of date version of HarperDB is already installed.",$N="It appears that HarperDB is already installed. Exiting install...",z_e="Aborting install",J_e=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])$/),X_e=new RegExp(/^[^\s.,*>]+$/),Z_e=VN.homedir(),ede=Zs.join(Z_e,te.HDB_ROOT_DIR_NAME),tde=9925,rde="HDB_ADMIN",nde="CLUSTER_USER",$r={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:"},ml=rp([te.INSTALL_PROMPTS.HDB_CONFIG]),Xs,Dk=!1;vk.exports=Pk;Pk.createSuperUser=Uk;async function Pk(){console.log(dr(Lo+bk+Lo)),Dt.notify(bk);let e;ml[te.INSTALL_PROMPTS.HDB_CONFIG]&&(e=sde());let t=ode();Object.assign(t,e);let r=q_e(t);if(r)throw r.message;await ade(),await cde(t);let n=await ide(t);Xs=n[te.INSTALL_PROMPTS.ROOTPATH],ml[te.INSTALL_PROMPTS.HDB_CONFIG]&&Zs.dirname(ml[te.INSTALL_PROMPTS.HDB_CONFIG])===Xs&&(Dk=!0),!ml[te.INSTALL_PROMPTS.HDB_CONFIG]&&await Wn.pathExists(Zs.join(Xs,te.HDB_CONFIG_FILE))&&(console.error($N),process.exit());let s=B_e({prefixText:dr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),md.isEmpty(Xs))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Co.setHdbBasePath(Xs),await x_e(Xs),await lde(),await ude(n),Dt.initLogSettings(!0),await Uk(n),await dde(n),await K_e.generateKeys(),await fde(),k_e(),s.stop(),console.log(dr(Lo+yk+Lo)),Dt.notify(yk)}a(Pk,"install");function sde(){let e=H_e.parseDocument(Wn.readFileSync(ml[te.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=YN.flattenConfig(e.toJSON());return t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[te.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(sde,"getConfigFromFile");async function ide(e){Dt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:hl,when:wo(e[te.INSTALL_PROMPTS.ROOTPATH],$r.DESTINATION),name:te.INSTALL_PROMPTS.ROOTPATH,prefix:Io,default:ede,validate:async s=>Js(s)?Js(s):await Wn.pathExists(Zs.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,message:dr($r.DESTINATION)},{type:"input",transformer:hl,when:wo(e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],$r.HDB_PORT),name:te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Io,default:tde,validate:s=>J_e.test(s)?!0:"Invalid port.",message:dr($r.HDB_PORT)},{type:"input",transformer:hl,when:wo(e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],$r.HDB_USERNAME),name:te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Io,default:rde,validate:s=>Js(s)?Js(s):(t=s,!0),message:dr($r.HDB_USERNAME)},{type:"password",when:wo(e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],$r.HDB_PASS),name:te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Io,validate:s=>Js(s)?Js(s):!0,message:dr($r.HDB_PASS)}];if(md.autoCastBoolean(e[te.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:hl,when:wo(e[te.INSTALL_PROMPTS.CLUSTERING_NODENAME],$r.NODE_NAME),name:te.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Io,default:v_e.random(),validate:i=>X_e.test(i)?!0:"Invalid node name, must not contain ., * or >",message:dr($r.NODE_NAME)},{type:"input",transformer:hl,when:wo(e[te.INSTALL_PROMPTS.CLUSTERING_USER],$r.CLUSTER_USERNAME),name:te.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Io,default:nde,validate:i=>Js(i)?Js(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:dr($r.CLUSTER_USERNAME)},{type:"password",when:wo(e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD],$r.CLUSTER_PASS),name:te.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Io,validate:i=>Js(i)?Js(i):!0,message:dr($r.CLUSTER_PASS)}];r.push(...s)}let n=await wk.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(ide,"installPrompts");function wo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${dr(t)} ${Fa.gray("[hidden]")}`),Dt.trace(`${dr(t)} [hidden]`)):(console.log(`${dr(t)} ${e}`),Dt.trace(`${dr(t)} ${e}`)),!1):!0}a(wo,"displayCmdEnvVar");function Js(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Js,"checkForEmptyValue");function ode(){let e=Object.keys(te.INSTALL_PROMPTS),t=rp(e),r=rp(Object.keys(te.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=te.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(ode,"checkForPromptOverride");async function ade(){Dt.trace("Checking for existing install.");let e=md.getPropsFilePath(),t=await Wn.pathExists(e),r;if(t){Dt.trace(`Install found an existing boot prop file at:${e}`);let n=U_e(e),s=YN.getConfigValue(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Wn.pathExists(s)}if(!t&&md.noBootFile()&&(r=!0),r){if(Dt.trace(`Install found existing HDB config at:${e}`),await Ck.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Lk.version()}. Exiting install...`;console.log(Lo+Fa.magenta.bold(j_e)),console.log(Fa.magenta.bold(s)),Dt.error(s)}else console.log(Lo+Fa.magenta.bold($N)),Dt.error($N);process.exit(0)}}a(ade,"checkForExistingInstall");async function cde(e){Dt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${W_e}${Lo}and can be viewed by typing or copying and pasting the URL into your web browser.${Lo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Io,transformer:hl,when:wo(e[te.INSTALL_PROMPTS.TC_AGREEMENT],t),name:te.INSTALL_PROMPTS.TC_AGREEMENT,message:dr(t),validate:s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:Fa.yellow("Please enter 'yes' or 'no'")},n=await wk.prompt([r]);n[te.INSTALL_PROMPTS.TC_AGREEMENT]&&n[te.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Q_e&&(console.log(Fa.yellow(Ik)),Dt.error(Ik),process.exit(0))}a(cde,"termsAgreement");async function lde(){let e=Zs.join(Xs,te.HDB_CONFIG_FILE),t;try{t=VN.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}
101
+ install_user = ${t}`,n=md.getHomeDir(),s=Zs.join(n,te.HDB_HOME_DIR_NAME),i=Zs.join(s,te.LICENSE_KEY_DIR_NAME);try{Wn.mkdirpSync(s,{mode:te.HDB_FILE_PERMISSIONS}),Wn.mkdirpSync(i,{mode:te.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${te.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Zs.join(s,te.BOOT_PROPS_FILE_NAME);try{await Wn.writeFile(o,r)}catch(c){throw Dt.error(`There was an error creating the boot file at path: ${o}`),c}Co.setProperty(te.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Co.setProperty(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Co.setProperty(Co.BOOT_PROPS_FILE_PATH,o)}}a(lde,"createBootPropertiesFile");async function ude(e){Dt.trace("Creating HarperDB config file");let t=rp(Object.keys(te.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{YN.createConfigFile(t),Co.initSync()}catch(r){_de(r)}}a(ude,"createConfigFile");function _de(e){Dt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(z_e);let t=Zs.resolve(Co.get(Co.BOOT_PROPS_FILE_PATH),"../");t&&Wn.removeSync(t),Xs&&(Dk?Wn.readdirSync(Xs,{withFileTypes:!0}).forEach(n=>{let s=Zs.join(n.path,n.name);s!==ml[te.INSTALL_PROMPTS.HDB_CONFIG]&&Wn.removeSync(s)}):Wn.removeSync(Xs)),process.exit(1)}a(_de,"rollbackInstall");async function Mk(e,t){Dt.trace("Creating admin user"),await Y_e();let r;try{r=await F_e.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 G_e.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(Mk,"createAdminUser");async function Uk(e){Dt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Mk(t,r),delete e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Uk,"createSuperUser");async function dde(e){Dt.trace("Creating Cluster user.");let t;e[te.INSTALL_PROMPTS.CLUSTERING_USER]&&e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[te.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Mk({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[te.INSTALL_PROMPTS.CLUSTERING_USER],delete e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(dde,"createClusterUser");async function fde(){let e=Lk.version();if(e)await Ck.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(fde,"insertHdbVersionInfo")});var qk=T((Kbe,Hk)=>{"use strict";var KN=V(),Tn=B(),Bk=vN();Hk.exports={processDirectives:Ede};async function Ede(e){console.log("Starting upgrade process...");let t=Bk.getVersionsForUpgrade(e),r=pde(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Tn.notify(c),console.log(c);let l=[],_=[];try{l=hde(o.sync_functions)}catch(u){throw Tn.error(`Error while running an upgrade script for ${o.version}`),u}try{_=await mde(o.async_functions)}catch(u){throw Tn.error(`Error while running an upgrade script for ${o.version}`),u}n.push(...l,..._)}return n}a(Ede,"processDirectives");function hde(e){if(KN.isEmptyOrZeroLength(e))return Tn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Tn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Tn.info(`Running function ${r.name}`),!(r instanceof Function)){Tn.info("Variable being processed is not a function");continue}let n=r();Tn.info(n),t.push(n)}return t}a(hde,"runSyncFunctions");async function mde(e){if(KN.isEmptyOrZeroLength(e))return Tn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Tn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Tn.info(`Running function ${s.name}`),!(s instanceof Function)){Tn.info("Variable being processed is not a function");continue}let i=await s();Tn.info(i),t.push(i)}return t}a(mde,"runAsyncFunctions");function pde(e){if(KN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Bk.getDirectiveByVersion(r);n&&t.push(n)}return t}a(pde,"getUpgradeDirectivesToInstall")});var jN=T((Qbe,Vk)=>{"use strict";var sp=z();sp.initSync();var kk=require("chalk"),xk=require("fs-extra"),Bi=B(),vi=b(),Gk=Bo(),Sde=qk(),WN=V(),$k=tp(),Tde=Km(),Fk=Dp(),gde=Pn(),Rde=require("util").promisify,Ade=Rde(gde.setSchemaDataToGlobal),QN,{UPGRADE_VERSION:ip}=vi.UPGRADE_JSON_FIELD_NAMES_ENUM;Vk.exports={upgrade:Ode};async function Ode(e){await Ade(),QN===void 0&&(QN=xc()),xk.existsSync(sp.get(sp.BOOT_PROPS_FILE_PATH))||(pd("The hdb_boot_properties file was not found. Please install HDB.",vi.LOG_LEVELS.ERROR),process.exit(1)),xk.existsSync(sp.get(vi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(pd("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 $k.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),pd(`This version of HarperDB is ${Gk.version()}`,vi.LOG_LEVELS.INFO);let r=t[ip]?t[ip]:Gk.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}`),Bi.notify("Missing new version field from upgrade info object"),process.exit(1)),await Nde();let n,s=0;try{n=await Tde.forceUpdatePrompt(t)}catch(i){Bi.error("There was an error when prompting user about upgrade."),Bi.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Bi.info(`Starting upgrade to version ${r}`),await bde(t),pd(`HarperDB was successfully upgraded to version ${t[ip]}`,vi.LOG_LEVELS.INFO)}a(Ode,"upgrade");async function Nde(){let e=!1,t=await Fk.findPs(vi.HDB_PROC_NAME);if(WN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Fk.findPs("hdb_express");WN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await QN.list();WN.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(kk.red(r)),Bi.error(r),process.exit(1)}}a(Nde,"checkIfRunning");async function bde(e){try{await Sde.processDirectives(e)}catch(t){throw pd("There was an error during the data upgrade. Please check the logs.",vi.LOG_LEVELS.ERROR),t}try{await $k.insertHdbUpgradeInfo(e[ip])}catch(t){Bi.error("Error updating the 'hdb_info' system table."),Bi.error(t)}}a(bde,"runUpgrade");function pd(e,t=void 0){t||(t=Bi.info),Bi[t](e),console.log(kk.magenta(e))}a(pd,"printToLogAndConsole")});var jk=T((zbe,Qk)=>{"use strict";var{promises:JN,createReadStream:yde,createWriteStream:Ide}=require("fs"),{createGzip:wde}=require("zlib"),{promisify:Cde}=require("util"),{pipeline:Lde}=require("stream"),Dde=Cde(Lde),Pde=require("path"),$a=z();$a.initSync();var ka=B(),{CONFIG_PARAMS:Sd,ITC_EVENT_TYPES:Mde}=b(),{onMessageFromWorkers:Ude}=nt(),vde=6e4,Bde="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Hde="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",zN,Kk;Qk.exports=Wk;Ude(e=>{e.type===Mde.RESTART&&($a.initSync(!0),clearInterval(Kk),$a.get(Sd.LOGGING_ROTATION_ENABLED)&&Wk())});async function Wk(){try{let e=ka.getLogFilePath(),t=$a.get(Sd.LOGGING_ROTATION_MAXSIZE),r=$a.get(Sd.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ka.error(Bde);return}let n=$a.get(Sd.LOGGING_ROTATION_PATH);if(!n){ka.error(Hde);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}zN=Date.now()/6e4,ka.trace("Log rotate enabled, maxSize:",t,"interval:",r),Kk=setInterval(async()=>{if(s){let o;o=await JN.stat(e),o.size>=s&&await Yk(e,n)}i&&Date.now()/6e4-zN>=i&&(await Yk(e,n),zN=Date.now()/6e4)},vde).unref()}catch(e){ka.error(e)}}a(Wk,"logRotator");async function Yk(e,t){let r=$a.get(Sd.LOGGING_ROTATION_COMPRESS),n=Pde.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Dde(yde(e),wde(),Ide(n)),await JN.unlink(e)):await JN.rename(e,n),ka.closeLogFile(),ka.notify(`hdb.log rotated, old log moved to ${n}`)}a(Yk,"moveLogFile")});var Va=T((oye,n$)=>{"use strict";var Qn=z();Qn.initSync();var Xbe=Ra(),Gt=b(),ti=B(),Hi=require("fs-extra"),Do=require("path"),qde=require("systeminformation"),xde=AN(),Gde=np(),XN=require("chalk"),Fde=vo(),qi=V(),Jk=mt(),Xk=Mo(),zk=Eh(),kde=jN(),$de=jk(),Vde=require("minimist"),{PACKAGE_ROOT:Yde}=b(),{startHTTPThreads:Kde,startSocketServer:Zbe,mostIdleRouting:eye,remoteAffinityRouting:tye}=(Dm(),re(gN)),Wde=tp(),{isMainThread:Qde}=require("worker_threads"),rye=oi(),nye=Ji(),sye=aT(),iye=Su(),ZN=b(),ei,pl,Zk=!1,jde="Upgrade complete. Starting HarperDB.",zde="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Jde="HarperDB not found, starting install process.",Xde="There was an error during install, check install_log.log for more details. Exiting.",Zde="HarperDB successfully started.";function efe(){if(!Zk){let e=a(()=>{Hi.removeSync(Do.join(Qn.get(Gt.CONFIG_PARAMS.ROOTPATH),Gt.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(efe,"addExitListeners");async function e$(e=!1,t=!1){if(console.log(XN.magenta("Starting HarperDB...")),await r$()===!1){console.log(Jde);try{await Gde()}catch(o){console.error(Xde,o),ti.error(o),process.exit(1)}}let r,n=pl?.service==="clustering";pl?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Hi.readFile(Do.join(Qn.get(Gt.CONFIG_PARAMS.ROOTPATH),Gt.HDB_PID_FILE),"utf8")),c=await qde.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ei===void 0&&(ei=xc()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Qn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await zk.generateNatsConfig(),await ei.startClusteringProcesses(!0),process.exit()),efe(),await Hi.writeFile(Do.join(Qn.get(ZN.CONFIG_PARAMS.ROOTPATH),ZN.HDB_PID_FILE),`${process.pid}`),ti.info("HarperDB PID",process.pid);let s;try{let o=await Wde.getVersionUpdateInfo();o!==void 0&&(s=o[Gt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await kde.upgrade(o),console.log(jde))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`),ti.error(o)):(console.error(zde),ti.error(o)),process.exit(1)}if(!e){let o=Xk(Object.keys(Gt.CONFIG_PARAM_MAP),!0);!qi.isEmpty(o)&&!qi.isEmptyOrZeroLength(Object.keys(o))&&Jk.updateConfigValue(void 0,void 0,o,!0,!0)}xde(),nfe(),qi.autoCastBoolean(Qn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&Qde&&await zk.generateNatsConfig(t)}a(e$,"initialize");async function tfe(e=!1){try{pl=Vde(process.argv),pl.ROOTPATH&&Jk.updateConfigObject("settings_path",Do.join(pl.ROOTPATH,Gt.HDB_CONFIG_FILE)),await e$(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!pl.service;qi.autoCastBoolean(Qn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ei.startClusteringProcesses(),await ei.startClusteringThreads()),await Kde(process.env.DEV_MODE?1:Qn.get(ZN.CONFIG_PARAMS.THREADS)),Qn.get(Gt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await $de(),t||t$()}catch(t){console.error(t),ti.error(t),process.exit(1)}}a(tfe,"main");function t$(){ti.suppressLogging(()=>{console.log(XN.magenta(""+Hi.readFileSync(Do.join(Yde,"utility/install/ascii_logo.txt")))),console.log(XN.magenta(`|------------- HarperDB ${Fde.version} successfully started ------------|`))}),ti.notify(Zde)}a(t$,"started");async function rfe(e=!0){Zk=!e;try{ei===void 0&&(ei=xc()),ei.enterPM2Mode(),await e$(),qi.autoCastBoolean(Qn.get(Gt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ei.startClusteringProcesses(),await ei.startService(Gt.PROCESS_DESCRIPTORS.HDB),t$(),e&&process.exit(0)}catch(t){console.error(t),ti.error(t),process.exit(1)}}a(rfe,"launch");function nfe(){let e=Do.join(Qn.getHdbBasePath(),Gt.LICENSE_KEY_DIR_NAME,Gt.LICENSE_FILE_NAME),t=Do.join(e,Gt.LICENSE_FILE_NAME),r=Do.join(e,Gt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=Xk(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(qi.isEmpty(n)||qi.isEmpty(s))return;Hi.mkdirpSync(e),Hi.writeFileSync(r,n),Hi.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ti.error(s)}}a(nfe,"writeLicenseFromVars");n$.exports={launch:rfe,main:tfe,isHdbInstalled:r$};async function r$(){try{await Hi.stat(qi.getPropsFilePath()),await Hi.stat(Qn.get(Gt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(qi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ti.error(`Error checking for HDB install - ${e}`),e}return!0}a(r$,"isHdbInstalled")});var eb=T((cye,o$)=>{"use strict";var sfe=B(),ife=b(),ofe=require("util"),afe=require("child_process"),s$=ofe.promisify(afe.exec),cfe=mi(),Td=xc(),i$="Stopping HarperDB.";o$.exports=lfe;async function lfe(){if(console.log(i$),sfe.notify(i$),await Td.isServiceRegistered(ife.HDB_PROC_DESCRIPTOR)){Td.enterPM2Mode();let r=await Td.getUniqueServicesList();for(let n in r)await Td.stop(n)}await Td.kill();let t=await cfe.getHDBProcessInfo();t.clustering.forEach(r=>{s$(`kill ${r.pid}`)}),t.core.forEach(r=>{s$(`kill ${r.pid}`)})}a(lfe,"stop")});var ab=T((uye,h$)=>{"use strict";var ufe=require("os"),ap=require("https"),a$=require("http"),xi=require("fs-extra"),_fe=require("yaml"),dfe=require("human-readable-ids").hri,{pipeline:c$}=require("stream/promises"),{createWriteStream:cp,ensureDir:lp}=require("fs-extra"),{join:As}=require("path"),ib=require("lodash"),ffe=require("minimist"),d$=z(),Efe=mi(),f$=B(),Rd=mt(),{restart:hfe}=Ra(),mfe=eb(),rb=V(),l$=pt(),pfe=Pn(),{isHdbInstalled:Sfe,main:E$,launch:Tfe}=Va(),gfe=np(),up=b(),{SYSTEM_TABLE_NAMES:u$,SYSTEM_SCHEMA_NAME:Rfe,CONFIG_PARAMS:gd,OPERATIONS_ENUM:fr}=up,Afe=9925,Ofe="info",Nfe=1e4,bfe="clone-node-config.yaml",ob=[u$.ROLE_TABLE_NAME,u$.USER_TABLE_NAME],Vr={HDB_LEADER_USERNAME:"HDB_LEADER_USERNAME",HDB_LEADER_PASSWORD:"HDB_LEADER_PASSWORD",HDB_LEADER_URL:"HDB_LEADER_URL",HDB_LEADER_CLUSTERING_HOST:"HDB_LEADER_CLUSTERING_HOST",HDB_LEADER_CLUSTERING_PORT:"HDB_LEADER_CLUSTERING_PORT",HDB_FULLY_CONNECTED:"HDB_FULLY_CONNECTED",HDB_CLONE_OVERTOP:"HDB_CLONE_OVERTOP"},Ka=ffe(process.argv),Ad=Ka[Vr.HDB_LEADER_USERNAME]??process.env[Vr.HDB_LEADER_USERNAME],Od=Ka[Vr.HDB_LEADER_PASSWORD]??process.env[Vr.HDB_LEADER_PASSWORD],Sl=Ka[Vr.HDB_LEADER_URL]??process.env[Vr.HDB_LEADER_URL],tb=Ka[Vr.HDB_LEADER_CLUSTERING_HOST]??process.env[Vr.HDB_LEADER_CLUSTERING_HOST],yfe=Ka[Vr.HDB_LEADER_CLUSTERING_PORT]??process.env[Vr.HDB_LEADER_CLUSTERING_PORT],Ife=(Ka[Vr.HDB_FULLY_CONNECTED]??process.env[Vr.HDB_FULLY_CONNECTED])==="true",Po=(Ka[Vr.HDB_CLONE_OVERTOP]??process.env[Vr.HDB_CLONE_OVERTOP])==="true",nb,Qe,gt,Rt,gl,Tl,gn,Rs,sb;h$.exports=a(async function(t=!1){delete process.env.HDB_LEADER_URL;let r=await Sfe();if(!Po&&r)return console.info("HarperDB is already installed, clone will not be performed"),E$();if(Po&&!r){console.info("No existing install of HarperDB found, cannot clone overtop");return}let n=Po?`Cloning node ${Sl} overtop of existing HarperDB install`:`Cloning node: ${Sl}`;if(console.info(n),Po)sb=Rd.readConfigFile(),Tl=sb.rootPath,await mfe();else try{Tl=process.env.ROOTPATH?process.env.ROOTPATH:As(ufe.homedir(),up.HDB_ROOT_DIR_NAME)}catch(i){throw console.error(i),new Error("There was an error setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let s;try{s=As(Tl,bfe),Qe=_fe.parseDocument(xi.readFileSync(s,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(s+" not found, using default config values.")}gl=Qe?.clustering?.nodeName??dfe.random(),gt=await Nd({operation:fr.GET_CONFIGURATION}),gt=await JSON.parse(gt.body),process.env.HDB_FETCH==="true"?(await Dfe(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await Lfe(),Po||await Cfe(),await wfe(),await Pfe(),await Mfe(t),console.info("Successfully cloned node: "+Sl),t&&process.exit()},"cloneNode");async function wfe(){console.info("Cloning configuration"),nb=gt?.clustering?.enabled;let e={[gd.ROOTPATH]:Tl};if(nb&&Qe?.clustering?.enabled!==!1){if(tb==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[gd.CLUSTERING_ENABLED]=!0;let n=gt?.clustering?.hubServer?.cluster?.network?.routes,s=parseInt(yfe)||gt?.clustering?.hubServer?.cluster?.network?.port;e[gd.CLUSTERING_USER]=gt?.clustering?.user;let i=d$.get(gd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:tb,port:s}):i=[{host:tb,port:s}],Array.isArray(n)&&(i=i.concat(n)),e[gd.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Qe?.componentConfig?.exclude;t=t?t.reduce((n,s)=>({...n,[s.name]:!0}),{}):[];for(let n in gt)gt[n]?.package&&!t[n]&&await Rd.addConfig(n,gt[n]);Qe?.databases&&await Rd.addConfig("databases",gt?.schemas);let r;Qe&&(r=Rd.flattenConfig(Qe));for(let n in r){let s=up.CONFIG_PARAM_MAP[n.toLowerCase()];s&&(e[s]=r[n])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(Po?e.clustering_nodeName=sb?.clustering?.nodeName??gl:e.clustering_nodeName=gl),f$.info("Cloning config:",e),ib.isEmpty(e)||Rd.updateConfigValue(void 0,void 0,e,!1,!0)}a(wfe,"cloneConfig");async function Cfe(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Tl,!Ad)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Ad,!Od)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Od,process.env.OPERATIONSAPI_NETWORK_PORT=Qe?.operationsApi?.network?.port??Afe,process.env.CLUSTERING_NODENAME=gl,process.env.CLUSTERING_LOGLEVEL=Qe?.clustering?.logLevel??Ofe,await gfe()}a(Cfe,"installHDB");async function Lfe(){console.info("Cloning system database");let e=Ya("system");await lp(e);let t=As(e,"system.mdb"),r=cp(t,{overwrite:!0}),n={operation:fr.GET_BACKUP,database:"system"};Po||(n.tables=ob);let s=await _$(n,r);if(await xi.utimes(t,Date.now(),new Date(s.date)),Rt=await Nd({operation:fr.DESCRIBE_ALL}),Rt=await JSON.parse(Rt.body),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},gt.schemas)for(let i in gt.schemas)Object.keys(gt.schemas[i]).includes("tables")&&(gn[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));Rs=Qe?.databaseConfig?.excludeTables,Rs=Rs?Rs.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Rt){if(gn[i]){Rt[i]="excluded";continue}if(ib.isEmpty(Rt[i]))continue;let o=[],c=!1;for(let E in Rt[i])Rs[i+E]?(c=!0,Rt[i][E]="excluded"):o.push(E);let l;c?(console.info(`Cloning database: ${i} tables: ${o}`),l={operation:fr.GET_BACKUP,database:i,tables:o}):(console.info(`Cloning database: ${i}`),l={operation:fr.GET_BACKUP,database:i});let _=Ya(i);await lp(_);let u=As(_,i+".mdb"),d=cp(u,{overwrite:!0}),f=await _$(l,d);await xi.utimes(u,Date.now(),new Date(f.date))}}a(Lfe,"cloneTables");async function Dfe(){console.info("Cloning system database using fetch");let e={operation:fr.GET_BACKUP,database:"system"};Po||(e.tables=ob);let t=await op(e,!0),r=Ya("system");await lp(r);let n=As(r,"system.mdb");if(await c$(t.body,cp(n,{overwrite:!0})),await xi.utimes(n,Date.now(),new Date(t.headers.get("date"))),Rt=await op({operation:fr.DESCRIBE_ALL}),Rt=await Rt.json(),gn=Qe?.databaseConfig?.excludeDatabases,gn=gn?gn.reduce((s,i)=>({...s,[i.database]:!0}),{}):{},gt.schemas)for(let s in gt.schemas)Object.keys(gt.schemas[s]).includes("tables")&&(gn[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Rs=Qe?.databaseConfig?.excludeTables,Rs=Rs?Rs.reduce((s,i)=>({...s,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let s in Rt){if(gn[s]){Rt[s]="excluded";continue}if(ib.isEmpty(Rt[s]))continue;let i=[],o=!1;for(let f in Rt[s])Rs[s+f]?(o=!0,Rt[s][f]="excluded"):i.push(f);if(i.length===0)return;let c;o?(console.info(`Cloning database: ${s} tables: ${i}`),c=await op({operation:fr.GET_BACKUP,database:s,tables:i},!0)):(console.info(`Cloning database: ${s}`),c=await op({operation:fr.GET_BACKUP,database:s},!0));let l=Ya(s);await lp(l);let _=new Date(c.headers.get("date")),u=As(l,`${_.getTime()}-${s}.mdb`);await c$(c.body,cp(u,{overwrite:!0}));let d=As(l,s+".mdb");await xi.rename(u,d),await xi.utimes(d,Date.now(),_)}}a(Dfe,"cloneTablesFetch");async function op(e,t=!1){let r=Qe?.httpsRejectUnauthorized??!1,n=new ap.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Ad+":"+Od).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Sl,{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(op,"leaderHttpReqFetch");function Ya(e){return Qe?.databases&&Qe?.databases[e]?.path||Qe?.storage&&Qe?.storage?.path||As(Tl,"database")}a(Ya,"getDbFileDir");async function Pfe(){let{deployComponent:e}=Mh(),t=await Nd({operation:fr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let s of t.entries){if(!s.entries)continue;let i=!1;if(Qe?.componentConfig?.exclude){for(let o of Qe.componentConfig.exclude)if(o?.name!=null&&o.name===s.name){i=!0;break}}i||r.push(s.name)}let n=Qe?.componentConfig?.skipNodeModules!==!1;for(let s of r){console.info("Cloning component: "+s);let i=await Nd({operation:fr.PACKAGE_COMPONENT,project:s,skip_node_modules:n}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:s})}}}a(Pfe,"cloneComponents");async function Mfe(e){if(!nb)return;let t=await Efe.getHDBProcessInfo();t.clustering.length===0||t.core.length===0?e?await Tfe(!1):await E$():(console.info(await hfe({operation:fr.RESTART})),await rb.async_set_timeout(Nfe)),console.info("Clustering cloned tables"),e&&await rb.async_set_timeout(2e3);let r=Qe?.clusteringConfig?.subscribeToLeaderNode!==!1,n=Qe?.clusteringConfig?.publishToLeaderNode!==!1;await pfe.setSchemaDataToGlobalAsync();let s=d_(),i=await Nd({operation:fr.CLUSTER_STATUS});i=await JSON.parse(i.body);let o=[],c=await xi.stat(As(Ya("system"),"system.mdb"));for(let _ of ob)o.push({schema:Rfe,table:_,subscribe:r,publish:n,start_time:c.mtime.toISOString()});for(let _ in Rt){if(Rt[_]==="excluded")continue;let u=await xi.stat(As(Ya(_),_+".mdb"));u.mtime.setSeconds(u.mtime.getSeconds()-10);for(let d in Rt[_])Rt[_][d]!=="excluded"&&o.push({schema:_,table:d,subscribe:r,publish:n,start_time:u.mtime.toISOString()})}await l$.createTableStreams(o),f$.info("Sending add_node request to node:",gt?.clustering?.nodeName,"with subscriptions:",o);let l;if(Ife==="true"&&i.connections.length>0){let _=eh(),u=[{node_name:gt?.clustering?.nodeName,subscriptions:o}],d=!1;gl=d$.get(up.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let f of i.connections){if(f.node_name===gl)continue;let E={node_name:f.node_name,subscriptions:[]};for(let h of f.subscriptions){if(gn[h.schema]||Rs[h.schema+h.table])continue;d=!0;let p=await xi.stat(As(Ya(h.schema),h.schema+".mdb"));p.mtime.setSeconds(p.mtime.getSeconds()-10),h.start_time=p.mtime.toISOString(),E.subscriptions.push(h)}u.push(E)}d&&(l=await _({operation:fr.CONFIGURE_CLUSTER,connections:u}),console.info(JSON.stringify(l)))}l||await s({operation:fr.ADD_NODE,node_name:gt?.clustering?.nodeName,subscriptions:o},!0),await l$.closeConnection()}a(Mfe,"clusterTables");async function Nd(e){let t=new ap.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Ad+":"+Od).toString("base64"),"Content-Type":"application/json"},s=new URL(Sl),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 rb.httpRequest(i,e)}a(Nd,"leaderHttpReq");async function _$(e,t){let r=new ap.Agent({rejectUnauthorized:Qe?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Ad+":"+Od).toString("base64"),"Content-Type":"application/json"},i=new URL(Sl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:s};return i.protocol==="https:"&&(o.agent=r,a$=ap),i.port&&(o.port=i.port),new Promise((c,l)=>{let _=a$.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(_$,"leaderHttpStream")});var p$=T((dye,m$)=>{var Ufe=np(),vfe=B();m$.exports=Bfe;async function Bfe(){try{await Ufe()}catch(e){console.error("There was an error during the install."),console.error(e),vfe.error(e),process.exit(1)}}a(Bfe,"install")});var g$=T((Eye,T$)=>{"use strict";var Hfe=lh(),qfe=B(),S$="Registration failed.";async function xfe(){let e;try{e=await Hfe.register()}catch(t){return qfe.error(`Registration error ${t}`),S$}return e||S$}a(xfe,"register");T$.exports={register:xfe}});var N$=T((mye,O$)=>{"use strict";var lb=require("fs-extra"),ub=require("path"),cb=require("yaml"),bd=pt(),yd=b(),R$=Ze(),_b=B(),Gfe=Ir(),Ffe=ih(),kfe=nh(),$fe=mi(),A$=z(),{isHdbInstalled:Vfe}=Va();A$.initSync();var jn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Yr={LEAF:"leaf server",HUB:"hub server"},_p;O$.exports=Yfe;async function Yfe(){let e={harperdb:{status:jn.STOPPED}};if(!await Vfe()){e.harperdb.status=jn.NOT_INSTALLED,console.log(cb.stringify(e));return}_p=A$.get(yd.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await lb.readFile(ub.join(_p,yd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===yd.NODE_ERROR_CODES.ENOENT){_b.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=jn.STOPPED,console.log(cb.stringify(e));return}throw n}let r=await $fe.getHDBProcessInfo();for(let n of r.core)if(n.pid===t){e.harperdb.status=jn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await Kfe(r),e.clustering[Yr.HUB].status===jn.RUNNING&&e.clustering[Yr.LEAF].status===jn.RUNNING){let n=[],s=await Ffe({});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 kfe.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 bd.closeConnection()}console.log(cb.stringify(e)),process.exit()}a(Yfe,"status");async function Kfe(e){let t={[Yr.HUB]:{},[Yr.LEAF]:{}};if(e.clustering.length===0)return t[Yr.HUB].status=jn.STOPPED,t[Yr.LEAF].status=jn.STOPPED,t;let{port:r}=bd.getServerConfig(yd.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:n,decrypt_hash:s}=await Gfe.getClusterUser();try{(await bd.createConnection(r,n,s,!1)).close(),t[Yr.HUB].status=jn.RUNNING}catch{t[Yr.HUB].status=jn.ERRORED}let{port:i}=bd.getServerConfig(yd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await bd.createConnection(i,n,s,!1)).close(),t[Yr.LEAF].status=jn.RUNNING}catch{t[Yr.LEAF].status=jn.ERRORED}try{t[Yr.HUB].pid=Number.parseInt(await lb.readFile(ub.join(_p,"clustering",R$.PID_FILES.HUB),"utf8"))}catch(o){_b.error(o),t[Yr.HUB].pid=void 0}try{t[Yr.LEAF].pid=Number.parseInt(await lb.readFile(ub.join(_p,"clustering",R$.PID_FILES.LEAF),"utf8"))}catch(o){_b.error(o),t[Yr.LEAF].pid=void 0}return t}a(Kfe,"getHubLeafStatus")});var Wa=B(),Wfe=Bo(),db=b(),dp=require("fs"),b$=require("path"),Sye=require("os"),{PACKAGE_ROOT:Qfe}=b(),jfe=ry(),Tye=(Dm(),re(gN)),y$=vF(),{SERVICE_ACTIONS_ENUM:Kr}=db;zfe();function zfe(){let e=jfe();if(e)if(e.error){console.error(e.error),Wa.error(e.error);return}else e.warn&&(console.warn(e.warn),Wa.warn(e.warn));let t;dp.readdir(b$.join(Qfe,"bin"),r=>{if(r)return Wa.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let n=y$.buildRequest();n.operation&&(t=Kr.OPERATION);let s;switch(t){case Kr.OPERATION:Wa.trace("calling cli operations with:",n),y$.cliOperations(n).then();break;case Kr.DEV:process.env.DEV_MODE=!0;case Kr.RUN:let i=process.argv[3];i&&i[0]!=="-"&&(dp.existsSync(i)||(console.error(`The folder ${i} does not exist`),process.exit(1)),dp.statSync(i).isDirectory()||(console.error(`The path ${i} is not a folder`),process.exit(1)),dp.existsSync(b$.join(i,db.HDB_CONFIG_FILE))?process.env.ROOTPATH=i:process.env.RUN_HDB_APP=i),Va().main();break;case Kr.START:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?ab()(!0).catch(h=>{console.log(h)}):s=Va().launch();break;case Kr.INSTALL:p$()().then(()=>Va().main(!0)).catch(E=>{console.error(E)});break;case Kr.REGISTER:g$().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Kr.STOP:eb()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Kr.RESTART:Ra().restart({}).then().catch(E=>{Wa.error(E),console.error(`There was an error restarting HarperDB. ${E}`),process.exit(1)});break;case Kr.VERSION:Wfe.printVersion();break;case Kr.UPGRADE:Wa.setLogLevel(db.LOG_LEVELS.INFO),jN().upgrade(null).then(()=>{console.log("Your instance of HarperDB is up to date!")}).catch(E=>{Wa.error(`Got an error during upgrade ${E}`)});break;case Kr.STATUS:N$()().then().catch(E=>{console.error(E)});break;case Kr.RENEWCERTS:let{generateKeys:f}=Jm();f().then(()=>{console.log("Successfully renewed self-signed certificates")}).catch(()=>{console.error(r)});break;case void 0:process.env.HDB_LEADER_URL||process.argv.includes("--HDB_LEADER_URL")?ab()().catch(h=>{console.log(h)}):Va().main();break;default:console.warn(`The "${t}" command is not understood.`);case Kr.HELP:console.log(`
110
102
  Usage: harperdb [command]
111
103
 
112
104
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -121,4 +113,6 @@ Commands:
121
113
  install - Install harperdb
122
114
  register - Register harperdb
123
115
  upgrade - Upgrade harperdb
124
- status - Print the status of HarperDB and clustering`)}})}a(Lde,"harperDBService");
116
+ renew-certs - Generate a new set of self-signed certificates
117
+ status - Print the status of HarperDB and clustering
118
+ <api-operation> <parameter>=<value> - Run an API operation and return result to the CLI, not all operations are supported`)}})}a(zfe,"harperDBService");