harperdb 4.2.0-alpha.12 → 4.2.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/lite.js CHANGED
@@ -3,7 +3,7 @@ var oH=Object.create;var zo=Object.defineProperty;var aH=Object.getOwnPropertyDe
3
3
  `}a(Us,"createLogRecord");function sa(e){Is&&JR(e),ws&&process.stdout.write(e)}a(sa,"logStdOut");function gu(e){Is&&JR(e),ws&&process.stderr.write(e)}a(gu,"logStdErr");function JR(e){Uq(),qi?Vn.appendFileSync(qi,e):ea.log(e)}a(JR,"logToFile");function DE(){try{Vn.closeSync(qi)}catch{}qi=null}a(DE,"closeLogFile");function Uq(){if(!qi){try{if(!ta)debugger;qi=Vn.openSync(ta,"a")}catch(e){ea.error(e)}setTimeout(()=>{DE()},yq).unref()}}a(Uq,"openLogFile");function Ru(...e){Mt[Lt]<=Mt.info&&sa(Us("info",e))}a(Ru,"info");function LE(...e){Mt[Lt]<=Mt.trace&&sa(Us("trace",e))}a(LE,"trace");function ra(...e){Mt[Lt]<=Mt.error&&gu(Us("error",e))}a(ra,"error");function ME(...e){Mt[Lt]<=Mt.debug&&sa(Us("debug",e))}a(ME,"debug");function XR(...e){Mt[Lt]<=Mt.notify&&sa(Us("notify",e))}a(XR,"notify");function ZR(...e){Mt[Lt]<=Mt.fatal&&gu(Us("fatal",e))}a(ZR,"fatal");function PE(...e){Mt[Lt]<=Mt.warn&&gu(Us("warn",e))}a(PE,"warn");function Dq(e,t,...r){t===WR.STDERR?gu(Us(e,r)):sa(Us(e,r))}a(Dq,"logCustomLevel");function Lq(){let e;try{e=Aq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Cs.join(e,tt.HDB_HOME_DIR_NAME,tt.BOOT_PROPS_FILE_NAME);return Vn.existsSync(t)||(t=Cs.join(UE,"utility/hdb_boot_properties.file")),t}a(Lq,"getPropsFilePath");function Mq(e){Lt=e}a(Mq,"setLogLevel");function $R(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($R,"autoCastBoolean");function Pq(e){try{if(e.includes("config/settings.js")){let o=KR(e);return{level:o.get(tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Cs.dirname(o.get(tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=YR.parseDocument(Vn.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===tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Pq,"getLogConfig");function vq(){try{let e=YR.parseDocument(Vn.readFileSync(bq,"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(vq,"getDefaultConfig");function Bq(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(Bq,"AuthAuditLog")});var eg=m((mre,jR)=>{"use strict";var Hq=require("util"),qq=require("path"),Fq=require("child_process"),Gq=Hq.promisify(Fq.execFile),xq=1e3*1e3*10;jR.exports={findPs:kq};async function kq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Gq("ps",["wwxo",`pid,${r}`],{maxBuffer:xq});for(let n of s.trim().split(`
4
4
  `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:qq.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(kq,"findPs")});var ke=m((pre,rg)=>{"use strict";var Vq="__dbis__",$q="__txns__",Yq="__environment_name__",Kq="__dbi_defintion__",Wq={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"},Qq=["__createdtime__","__updatedtime__"],zq="\uFFFF",tg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Jq=Object.values(tg);rg.exports={AUDIT_STORE_NAME:$q,INTERNAL_DBIS_NAME:Vq,DBI_DEFINITION_NAME:Kq,SEARCH_TYPES:Wq,TIMESTAMP_NAMES:Qq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Yq,TRANSACTIONS_DBI_NAMES_ENUM:tg,TRANSACTIONS_DBIS:Jq,OVERFLOW_MARKER:zq}});var rr=m((Tre,_g)=>{"use strict";var sg=A(),ng=ke(),ig={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},og=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ag={500:og("There was an error processing your request."),400:"Invalid request"},Xq=ag[ig.INTERNAL_SERVER_ERROR],Zq={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.`},jq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},eF={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"},tF={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 ${ng.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ng.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"},rF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${sg.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 ${sg.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"},cg={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"},sF={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."},nF={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`},iF={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"},oF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},aF={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`},ug={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.`},lg={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}`},cF={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."},uF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},lF={...cg,...eF,...Zq,...sF,...nF,...iF,...oF,...aF,...rF,...ug,...lg,...cF,...uF,...jq};_g.exports={CHECK_LOGS_WRAPPER:og,HDB_ERROR_MSGS:lF,DEFAULT_ERROR_MSGS:ag,DEFAULT_ERROR_RESP:Xq,HTTP_STATUS_CODES:ig,LMDB_ERRORS_ENUM:tF,AUTHENTICATION_ERROR_MSGS:cg,VALIDATION_ERROR_MSGS:ug,ITC_ERRORS:lg}});var W=m((gre,fg)=>{"use strict";var Fi=rr(),_F=x(),dF=A(),Au=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,dg),this.statusCode=s||Fi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Fi.DEFAULT_ERROR_MSGS[s]?Fi.DEFAULT_ERROR_MSGS[s]:Fi.DEFAULT_ERROR_MSGS[Fi.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&&_F[n](i)}},BE=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}},HE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function dg(e,t,r,s=dF.LOG_LEVELS.ERROR,n=null,i=!1){if(Eg(e))return e;let o=new Au(e,t,r,s,n);return i&&delete o.stack,o}a(dg,"handleHDBError");function Eg(e){return e.__proto__.constructor.name===Au.name}a(Eg,"isHDBError");fg.exports={isHDBError:Eg,handleHDBError:dg,ClientError:BE,ServerError:HE,hdb_errors:Fi}});var V=m((Nre,wg)=>{"use strict";var un=require("path"),Tg=require("fs-extra"),Pt=x(),hg=require("fs-extra"),Ou=require("os"),EF=require("net"),fF=require("recursive-iterator"),Pe=A(),hF=eg(),mg=require("papaparse"),Nu=require("moment"),{inspect:mF}=require("util"),Sg=require("is-number"),Ore=require("lodash"),SF=require("minimist"),pF=require("https"),TF=require("http"),{hdb_errors:bu}=W(),RF=/^((\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)))$/,Rg=require("util").promisify(setTimeout),gF=100,AF=5,OF="",NF=4,pg={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wg.exports={isEmpty:sr,isEmptyOrZeroLength:Xr,arrayHasEmptyValues:IF,arrayHasEmptyOrZeroLengthValues:wF,buildFolderPath:CF,isBoolean:gg,errorizeMessage:bF,stripFileExtension:DF,autoCast:LF,autoCastJSON:Ag,autoCastJSONDeep:FE,removeDir:MF,compareVersions:PF,isCompatibleDataVersion:vF,escapeRawValue:BF,unescapeValue:HF,stringifyProps:qF,timeoutPromise:GF,isClusterOperation:kF,getClusterUser:$F,checkGlobalSchemaTable:VF,getHomeDir:Ng,getPropsFilePath:FF,promisifyPapaParse:YF,removeBOM:bg,createEventPromise:KF,checkProcessRunning:WF,checkSchemaTableExist:QF,checkSchemaExists:yg,checkTableExists:Ig,getStartOfTomorrowInSeconds:zF,getLimitKey:JF,isObject:UF,isNotEmptyAndHasValue:yF,autoCasterIsNumberCheck:Og,backtickASTSchemaItems:XF,isPortTaken:xF,createForkArgs:ZF,autoCastBoolean:jF,async_set_timeout:Rg,getTableHashAttribute:eG,doesSchemaExist:tG,doesTableExist:rG,stringifyObj:sG,ms_to_time:nG,changeExtension:iG,getEnvCliRootPath:GE,noBootFile:oG,httpRequest:aG,transformReq:cG,convertToMS:uG,PACKAGE_ROOT:Pe.PACKAGE_ROOT};function bF(e){return e instanceof Error?e:new Error(e)}a(bF,"errorizeMessage");function sr(e){return e==null}a(sr,"isEmpty");function yF(e){return!sr(e)&&(e||e===0||e===""||gg(e))}a(yF,"isNotEmptyAndHasValue");function Xr(e){return sr(e)||e.length===0||e.size===0}a(Xr,"isEmptyOrZeroLength");function IF(e){if(sr(e))return!0;for(let t=0;t<e.length;t++)if(sr(e[t]))return!0;return!1}a(IF,"arrayHasEmptyValues");function wF(e){if(Xr(e))return!0;for(let t=0;t<e.length;t++)if(Xr(e[t]))return!0;return!1}a(wF,"arrayHasEmptyOrZeroLengthValues");function CF(...e){try{return e.join(un.sep)}catch{console.error(e)}}a(CF,"buildFolderPath");function gg(e){return sr(e)?!1:e===!0||e===!1}a(gg,"isBoolean");function UF(e){return sr(e)?!1:typeof e=="object"}a(UF,"isObject");function DF(e){return Xr(e)?OF:e.slice(0,-NF)}a(DF,"stripFileExtension");function LF(e){return sr(e)||e===""||typeof e!="string"?e:pg[e]!==void 0?pg[e]:Og(e)===!0?Number(e):RF.test(e)?new Date(e):e}a(LF,"autoCast");function Ag(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ag,"autoCastJSON");function FE(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=FE(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=FE(r);s!==r&&(e[t]=s)}return e}else return Ag(e)}a(FE,"autoCastJSONDeep");function Og(e){if(e.startsWith("0.")&&Sg(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Sg(e))}a(Og,"autoCasterIsNumberCheck");async function MF(e){if(Xr(e))throw new Error(`Directory path: ${e} does not exist`);try{await hg.emptyDir(e),await hg.remove(e)}catch(t){throw Pt.error(`Error removing files in ${e} -- ${t}`),t}}a(MF,"removeDir");function PF(e,t){if(Xr(e)){Pt.info("Invalid current version sent as parameter.");return}if(Xr(t)){Pt.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 l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(PF,"compareVersions");function vF(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(vF,"isCompatibleDataVersion");function BF(e){if(sr(e))return e;let t=String(e);return t==="."?Pe.UNICODE_PERIOD:t===".."?Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD:t.replace(Pe.FORWARD_SLASH_REGEX,Pe.UNICODE_FORWARD_SLASH)}a(BF,"escapeRawValue");function HF(e){if(sr(e))return e;let t=String(e);return t===Pe.UNICODE_PERIOD?".":t===Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD?"..":String(e).replace(Pe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(HF,"unescapeValue");function qF(e,t){if(sr(e))return Pt.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+Ou.EOL}!Xr(s)&&s[0]===";"?r+=" "+s+n+Ou.EOL:Xr(s)||(r+=s+"="+n+Ou.EOL)}catch{Pt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(qF,"stringifyProps");function Ng(){let e;try{e=Ou.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Ng,"getHomeDir");function FF(){let e=un.join(Ng(),Pe.HDB_HOME_DIR_NAME,Pe.BOOT_PROPS_FILE_NAME);return Tg.existsSync(e)||(e=un.join(__dirname,"../","hdb_boot_properties.file")),e}a(FF,"getPropsFilePath");function GF(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(GF,"timeoutPromise");async function xF(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=EF.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(xF,"isPortTaken");function kF(e){try{return Pe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kF,"isClusterOperation");function VF(e,t){let r=(de(),ee(Ne)).getDatabases();if(!r[e])return bu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return bu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(VF,"checkGlobalSchemaTable");function $F(e,t){if(sr(t)){Pt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sr(e)||Xr(e)){Pt.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){Pt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Pt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a($F,"getClusterUser");function YF(){mg.parsePromise=function(e,t,r){return new Promise(function(s,n){mg.parse(e,{header:!0,transformHeader:bg,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(YF,"promisifyPapaParse");function bg(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bg,"removeBOM");function KF(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Pt.info(`Got cluster status event response: ${mF(n)}`);try{i.cancel()}catch{Pt.error("Error trying to cancel timeout.")}s(n)})})}a(KF,"createEventPromise");async function WF(e){let t=!0,r=0;do await Rg(gF*r++),(await hF.findPs(e)).length>0&&(t=!1);while(t&&r<AF);if(t)throw new Error(`process ${e} was not started`)}a(WF,"checkProcessRunning");function QF(e,t){let r=yg(e);if(r)return r;let s=Ig(e,t);if(s)return s}a(QF,"checkSchemaTableExist");function yg(e){let{getDatabases:t}=(de(),ee(Ne));if(!t()[e])return bu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yg,"checkSchemaExists");function Ig(e,t){let{getDatabases:r}=(de(),ee(Ne));if(!r()[e][t])return bu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ig,"checkTableExists");function zF(){let e=Nu().utc().add(1,Pe.MOMENT_DAYS_TAG).startOf(Pe.MOMENT_DAYS_TAG).unix(),t=Nu().utc().unix();return e-t}a(zF,"getStartOfTomorrowInSeconds");function JF(){return Nu().utc().format("DD-MM-YYYY")}a(JF,"getLimitKey");function XF(e){try{let t=new fF(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){Pt.error("Got an error back ticking items."),Pt.error(t)}}a(XF,"backtickASTSchemaItems");function ZF(e){return[e]}a(ZF,"createForkArgs");function jF(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jF,"autoCastBoolean");function eG(e,t){let{getDatabases:r}=(de(),ee(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(eG,"getTableHashAttribute");function tG(e){let{getDatabases:t}=(de(),ee(Ne));return t()[e]!==void 0}a(tG,"doesSchemaExist");function rG(e,t){let{getDatabases:r}=(de(),ee(Ne));return r()[e]?.[t]!==void 0}a(rG,"doesTableExist");function sG(e){try{return JSON.stringify(e)}catch{return e}}a(sG,"stringifyObj");function nG(e){let t=Nu.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(nG,"ms_to_time");function iG(e,t){let r=un.basename(e,un.extname(e));return un.join(un.dirname(e),r+t)}a(iG,"changeExtension");function GE(){if(process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=SF(process.argv);if(e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(GE,"getEnvCliRootPath");var qE;function oG(){if(qE)return qE;let e=GE();GE()&&Tg.pathExistsSync(un.join(e,Pe.HDB_CONFIG_FILE))&&(qE=!0)}a(oG,"noBootFile");function aG(e,t){let r;return e.protocol==="http:"?r=TF:r=pF,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(aG,"httpRequest");function cG(e){if(!e.schema&&!e.database){e.schema=Pe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(cG,"transformReq");function uG(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(uG,"convertToMS")});var Ug=m((yre,Cg)=>{"use strict";var lG={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},_G="certificate.pem",dG="privateKey.pem",EG="ca.pem";Cg.exports={CERTIFICATE_VALUES:lG,CERTIFICATE_PEM_NAME:_G,PRIVATEKEY_PEM_NAME:dG,CA_PEM_NAME:EG}});var ve=m((Ire,Dg)=>{"use strict";var vt=require("validate.js");vt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||vt.validators.type.checks[t](e)?null:` must be a '${t}' value`};vt.validators.type.checks={Object:function(e){return vt.isObject(e)&&!vt.isArray(e)},Array:vt.isArray,Integer:vt.isInteger,Number:vt.isNumber,String:vt.isString,Date:vt.isDate,Boolean:function(e){return typeof e=="boolean"}};vt.validators.hasValidFileExt=function(e,t){return vt.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};Dg.exports={validateObject:fG,validateObjectAsync:hG,validateBySchema:mG};function fG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=vt(e,t,{format:"flat"});return r?new Error(r):null}a(fG,"validateObject");async function hG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await vt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(hG,"validateObjectAsync");function mG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mG,"validateBySchema")});var kE=m((Ure,Hg)=>{"use strict";var vg=require("fs-extra"),te=require("joi"),SG=require("os"),{boolean:pe,string:Ls,number:nr,array:xE}=te.types(),{totalmem:Lg}=require("os"),Gi=require("path"),pG=x(),Iu=V(),Cre=Ug(),Mg=A(),TG=ve(),Pg="log",RG="components",gG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",AG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",OG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",NG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",bG="rootPath config parameter is undefined",yG="clustering.enabled config parameter is undefined",Ds=nr.min(0).required(),wu=xE.items({host:Ls.required(),port:Ds}).empty(null),Ms;Hg.exports={configValidator:IG,routesValidator:MG,route_constraints:wu};function IG(e){if(Ms=e.rootPath,Iu.isEmpty(Ms))throw bG;let t=pe.required(),r=te.valid("production","development").required(),s=nr.min(0).max(1e3).empty(null).default(LG),n=Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(yu),i=te.custom(wG).messages({"any.custom":"{:#label} {:#error}"}),o=Ls.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=te.string().empty(null).default(yu),u=te.custom(CG).empty(null).default(yu),l=e.clustering?.enabled;if(Iu.isEmpty(l))throw yG;let _;return l===!0?_=te.object({enabled:t,hubServer:te.object({cluster:te.object({name:te.required().empty(null),network:te.object({port:Ds,routes:wu}).required()}).required(),leafNodes:te.object({network:te.object({port:Ds}).required()}).required(),network:te.object({port:Ds}).required()}).required(),leafServer:te.object({network:te.object({port:Ds,routes:wu}).required(),streams:te.object({maxAge:nr.min(120).allow(null).optional(),maxBytes:nr.min(1).allow(null).optional(),maxMsgs:nr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:te.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Ls.optional().empty(null)}).required():_=te.object({enabled:t,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),te.object({authentication:te.object({authorizeLocal:pe,cacheTTL:nr.required(),enableSessions:pe,operationTokenTimeout:te.required(),refreshTokenTimeout:te.required()}),analytics:te.object({aggregatePeriod:nr}),clustering:_,customFunctions:te.object({enabled:t,network:te.object({cors:pe.required(),corsAccessList:xE.required(),headersTimeout:nr.min(1).required(),https:pe.required(),keepAliveTimeout:nr.min(1).required(),port:Ds,timeout:nr.min(1).required()}),nodeEnv:r,root:n,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:te.object({enabled:t}).required(),logging:te.object({auditAuthEvents:te.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:te.valid("notify","fatal","error","warn","info","debug","trace"),rotation:te.object({enabled:pe.optional(),compress:pe.optional(),interval:Ls.custom(DG).optional().empty(null),maxSize:Ls.custom(UG).optional().empty(null),path:Ls.optional().empty(null).default(yu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:te.object({foreground:pe.required(),network:te.object({cors:pe.required(),corsAccessList:xE.required(),headersTimeout:nr.min(1).required(),https:pe.required(),keepAliveTimeout:nr.min(1).required(),port:Ds,timeout:nr.min(1).required()}).required(),nodeEnv:r,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:te.object({network:te.object({port:Ds,securePort:Ds}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:te.object({threads:s}).required(),storage:te.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(IG,"configValidator");function Bg(e){return vg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Bg,"doesPathExist");function wG(e,t){if(e===null)return;let r=Bg(e);return r?t.message(r):e}a(wG,"validatePemFile");function CG(e,t){te.assert(e,Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Bg(e);if(r)return t.message(r)}a(CG,"validatePath");function UG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(gG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(OG):e}a(UG,"validateRotationMaxSize");function DG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(AG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(NG):e}a(DG,"validateRotationInterval");function LG(e,t){let r=t.state.path.join("."),s=SG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Lg();return i=Math.round(Math.min(i,Lg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),pG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(LG,"setDefaultThreads");function yu(e,t){if(!Iu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Iu.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Gi.join(Ms,RG);case"logging.root":return Gi.join(Ms,Pg);case"clustering.leafServer.streams.path":return Gi.join(Ms,"clustering","leaf");case"storage.path":let s=Gi.join(Ms,Mg.LEGACY_DATABASES_DIR_NAME);return vg.existsSync(s)?s:Gi.join(Ms,Mg.DATABASES_DIR_NAME);case"logging.rotation.path":return Gi.join(Ms,Pg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(yu,"setDefaultRoot");function MG(e){let t=te.object({routes:wu});return TG.validateBySchema({routes:e},t)}a(MG,"routesValidator")});var Tr=m((Mre,Wg)=>{"use strict";var pr=A(),_t=V(),rt=x(),{configValidator:PG,routesValidator:qg}=kE(),Bt=require("fs-extra"),vG=require("yaml"),vr=require("path"),BG=require("is-number"),Gg=require("properties-reader"),HG=require("lodash"),{handleHDBError:qG}=W(),{HTTP_STATUS_CODES:FG,HDB_ERROR_MSGS:Cu}=rr(),Lre=require("minimist"),{server:GG}=(Pr(),ee(Zo)),{SCHEMAS_PARAM_CONFIG:na,CONFIG_PARAMS:ln,CONFIG_PARAM_MAP:Ps}=pr,xG="Unable to get config value because config is uninitialized",kG="Config successfully initialized",VG="Error backing up config file",$G="Empty parameter sent to getConfigValue",xg=vr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),YG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Fg={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"},Uu,ft;Wg.exports={createConfigFile:KG,getDefaultConfig:WG,getConfigValue:Vg,initConfig:$g,flattenConfig:Yn,updateConfigValue:Yg,updateConfigObject:zG,getConfiguration:ZG,setConfiguration:jG,readConfigFile:YE,getClusteringRoutes:ex,initOldConfig:Kg,getConfigFromFile:tx,getConfigFilePath:$n,addConfig:rx,deleteConfigFromFile:sx};function KG(e){let t=_n(xg);Uu=Yn(t.toJSON());let r;for(let o in e){let c=Ps[o.toLowerCase()];if(c===ln.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=VE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&kg(t,r),$E(t);let s=t.toJSON();ft=Yn(s);let n=t.getIn(["rootPath"]),i=vr.join(n,pr.HDB_CONFIG_FILE);Bt.createFileSync(i),Bt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(KG,"createConfigFile");function kg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(na.TABLES))for(let i in s[n][na.TABLES])for(let o in s[n][na.TABLES][i]){let c=s[n][na.TABLES][i][o],u=[ln.SCHEMAS,n,na.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=[ln.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){rt.error("Error parsing schemas CLI/env config arguments",s)}}a(kg,"setSchemasConfig");function WG(e){if(Uu===void 0){let r=_n(xg);Uu=Yn(r.toJSON())}let t=Ps[e.toLowerCase()];if(t!==void 0)return Uu[t.toLowerCase()]}a(WG,"getDefaultConfig");function Vg(e){if(e==null){rt.error($G);return}if(ft===void 0){rt.trace(xG);return}let t=Ps[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(Vg,"getConfigValue");function $n(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?vr.join(t,pr.HDB_CONFIG_FILE):Gg(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a($n,"getConfigFilePath");function $g(e=!1){if(ft===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{Bt.accessSync(t,Bt.constants.F_OK|Bt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=$n(t),s;if(r.includes("config/settings.js"))try{Kg(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=_n(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){rt.trace(`HarperDB config file not found at ${r}.
5
5
  This can occur during early stages of install where the config file has not yet been created`);return}else throw rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}QG(s,r),$E(s);let n=s.toJSON();if(GG.config=n,ft=Yn(n),ft.logging_rotation_rotate)for(let i in Fg)ft[i]&&rt.error(`Config ${Fg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(kG)}}a($g,"initConfig");function QG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],vr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],vr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],vr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),Bt.writeFileSync(t,String(e)))}a(QG,"checkForUpdatedConfig");function $E(e){let t=e.toJSON(),r=PG(t);if(r.error)throw Cu.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),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($E,"validateConfig");function zG(e,t){ft===void 0&&(ft={});let r=Ps[e.toLowerCase()];if(r===void 0){rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(zG,"updateConfigObject");function Yg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&$g();let o=Vg(Ps.hdb_root),c=vr.join(o,pr.HDB_CONFIG_FILE),u=_n(c),l;if(r===void 0&&e.toLowerCase()===ln.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ps[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=VE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ps[E.toLowerCase()];if(f===ln.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=VE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&kg(u,l),$E(u);let _=u.getIn(["rootPath"]),d=vr.join(_,pr.HDB_CONFIG_FILE);s===!0&&JG(c,_),Bt.writeFileSync(d,String(u)),n&&(ft=Yn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Yg,"updateConfigValue");function JG(e,t){try{let r=vr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);Bt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(VG),rt.error(r)}}a(JG,"backupConfigFile");var XG=["schemas"];function Yn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!XG.includes(r)){let s=Yn(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Yn,"flattenConfig");function VE(e,t){if(e===ln.CLUSTERING_NODENAME||e===ln.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(BG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.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 _t.autoCast(t)}a(VE,"castConfigValue");function ZG(){let e=_t.getPropsFilePath(),t=$n(e);return _n(t).toJSON()}a(ZG,"getConfiguration");async function jG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Yg(void 0,void 0,n,!0),YG}catch(i){throw typeof i=="string"||i instanceof String?qG(i,i,FG.BAD_REQUEST,void 0,void 0,!0):i}}a(jG,"setConfiguration");function YE(){let e=_t.getPropsFilePath();try{Bt.accessSync(e,Bt.constants.F_OK|Bt.constants.R_OK)}catch(s){if(!_t.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=$n(e);return _n(t).toJSON()}a(YE,"readConfigFile");function _n(e){return vG.parseDocument(Bt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(_n,"parseYamlDoc");function ex(){let e=YE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=qg(t);if(r)throw Cu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=qg(s);if(n)throw Cu.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Cu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(ex,"getClusteringRoutes");function Kg(e){let t=Gg(e);ft={};for(let r in Ps){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ps[r].toLowerCase();n===ln.LOGGING_ROOT?ft[n]=vr.dirname(s):ft[n]=s}return ft}a(Kg,"initOldConfig");function tx(e){let t=YE();return HG.get(t,e.replaceAll("_","."))}a(tx,"getConfigFromFile");async function rx(e,t){let r=_n($n());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Bt.writeFile($n(),String(r))}a(rx,"addConfig");function sx(e){let t=$n(_t.getPropsFilePath()),r=_n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=vr.join(s,pr.HDB_CONFIG_FILE);Bt.writeFileSync(n,String(r))}a(sx,"deleteConfigFromFile")});var Q=m((vre,Jg)=>{"use strict";var KE=require("fs-extra"),Br=require("path"),Qg=require("os"),nx=require("properties-reader"),ia=x(),Kn=V(),re=A(),Du=Tr(),ix="Error initializing environment manager",Lu="BOOT_PROPS_FILE_PATH",zg=!1,ox={[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},vs={};Jg.exports={BOOT_PROPS_FILE_PATH:Lu,getHdbBasePath:ax,setHdbBasePath:cx,get:ux,initSync:_x,setProperty:Ee,initTestEnvironment:dx};function ax(){return vs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ax,"getHdbBasePath");function cx(e){vs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(cx,"setHdbBasePath");function ux(e){let t=Du.getConfigValue(e);return t===void 0?vs[e]:t}a(ux,"get");function Ee(e,t){ox[e]&&(vs[e]=t),Du.updateConfigObject(e,t)}a(Ee,"setProperty");function lx(){let e;try{e=Kn.getPropsFilePath(),KE.accessSync(e,KE.constants.F_OK|KE.constants.R_OK),zg=!0;let t=nx(e);return vs[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),vs[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),vs[Lu]=e,!0}catch{return ia.trace(`Environment manager found no properties file at ${e}`),!1}}a(lx,"doesPropFileExist");function _x(e=!1){try{(zg||lx()||Kn.noBootFile())&&(Du.initConfig(e),vs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Du.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ia.error(ix),ia.error(t),console.error(t),process.exit(1)}}a(_x,"initSync");function dx(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=Br.join(__dirname,"../../","unitTests");vs[Lu]=Br.join(u,"hdb_boot_properties.file"),Ee(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Br.join(u,"settings.test")),Ee(re.HDB_SETTINGS_NAMES.INSTALL_USER,Qg.userInfo()?Qg.userInfo().username:void 0),Ee(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Br.join(u,"envDir","utility","keys","privateKey.pem")),Ee(re.HDB_SETTINGS_NAMES.CERT_KEY,Br.join(u,"envDir","utility","keys","certificate.pem")),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Br.join(u,"envDir","utility","keys","privateKey.pem")),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Br.join(u,"envDir","utility","keys","certificate.pem")),Ee(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Br.join(u,"envDir","log")),Ee(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Br.join(u,"envDir")),Ee(re.CONFIG_PARAMS.STORAGE_PATH,Br.join(u,"envDir")),Ee(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Kn.isEmpty(n)?!0:n),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Kn.isEmpty(n)?!0:n),Ee(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Kn.isEmpty(i)?!1:i),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Kn.isEmpty(i)?!1:i),Ee(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Br.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Kn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Lu}. Please check your boot props and settings files`;ia.fatal(r),ia.error(t)}}a(dx,"initTestEnvironment")});var we=m((Hre,sA)=>{"use strict";var la=A(),Ex=V(),Ht=Q(),_a=require("path"),fx=require("minimist"),Xg=require("fs-extra"),Zg=require("lodash");Ht.initSync();var{CONFIG_PARAMS:dn,SCHEMAS_PARAM_CONFIG:oa,SYSTEM_SCHEMA_NAME:Mu}=la,aa,ca,ua;function jg(){if(aa!==void 0)return aa;if(Ht.getHdbBasePath()!==void 0)return aa=Ht.get(dn.STORAGE_PATH)||_a.join(Ht.getHdbBasePath(),la.DATABASES_DIR_NAME),aa}a(jg,"getBaseSchemaPath");function eA(){if(ca!==void 0)return ca;if(Ht.getHdbBasePath()!==void 0)return ca=rA(Mu),ca}a(eA,"getSystemSchemaPath");function tA(){if(ua!==void 0)return ua;if(Ht.getHdbBasePath()!==void 0)return ua=Ht.get(la.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||_a.join(Ht.getHdbBasePath(),la.TRANSACTIONS_DIR_NAME),ua}a(tA,"getTransactionAuditStoreBasePath");function hx(e,t){let r=Ht.get(dn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||_a.join(tA(),e.toString())}a(hx,"getTransactionAuditStorePath");function rA(e,t){e=e.toString(),t=t&&t.toString();let r=Ht.get(la.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||_a.join(jg(),e)}a(rA,"getSchemaPath");function mx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,fx(process.argv));let s=r[dn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Ex.isObject(s))throw o;i=s}for(let o of i){let c=o[Mu];if(!c)continue;let u=Ht.get(dn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[oa.PATH];if(l)return Zg.set(u,[Mu,oa.TABLES,t,oa.PATH],l),Ht.setProperty(dn.SCHEMAS,u),l;let _=c?.[oa.PATH];if(_)return Zg.set(u,[Mu,oa.PATH],_),Ht.setProperty(dn.SCHEMAS,u),_}}let n=r[dn.STORAGE_PATH.toUpperCase()];if(n){if(!Xg.pathExistsSync(n))throw new Error(n+" does not exist");let i=_a.join(n,e);return Xg.mkdirsSync(i),Ht.setProperty(dn.STORAGE_PATH,n),i}return eA()}a(mx,"initSystemSchemaPaths");function Sx(){aa=void 0,ca=void 0,ua=void 0}a(Sx,"resetPaths");sA.exports={getBaseSchemaPath:jg,getSystemSchemaPath:eA,getTransactionAuditStorePath:hx,getTransactionAuditStoreBasePath:tA,getSchemaPath:rA,initSystemSchemaPaths:mx,resetPaths:Sx}});var qt=m((xre,cA)=>{"use strict";var px=rr().LMDB_ERRORS_ENUM,Fre=require("lmdb"),Tx=ke(),Gre=require("buffer").Buffer,{OVERFLOW_MARKER:nA,MAX_SEARCH_KEY_LENGTH:Pu}=Tx,iA=["number","string","symbol","boolean","bigint"];function Rx(e){if(e=e?.primaryStore||e,!e)throw new Error(px.ENV_REQUIRED)}a(Rx,"validateEnv");function gx(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(gx,"stringifyData");function Ax(e){return e instanceof Date?e.valueOf():e}a(Ax,"convertKeyValueToWrite");function Ox(e){if(e==null)return;if(iA.includes(typeof e))return e.length>Pu?[e.slice(0,Pu)+nA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(iA.includes(typeof n))n.length>Pu?t.push(n.slice(0,Pu)+nA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Ox,"getIndexedValues");var vu=0,oA=0;function aA(){oA=Date.now()-performance.now()}a(aA,"adjustStartTime");aA();var Nx=6e4;setInterval(aA,Nx).unref();function bx(){let e=performance.now()+oA;return e>vu?(vu=e,e):(vu+=488e-6,vu)}a(bx,"getNextMonotonicTime");cA.exports={validateEnv:Rx,stringifyData:gx,convertKeyValueToWrite:Ax,getNextMonotonicTime:bx,getIndexedValues:Ox}});var uA,Zr,WE,da=Se(()=>{uA=require("events"),Zr=class extends uA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new WE;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)}},WE=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 Ea(e){return e[ht]||(e[ht]=Object.create(null))}function Gu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ht];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=lA(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){Ea(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Bu.ClientError)(`${c} must be a string, attempt to assign ${l}`);Ea(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Bu.ClientError)(`${c} must be a string, attempt to assign ${l}`);Ea(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ht];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Bu.ClientError("Can not add a property to a sealed table schema");Ea(this)[o]=c}),i("deleteProperty",function(o){Ea(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),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 lA(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[ce]=n}},Gu(r,t)),new r(e)):new Hu(e);case Array:let s=new Fu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=lA(o,t?.elements)),s[n]=o}return s}}function xu(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=xu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function fa(e){let t;if(e[ce]&&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=fa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=fa(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function qu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Wn]||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?.[ce]===n){if(qu(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(qu(n))return!0}else return!0}else return!0}}return!1}var Bu,ht,Hu,Wn,Fu,ku=Se(()=>{jr();Bu=C(W()),ht=Symbol("own-data");a(Ea,"getChanges");a(Gu,"assignTrackedAccessors");a(lA,"trackObject");Hu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Gu(Hu,{});a(xu,"collapseData");a(fa,"deepFreeze");a(qu,"hasChanges");Wn=Symbol.for("has-array-changes"),Fu=class extends Array{static{a(this,"TrackedArray")}[Wn];constructor(t){super(t)}splice(...t){return this[Wn]=!0,super.splice(...t)}push(...t){return this[Wn]=!0,super.push(...t)}pop(){return this[Wn]=!0,super.pop()}unshift(...t){return this[Wn]=!0,super.unshift(...t)}shift(){return this[Wn]=!0,super.shift()}};Fu.prototype.constructor=Array});function Ke(e,t){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 r=e.transaction=new QE;e.timestamp&&(r.timestamp=e.timestamp),r[Ae]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var _A,dA,QE,Qn=Se(()=>{_A=C(qt()),dA=require("../index");jr();a(Ke,"transaction");(0,dA._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};QE=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,_A.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function XE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(Ix[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=ts.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case dt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new zE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=ZE(e);if(!p)throw new zE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(k=>setImmediate(()=>k(p(O)?R:fA.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:p})=>p)}function ZE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case dt.SEARCH_TYPES.EQUALS:case void 0:return es(r,n=>n===s);case dt.SEARCH_TYPES.CONTAINS:return es(r,n=>n?.toString().includes(s));case dt.SEARCH_TYPES.ENDS_WITH:case dt.SEARCH_TYPES._ENDS_WITH:return es(r,n=>n?.toString().endsWith(s));case dt.SEARCH_TYPES.STARTS_WITH:case dt.SEARCH_TYPES._STARTS_WITH:return es(r,n=>typeof n=="string"&&n.startsWith(s));case dt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),es(r,n=>(0,ts.compareKeys)(n,s[0])>=0&&(0,ts.compareKeys)(n,s[1])<=0);case"gt":case dt.SEARCH_TYPES.GREATER_THAN:case dt.SEARCH_TYPES._GREATER_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)>0);case"ge":case dt.SEARCH_TYPES.GREATER_THAN_EQUAL:case dt.SEARCH_TYPES._GREATER_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)>=0);case dt.SEARCH_TYPES.LESS_THAN:case"lt":case dt.SEARCH_TYPES._LESS_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)<0);case"le":case dt.SEARCH_TYPES.LESS_THAN_EQUAL:case dt.SEARCH_TYPES._LESS_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)<=0);case"ne":return es(r,n=>(0,ts.compareKeys)(n,s)!==0);default:return}}function es(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 Vu(e){if(!e)return;let t=new JE,r,s,n,i,o;for(;r=EA.exec(e);){i=EA.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.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}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=yx[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var zE,dt,ts,fA,EA,yx,Ix,JE,$u=Se(()=>{zE=C(W()),dt=C(ke()),ts=require("ordered-binary"),fA=require("lmdb"),EA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,yx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(XE,"idsForCondition");Ix={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(ZE,"filterByType");a(es,"attributeComparator");a(Vu,"parseQuery");JE=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 tf={};xe(tf,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Bs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>RA,snake_case:()=>Cx});function Cx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function hA(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 ef(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Ae]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ae]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[Ae]||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 E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ke(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[RA]=!1),o.authorize){o.authorize=!1;let f=t.type==="read"?E.allowRead(o.user,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,o):E.allowUpdate(o.user,o):t.type==="create"?E.allowCreate(o.user,o):E.allowDelete(o.user,o);if(f?.then)return f.then(h=>{if(!h)throw new Yu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new Yu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function gr(e,t){let r=new TA.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 jE(e){let t=e[ce];if(t){let r=e[ht];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 mA(e){if(typeof e=="string")return t=>jE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=jE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=jE(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 SA,pA,TA,Ae,ae,Bs,RA,ce,wx,mt,Yu,ef,jr=Se(()=>{SA=require("crypto");da();pA=require("../index"),TA=C(W());ku();Qn();$u();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Bs=Symbol("is-collection"),RA=Symbol("save-updates"),ce=Symbol("stored-record"),wx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=class{static{a(this,"Resource")}[Ae];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[Ae];this[Ae]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Rr(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 l=mA(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Rr(function(t,r,s,n){if(Array.isArray(n)&&t[Bs]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):gr(t,"put")},{hasContent:!0,type:"update"});static delete=Rr(function(t,r,s,n){return t.delete?t.delete(r):gr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,SA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ke(s,()=>{let i=new this(n,s),o=i.put?i.put(r):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=mA(o);return i.map(c)}return i},{type:"read"});static query=Rr(function(t,r,s,n){return t.search?t.search(n,r):gr(t,"search")},{hasContent:!0,type:"read"});static copy=Rr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):gr(t,"copy")},{type:"create"});static move=Rr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):gr(t,"move")},{type:"delete"});post(t){if(this[Bs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[Bs]}static coerceId(t){return t}static parseQuery(t){return Vu(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&&wx[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:hA(t,this)}}return hA(t,this)}static getResource(t,r,s){let n,i=r[Ae],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 l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ae]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ae],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[Bs]=!0),n}connect(t){let r=new Zr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}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[ae]}getContext(){return this[Ae]}};mt.prototype[Ae]=null;(0,pA._assignPackageExport)("Resource",mt);a(Cx,"snake_case");Yu=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(hA,"pathToId");ef=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(jE,"selectFromObject");a(mA,"transformForSelect")});function af(e){let t=e.auditStore=e.openDB(bA.AUDIT_STORE_NAME,Dx);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,IA.getWorkerIndex)()===0&&e.on("aftercommit",()=>{sf||(sf=setTimeout(()=>{if(sf=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-gA,0]})){if((n[0]&15)===of){let i=s[1];r[i]?.(s[2])}t.remove(s)}},gA/10).unref())}),t}function Qu(e,t,r){let s=UA[r.type],n=3;if(t?t.length>80?(s|=Ku,n=(0,Hs.writeKey)(t,rs,e?14:6),rf.setUint16(2,n)):(n=(0,Hs.writeKey)(t,rs,e?11:3),rs[1]=n):rs[1]=0,e){s|=CA;let i=s&Ku?6:3;rf.setFloat64(i,e),t||(n=i+8)}return rs[0]=s,s&Ku?rf.setUint16(4,0):rs[2]=0,r.value?Buffer.concat([rs.slice(0,n),r.value]):rs.subarray(0,n)}function En(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Ku,i=n?6:3,o;r&CA&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&nf?t.decoder.decode(e.subarray(c||i)):void 0;return{type:UA[r&7],value:u,lastVersion:o,get user(){return c?(0,Hs.readKey)(e,i,c):void 0}}}var Hs,Wu,bA,yA,IA,wA,rs,rf,Ux,Dx,gA,sf,nf,AA,of,OA,NA,Ku,CA,UA,ha=Se(()=>{Hs=require("ordered-binary"),Wu=C(Q()),bA=C(ke()),yA=C(A()),IA=C(st()),wA=C(V());(0,Wu.initSync)();rs=Buffer.alloc(1024),rf=new DataView(rs.buffer,rs.byteOffset,1024),Ux={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,Hs.writeKey)(e[2],t,r+12)}else return(0,Hs.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,Hs.readKey)(e,t+12,r)]}else return(0,Hs.readKey)(e,t,r)}},Dx={encoding:"binary",keyEncoder:Ux},gA=(0,wA.convertToMS)((0,Wu.get)(yA.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,sf=null;a(af,"openAuditStore");nf=16,AA=1,of=2,OA=3,NA=4,Ku=128,CA=64,UA={put:AA|nf,[AA]:"put",delete:of,[of]:"delete",message:OA|nf,[OA]:"message",invalidate:NA,[NA]:"invalidate"};a(Qu,"createAuditEntry");a(En,"readAuditEntry")});var cf,zn,Lx,ma,zu,DA=Se(()=>{cf=C(qt());ha();zn=Symbol("completion"),Lx=100,ma=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,cf.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[zn]&&(i||(i=[]),i.push(d[zn])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Qu(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<Lx>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},zu=class extends ma{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,cf.getNextMonotonicTime)())}getReadTxn(){}}});var LA={};xe(LA,{Resources:()=>Ju,keyArrayToString:()=>xi,resetResources:()=>Mx,resources:()=>fn});function Mx(){return fn=new Ju}function xi(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ju,fn,Sa=Se(()=>{Qn();Ju=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 l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=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&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(Mx,"resetResources");a(xi,"keyArrayToString")});function BA(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Vi||((0,Jn.onMessageByType)(PA,d=>{let E=d.auditIds;lf(d.path,E,d.txnId)}),(0,Jn.onMessageByType)(vA,d=>{(0,ss.trace)("confirming to proceed with txn",d.txnId)}),Vi=Object.create(null));let c=Vi[i]||(Vi[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=xi(t);let l=new uf(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function lf(e,t,r,s){if(!Vi)return;let n=Vi[e];if(n){if(ki&&ki+1!==r){(0,ss.trace)("Waiting to ensure latest txn id",ki,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Xu)o<r&&((0,ss.trace)("Txn",r,"waiting for txn",o),await c);if(ki+1!==r){await(0,Jn.broadcastWithAcknowledgement)({type:vA,txnId:r});for(let[o,c]of Xu)o<r&&((0,ss.trace)("Txn",r,"waiting for txn",o),await c)}Xu.delete(r),(0,ss.trace)("Proceeding with txn id",r),ki=r-1,lf(e,t,r,s)})();return Xu.set(r,i),i}(0,ss.trace)("Notifying with txn id",r,s),ki=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,MA.writeKey)(i,vx,0);let _=i[3];_&&(i.length=3);let d,E=xi(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,ss.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=En(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,ss.info)(R)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function HA(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",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&Px)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,Jn.broadcast)({type:PA,path:n,auditIds:l,txnId:c,start:u}),lf(n,l,c,!0))})}}var ss,Jn,MA,PA,vA,Px,Vi,vx,uf,ki,Xu,qA=Se(()=>{ss=C(x()),Jn=C(st()),MA=require("ordered-binary");da();Sa();ha();PA="transaction",vA="transaction-await",Px=67108864,vx=Buffer.alloc(4096);a(BA,"addSubscription");uf=class extends Zr{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"}}},Xu=new Map;a(lf,"notifyFromTransactionData");a(HA,"listenToCommits")});var GA=m((Sse,FA)=>{"use strict";var _f=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};FA.exports=_f});var kA=m((Tse,xA)=>{"use strict";var df=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};xA.exports=df});var Zu=m((gse,VA)=>{"use strict";var ff=Q(),hf=A();ff.initSync();var Bx=ff.get(hf.CONFIG_PARAMS.STORAGE_COMPRESSION),Hx=ff.get(hf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,qx=hf.UPDATES_PROPERTY,Ef=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Bx&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Hx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===qx)}};VA.exports=Ef});var el=m((Ose,YA)=>{"use strict";var $i=Q(),pa=A();$i.initSync();var Fx=$i.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||$i.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||$i.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",$A=$i.get(pa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Gx=$i.get(pa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ju=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=Fx,this.noFSAccess=!0,$A!==void 0&&(this.overlappingSync=$A),this.noReadAhead=Gx}};YA.exports=ju;ju.MAX_DBS=1e4});var ye=m((bse,tO)=>{"use strict";var Sf=require("lmdb"),Hr=require("fs-extra"),ir=require("path"),tl=qt(),QA=x(),Ft=rr().LMDB_ERRORS_ENUM,rl=kA(),pf=Zu(),zA=el(),hn=ke(),KA=A(),{table:xx,resetDatabases:kx}=(de(),ee(Ne)),WA=Q(),qr=hn.INTERNAL_DBIS_NAME,JA=hn.DBI_DEFINITION_NAME,Vx="data.mdb",$x="lock.mdb",Ta=".mdb",Yx="-lock",mf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[hn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[hn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Sf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function sl(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}a(sl,"pathEnvNameValidation");async function Tf(e,t,r=!0){try{await Hr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+Ta);return await Hr.access(s,Hr.constants.R_OK|Hr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Hr.access(ir.join(e,t,Vx),Hr.constants.R_OK|Hr.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ft.INVALID_ENVIRONMENT)}else throw new Error(Ft.INVALID_ENVIRONMENT);throw s}}a(Tf,"validateEnvironmentPath");function nl(e,t){if(tl.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a(nl,"validateEnvDBIName");async function Kx(e,t,r=!1,s=!1){sl(e,t);let n=ir.basename(e);t=t.toString();let i=WA.get(KA.CONFIG_PARAMS.SCHEMAS);i||WA.setProperty(KA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Tf(e,t,s),XA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Hr.mkdirp(s?c:e);let u=new zA(s?c:c+Ta,!1),l=Sf.open(u);l.dbis=Object.create(null);let _=new pf(!1);l.openDB(qr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Rf(e,t,r);return l[hn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Kx,"createEnvironment");async function Wx(e,t,r,s=!0){sl(e,t),t=t.toString();let n=ir.join(e,t);return xx({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Wx,"copyEnvironment");async function XA(e,t,r=!1){sl(e,t),t=t.toString();let s=Rf(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 Tf(e,t),i=ir.join(e,t+Ta),o=n!=i,c=new zA(n,o),u=Sf.open(c);u.dbis=Object.create(null);let l=jA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[hn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(XA,"openEnvironment");async function Qx(e,t,r=!1){sl(e,t),t=t.toString();let s=ir.join(e,t+Ta),n=await Tf(e,t);if(global.lmdb_map!==void 0){let i=Rf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ZA(o),delete global.lmdb_map[i]}}await Hr.remove(n),await Hr.remove(n===s?n+Yx:ir.join(ir.dirname(n),$x))}a(Qx,"deleteEnvironment");async function ZA(e){tl.validateEnv(e);let t=e[hn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ZA,"closeEnvironment");function Rf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Rf,"getCachedEnvironmentName");function zx(e){tl.validateEnv(e);let t=Object.create(null),r=Ar(e,qr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==qr)try{t[s]=Object.assign(new rl,n)}catch{QA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(zx,"listDBIDefinitions");function jA(e){tl.validateEnv(e);let t=[],r=Ar(e,qr);for(let{key:s}of r.getRange({start:!1}))s!==qr&&t.push(s);return t}a(jA,"listDBIs");function Jx(e,t){let s=Ar(e,qr).getEntry(t),n=new rl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{QA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Jx,"getDBIDefinition");function eO(e,t,r,s=!r){if(nl(e,t),t=t.toString(),t===qr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new pf(r,s===!0),o=e.openDB(t,i),c=new rl(r===!0,s);return o[JA]=c,Ar(e,qr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(eO,"createDBI");function Ar(e,t){if(nl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==qr?r=Jx(e,t):r=new rl,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new pf(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(Ft.DBI_DOES_NOT_EXIST):n}return s[JA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function Xx(e,t){nl(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[hn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Xx,"statDBI");async function Zx(e,t){try{let r=ir.join(e,t+Ta);return(await Hr.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(Zx,"environmentDataSize");function jx(e,t){if(nl(e,t),t=t.toString(),t===qr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,qr).removeSync(t)}a(jx,"dropDBI");function ek(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Ar(e,i)}catch(o){if(o.message===Ft.DBI_DOES_NOT_EXIST)eO(e,i,i!==t,i===t),s=!0;else throw o}}s&&kx()}a(ek,"initializeDBIs");tO.exports={openDBI:Ar,openEnvironment:XA,createEnvironment:Kx,listDBIs:jA,listDBIDefinitions:zx,createDBI:eO,dropDBI:jx,statDBI:Xx,deleteEnvironment:Qx,initializeDBIs:ek,TransactionCursor:mf,environmentDataSize:Zx,copyEnvironment:Wx,closeEnvironment:ZA}});var nO=m((Ise,sO)=>{"use strict";var gf=ye(),tk=x(),rO=rr().LMDB_ERRORS_ENUM;sO.exports=rk;async function rk(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 gf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==rO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await gf.closeEnvironment(global.lmdb_map[s]),await gf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==rO.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){tk.error(t)}}a(rk,"cleanLMDBMap")});var Xn=m((Cse,sk)=>{sk.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",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var SO=m((Dse,mO)=>{"use strict";var Af=require("recursive-iterator"),nk=require("alasql"),Of=require("clone"),iO=V(),{handleHDBError:oO,hdb_errors:ik}=W(),{HDB_ERROR_MSGS:aO,HTTP_STATUS_CODES:cO}=ik,{getDatabases:ok}=(de(),ee(Ne)),ak=["DISTINCT_ARRAY"],uO=Symbol("validateTables"),Nf=Symbol("validateTable"),Use=Symbol("getAllColumns"),lO=Symbol("validateAllColumns"),il=Symbol("findColumn"),_O=Symbol("validateOrderBy"),Ra=Symbol("validateSegment"),bf=Symbol("validateColumn"),dO=Symbol("setColumnsForTable"),EO=Symbol("checkColumnsForAsterisk"),fO=Symbol("validateGroupBy"),hO=Symbol("hasColumns"),yf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[uO](),this[EO](),this[lO]()}[uO](){if(this[hO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Nf](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Nf](t.table)})}}[hO](){let t=!1,r=new Af(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Nf](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ok();if(!r[t.databaseid])throw oO(new Error,aO.SCHEMA_NOT_FOUND(t.databaseid),cO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw oO(new Error,aO.TABLE_NOT_FOUND(t.databaseid,t.tableid),cO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Of(n);i.table=Of(t),this.attributes.push(i)})}[il](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)}[EO](){let t=new Af(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[dO](r.tableid)}[dO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new nk.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[lO](){this[Ra](this.statement.columns,!1),this[Ra](this.statement.joins,!1),this[Ra](this.statement.where,!1),this[fO](this.statement.group,!1),this[Ra](this.statement.order,!0)}[Ra](t,r){if(!t)return;let s=new Af(t),n=[];for(let{node:i,path:o}of s)!iO.isEmpty(i)&&!iO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[_O](i):n.push(this[bf](i)));return n}[fO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&ak.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Of(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[il](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[il](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`}[_O](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[bf](t)}[bf](t){let r=this[il](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]}};mO.exports=yf});var TO=m((Mse,pO)=>{"use strict";var If=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")}};pO.exports=If});var gO=m((vse,RO)=>{"use strict";var wf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};RO.exports=wf});var OO=m((Hse,AO)=>{"use strict";var Cf=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}};AO.exports=Cf});var bO=m((Fse,NO)=>{"use strict";var Uf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};NO.exports=Uf});var Yi=m(($se,wO)=>{"use strict";var ck=ye(),uk=gO(),lk=OO(),_k=bO(),ns=qt(),ga=rr().LMDB_ERRORS_ENUM,dk=ke(),qs=A(),Ek=V(),fk=require("uuid"),xse=require("lmdb"),{handleHDBError:hk,hdb_errors:mk}=W(),{OVERFLOW_MARKER:kse,MAX_SEARCH_KEY_LENGTH:Vse}=dk,yO=Q();yO.initSync();var ol=yO.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Df=qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Zn=qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Sk(e,t,r,s,n=ns.getNextMonotonicTime()){vf(e,t,r,s),Lf(e,t,r);let i=new uk,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];IO(l,!0,n);let _=pk(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Mf(o,c,s,i,n)}a(Sk,"insertRecords");function pk(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 _=c([[{}]]);Array.isArray(_)&&(c=_[0][qs.FUNC_VAL],s[o]=c)}let u=ns.getIndexedValues(c),l=e.dbis[o];if(u){ol&&l.prefetch(u.map(_=>({key:_,value:n})),al);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}ol&&e.dbis[t].prefetch([n],al),e.dbis[t].put(n,s,s[Zn])})}a(pk,"insertRecord");function Tk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Tk,"removeSkippedRecords");function IO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Zn]))&&(e[Zn]=r||(r=ns.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Df]))&&(e[Df]=r||ns.getNextMonotonicTime()):delete e[Df]}a(IO,"setTimestamps");function Lf(e,t,r){r.indexOf(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),ck.initializeDBIs(e,t,r)}a(Lf,"initializeTransaction");async function Rk(e,t,r,s,n=ns.getNextMonotonicTime()){vf(e,t,r,s),Lf(e,t,r);let i=new lk,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Pf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Mf(c,u,s,i,n,o)}a(Rk,"updateRecords");async function gk(e,t,r,s,n=ns.getNextMonotonicTime()){try{vf(e,t,r,s)}catch(u){throw hk(u,u.message,mk.HTTP_STATUS_CODES.BAD_REQUEST)}Lf(e,t,r);let i=new _k,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;Ek.isEmpty(l[t])?(_=fk.v4(),l[t]=_):_=l[t];let d=Pf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Mf(o,c,s,i,n)}a(gk,"upsertRecords");async function Mf(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||ns.getNextMonotonicTime(),Tk(r,i),s}a(Mf,"finalizeWrite");function Pf(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(IO(r,!_,o),Number.isInteger(r[Zn])&&l[Zn]>r[Zn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][qs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ns.getIndexedValues(R);if(O){ol&&p.prefetch(O.map(k=>({key:k,value:s})),al);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ns.getIndexedValues(T),O){ol&&p.prefetch(O.map(k=>({key:k,value:s})),al);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Zn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Pf(e,t,r,s,n,i,o))}a(Pf,"updateUpsertRecord");function Ak(e,t,r){if(ns.validateEnv(e),t===void 0)throw new Error(ga.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ga.WRITE_ATTRIBUTES_REQUIRED):new Error(ga.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ak,"validateBasic");function vf(e,t,r,s){if(Ak(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ga.RECORDS_REQUIRED):new Error(ga.RECORDS_MUST_BE_ARRAY)}a(vf,"validateWrite");function al(){}a(al,"noop");wO.exports={insertRecords:Sk,updateRecords:Rk,upsertRecords:gk}});var is=m((Kse,DO)=>{"use strict";var UO=V(),CO=A(),Ki=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fs=require("joi"),mn={schema_format:{pattern:Ki,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ok=Fs.alternatives(Fs.string().min(1).max(mn.schema_length.maximum).pattern(Ki).messages({"string.pattern.base":"{:#label} "+mn.schema_format.message}),Fs.number()).required(),Nk=Fs.alternatives(Fs.string().min(1).max(mn.schema_length.maximum).pattern(Ki).messages({"string.pattern.base":"{:#label} "+mn.schema_format.message}),Fs.number()),bk=Fs.alternatives(Fs.string().min(1).max(mn.schema_length.maximum).pattern(Ki).messages({"string.pattern.base":"{:#label} "+mn.schema_format.message}),Fs.number()).required();function yk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>mn.schema_length.maximum?`'${e}' maximum of 250 characters`:Ki.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(yk,"checkValidTable");function Ik(e,t){return UO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Ik,"validateSchemaExists");function wk(e,t){let r=t.state.ancestors[0].schema;return UO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(wk,"validateTableExists");function Ck(e,t){return e.toLowerCase()===CO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${CO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Ck,"validateSchemaName");DO.exports={common_validators:mn,schema_regex:Ki,hdb_schema_table:Ok,validateSchemaExists:Ik,validateTableExists:wk,validateSchemaName:Ck,checkValidTable:yk,hdb_database:Nk,hdb_table:bk}});var cl=m((Qse,LO)=>{var{common_validators:os}=is(),Oa=ve(),Aa="is required",We={database:{presence:!1,format:os.schema_format,length:os.schema_length},schema:{presence:!1,format:os.schema_format,length:os.schema_length},table:{presence:!0,format:os.schema_format,length:os.schema_length},attribute:{presence:!0,format:os.schema_format,length:os.schema_length},hash_attribute:{presence:!0,format:os.schema_format,length:os.schema_length}};function Na(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(Na,"makeAttributesStrings");function Uk(e){return e=Na(e),We.table.presence=!1,We.attribute.presence=!1,We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Uk,"schema_object");function Dk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence=!1,We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Dk,"table_object");function Lk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence=!1,Oa.validateObject(e,We)}a(Lk,"create_table_object");function Mk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence={message:Aa},We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Mk,"attribute_object");function Pk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence=!1,We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Pk,"describe_table");function vk(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(vk,"validateTableResidence");LO.exports={schema_object:Uk,create_table_object:Lk,table_object:Dk,attribute_object:Mk,describe_table:Pk,validateTableResidence:vk}});var PO=m((Jse,MO)=>{"use strict";var Bk=require("uuid"),Bf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Bk.v4(),this.schema_table=`${this.schema}.${this.table}`}};MO.exports=Bf});var ul=m((Zse,vO)=>{"use strict";var Hk=PO(),Hf=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}};vO.exports=Hf});var HO=m((ene,BO)=>{"use strict";BO.exports=Fk;var qk="inserted";function Fk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===qk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Fk,"returnObject")});var ll=m((rne,kO)=>{"use strict";var Gk=A(),qf=ye(),xk=Yi(),{getSystemSchemaPath:kk,getSchemaPath:Vk}=we(),$k=Xn(),Yk=cl(),Kk=ul(),Wk=HO(),{handleHDBError:qO,hdb_errors:GO}=W(),FO=V(),{HTTP_STATUS_CODES:Qk}=GO,Ff=$k.hdb_attribute,xO=[];for(let e=0;e<Ff.attributes.length;e++)xO.push(Ff.attributes[e].attribute);var zk="inserted";kO.exports=Jk;async function Jk(e){let t=Yk.attribute_object(e);if(t)throw qO(new Error,t.message,GO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&FO.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qO(new Error,r,Qk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=FO.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 Kk(e.schema,e.table,e.attribute,e.id);try{let i=await qf.openEnvironment(Vk(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}`);qf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await qf.openEnvironment(kk(),Gk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await xk.insertRecords(o,Ff.hash_attribute,xO,[n]);return Wk(zk,c,{records:[n]},u)}catch(i){throw i}}a(Jk,"lmdbCreateAttribute")});var xf=m((nne,$O)=>{var{hdb_table:Xk,hdb_database:VO}=is(),Zk=ve(),Gf=require("joi"),jk={undefined:"undefined",null:"null"},eV=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||jk[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"),tV=Gf.object({database:VO,schema:VO,table:Xk,records:Gf.array().items(Gf.object().custom(eV)).required()});$O.exports=function(e){return Zk.validateBySchema(e,tV)}});var ba=m((ane,KO)=>{"use strict";var Gs=V(),YO=x(),one=xf(),{getDatabases:rV}=(de(),ee(Ne)),{ClientError:jn}=W();KO.exports=sV;function sV(e){if(Gs.isEmpty(e))throw new jn("invalid update parameters defined.");if(Gs.isEmptyOrZeroLength(e.schema))throw new jn("invalid schema specified.");if(Gs.isEmptyOrZeroLength(e.table))throw new jn("invalid table specified.");if(!Array.isArray(e.records))throw new jn("records must be an array");let t=rV()[e.schema]?.[e.table];if(Gs.isEmpty(t))throw new jn(`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&&Gs.isEmptyOrZeroLength(o[r]))throw YO.error("a valid hash attribute must be provided with update record:",o),new jn("a valid hash attribute must be provided with update record, check log for more info");if(!Gs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw YO.error(`a valid hash value must be provided with ${e.operation} record:`,o),new jn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Gs.isEmpty(o[r])&&o[r]!==""&&s.has(Gs.autoCast(o[r]))&&(o.skip=!0),s.add(Gs.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(sV,"insertUpdateValidate")});var ya=m((une,WO)=>{"use strict";var nV=A().OPERATIONS_ENUM,kf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=nV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};WO.exports=kf});var Ua=m((dne,QO)=>{"use strict";var _ne=ya(),_l=A(),$f=V(),Vf=x(),iV=require("uuid"),{handleHDBError:Ia,hdb_errors:oV}=W(),{HDB_ERROR_MSGS:wa,HTTP_STATUS_CODES:Ca}=oV;QO.exports=aV;function aV(e,t,r){for(let n=0;n<t.length;n++)cV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];uV(i,r,e.operation)}}a(aV,"processRows");function cV(e){if(Buffer.byteLength(String(e))>_l.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ia(new Error,wa.ATTR_NAME_LENGTH_ERR(e),Ca.BAD_REQUEST,void 0,void 0,!0);if($f.isEmptyOrZeroLength(e)||$f.isEmpty(e.trim()))throw Ia(new Error,wa.ATTR_NAME_NULLISH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}a(cV,"validateAttribute");function uV(e,t,r){if(!e.hasOwnProperty(t)||$f.isEmptyOrZeroLength(e[t])){if(r===_l.OPERATIONS_ENUM.INSERT||r===_l.OPERATIONS_ENUM.UPSERT){e[t]=iV.v4();return}throw Vf.error("Update transaction aborted due to record with no hash value:",e),Ia(new Error,wa.RECORD_MISSING_HASH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_l.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Vf.error(e),Ia(new Error,wa.HASH_VAL_LENGTH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Vf.error(e),Ia(new Error,wa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}a(uV,"validateHash")});var dl=m((fne,JO)=>{"use strict";var zO=V(),lV=A(),_V=x(),dV=ll(),EV=ul(),fV=xs(),{SchemaEventMsg:hV}=Fr(),mV="already exists in";JO.exports=SV;async function SV(e,t,r){if(zO.isEmptyOrZeroLength(r))return r;let s=[];zO.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 pV(e,t.schema,t.name,i)})),n}a(SV,"lmdbCheckForNewAttributes");async function pV(e,t,r,s){let n=new EV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await TV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(mV))_V.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(pV,"createNewAttribute");async function TV(e){let t;return t=await dV(e),fV.signalSchemaChange(new hV(process.pid,lV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(TV,"createAttribute")});var Wi=m((mne,XO)=>{"use strict";var Yf=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}};XO.exports=Yf});var jO=m((pne,ZO)=>{"use strict";var RV=Wi(),gV=A().OPERATIONS_ENUM,Kf=class extends RV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(gV.INSERT,r,s,n,i),this.records=t}};ZO.exports=Kf});var tN=m((Rne,eN)=>{"use strict";var AV=Wi(),OV=A().OPERATIONS_ENUM,Wf=class extends AV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(OV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};eN.exports=Wf});var sN=m((Ane,rN)=>{"use strict";var NV=Wi(),bV=A().OPERATIONS_ENUM,Qf=class extends NV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(bV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};rN.exports=Qf});var iN=m((Nne,nN)=>{"use strict";var yV=Wi(),IV=A().OPERATIONS_ENUM,zf=class extends yV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(IV.DELETE,s,n,t,i),this.original_records=r}};nN.exports=zf});var Da=m((Ine,uN)=>{"use strict";var yne=require("path"),oN=ye(),wV=jO(),CV=tN(),UV=sN(),DV=iN(),Qi=ke(),aN=V(),{CONFIG_PARAMS:LV}=A(),cN=Q();cN.initSync();var El=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:MV}=we();uN.exports=PV;async function PV(e,t){if(cN.get(LV.LOGGING_AUDITLOG)===!1)return;let r=MV(e.schema,e.table),s=await oN.openEnvironment(r,e.table,!0),n=vV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){oN.initializeDBIs(s,Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),aN.isEmpty(n.user_name)||s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(PV,"writeTransaction");function vV(e,t){let r=aN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===El.INSERT)return new wV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.UPDATE)return new CV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.UPSERT)return new UV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.DELETE)return new DV(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(vV,"createTransactionObject")});var Jf=m((Une,lN)=>{"use strict";var BV=ba(),Cne=ya(),La=A(),HV=Ua(),qV=Yi().insertRecords,FV=ye(),GV=x(),xV=dl(),{getSchemaPath:kV}=we(),VV=Da();lN.exports=$V;async function $V(e){try{let{schema_table:t,attributes:r}=BV(e);HV(e,r,t.hash_attribute),e.schema!==La.SYSTEM_SCHEMA_NAME&&(r.includes(La.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(La.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(La.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(La.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xV(e.hdb_auth_header,t,r),n=kV(e.schema,e.table),i=await FV.openEnvironment(n,e.table),o=await qV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await VV(e,o)}catch(c){GV.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($V,"lmdbCreateRecords")});var EN=m((Lne,dN)=>{"use strict";var _N=A(),YV=Jf(),KV=ya(),WV=require("fs-extra"),{getSchemaPath:QV}=we();dN.exports=zV;async function zV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new KV(_N.SYSTEM_SCHEMA_NAME,_N.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await YV(r),await WV.mkdirp(QV(e.schema))}a(zV,"lmdbCreateSchema")});var hN=m((Pne,fN)=>{"use strict";var Xf=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}};fN.exports=Xf});var TN=m((Fne,pN)=>{"use strict";var mN=ye(),Zf=qt(),jf=rr().LMDB_ERRORS_ENUM,JV=ke(),SN=x(),Bne=V(),XV=require("lmdb"),ZV=hN(),jV=A(),{OVERFLOW_MARKER:Hne,MAX_SEARCH_KEY_LENGTH:qne}=JV,e$=jV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function t$(e,t,r,s){if(Zf.validateEnv(e),t===void 0)throw new Error(jf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(jf.IDS_REQUIRED):new Error(jf.IDS_MUST_BE_ITERABLE);try{let n=mN.listDBIs(e);mN.initializeDBIs(e,t,n);let i=new ZV,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[e$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,XV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let R=n[p];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],k=h[R];if(k!=null)try{let $=Zf.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{SN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){SN.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Zf.getNextMonotonicTime(),i}catch(n){throw n}}a(t$,"deleteRecords");pN.exports={deleteRecords:t$}});var Ma=m((xne,gN)=>{"use strict";var zi=V(),r$=TN(),s$=ye(),{getSchemaPath:n$}=we(),i$=Da(),o$=x();gN.exports=a$;async function a$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zi.isEmptyOrZeroLength(e.hash_values)&&!zi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zi.isEmpty(u)||e.hash_values.push(u)}}if(zi.isEmptyOrZeroLength(e.hash_values))return RN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zi.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=n$(e.schema,e.table),i=await s$.openEnvironment(n,e.table),o=await r$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await i$(e,o)}catch(c){o$.error(`unable to write transaction due to ${c.message}`)}return RN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(a$,"lmdbDeleteRecords");function RN(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(RN,"createDeleteResponse")});var th=m(($ne,AN)=>{"use strict";var c$=A(),Vne=qt();function eh(e,t){let r=Object.create(null);if(t.length===1&&c$.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(eh,"parseRow");function u$(e,t,r,s){let n=eh(r,e);s.push(n)}a(u$,"searchAll");function l$(e,t,r,s){let n=eh(r,e);s[t]=n}a(l$,"searchAllToMap");function _$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(_$,"iterateDBI");function ei(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(ei,"pushResults");function d$(e,t,r,s,n,i){t.toString().endsWith(e)&&ei(t,r,s,n,i)}a(d$,"endsWith");function E$(e,t,r,s,n,i){t.toString().includes(e)&&ei(t,r,s,n,i)}a(E$,"contains");function f$(e,t,r,s,n,i){t>e&&ei(t,r,s,n,i)}a(f$,"greaterThanCompare");function h$(e,t,r,s,n,i){t>=e&&ei(t,r,s,n,i)}a(h$,"greaterThanEqualCompare");function m$(e,t,r,s,n,i){t<e&&ei(t,r,s,n,i)}a(m$,"lessThanCompare");function S$(e,t,r,s,n,i){t<=e&&ei(t,r,s,n,i)}a(S$,"lessThanEqualCompare");AN.exports={parseRow:eh,searchAll:u$,searchAllToMap:l$,iterateDBI:_$,endsWith:d$,contains:E$,greaterThanCompare:f$,greaterThanEqualCompare:h$,lessThanCompare:m$,lessThanEqualCompare:S$,pushResults:ei}});var Ji=m((zne,CN)=>{"use strict";var Sn=ye(),Kne=x(),or=qt(),fl=ke(),Ve=rr().LMDB_ERRORS_ENUM,Wne=V(),p$=A(),hl=th(),{parseRow:T$}=hl,Qne=require("lmdb"),{OVERFLOW_MARKER:ON,MAX_SEARCH_KEY_LENGTH:R$}=fl;function NN(e,t,r,s=!1,n=void 0,i=void 0){return ti(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(NN,"iterateFullIndex");function Pa(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ti(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(Pa,"iterateRangeBetween");function ti(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[fl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.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(ti,"setupTransaction");function bN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ON)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[fl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(bN,"getOverflowCheck");function g$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return ti(e,t,t,(o,c,u)=>(ml(r),r=va(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>T$(l.value,r))))}a(g$,"searchAll");function A$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);ml(r),r=va(e.database||e,r);let o=new Map;for(let{key:c,value:u}of NN(e,t,t,s,n,i))o.set(c,hl.parseRow(u,r));return o}a(A$,"searchAllToMap");function O$(e,t,r=!1,s=void 0,n=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=NN(e,void 0,t,r,s,n),c=o.transaction,u=bN(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(O$,"iterateDBI");function N$(e,t){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(N$,"countAll");function b$(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,t,r,(c,u,l,_)=>(s=or.convertKeyValueToWrite(s),_===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(b$,"equals");function y$(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(y$,"count");function I$(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,null,r,(c,u)=>{s=or.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(I$,"startsWith");function w$(e,t,r,s,n=!1,i=void 0,o=void 0){return yN(e,t,r,s,n,i,o,!0)}a(w$,"endsWith");function yN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ti(e,null,r,(u,l,_,d)=>{let E=bN(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(ON)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[fl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(yN,"contains");function C$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pa(e,t,r,s,u,n,i,o,!0,!1)}a(C$,"greaterThan");function U$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pa(e,t,r,s,u,n,i,o,!1,!1)}a(U$,"greaterThanEqual");function D$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pa(e,t,r,u,s,n,i,o,!1,!0)}a(D$,"lessThan");function L$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pa(e,t,r,u,s,n,i,o,!1,!1)}a(L$,"lessThanEqual");function M$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(or.validateEnv(e),r===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Ve.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Ve.END_VALUE_REQUIRED);if(s=or.convertKeyValueToWrite(s),n=or.convertKeyValueToWrite(n),s>n)throw new Error(Ve.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pa(e,t,r,s,n,i,o,c)}a(M$,"between");function P$(e,t,r,s){or.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(ml(r),r=va(n,r),s===void 0)throw new Error(Ve.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=hl.parseRow(c,r)),o}a(P$,"searchByHash");function v$(e,t,r){or.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(v$,"checkHashExists");function B$(e,t,r,s,n=[]){return wN(e,t,r,s,n),IN(e,t,r,s,n).map(i=>i[1])}a(B$,"batchSearchByHash");function H$(e,t,r,s,n=[]){wN(e,t,r,s,n);let i=new Map;for(let[o,c]of IN(e,t,r,s,n))i.set(o,c);return i}a(H$,"batchSearchByHashToMap");function IN(e,t,r,s,n=[]){return ti(e,t,t,(i,o,c)=>{r=va(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,hl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(IN,"batchHashSearch");function wN(e,t,r,s,n){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(ml(r),s==null)throw new Error(Ve.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Ve.IDS_MUST_BE_ITERABLE)}a(wN,"initializeBatchSearchByHash");function ml(e){if(!Array.isArray(e))throw e===void 0?new Error(Ve.FETCH_ATTRIBUTES_REQUIRED):new Error(Ve.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ml,"validateFetchAttributes");function pn(e,t,r){if(or.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.SEARCH_VALUE_REQUIRED);if(r?.length>R$)throw new Error(Ve.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function va(e,t){return t.length===1&&p$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(va,"setGetWholeRowAttributes");CN.exports={searchAll:g$,searchAllToMap:A$,count:y$,countAll:N$,equals:b$,startsWith:I$,endsWith:w$,contains:yN,searchByHash:P$,setGetWholeRowAttributes:va,batchSearchByHash:B$,batchSearchByHashToMap:H$,checkHashExists:v$,iterateDBI:O$,greaterThan:C$,greaterThanEqual:U$,lessThan:D$,lessThanEqual:L$,between:M$}});var Xi=m((Xne,PN)=>{var UN=require("lodash"),DN=ve(),Ce=require("joi"),q$=V(),{hdb_schema_table:Sl,checkValidTable:LN,hdb_table:MN,hdb_database:pl}=is(),{handleHDBError:F$,hdb_errors:G$}=W(),{getDatabases:x$}=(de(),ee(Ne)),{HTTP_STATUS_CODES:k$}=G$,V$=Ce.object({database:pl,schema:pl,table:MN,search_attribute:Sl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(Sl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),$$=Ce.object({database:pl,schema:pl,table:MN,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(Sl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:Sl,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});PN.exports=function(e,t){let r=null;switch(t){case"value":r=DN.validateBySchema(e,V$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(LN("database",e.schema)),i(LN("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=DN.validateBySchema(e,$$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=q$.checkGlobalSchemaTable(e.schema,e.table);if(n)return F$(new Error,n,k$.NOT_FOUND);let o=x$()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=UN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!UN.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var rh=m((jne,vN)=>{"use strict";var Y$=ye(),K$=Xi(),{getSchemaPath:W$}=we();vN.exports=Q$;function Q$(e){let t=K$(e,"hashes");if(t)throw t;let r=W$(e.schema,e.table);return Y$.openEnvironment(r,e.table)}a(Q$,"initialize")});var sh=m((tie,BN)=>{"use strict";var z$=Ji(),J$=rh();BN.exports=X$;async function X$(e){let t=await J$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return z$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(X$,"lmdbGetDataByHash")});var Zi=m((sie,HN)=>{"use strict";var nh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};HN.exports=nh});var FN=m((oie,qN)=>{"use strict";var iie=Zi(),Z$=Ji(),j$=rh();qN.exports=eY;async function eY(e){let t=await j$(e),r=global.hdb_schema[e.schema][e.table];return Z$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(eY,"lmdbSearchByHash")});var as=m((cie,GN)=>{"use strict";var ih=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=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=l,this.offset=_}};GN.exports=ih});var Tl=m((lie,KN)=>{"use strict";var It=Ji(),tY=ye(),rY=V(),ie=ke(),ri=A(),sY=Xn(),xN=rr().LMDB_ERRORS_ENUM,{getSchemaPath:nY}=we(),ks=ri.SEARCH_WILDCARDS;async function iY(e,t,r){let s;e.schema===ri.SYSTEM_SCHEMA_NAME?s=sY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=YN(e,s.hash_attribute,r,t);return VN(e,n,s.hash_attribute,r)}a(iY,"prepSearch");async function VN(e,t,r,s){let n=nY(e.schema,e.table),i=await tY.openEnvironment(n,e.table),o=$N(i,e,t,r),c=o.transaction||i;if([ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ie.SEARCH_TYPES.SEARCH_ALL,ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(oY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?kN(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?kN(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?It.batchSearchByHashToMap(c,r,e.get_attributes,l):It.batchSearchByHash(c,r,e.get_attributes,l)}a(VN,"executeSearch");function $N(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 ie.SEARCH_TYPES.EQUALS:n=It.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=It.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=It.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=It.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return It.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return It.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return It.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return It.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=It.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=It.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=It.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=It.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=It.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a($N,"searchByType");function kN(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(kN,"createMapFromIterable");function oY(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(oY,"checkToFetchMore");function YN(e,t,r,s){if(rY.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),ks.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ks[0])<0&&n.indexOf(ks[1])<0)return c===!0?r===!0?ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ie.SEARCH_TYPES.EQUALS;if(ks.indexOf(i)>=0&&ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(ks.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(ks[0])||n.includes(ks[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(xN.UNKNOWN_SEARCH_TYPE)}else switch(s){case ri.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ri.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ri.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ri.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ri.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(xN.UNKNOWN_SEARCH_TYPE)}}a(YN,"createSearchTypeFromSearchObject");KN.exports={executeSearch:VN,createSearchTypeFromSearchObject:YN,prepSearch:iY,searchByType:$N}});var QN=m((Eie,WN)=>{"use strict";var die=as(),aY=Xi(),cY=V(),uY=A(),lY=Tl();WN.exports=_Y;function _Y(e,t){if(!cY.isEmpty(t)&&uY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aY(e,"value");if(s)throw s;let n=!0;return lY.prepSearch(e,t,n)}a(_Y,"lmdbGetDataByValue")});var Ba=m((mie,zN)=>{"use strict";var hie=as(),dY=Xi(),EY=V(),fY=A(),hY=Tl();zN.exports=mY;async function mY(e,t){if(!EY.isEmpty(t)&&fY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=dY(e,"value");if(s)throw s;return hY.prepSearch(e,t,!1)}a(mY,"lmdbSearchByValue")});var XN=m((Tie,JN)=>{"use strict";var pie=ke(),oh=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}},ah=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ch=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};JN.exports={SearchByConditionsObject:oh,SearchCondition:ah,SortAttribute:ch}});var rb=m((Oie,tb)=>{"use strict";var gie=XN().SearchByConditionsObject,SY=as(),pY=Xi(),uh=Ji(),Rl=ke(),{Resource:Aie}=(jr(),ee(tf)),eb=Tl(),TY=th(),RY=require("lodash"),{getSchemaPath:gY}=we(),ZN=ye(),{handleHDBError:AY,hdb_errors:OY}=W(),{HTTP_STATUS_CODES:NY}=OY,bY=1e8;tb.exports=yY;async function yY(e){let t=pY(e,"conditions");if(t)throw AY(t,t.message,NY.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=gY(e.schema,e.table),s=await ZN.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)ZN.openDBI(s,l.search_attribute);let i=RY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Rl.SEARCH_TYPES.EQUALS?l.estimated_count=uh.count(s,l.search_attribute,l.search_value):_===Rl.SEARCH_TYPES.CONTAINS||_===Rl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=bY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await jN(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(eb.filterByType),d=_.length,E=uh.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))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(f=>TY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await jN(o,e,E,n.hash_attribute);c=c.concat(f)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=uh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(yY,"lmdbSearchByConditions");async function jN(e,t,r,s){let n=new SY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Rl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,eb.searchByType(e,n,i,s).map(o=>o.value)}a(jN,"executeConditionSearch")});var Ha=m((bie,sb)=>{"use strict";var IY=A().OPERATIONS_ENUM,lh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=IY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};sb.exports=lh});var _h=m((Iie,_b)=>{"use strict";var ab=as(),cb=Ha(),ub=Ba(),lb=Ma(),Gt=A(),nb=V(),ib=ye(),{getTransactionAuditStorePath:wY,getSchemaPath:CY}=we(),ob=x();_b.exports=UY;async function UY(e){try{if(nb.isEmpty(global.hdb_schema[e.schema])||nb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await DY(e),await LY(e);let t=CY(e.schema,e.table);try{await ib.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ob.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=wY(e.schema,e.table);await ib.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ob.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(UY,"lmdbDropTable");async function DY(e){let t=new ab(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ub(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 cb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await lb(n)}a(DY,"deleteAttributesFromSystem");async function LY(e){let t=new ab(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await ub(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 cb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await lb(n)}catch(i){throw i}}a(LY,"dropTableFromSystem")});var Eb=m((Cie,db)=>{"use strict";var MY=require("fs-extra"),PY=as(),vY=Zi(),BY=Ha(),HY=_h(),qY=Ma(),FY=sh(),GY=Ba(),Vs=A(),{getSchemaPath:xY}=we(),{handleHDBError:kY,hdb_errors:VY}=W(),{HDB_ERROR_MSGS:$Y,HTTP_STATUS_CODES:YY}=VY;db.exports=KY;async function KY(e){let t;try{t=await WY(e.schema);let r=new PY(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await GY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await HY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new BY(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qY(n);let i=xY(t);await MY.remove(i)}catch(r){throw r}}a(KY,"lmdbDropSchema");async function WY(e){let t=new vY(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await FY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw kY(new Error,$Y.SCHEMA_NOT_FOUND(e),YY.NOT_FOUND,void 0,void 0,!0);return s}a(WY,"validateDropSchema")});var Eh=m((Die,fb)=>{"use strict";var dh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};fb.exports=dh});var mb=m((Pie,hb)=>{"use strict";var QY=require("fs-extra"),gl=ye(),{getTransactionAuditStorePath:zY}=we(),fh=ke(),Mie=Eh();hb.exports=JY;async function JY(e){let t;try{let r=zY(e.schema,e.table);await QY.mkdirp(r),t=await gl.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{gl.createDBI(t,fh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),gl.createDBI(t,fh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),gl.createDBI(t,fh.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(JY,"createTransactionsAuditEnvironment")});var Rb=m((Bie,Tb)=>{"use strict";var hh=A(),Sb=ye(),XY=Yi(),{getSystemSchemaPath:ZY,getSchemaPath:jY}=we(),eK=Xn(),tK=ll(),mh=ul(),rK=x(),sK=mb(),ph=eK.hdb_table,pb=[];for(let e=0;e<ph.attributes.length;e++)pb.push(ph.attributes[e].attribute);Tb.exports=nK;async function nK(e,t){let r=jY(t.schema,t.table),s=new mh(t.schema,t.table,hh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mh(t.schema,t.table,hh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Sb.createEnvironment(r,t.table),e!==void 0){let o=await Sb.openEnvironment(ZY(),hh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await XY.insertRecords(o,ph.hash_attribute,pb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Sh(s),await Sh(n),await Sh(i)}await sK(t)}catch(o){throw o}}a(nK,"lmdbCreateTable");async function Sh(e){try{await tK(e)}catch(t){rK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sh,"createAttribute")});var Ab=m((qie,gb)=>{"use strict";var iK=ba(),oK=Ua(),aK=dl(),qa=A(),cK=Yi().updateRecords,uK=ye(),{getSchemaPath:lK}=we(),_K=Da(),dK=x();gb.exports=EK;async function EK(e){try{let{schema_table:t,attributes:r}=iK(e);oK(e,r,t.hash_attribute),e.schema!==qa.SYSTEM_SCHEMA_NAME&&(r.includes(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aK(e.hdb_auth_header,t,r),n=lK(e.schema,e.table),i=await uK.openEnvironment(n,e.table),o=await cK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await _K(e,o)}catch(c){dK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(EK,"lmdbUpdateRecords")});var Nb=m((Gie,Ob)=>{"use strict";var fK=A().OPERATIONS_ENUM,Th=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=fK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Ob.exports=Th});var yb=m((Vie,bb)=>{"use strict";var kie=Nb(),hK=ba(),mK=Ua(),SK=dl(),Fa=A(),pK=Yi().upsertRecords,TK=ye(),{getSchemaPath:RK}=we(),gK=Da(),AK=x(),{handleHDBError:OK,hdb_errors:NK}=W();bb.exports=bK;async function bK(e){let t;try{t=hK(e)}catch(u){throw OK(u,u.message,NK.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;mK(e,s,r.hash_attribute),e.schema!==Fa.SYSTEM_SCHEMA_NAME&&(s.includes(Fa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Fa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Fa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Fa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await SK(e.hdb_auth_header,r,s),i=RK(e.schema,e.table),o=await TK.openEnvironment(i,e.table),c=await pK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await gK(e,c)}catch(u){AK.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(bK,"lmdbUpsertRecords")});var wb=m((Yie,Ib)=>{"use strict";var Rh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Ib.exports=Rh});var Ub=m((Wie,Cb)=>{"use strict";var gh=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}};Cb.exports=gh});var Mb=m((Jie,Lb)=>{"use strict";var Ah=ye(),{getTransactionAuditStorePath:yK}=we(),zie=wb(),Ga=ke(),IK=V(),Db=Ub(),wK=require("util").promisify,CK=wK(setTimeout),UK=1e4,DK=100;Lb.exports=LK;async function LK(e){let t=yK(e.schema,e.table),r=await Ah.openEnvironment(t,e.table,!0),s=Ah.listDBIs(r);Ah.initializeDBIs(r,Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Db;do n=await MK(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 CK(DK);while(n.transactions_deleted>0);return i}a(LK,"deleteAuditLogsBefore");async function MK(e,t){let r=new Db;try{let s=e.dbis[Ga.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[Ga.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];IK.isEmpty(c)||(n=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>UK)break}return await n,r}catch(s){throw s}}a(MK,"deleteTransactions")});var vb=m((Zie,Pb)=>{"use strict";var Oh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};Pb.exports=Oh});var Hb=m((toe,Bb)=>{"use strict";var PK=as(),vK=Ha(),eoe=vb(),cs=A(),BK=V(),Nh=ye(),HK=Xn(),qK=Ba(),FK=Ma(),{getSchemaPath:GK}=we();Bb.exports=xK;async function xK(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=HK[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await VK(e),n=GK(e.schema,e.table),i=await Nh.openEnvironment(n,e.table);return t===!0&&await kK(e,i,r.hash_attribute),Nh.dropDBI(i,e.attribute),s}a(xK,"lmdbDropAttribute");async function kK(e,t,r){let s=Nh.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(kK,"removeAttributeFromAllObjects");async function VK(e){let t=new PK(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await qK(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(BK.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new vK(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return FK(i)}a(VK,"dropAttributeFromSystem")});var Vb=m((noe,kb)=>{"use strict";var bh=ye(),ji=ke(),soe=qt(),yh=A(),qb=V(),{getTransactionAuditStorePath:$K}=we(),YK=Ji(),Al=Wi(),KK=x();kb.exports=WK;async function WK(e){let t=$K(e.schema,e.table),r=await bh.openEnvironment(t,e.table,!0),s=bh.listDBIs(r);bh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Fb(r,e.search_values);case yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,zK(r,e.search_values,n);case yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return QK(r,e.search_values);default:return Fb(r)}}a(WK,"readAuditLog");function Fb(e,t=[0,Date.now()]){qb.isEmpty(t[0])&&(t[0]=0),qb.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ji.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 Al,n))}a(Fb,"searchTransactionsByTimestamp");function QK(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[ji.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,xb(e,i))}return Object.fromEntries(r)}a(QK,"searchTransactionsByUsername");function zK(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=YK.equals(e,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ji.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=xb(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);Gb(u,"records",r,_,o),Gb(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(zK,"searchTransactionsByHashValues");function Gb(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 l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new Al(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Al(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(Gb,"loopRecords");function xb(e,t){let r=[];try{let s=e.dbis[ji.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 Al,i);r.push(o)}}catch(i){KK.warn(i)}return r}catch(s){throw s}}a(xb,"batchSearchTransactions")});var Yb=m((coe,$b)=>{"use strict";var{getSchemaPath:ooe}=we(),aoe=ye(),{database:JK}=(de(),ee(Ne));$b.exports={writeTransaction:XK};async function XK(e,t,r){return JK({database:e,table:t}).transaction(r)}a(XK,"writeTransaction")});var zb=m((loe,Qb)=>{"use strict";var{getSchemaPath:Kb}=we(),Wb=ye();Qb.exports={flush:ZK,resetReadTxn:jK};async function ZK(e,t){return(await Wb.openEnvironment(Kb(e,t),t.toString())).flushed}a(ZK,"flush");async function jK(e,t){try{(await Wb.openEnvironment(Kb(e,t),t.toString())).resetReadTxn()}catch{}}a(jK,"resetReadTxn")});var jb=m((doe,Zb)=>{"use strict";var{Readable:e1}=require("stream"),{getDatabases:t1}=(de(),ee(Ne)),{readSync:r1,openSync:s1,createReadStream:Jb}=require("fs"),{open:n1}=require("lmdb"),Xb=Zu(),i1=el(),{INTERNAL_DBIS_NAME:o1}=ke();Zb.exports=c1;var Ih=32768,a1=100;async function c1(e){let t=e.database||e.schema||"data",r=t1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=n1({noSync:!0,maxDbs:i1.MAX_DBS}),E,f=d.openDB(o1,new Xb(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>R.startsWith?.(k+"/"))){f.put(R,O);let[,k]=R.split("/"),$=!k,U=new Xb(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),T++%a1===0&&await new Promise(je=>setTimeout(je,20))}await E;let p=Jb(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=s1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Ih);r1(c,l,0,Ih);let _=o.useReadTransaction(),d=Jb(null,{fd:c,start:Ih}),E=new e1.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(c1,"getBackup")});var ry=m((foe,ty)=>{"use strict";var u1=x(),{handleHDBError:l1}=W(),_1=TO(),d1=ll(),E1=Jf(),f1=EN(),h1=Ma(),m1=sh(),S1=FN(),p1=QN(),T1=Ba(),R1=rb(),g1=Eb(),A1=Rb(),O1=Ab(),N1=yb(),b1=Mb(),y1=_h(),I1=Hb(),w1=Vb(),C1=Yb(),ey=zb(),U1=jb(),wh=class extends _1{static{a(this,"LMDBBridge")}async searchByConditions(t){return R1(t)}async getDataByHash(t){return await m1(t)}async searchByHash(t){return await S1(t)}async getDataByValue(t,r){return await p1(t,r)}async searchByValue(t){return await T1(t)}async createSchema(t){return await f1(t)}async dropSchema(t){return await g1(t)}async createTable(t,r){return await A1(t,r)}async dropTable(t){return await y1(t)}async createAttribute(t){return await d1(t)}async createRecords(t){return await E1(t)}async updateRecords(t){return await O1(t)}async upsertRecords(t){try{return await N1(t)}catch(r){throw l1(r,null,null,u1.ERR,r)}}async deleteRecords(t){return await h1(t)}async dropAttribute(t){return await I1(t)}async deleteAuditLogsBefore(t){return await b1(t)}async readAuditLog(t){return await w1(t)}writeTransaction(t,r,s){return C1.writeTransaction(t,r,s)}flush(t,r){return ey.flush(t,r)}resetReadTxn(t,r){return ey.resetReadTxn(t,r)}getBackup(t){return U1(t)}};ty.exports=wh});var _y={};xe(_y,{ResourceBridge:()=>Dh});function Lh({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 ny(e,t){let r=us(e),s=Lh(e,r);if(!r)throw new Gr.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};return Ke(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&xu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||L1,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,D1.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function iy(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*oy(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,timestamp: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 ay,Ol,Gr,cy,uy,kr,Ch,Uh,ly,D1,L1,M1,P1,sy,Dh,dy=Se(()=>{"use strict";ay=C(ry()),Ol=C(Xi()),Gr=C(W());de();cy=C(ba()),uy=C(Ua()),kr=C(A()),Ch=C(xs()),Uh=C(Fr()),ly=C(V());Qn();ku();({HDB_ERROR_MSGS:D1}=Gr.hdb_errors),L1="data",M1=1e4,P1=10,Dh=class extends ay.default{static{a(this,"ResourceBridge")}constructor(t){super(t),sy=this}async searchByConditions(t){let r=(0,Ol.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(t);if(!s)throw new Gr.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:Lh(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 Gr.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}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(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(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,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(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){us(t).dropTable()}createSchema(t){return xa({database:t.schema,table:null}),Ch.signalSchemaChange(new Uh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Mh(t.schema),Ch.signalSchemaChange(new Uh.SchemaEventMsg(process.pid,kr.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,sy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,cy.default)(t);(0,uy.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return Ke(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=xu(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=xr()[t.schema][t.table],s={user:t.hdb_user};return Ke(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return iy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.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:kr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,ly.async_set_timeout)(P1),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%M1===0&&await l();return u.length>0&&await l(),n?iy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Ol.default)(t,"hashes");if(r)throw r;return ny(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of ny(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Ol.default)(t,"value");if(s)throw s;let n=us(t);if(!n)throw new Gr.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===kr.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:Lh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(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){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(t),s={};switch(t.search_type){case kr.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,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of oy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return oy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Lh,"getSelect");a(ny,"getRecords");a(us,"getTable");a(iy,"createDeleteResponse");a(oy,"groupRecordsInHistory")});var Vr=m((Roe,Ey)=>{"use strict";var{ResourceBridge:v1}=(dy(),ee(_y)),B1=Q();B1.initSync();var Nl;function H1(){return Nl||(Nl=new v1,Nl)}a(H1,"getBridge");Ey.exports=H1()});var Sy=m((Aoe,my)=>{"use strict";var fy=require("lodash"),ka=require("mathjs"),q1=require("jsonata"),hy=V();my.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?fy.uniqWith(e,fy.isEqual):e,searchJSON:F1,mad:Va.bind(null,ka.mad),mean:Va.bind(null,ka.mean),mode:Va.bind(null,ka.mode),prod:Va.bind(null,ka.prod),median:Va.bind(null,ka.median)};function Va(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(Va,"aggregateFunction");function F1(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(hy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),hy.isEmpty(this.__ala__.res[r])){let s=q1(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(F1,"searchJSON")});var Ty=m((Noe,py)=>{"use strict";var Qe=require("moment"),Ph="YYYY-MM-DDTHH:mm:ss.SSSZZ";Qe.suppressDeprecationWarnings=!0;py.exports={current_date:()=>Qe().utc().format("YYYY-MM-DD"),current_time:()=>Qe().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Qe(e).utc().format("YYYY");case"month":return Qe(e).utc().format("MM");case"day":return Qe(e).utc().format("DD");case"hour":return Qe(e).utc().format("HH");case"minute":return Qe(e).utc().format("mm");case"second":return Qe(e).utc().format("ss");case"millisecond":return Qe(e).utc().format("SSS");default:break}},date:e=>Qe(e).utc().format(Ph),date_format:(e,t)=>Qe(e).utc().format(t),date_add:(e,t,r)=>Qe(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Qe(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Qe(e).utc(),n=Qe(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Qe().utc().valueOf(),get_server_time:()=>Qe().format(Ph),offset_utc:(e,t)=>Qe(e).utc().utcOffset(t).format(Ph)}});var Oy=m((boe,Ay)=>{"use strict";var G1=require("@turf/area"),x1=require("@turf/length"),k1=require("@turf/circle"),V1=require("@turf/difference"),$1=require("@turf/distance"),Y1=require("@turf/boolean-contains"),K1=require("@turf/boolean-equal"),W1=require("@turf/boolean-disjoint"),Q1=require("@turf/helpers"),Ry=A(),ue=V();Ay.exports={geoArea:z1,geoLength:J1,geoCircle:X1,geoDifference:Z1,geoDistance:gy,geoNear:j1,geoContains:eW,geoEqual:tW,geoCrosses:rW,geoConvert:sW};var vh="geo1 is required",Bh="geo2 is required";function z1(e){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),G1.default(e)}a(z1,"geoArea");function J1(e,t){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),x1.default(e,{units:t||"kilometers"})}a(J1,"geoLength");function X1(e,t,r){if(ue.isEmpty(e))throw new Error("point is required");if(ue.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),k1.default(e,t,{units:r||"kilometers"})}a(X1,"geoCircle");function Z1(e,t){if(ue.isEmpty(e))throw new Error("poly1 is required");if(ue.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),V1(e,t)}a(Z1,"geoDifference");function gy(e,t,r){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),$1.default(e,t,{units:r||"kilometers"})}a(gy,"geoDistance");function j1(e,t,r,s){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");if(ue.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return gy(e,t,s)<=r}a(j1,"geoNear");function eW(e,t){if(ue.isEmpty(e))throw new Error(vh);if(ue.isEmpty(e))throw new Error(Bh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),Y1.default(e,t)}a(eW,"geoContains");function tW(e,t){if(ue.isEmpty(e))throw new Error(vh);if(ue.isEmpty(e))throw new Error(Bh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),K1.default(e,t)}a(tW,"geoEqual");function rW(e,t){if(ue.isEmpty(e))throw new Error(vh);if(ue.isEmpty(e))throw new Error(Bh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),!W1.default(e,t)}a(rW,"geoCrosses");function sW(e,t,r){if(ue.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ue.isEmpty(t))throw new Error("geo_type is required");if(ue.isEmpty(Ry.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ry.GEO_CONVERSION_ENUM).join(",")}`);return Q1[t](e,r)}a(sW,"geoConvert")});var bl=m((Ioe,Ny)=>{var si=Sy(),ar=Ty(),ls=Oy();Ny.exports=e=>{e.aggr.mad=e.aggr.MAD=si.mad,e.aggr.mean=e.aggr.MEAN=si.mean,e.aggr.mode=e.aggr.MODE=si.mode,e.aggr.prod=e.aggr.PROD=si.prod,e.aggr.median=e.aggr.MEDIAN=si.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=si.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=si.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ar.current_time,e.fn.extract=e.fn.EXTRACT=ar.extract,e.fn.date=e.fn.DATE=ar.date,e.fn.date_format=e.fn.DATE_FORMAT=ar.date_format,e.fn.date_add=e.fn.DATE_ADD=ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ar.date_diff,e.fn.now=e.fn.NOW=ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ar.get_server_time,e.fn.getdate=e.fn.GETDATE=ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ar.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var wy=m((woe,Iy)=>{"use strict";var $a=require("lodash"),St=require("alasql");St.options.cache=!1;var nW=bl(),by=require("clone"),yl=require("recursive-iterator"),se=x(),ne=V(),eo=Vr(),iW=A(),{hdb_errors:oW}=W(),{getDatabases:yy}=(de(),ee(Ne)),aW="IS NULL",$r="There was a problem performing this search. Please check the logs and try again.";nW(St);var Hh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error($r)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error($r)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error($r)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error($r)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error($r)}}_getColumns(){let t=new yl(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(by(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$a.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=yy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yl(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new St.yy.LogicValue({value:s}):r.right instanceof St.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new St.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new St.yy.LogicValue({value:i}):s instanceof St.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new St.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yl(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(!ne.isEmpty(iW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.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(ne.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"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.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 l=0;l<u.length;l++)if(u[l].value)s.add(u[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,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&$a.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await St.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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(by(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(ne.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(aW)>-1&&this.tables.forEach(n=>{let i={columnid:yy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$a.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,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await eo.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error($r)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await eo.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error($r)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await eo.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error($r)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await eo.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error($r)}}}_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 St.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 St.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new St.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 St.yy.FuncValue:new St.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await St.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=$a.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new yl(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=$a.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error($r)}}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 _ in i)o.push(i[_][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 eo.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.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();se.trace(`Final SQL: ${n}`),s=await St.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(oW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.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],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${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"),l=`[${c}]`;s=s.replace(u,l)});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 eo.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 se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error($r)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Iy.exports=Hh});var Or=m((Uoe,Cy)=>{"use strict";var cW=SO();Cy.exports={searchByConditions:lW,searchByHash:_W,searchByValue:dW,search:EW};var qh=Vr(),{transformReq:Fh}=V(),uW=wy();async function lW(e){return Fh(e),qh.searchByConditions(e)}a(lW,"searchByConditions");async function _W(e){Fh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of qh.searchByHash(e))r&&t.push(r);return t}a(_W,"searchByHash");async function dW(e){Fh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of qh.searchByValue(e))t.push(r);return t}a(dW,"searchByValue");function EW(e,t){try{let r=new cW(e);r.validate(),new uW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(EW,"search")});var $s=m((Loe,My)=>{"use strict";var Ya=require("crypto"),fW=Q(),{CONFIG_PARAMS:hW}=A(),Dy="aes-256-cbc",mW=32,SW=16,Gh=64,Ly=32,pW=Gh+Ly,Uy=new Map;My.exports={encrypt:TW,decrypt:RW,createNatsTableStreamName:gW};function TW(e){let t=Ya.randomBytes(mW),r=Ya.randomBytes(SW),s=Ya.createCipheriv(Dy,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(TW,"encrypt");function RW(e){let t=e.substr(0,Gh),r=e.substr(Gh,Ly),s=e.substr(pW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ya.createDecipheriv(Dy,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(RW,"decrypt");function gW(e,t){let r=fW.get(hW.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=Uy.get(r);return s||(s=Ya.createHash("md5").update(r).digest("hex"),Uy.set(r,s)),s}a(gW,"createNatsTableStreamName")});var ni=m((voe,vy)=>{"use strict";var Poe=Or(),Il=x(),Py=cl(),AW=$s(),wl=V(),{handleHDBError:Cl,hdb_errors:OW}=W(),{HDB_ERROR_MSGS:Ul,HTTP_STATUS_CODES:xh}=OW,NW=Q();NW.initSync();var{getDatabases:kh}=(de(),ee(Ne));vy.exports={describeAll:bW,describeTable:Dl,describeSchema:yW};async function bW(e){try{let t=wl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=kh(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await Dl({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await Dl({schema:l,table:d},f)}E&&c.push(E)}catch(E){Il.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return Il.error("Got an error in describeAll"),Il.error(t),Cl(new Error,Ul.DESCRIBE_ALL_ERR)}}a(bW,"describeAll");async function Dl(e,t){wl.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=Py.describe_table(e);if(i)throw i;let c=kh()[r];if(!c)throw Cl(new Error,Ul.SCHEMA_NOT_FOUND(e.schema),xh.NOT_FOUND);let u=c[s];if(!u)throw Cl(new Error,Ul.TABLE_NOT_FOUND(e.schema,e.table),xh.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=AW.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){Il.warn(`unable to stat table dbi due to ${d}`)}return _}a(Dl,"descTable");async function yW(e){wl.transformReq(e);let t=Py.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=kh()[s];if(!i)throw Cl(new Error,Ul.SCHEMA_NOT_FOUND(e.schema),xh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),wl.isEmpty(u)||u.describe){let l=await Dl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(yW,"describeSchema")});var Tn=m((Foe,Gy)=>{var IW=Xn(),{callbackify:Hy,promisify:wW}=require("util"),{getDatabases:qy}=(de(),ee(Ne));Gy.exports={setSchemaDataToGlobal:By,getTableSchema:CW,getSystemSchema:UW,setSchemaDataToGlobalAsync:wW(By)};var Fy=ni(),Hoe=Hy(Fy.describeAll),qoe=Hy(Fy.describeTable);function By(e){global.hdb_schema=qy(),e&&e()}a(By,"setSchemaDataToGlobal");function CW(e,t,r){let s=qy()[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(CW,"getTableSchema");function UW(){return IW}a(UW,"getSystemSchema")});var Nr=m((xoe,$y)=>{"use strict";var Ml=xf(),pt=V(),DW=require("util"),Pl=Vr(),LW=Tn(),xy=x(),{handleHDBError:ii,hdb_errors:MW}=W(),{HTTP_STATUS_CODES:oi}=MW,PW=DW.promisify(LW.getTableSchema),vW="updated",ky="inserted",Vy="upserted";$y.exports={insert:HW,update:qW,upsert:FW,validation:BW,flush:GW};async function BW(e){if(pt.isEmpty(e))throw new Error("invalid update parameters defined.");if(pt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(pt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await PW(e.schema,e.table),r=Ml(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&&pt.isEmptyOrZeroLength(c[s]))throw xy.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(!pt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw xy.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!pt.isEmpty(c[s])&&c[s]!==""&&n.has(pt.autoCast(c[s]))&&(c.skip=!0),n.add(pt.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(BW,"validation");async function HW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ml(e);if(t)throw ii(new Error,t.message,oi.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ii(new Error,r,oi.BAD_REQUEST);let s=await Pl.createRecords(e);return Ll(ky,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(HW,"insertData");async function qW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ml(e);if(t)throw ii(new Error,t.message,oi.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ii(new Error,r,oi.BAD_REQUEST);let s=await Pl.updateRecords(e);return pt.isEmpty(s.existing_rows)?Ll(vW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ll(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(qW,"updateData");async function FW(e){if(e.operation!=="upsert")throw ii(new Error,"invalid operation, must be upsert",oi.INTERNAL_SERVER_ERROR);let t=Ml(e);if(t)throw ii(new Error,t.message,oi.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ii(new Error,r,oi.BAD_REQUEST);let s=await Pl.upsertRecords(e);return Ll(Vy,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(FW,"upsertData");function Ll(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===ky?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Vy?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ll,"returnObject");function GW(e){return pt.transformReq(e),Pl.flush(e.schema,e.table)}a(GW,"flush")});var $h=m((Voe,Wy)=>{var xW=ve(),Vh=require("joi"),{hdb_table:kW,hdb_database:Yy}=is(),Ky={schema:Yy,database:Yy,table:kW},VW={date:Vh.date().iso().required()},$W={timestamp:Vh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Wy.exports=function(e,t){let r=t==="timestamp"?{...Ky,...$W}:{...Ky,...VW},s=Vh.object(r);return xW.validateBySchema(e,s)}});var Jy=m(($oe,zy)=>{var YW=ve(),Yh=require("joi"),{hdb_table:KW,hdb_database:Qy}=is(),WW=Yh.object({schema:Qy,database:Qy,table:KW,hash_values:Yh.array().required(),ids:Yh.array()});zy.exports=function(e){return YW.validateBySchema(e,WW)}});var Zy=m((Yoe,Xy)=>{"use strict";var Kh=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}},Wh=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}},Qh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Xy.exports={InsertObject:Kh,NoSQLSeachObject:Wh,DeleteResponseObject:Qh}});var ui=m((Woe,sI)=>{"use strict";var eI=$h(),QW=Jy(),ai=V(),jy=require("moment"),tI=x(),{promisify:zW,callbackify:JW}=require("util"),ci=A(),XW=Tn(),zh=zW(XW.getTableSchema),Jh=Vr(),{DeleteResponseObject:ZW}=Zy(),{handleHDBError:Rn,hdb_errors:jW}=W(),{HDB_ERROR_MSGS:vl,HTTP_STATUS_CODES:gn}=jW,eQ="records successfully deleted",tQ=JW(rI);sI.exports={delete:tQ,deleteRecord:rI,deleteFilesBefore:rQ,deleteAuditLogsBefore:sQ};async function rQ(e){let t=eI(e,"date");if(t)throw Rn(t,t.message,gn.BAD_REQUEST,void 0,void 0,!0);if(ai.transformReq(e),!jy(e.date,jy.ISO_8601).isValid())throw Rn(new Error,vl.INVALID_DATE,gn.BAD_REQUEST,ci.LOG_LEVELS.ERROR,vl.INVALID_DATE,!0);let s=ai.checkSchemaTableExist(e.schema,e.table);if(s)throw Rn(new Error,s,gn.NOT_FOUND,ci.LOG_LEVELS.ERROR,s,!0);let n=await Jh.deleteRecordsBefore(e);if(await zh(e.schema,e.table),tI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(rQ,"deleteFilesBefore");async function sQ(e){let t=eI(e,"timestamp");if(t)throw Rn(t,t.message,gn.BAD_REQUEST,void 0,void 0,!0);if(ai.transformReq(e),isNaN(e.timestamp))throw Rn(new Error,vl.INVALID_VALUE("Timestamp"),gn.BAD_REQUEST,ci.LOG_LEVELS.ERROR,vl.INVALID_VALUE("Timestamp"),!0);let r=ai.checkSchemaTableExist(e.schema,e.table);if(r)throw Rn(new Error,r,gn.NOT_FOUND,ci.LOG_LEVELS.ERROR,r,!0);let s=await Jh.deleteAuditLogsBefore(e);return await zh(e.schema,e.table),tI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(sQ,"deleteAuditLogsBefore");async function rI(e){e.ids&&(e.hash_values=e.ids);let t=QW(e);if(t)throw Rn(t,t.message,gn.BAD_REQUEST,void 0,void 0,!0);ai.transformReq(e);let r=ai.checkSchemaTableExist(e.schema,e.table);if(r)throw Rn(new Error,r,gn.NOT_FOUND,ci.LOG_LEVELS.ERROR,r,!0);try{await zh(e.schema,e.table);let s=await Jh.deleteRecords(e);return ai.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${eQ}`),s}catch(s){if(s.message===ci.SEARCH_NOT_FOUND_MESSAGE){let n=new ZW;return n.message=ci.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(rI,"deleteRecord")});var Bl=m((zoe,oI)=>{var nQ=require("crypto"),nI=9;function iQ(e){let t=aQ(nI),r=iI(e+t);return t+r}a(iQ,"createHash");function oQ(e,t){let r=e.substr(0,nI),s=r+iI(t+r);return e===s}a(oQ,"validateHash");function aQ(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(aQ,"generateSalt");function iI(e){return nQ.createHash("md5").update(e).digest("hex")}a(iI,"md5");oI.exports={hash:iQ,validate:oQ}});var cI=m((Xoe,aI)=>{var Xh=ve(),wt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function cQ(e){return wt.password.presence=!0,wt.username.presence=!0,wt.role.presence=!0,wt.active.presence=!0,Xh.validateObject(e,wt)}a(cQ,"addUserValidation");function uQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Xh.validateObject(e,wt)}a(uQ,"alterUserValidation");function lQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Xh.validateObject(e,wt)}a(lQ,"dropUserValidation");aI.exports={addUserValidation:cQ,alterUserValidation:uQ,dropUserValidation:lQ}});var Be=m((eae,lI)=>{"use strict";var{platform:joe}=require("os"),_Q="nats-server.zip",Zh="nats-server",dQ=process.platform==="win32"?`${Zh}.exe`:Zh,jh="HDB",EQ=/^[^\s.,*>]+$/,uI="__request__",fQ=a(e=>`${e}.${uI}`,"REQUEST_SUBJECT"),hQ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},mQ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},SQ={HUB:"hub.pid",LEAF:"leaf.pid"},pQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},TQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:jh,deliver_subject:"__HDB__.WORKQUEUE"},RQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:jh,deliver_subject:"HDB.SCHEMAQUEUE"},gQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:jh,deliver_subject:"HDB.USERQUEUE"},AQ={SUCCESS:"success",ERROR:"error"},OQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},NQ={TXN:"txn",MSGID:"msgid"},to={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},bQ={[to.ERR]:1,[to.WRN]:2,[to.INF]:3,[to.DBG]:4,[to.TRC]:5},yQ={debug:"-D",trace:"-DVV"};lI.exports={NATS_SERVER_ZIP:_Q,NATS_SERVER_NAME:Zh,NATS_BINARY_NAME:dQ,PID_FILES:SQ,NATS_CONFIG_FILES:mQ,SERVER_SUFFIX:pQ,WORK_QUEUE_CONSUMER_NAMES:TQ,SCHEMA_QUEUE_CONSUMER_NAMES:RQ,USER_QUEUE_CONSUMER_NAMES:gQ,NATS_TERM_CONSTRAINTS_RX:EQ,REQUEST_SUFFIX:uI,UPDATE_REMOTE_RESPONSE_STATUSES:AQ,CLUSTER_STATUS_STATUSES:OQ,REQUEST_SUBJECT:fQ,SUBJECT_PREFIXES:NQ,MSG_HEADERS:hQ,LOG_LEVELS:to,LOG_LEVEL_FLAGS:yQ,LOG_LEVEL_HIERARCHY:bQ}});var dI=m((rae,_I)=>{"use strict";var Hl=A(),ql=class{static{a(this,"BaseLicense")}constructor(t=0,r=Hl.RAM_ALLOCATION_ENUM.DEFAULT,s=Hl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},em=class extends ql{static{a(this,"ExtendedLicense")}constructor(t=0,r=Hl.RAM_ALLOCATION_ENUM.DEFAULT,s=Hl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};_I.exports={BaseLicense:ql,ExtendedLicense:em}});var Ka=m((nae,pI)=>{"use strict";var so=require("fs-extra"),EI=Bl(),fI=require("crypto"),IQ=require("moment"),wQ=require("uuid").v4,Ct=x(),rm=require("path"),CQ=V(),An=A(),UQ=dI().ExtendedLicense,ro="invalid license key format",DQ="061183",LQ="mofi25",MQ="aes-256-cbc",PQ=16,vQ=32,hI=Q();hI.initSync();var tm;pI.exports={validateLicense:mI,generateFingerPrint:HQ,licenseSearch:SI,getLicense:GQ};function sm(){return rm.join(hI.getHdbBasePath(),An.LICENSE_KEY_DIR_NAME,An.LICENSE_FILE_NAME)}a(sm,"getLicenseDirPath");function BQ(){let e=sm();return rm.join(e,An.LICENSE_FILE_NAME)}a(BQ,"getLicenseFilePath");function nm(){let e=sm();return rm.join(e,An.REG_KEY_FILE_NAME)}a(nm,"getFingerPrintFilePath");async function HQ(){let e=nm();try{return await so.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qQ();throw Ct.error(`Error writing fingerprint file to ${e}`),Ct.error(t),new Error("There was an error generating the fingerprint")}}a(HQ,"generateFingerPrint");async function qQ(){let e=wQ(),t=EI.hash(e),r=nm();try{await so.mkdirp(sm()),await so.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ct.error(`Error writing fingerprint file to ${r}`),Ct.error(s),new Error("There was an error generating the fingerprint")}return t}a(qQ,"writeFingerprint");function mI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:An.RAM_ALLOCATION_ENUM.DEFAULT,version:An.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ct.error("empty license key passed to validate."),r;let s=nm(),n=!1;try{n=so.statSync(s)}catch(i){Ct.error(i)}if(n){let i;try{i=so.readFileSync(s,"utf8")}catch{Ct.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(LQ),c=o[1];c=Buffer.concat([Buffer.from(c)],PQ);let u=Buffer.concat([Buffer.from(i)],vQ),l=fI.createDecipheriv(MQ,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=FQ(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ro),Ct.error(ro),new Error(ro)}let d;if(isNaN(_))try{d=JSON.parse(_),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(ro),Ct.error(ro),new Error(ro)}else r.exp_date=_;r.exp_date<IQ().valueOf()&&(r.valid_date=!1),EI.validate(o[1],`${DQ}${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||Ct.error("Invalid licence"),r}a(mI,"validateLicense");function FQ(e,t){try{let r=fI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ct.warn("Check old license failed")}}a(FQ,"checkOldLicense");function SI(){let e=new UQ,t=[];try{t=so.readFileSync(BQ(),"utf-8").split(An.NEW_LINE)}catch(r){r.code==="ENOENT"?Ct.info("no license file found"):Ct.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(CQ.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mI(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){Ct.error("There was an error parsing the license string."),Ct.error(n),e.ram_allocation=An.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return tm=e,e}a(SI,"licenseSearch");async function GQ(){return tm||await SI(),tm}a(GQ,"getLicense")});var br=m((uae,PI)=>{"use strict";var OI="username is required",NI="nothing to update, must supply active, role or password to update",bI="password cannot be an empty string",yI="If role is specified, it cannot be empty.",II="active must be true or false";PI.exports={addUser:zQ,alterUser:JQ,dropUser:ZQ,getSuperUser:rz,userInfo:jQ,listUsers:Gl,listUsersExternal:ez,setUsersToGlobal:io,findAndValidateUser:MI,getClusterUser:sz,USERNAME_REQUIRED:OI,ALTERUSER_NOTHING_TO_UPDATE:NI,EMPTY_PASSWORD:bI,EMPTY_ROLE:yI,ACTIVE_BOOLEAN:II};var wI=Nr(),xQ=ui(),om=Bl(),CI=cI(),UI=Or(),am=xs(),cr=V(),DI=require("validate.js"),le=x(),{promisify:kQ}=require("util"),cm=$s(),TI=A(),RI=Be(),VQ=Tr(),oae=Q(),aae=Ka(),$Q=Xn(),{table:cae}=(de(),ee(Ne)),{handleHDBError:_s,hdb_errors:YQ}=W(),{HTTP_STATUS_CODES:ds,AUTHENTICATION_ERROR_MSGS:im,HDB_ERROR_MSGS:no}=YQ,{UserEventMsg:um}=Fr(),gI=require("lodash"),{_assignPackageExport:KQ}=require("../index");KQ("getUser",MI);var LI={username:!0,active:!0,role:!0,password:!0},AI=new Map,Fl=UI.searchByValue,WQ=UI.searchByHash,QQ=kQ(xQ.delete);async function zQ(e){let t=DI.cleanAttributes(e,LI),r=CI.addUserValidation(t);if(r)throw _s(new Error,r.message,ds.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 Fl(s),n=n&&Array.from(n)}catch(u){throw le.error("There was an error searching for a role in add user"),le.error(u),u}if(!n||n.length<1)throw _s(new Error,no.ROLE_NAME_NOT_FOUND(t.role),ds.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw _s(new Error,no.DUP_ROLES_FOUND(t.role),ds.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=cm.encrypt(t.password)),t.password=om.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await wI.insert(i)}catch(u){throw le.error("There was an error searching for a user."),le.error(u),u}le.debug(o);try{await io()}catch(u){throw le.error("Got an error setting users to global"),le.error(u),u}if(o.skipped_hashes.length===1)throw _s(new Error,no.USER_ALREADY_EXISTS(t.username),ds.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],am.signalUserChange(new um(process.pid)),`${c.username} successfully added`}a(zQ,"addUser");async function JQ(e){let t=DI.cleanAttributes(e,LI);if(cr.isEmptyOrZeroLength(t.username))throw new Error(OI);if(cr.isEmptyOrZeroLength(t.password)&&cr.isEmptyOrZeroLength(t.role)&&cr.isEmptyOrZeroLength(t.active))throw new Error(NI);if(!cr.isEmpty(t.password)&&cr.isEmptyOrZeroLength(t.password.trim()))throw new Error(bI);if(!cr.isEmpty(t.active)&&!cr.isBoolean(t.active))throw new Error(II);let r=XQ(t.username);if(!cr.isEmpty(t.password)&&!cr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=cm.encrypt(t.password)),t.password=om.hash(t.password)),t.role==="")throw new Error(yI);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 Fl(i)||[])}catch(c){throw le.error("Got an error searching for a role."),le.error(c),c}if(!o||o.length===0){let c=no.ALTER_USER_ROLE_NOT_FOUND(t.role);throw le.error(c),_s(new Error,c,ds.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=no.ALTER_USER_DUP_ROLES(t.role);throw le.error(c),_s(new Error,c,ds.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 wI.update(s)}catch(i){throw le.error("Error during update."),le.error(i),i}try{await io()}catch(i){throw le.error("Got an error setting users to global"),le.error(i),i}return am.signalUserChange(new um(process.pid)),n}a(JQ,"alterUser");function XQ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(XQ,"isClusterUser");async function ZQ(e){try{let t=CI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(cr.isEmpty(global.hdb_users.get(e.username)))throw _s(new Error,no.USER_NOT_EXIST(e.username),ds.NOT_FOUND,void 0,void 0,!0);let s;try{s=await QQ(r)}catch(n){throw le.error("Got an error deleting a user."),le.error(n),n}le.debug(s);try{await io()}catch(n){throw le.error("Got an error setting users to global."),le.error(n),n}return am.signalUserChange(new um(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(ZQ,"dropUser");async function jQ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await WQ(r)}catch(n){throw le.error("Got an error searching for a role."),le.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw le.error(r),r}return t}a(jQ,"userInfo");async function ez(){let e;try{e=await Gl()}catch(t){throw le.error("Got an error listing users."),le.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(ez,"listUsersExternal");async function Gl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Fl(e)}catch(o){throw le.error("Got an error searching for roles."),le.error(o),o}let r={};for(let o of t)r[o.id]=gI.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 Fl(s)}catch(o){throw le.error("Got an error searching for users."),le.error(o),o}let i=new Map;for(let o of n)o=gI.cloneDeep(o),o.role=r[o.role],tz(o.role),i.set(o.username,o);return i}catch(e){throw le.error("got an error listing users"),le.error(e),cr.errorizeMessage(e)}return null}a(Gl,"listUsers");function tz(e){try{if(!e){le.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($Q)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){le.error("Got an error trying to set system permissions."),le.error(t)}}a(tz,"appendSystemTablesToRole");async function io(){try{let e=await Gl();global.hdb_users=e}catch(e){throw le.error(e),e}}a(io,"setUsersToGlobal");async function MI(e,t,r=!0){global.hdb_users||await io();let s=global.hdb_users.get(e);if(!s)throw _s(new Error,im.GENERIC_AUTH_FAIL,ds.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw _s(new Error,im.USER_INACTIVE,ds.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(AI.get(t)===s.password)return n;if(om.validate(s.password,t))AI.set(t,s.password);else throw _s(new Error,im.GENERIC_AUTH_FAIL,ds.UNAUTHORIZED,void 0,void 0,!0)}return n}a(MI,"findAndValidateUser");async function rz(){global.hdb_users||await io();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(rz,"getSuperUser");async function sz(){let e=await Gl(),t=VQ.getConfigFromFile(TI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!cr.isEmpty(r)&&r?.role?.role===TI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=cm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+RI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+RI.SERVER_SUFFIX.ADMIN,r}a(sz,"getClusterUser")});var Qa=m((Eae,qI)=>{"use strict";var li=x(),ur=A(),nz=nO(),_ae=Tn(),dae=ni(),iz=br(),{validateEvent:vI}=Fr(),Wa=Vr(),oz=require("process"),{resetDatabases:az}=(de(),ee(Ne)),cz={[ur.ITC_EVENT_TYPES.SCHEMA]:uz,[ur.ITC_EVENT_TYPES.USER]:HI};async function uz(e){let t=vI(e);if(t){li.error(t);return}li.trace("ITC schemaHandler received schema event:",e),await nz(e.message),await lz(e.message)}a(uz,"schemaHandler");async function lz(e){try{Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=az();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){li.error(t)}}a(lz,"syncSchemaMetadata");var BI=[];async function HI(e){try{try{Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){li.warn(r)}let t=vI(e);if(t){li.error(t);return}li.trace(`ITC userHandler ${ur.HDB_ITC_CLIENT_PREFIX}${oz.pid} received user event:`,e),await iz.setUsersToGlobal();for(let r of BI)r()}catch(t){li.error(t)}}a(HI,"userHandler");HI.addListener=function(e){BI.push(e)};qI.exports=cz});var Fr=m((Tae,GI)=>{"use strict";var hae=x(),lm=V(),_z=A(),{ITC_ERRORS:za}=rr(),{parentPort:mae,threadId:dz,isMainThread:Ez,workerData:Sae}=require("worker_threads"),{onMessageFromWorkers:fz,broadcast:pae,broadcastWithAcknowledgement:hz}=st();GI.exports={sendItcEvent:mz,validateEvent:FI,SchemaEventMsg:Sz,UserEventMsg:pz};var xl;fz(async(e,t)=>{xl=xl||Qa(),FI(e),xl[e.type]&&await xl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mz(e){return!Ez&&e.message&&(e.message.originator=dz),hz(e)}a(mz,"sendItcEvent");function FI(e){if(typeof e!="object")return za.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||lm.isEmpty(e.type))return za.MISSING_TYPE;if(!e.hasOwnProperty("message")||lm.isEmpty(e.message))return za.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||lm.isEmpty(e.message.originator))return za.MISSING_ORIGIN;if(_z.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return za.INVALID_EVENT(e.type)}a(FI,"validateEvent");function Sz(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(Sz,"SchemaEventMsg");function pz(e){this.originator=e}a(pz,"UserEventMsg")});var xs=m((Aae,$I)=>{"use strict";var xI=A(),gae=V(),kl=x(),kI=GA(),oo,{sendItcEvent:VI}=Fr();function Tz(e){try{kl.trace("signalSchemaChange called with message:",e),oo=oo||Qa();let t=new kI(xI.ITC_EVENT_TYPES.SCHEMA,e);return oo.schema(t),VI(t)}catch(t){kl.error(t)}}a(Tz,"signalSchemaChange");function Rz(e){try{kl.trace("signalUserChange called with message:",e),oo=oo||Qa();let t=new kI(xI.ITC_EVENT_TYPES.USER,e);return oo.user(t),VI(t)}catch(t){kl.error(t)}}a(Rz,"signalUserChange");$I.exports={signalSchemaChange:Tz,signalUserChange:Rz}});var Wl={};xe(Wl,{addAnalyticsListener:()=>fm,recordAction:()=>Es,recordActionBinary:()=>ao,setAnalyticsEnabled:()=>gz});function gz(e){ew=e}function Es(e,t,r,s,n){if(!ew)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Yl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Yl.set(i,o)),$l||Az()}function ao(e,t,r,s,n){Es(e?1:0,t,r,s,n)}function fm(e){rw.push(e)}function Az(){$l=performance.now(),setTimeout(()=>{let e=performance.now()-$l;$l=0;let t=[],r={time:Date.now(),period:e,threadId:_i.threadId,metrics:t};for(let[n,i]of Yl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:_i.threadId,...s});for(let n of rw)n(t);Yl=new Map,_i.parentPort?_i.parentPort.postMessage({type:tw,report:r}):nw({report:r})},Em).unref()}async function Oz(e,t=6e4){let r=hm(),s;for(let _ of r.primaryStore.getRange({start:Vl+"z",end:Vl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:p,metric:R,count:O,threadId:k,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");T&&(U+="-"+T);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let q=b.count||1;b[P]=(b[P]*q+z*O)/(b.count=q+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await Nz()}for(let[_,d]of i)d.id=Vl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Vl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-YI,active:l-KI,time:c}),YI=u,KI=l}async function bz(e,t){let r=hm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function hm(){return WI||(WI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function Iz(){sw=!0,setInterval(async()=>{await Oz(Em,dm),await bz(yz,Em)},dm/2).unref()}function nw(e,t){let r=e.report;r.threadId=t?.threadId||_i.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(QI+=s.mean*s.count);r.totalBytesProcessed=QI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(zI.get(t))}),zI.set(t,t.performance.eventLoopUtilization())),r.id=(0,ZI.getNextMonotonicTime)(),hm().put(r),sw||Iz(),wz&&(iw=Uz(r))}async function Uz(e){if(await iw,!On){let r=(0,Ja.dirname)((0,XI.getLogFilePath)());try{On=await(0,_m.open)((0,Ja.join)(r,"analytics.log"),"r+")}catch{On=await(0,_m.open)((0,Ja.join)(r,"analytics.log"),"w+")}}let t=(await On.stat()).size;if(t>Cz){let r=Buffer.alloc(t);await On.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await On.write(r,{position:0}),await On.truncate(r.length),t=r.length}await On.write(JSON.stringify(e)+`
6
- `,t)}var _i,JI,XI,Ja,_m,ZI,Kl,jI,Yl,dm,ew,$l,Em,tw,rw,Vl,YI,KI,Nz,yz,WI,sw,QI,zI,wz,iw,On,Cz,di=Se(()=>{_i=require("worker_threads"),JI=C(st());de();XI=C(x()),Ja=require("path"),_m=require("fs/promises"),ZI=C(qt()),Kl=C(Q()),jI=C(A());Pr();(0,Kl.initSync)();Yl=new Map,dm=(0,Kl.get)(jI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,ew=dm>0;a(gz,"setAnalyticsEnabled");a(Es,"recordAction");et.recordAnalytics=Es;a(ao,"recordActionBinary");$l=0,Em=1e3,tw="analytics-report",rw=[];a(fm,"addAnalyticsListener");a(Az,"sendAnalytics");Vl="sum-";a(Oz,"aggregation");YI=0,KI=0,Nz=a(()=>new Promise(setImmediate),"rest");a(bz,"cleanup");yz=36e5;a(hm,"getAnalyticsTable");(0,JI.setChildListenerByType)(tw,nw);a(Iz,"startScheduledTasks");QI=0,zI=new Map,wz=!1;a(nw,"recordAnalytics");Cz=1e6;a(Uz,"logAnalytics")});var pm={};xe(pm,{coerceType:()=>Ql,makeTable:()=>Jl,setServerUtilities:()=>vz});function Jl(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),HA(i,u);let T=0,p,R,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&gR();class q extends mt{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=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,F=w.table?He[c][w.table]:q;if(c===Yr.SYSTEM_SCHEMA_NAME&&(w.table===Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,Xa);switch(w.type){case"put":return L._writeUpdate(v,Xa);case"delete":return L._writeDelete(Xa);case"publish":return L._writePublish(v,Xa);case"invalidate":return L.invalidate(Xa);default:hi.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,fi.getWorkerIndex)()):(0,fi.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ke(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),ec.signalSchemaChange(new tc.SchemaEventMsg(process.pid,Yr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&ec.signalUserChange(new tc.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,F,G={transaction:w?.getReadTxn()},X;return Eu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[xt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,fi.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,gR(),q.audit=!0}static coerceId(S){return S===""?null:Ql(S,k)}static async dropTable(){if(delete He[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.tableName+"/"),i.drop(),await _.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));ec.signalSchemaChange(new tc.SchemaEventMsg(process.pid,Yr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Bs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=mm(y,"read");N.select=w.filter(F=>v[F])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=mm(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=mm(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[zn]:F}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,fw.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=fa(S);else{if(S[cw]&&(w=!qu(S),w))return;t&&S[t]!==F&&(S[t]=F),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=fa(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(hi.trace("Checking timestamp for put",F,this[xt]>L,this[xt],L),this[xt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,co.asBinary)(J),L),je(this[ae],y,S),y===null&&!G&&kn(-1),{type:E&&"put",value:J,[zn]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[xt]>v))return je(this[ae],L),hi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||RR(),F||kn(1)):i.remove(this[ae]),{type:E&&"delete",[zn]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(an=>an.name==j);if(De)De.type&&(Y[1]===void 0?Y.value=w(Y.value,De):Y[1]=w(Y[1],De));else if(j!=null)throw(0,Ei.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Ql(De,j)):Ql(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,dw.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Za.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let an=r[De];Y.estimated_count=an?an.getValuesCount(Y[1]??Y.value):1/0}}else j===Za.SEARCH_TYPES.CONTAINS||j===Za.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Za.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=Lz:Y.estimated_count=Dz}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):co.SKIP);else{let Y=XE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(ZE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let an=y[De],pE=XE(an,v,D,q,S.allowFullScan);Y=Y.concat(pE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,an={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(pE=>new Promise(TE=>Eu(pE,X,an,null,!1,iH=>{let RE=iH?.value;if(!RE)return TE(co.SKIP);for(let gE=0;gE<De;gE++)if(!j[gE](RE))return TE(co.SKIP);TE(RE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=BA(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[Bs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Bs]){if(w){if(y)throw new Ei.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=En(F,i);(D==null||_w(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||_w(D,J)){let Y=En(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){hi.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,Ew.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[xt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=En(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[xt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||RR(),kn(1));let X={type:"message",value:i.encoder.encode(S),[zn]:w};return!D.hasWrittenTime&&this[xt]>F&&(F=X.newTxnTime=this[xt]+.001),i.put(y,G??null,F),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new ma(i,S.user,u)),D}else return new zu(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(F=>typeof F=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ei.ClientError(N.join(". "))}getUpdatedTime(){return this[xt]}wasLoadedFromSource(){return R?!!this[uw]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ei.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ei.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Gu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=En(y,i);L.id=F,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],F=u.get(v);if(F){let L=En(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[cw]=!0,d&&q.setTTLExpiration(d/1e3),b&&nH(),q;function je(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ja.getIndexedValues)(L);if(G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ja.getIndexedValues)(F),G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(je,"updateIndices");function Eu(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&ao(Y,"cache-hit",n),Y&&!y&&(D&&(D[uw]=!0),R))return Qo(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(Eu,"loadRecord");function Bi(){P=new Set,(0,fi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Bi,"setupCommitListeners");async function Qo(Z,S=null,N,D){if(N<0){let L;return P||Bi(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G(Qo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Qo(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;Es(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,ja.getNextMonotonicTime)());let j=je(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],Qu(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a(Qo,"getFromSource");function kn(Z){T||(T=i.get([aw,Sm.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([aw,Sm.threadId],T)},50))}a(kn,"recordDeletion");function RR(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),kn(-1)}}},q.getRecordCount()*100+Pz).unref())}a(RR,"enqueueDeletionCleanup");function gR(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),kn(-1)})}a(gR,"addDeleteRemoval");function nH(){(0,fi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){hi.error("Error in evicting old records",Z)}},Mz).unref()}a(nH,"runRecordExpirationEviction")}function mm(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 lw(){}function vz(e){fw=e}function Ql(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Bz.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zl.autoCast)(e)}function _w(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}var Yr,co,ja,dw,Sm,Za,rc,Ei,ec,tc,hi,Ew,fi,zl,fw,Dz,Lz,Mz,ow,aw,xt,cw,$ae,uw,Xa,Pz,Bz,Xl=Se(()=>{Yr=C(A()),co=require("lmdb"),ja=C(qt()),dw=require("lodash"),Sm=require("worker_threads");jr();DA();Za=C(ke()),rc=C(Q());qA();Ei=C(W()),ec=C(xs()),tc=C(Fr());de();$u();hi=C(x());ku();Qn();Ew=require("ordered-binary"),fi=C(st());ha();zl=C(V());di();Dz=1e8,Lz=1e7,Mz=6e4;rc.initSync();ow=rc.get(Yr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aw=Symbol.for("deletions"),xt=Symbol.for("version"),cw=Symbol.for("incremental-update"),$ae=Symbol("source-resource"),uw=Symbol("load-from-source"),Xa={isNotification:!0,allowInvalidated:!0},Pz=(0,zl.convertToMS)(rc.get(Yr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jl,"makeTable");a(mm,"attributesAsObject");a(lw,"noop");a(vz,"setServerUtilities");Bz=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ql,"coerceType");a(_w,"isDescendantId")});var Ne={};xe(Ne,{database:()=>xa,databases:()=>He,dropDatabase:()=>Mh,dropTableMeta:()=>kz,getDatabases:()=>xr,getTables:()=>Hz,onUpdatedTable:()=>Om,readMetaDb:()=>sc,resetDatabases:()=>qz,table:()=>nt,tables:()=>_r});function Hz(){return t_||xr(),_r||{}}function xr(){if(t_)return He;t_=!0,Eo=new Map;let e=(0,Tt.getHdbBasePath)()&&(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),t=(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,lr.existsSync)(e)?e:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,lr.existsSync)(e))for(let r of(0,lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&sc((0,Me.join)(e,r.name),null,s)}if((0,lr.existsSync)((0,_o.getBaseSchemaPath)())){for(let r of(0,lr.readdirSync)((0,_o.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,_o.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,_o.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);sc((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,lr.existsSync)(n))for(let o of(0,lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&sc((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,lr.existsSync)(u)&&sc(u,o,r,null,!0)}}for(let r in He){let s=Eo.get(r);if(s){let n=He[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete He[r],r==="data"){for(let n in _r)delete _r[n];delete _r[r_]}}return Eo=null,He}}function qz(){t_=!1;for(let[,e]of Nn)e.needsDeletion=!0;xr();for(let[e,t]of Nn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Nn.delete(e));return He}function sc(e,t,r=gm,s,n){let i=new Tm.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Nn.get(e);o?o.needsDeletion=!1:(o=(0,Zl.open)(i),Nn.set(e,o));let c=new mi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(uo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,lr.existsSync)(s)&&(i.path=s,l=(0,Zl.open)(i),l.isLegacy=!0):l=af(o));let _=pw(r),d=_[r_],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let q of T)if(q.is_hash_attribute||q.isPrimaryKey){p=q;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(lo)||0)&&u.putSync(lo,$+1):(p.tableId=$=u.get(lo),$||($=1),u.putSync(lo,$+1),u.putSync(p.key,p));let q=new mi.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,q),U.rootStore=o,U.tableId=$}for(let q of T){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let je=new mi.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,je)}let Oe=k.find(je=>je.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=Tw(_,f,Jl({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of Am)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function pw(e){let t=He[e];if(t||(e==="data"?t=He[e]=_r:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),Eo&&!Eo.has(e)){let r=new Set;t[r_]=r,Eo.set(e,r)}return t}function Tw(e,t,r){return e[t]=r,r}function xa({database:e,table:t}){e||(e=gm),xr();let r=pw(e),s=(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),n=t&&(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||((0,lr.existsSync)(s)?s:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Nn.get(i);if(!o){let c=new Tm.default(i,!1);o=(0,Zl.open)(c),Nn.set(i,o)}return o}async function Mh(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e];for(let r in t){let n=t[r].primaryStore.rootStore;Nn.delete(n.path),n.status==="open"&&(await n.close(),await hw.remove(n.path))}if(e==="data"){for(let r in _r)delete _r[r];delete _r[r_]}delete He[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=gm);let u=xa({database:t,table:e}),l=He[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new mi.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let p,R;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=af(u)),E=s.find(q=>q.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new mi.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(lo),z.tableId||(z.tableId=1),h.putSync(lo,z.tableId+1),E.tableId=z.tableId,_=Tw(l,e,Jl({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let q=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new mi.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<nc.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<nc.workerData?.restartNumber)&&(p=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(p=!0,$(),h.put(b,U))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=xz(_,k,O):p&&jl.signalSchemaChange(new e_.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of Am)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function xz(e,t,r){try{let s=e.schemaVersion;await jl.signalSchemaChange(new e_.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:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,mw.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),nc.workerData&&nc.workerData.restartNumber!==Sw.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>Fz?await n:u>Gz&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await jl.signalSchemaChange(new e_.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function kz({table:e,database:t}){let r=xa({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 Om(e){Am.push(e)}var Tt,uo,Zl,Me,lr,_o,mi,Tm,kt,hw,Rm,mw,jl,e_,nc,Le,Sw,gm,r_,_r,He,lo,Am,t_,Nn,Eo,Fz,Gz,de=Se(()=>{Tt=C(Q()),uo=C(ke()),Zl=require("lmdb"),Me=require("path"),lr=require("fs"),_o=C(we());Xl();mi=C(Zu()),Tm=C(el()),kt=C(A()),hw=C(require("fs-extra")),Rm=require("../index"),mw=C(qt()),jl=C(xs()),e_=C(Fr()),nc=require("worker_threads"),Le=C(x()),Sw=C(st());ha();gm="data",r_=Symbol("defined-tables");(0,Tt.initSync)();_r=Object.create(null),He=Object.create(null);(0,Rm._assignPackageExport)("databases",He);(0,Rm._assignPackageExport)("tables",_r);lo=Symbol.for("next-table-id"),Am=[],Nn=new Map;a(Hz,"getTables");a(xr,"getDatabases");a(qz,"resetDatabases");a(sc,"readMetaDb");a(pw,"ensureDB");a(Tw,"setTable");a(xa,"database");a(Mh,"dropDatabase");a(nt,"table");Fz=1e3,Gz=10;a(xz,"runIndexing");a(kz,"dropTableMeta");a(Om,"onUpdatedTable")});var ym={};xe(ym,{loadGQLSchema:()=>$z,start:()=>bm,startOnMainThread:()=>Vz});function bm({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let U of T.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of T.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let q of P.arguments)q.name.value==="role"&&z.push(q.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,Nm.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let p=E.get(T.type);if(!p)throw new Error(`${T.type} was not found as a Query export`);i.set((0,Nm.dirname)(s)+"/"+T.name,p.tableClass)}}}var Nm,Vz,$z,Rw=Se(()=>{Nm=require("path");de();a(bm,"start");Vz=bm,$z=bm({ensureTable:nt}).handleFile});async function s_(e){return Yz?(ic||(ic=Kz(Qz)),(await(await ic).import(e)).namespace):import(e)}async function Kz(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ic=new Compartment({console,Math,Date,fetch:Wz,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Aw.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:_r,databases:He})}};let s=await(0,gw.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ic}function Wz(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 Qz(){return{Resource:mt,tables:_r}}var gw,Aw,Yz,ic,Im=Se(()=>{jr();de();gw=require("fs/promises"),Aw=require("path"),Yz=!1;a(s_,"secureImport");a(Kz,"getCompartment");a(Wz,"secureOnlyFetch");a(Qz,"getGlobalVars")});var Cm={};xe(Cm,{handleFile:()=>zz});async function zz(e,t,r,s){let n=new Map,i=(0,Ow.pathToFileURL)(r).toString(),o=await s_(i);u(o.default)&&s.set((0,wm.dirname)(t),o.default),c(o,(0,wm.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var Ow,wm,Nw=Se(()=>{Ow=require("url");Im();wm=require("path");a(zz,"handleFile")});var Dm={};xe(Dm,{start:()=>Jz});function Jz({resources:e}){e.set("login",Um),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Um,bw=Se(()=>{jr();a(Jz,"start");Um=class extends mt{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 Mm=m((cce,ww)=>{"use strict";var{Readable:Xz}=require("stream"),Zz=1e4;ww.exports={streamAsJSON(e){return new Lm({value:e})}};var Lm=class extends Xz{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*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](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){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),yw)}catch(n){yield yw(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);Iw(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>Zz?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 Iw(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}}};function yw(e){return console.error(e),JSON.stringify(e.toString())}a(yw,"handleError");function Iw(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Iw,"when")});var n_=m((lce,Cw)=>{"use strict";var jz=Vr();Cw.exports={writeTransaction:eJ};function eJ(e,t,r){return jz.writeTransaction(e,t,r)}a(eJ,"writeTransaction")});var Mw=m((Ece,Lw)=>{"use strict";var tJ=Or(),rJ=Tn(),Uw=x(),sJ=Nr(),dce=n_(),nJ=require("clone"),vm=require("alasql"),iJ=bl(),Dw=require("util"),oJ=Dw.promisify(rJ.getTableSchema),aJ=Dw.promisify(tJ.search),cJ=A(),Pm=V();iJ(vm);Lw.exports={update:lJ};var uJ="There was a problem performing this update. Please check the logs and try again.";async function lJ({statement:e,hdb_user:t}){let r=await oJ(e.table.databaseid,e.table.tableid),s=_J(e.columns);Pm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=nJ(n),c=Pm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=vm.parse(u).statements[0],_=await aJ(l),d=dJ(s,_);return EJ(o,d,t)}a(lJ,"update");function _J(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vm.compile(`SELECT ${r.expression.toString()} AS [${cJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Uw.error(t),new Error(uJ)}}a(_J,"createUpdateRecord");function dJ(e,t){return Pm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dJ,"buildUpdateRecords");async function EJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await sJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Uw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(EJ,"updateRecords")});var vw=m((Sce,Pw)=>{var fJ=require("alasql"),hJ=Or(),mJ=x(),SJ=Vr(),Hm=require("util"),Bm=V(),pJ=A(),TJ=Tn(),hce=n_(),mce=Nr(),RJ="record",gJ="successfully deleted",AJ=Hm.callbackify(yJ),OJ=Hm.promisify(hJ.search),NJ=Hm.promisify(TJ.getTableSchema);Pw.exports={convertDelete:AJ};function bJ(e){return`${e.deleted_hashes.length} ${RJ}${e.deleted_hashes.length===1?"":"s"} ${gJ}`}a(bJ,"generateReturnMessage");async function yJ({statement:e,hdb_user:t}){let r=await NJ(e.table.databaseid,e.table.tableid);Bm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=fJ.parse(o).statements[0],u={operation:pJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await OJ(c);let l=await SJ.deleteRecords(u);return Bm.isEmptyOrZeroLength(l.message)&&(l.message=bJ(l)),delete l.txn_time,l}catch(l){throw mJ.error(l),l.hdb_code?l.message:l}}a(yJ,"convertDelete")});var Gw=m((Tce,Fw)=>{"use strict";var IJ=ni(),{hdb_errors:Bw}=W(),{getDatabases:Hw}=(de(),ee(Ne));Fw.exports={checkSchemaExists:qw,checkSchemaTableExists:wJ,schema_describe:IJ};async function qw(e){if(!Hw()[e])return Bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qw,"checkSchemaExists");async function wJ(e,t){let r=await qw(e);if(r)return r;if(!Hw()[e][t])return Bw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wJ,"checkSchemaTableExists")});var oc=m((gce,CJ)=>{CJ.exports={name:"harperdb",version:"4.2.0-alpha.12",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:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},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":"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:"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":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.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",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","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.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.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.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},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",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:"^4.9.4","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 it=m((yce,iC)=>{"use strict";var Rt=Q();Rt.initSync();var UJ=require("fs-extra"),DJ=require("semver"),lc=require("path"),{monotonicFactory:LJ}=require("ulidx"),xm=LJ(),MJ=require("util"),kw=require("child_process"),PJ=MJ.promisify(kw.exec),vJ=kw.spawn,_e=Be(),Te=A(),i_=V(),yr=x(),o_=$s(),BJ=n_(),ac=Tr(),{Encoder:HJ,decode:km}=require("msgpackr"),Vw=new HJ,{isEmpty:Si}=i_,$w=br(),Yw=12e10,qJ=48*36e11,FJ=5e9,{connect:GJ,StorageType:Kw,RetentionPolicy:Ww,AckPolicy:a_,DeliverPolicy:c_,DiscardPolicy:xJ,NatsConnection:Ace,JetStreamManager:Oce,JetStreamClient:Nce,StringCodec:bce,JSONCodec:kJ,createInbox:Vm,headers:VJ,ErrorCode:xw}=require("nats"),{PACKAGE_ROOT:$J}=A(),YJ=oc(),{recordAction:KJ}=(di(),ee(Wl)),Qw=kJ(),WJ="clustering",QJ=YJ.engines[_e.NATS_SERVER_NAME],zJ=lc.join($J,"dependencies"),Gm=lc.join(zJ,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),qm,Fm,cc,fo,ho;iC.exports={runCommand:zw,checkNATSServerInstalled:JJ,createConnection:$m,getConnection:u_,getJetStreamManager:_c,getJetStream:Jw,getNATSReferences:Vt,getServerList:ZJ,createLocalStream:Ym,listStreams:Xw,deleteLocalStream:jJ,getServerConfig:dc,listRemoteStreams:e2,viewStream:t2,viewStreamIterator:r2,publishToStream:s2,createWorkQueueStream:n2,addSourceToWorkStream:jw,request:o2,removeSourceFromWorkStream:tC,reloadNATS:Km,reloadNATSHub:a2,reloadNATSLeaf:c2,extractServerName:eC,requestErrorHandler:u2,updateWorkStream:l2,createLocalTableStream:sC,createTableStreams:_2,purgeTableStream:nC,purgeSchemaTableStreams:d2,getStreamInfo:E2,updateLocalStreams:h2,closeConnection:XJ,getJsmServerName:Ec,addNatsMsgHeader:Zw,updateIngestStreamConsumer:i2};async function zw(e,t=void 0){let{stdout:r,stderr:s}=await PJ(e,{cwd:t});if(s)throw new Error(s.replace(`
6
+ `,t)}var _i,JI,XI,Ja,_m,ZI,Kl,jI,Yl,dm,ew,$l,Em,tw,rw,Vl,YI,KI,Nz,yz,WI,sw,QI,zI,wz,iw,On,Cz,di=Se(()=>{_i=require("worker_threads"),JI=C(st());de();XI=C(x()),Ja=require("path"),_m=require("fs/promises"),ZI=C(qt()),Kl=C(Q()),jI=C(A());Pr();(0,Kl.initSync)();Yl=new Map,dm=(0,Kl.get)(jI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,ew=dm>0;a(gz,"setAnalyticsEnabled");a(Es,"recordAction");et.recordAnalytics=Es;a(ao,"recordActionBinary");$l=0,Em=1e3,tw="analytics-report",rw=[];a(fm,"addAnalyticsListener");a(Az,"sendAnalytics");Vl="sum-";a(Oz,"aggregation");YI=0,KI=0,Nz=a(()=>new Promise(setImmediate),"rest");a(bz,"cleanup");yz=36e5;a(hm,"getAnalyticsTable");(0,JI.setChildListenerByType)(tw,nw);a(Iz,"startScheduledTasks");QI=0,zI=new Map,wz=!1;a(nw,"recordAnalytics");Cz=1e6;a(Uz,"logAnalytics")});var pm={};xe(pm,{coerceType:()=>Ql,makeTable:()=>Jl,setServerUtilities:()=>vz});function Jl(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),HA(i,u);let T=0,p,R,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&gR();class q extends mt{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=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,F=w.table?He[c][w.table]:q;if(c===Yr.SYSTEM_SCHEMA_NAME&&(w.table===Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,Xa);switch(w.type){case"put":return L._writeUpdate(v,Xa);case"delete":return L._writeDelete(Xa);case"publish":return L._writePublish(v,Xa);case"invalidate":return L.invalidate(Xa);default:hi.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,fi.getWorkerIndex)()):(0,fi.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ke(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),ec.signalSchemaChange(new tc.SchemaEventMsg(process.pid,Yr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&ec.signalUserChange(new tc.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,F,G={transaction:w?.getReadTxn()},X;return Eu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[xt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,fi.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,gR(),q.audit=!0}static coerceId(S){return S===""?null:Ql(S,k)}static async dropTable(){if(delete He[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.tableName+"/"),i.drop(),await _.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));ec.signalSchemaChange(new tc.SchemaEventMsg(process.pid,Yr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Bs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=mm(y,"read");N.select=w.filter(F=>v[F])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=mm(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=mm(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[zn]:F}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,fw.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=fa(S);else{if(S[cw]&&(w=!qu(S),w))return;t&&S[t]!==F&&(S[t]=F),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=fa(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(hi.trace("Checking timestamp for put",F,this[xt]>L,this[xt],L),this[xt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,co.asBinary)(J),L),je(this[ae],y,S),y===null&&!G&&kn(-1),{type:E&&"put",value:J,[zn]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[xt]>v))return je(this[ae],L),hi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||RR(),F||kn(1)):i.remove(this[ae]),{type:E&&"delete",[zn]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(an=>an.name==j);if(De)De.type&&(Y[1]===void 0?Y.value=w(Y.value,De):Y[1]=w(Y[1],De));else if(j!=null)throw(0,Ei.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Ql(De,j)):Ql(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,dw.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Za.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let an=r[De];Y.estimated_count=an?an.getValuesCount(Y[1]??Y.value):1/0}}else j===Za.SEARCH_TYPES.CONTAINS||j===Za.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Za.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=Lz:Y.estimated_count=Dz}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):co.SKIP);else{let Y=XE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(ZE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let an=y[De],pE=XE(an,v,D,q,S.allowFullScan);Y=Y.concat(pE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,an={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(pE=>new Promise(TE=>Eu(pE,X,an,null,!1,iH=>{let RE=iH?.value;if(!RE)return TE(co.SKIP);for(let gE=0;gE<De;gE++)if(!j[gE](RE))return TE(co.SKIP);TE(RE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=BA(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[Bs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Bs]){if(w){if(y)throw new Ei.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=En(F,i);(D==null||_w(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||_w(D,J)){let Y=En(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){hi.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,Ew.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[xt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=En(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[xt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||RR(),kn(1));let X={type:"message",value:i.encoder.encode(S),[zn]:w};return!D.hasWrittenTime&&this[xt]>F&&(F=X.newTxnTime=this[xt]+.001),i.put(y,G??null,F),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new ma(i,S.user,u)),D}else return new zu(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(F=>typeof F=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ei.ClientError(N.join(". "))}getUpdatedTime(){return this[xt]}wasLoadedFromSource(){return R?!!this[uw]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ei.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ei.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Gu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=En(y,i);L.id=F,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],F=u.get(v);if(F){let L=En(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[cw]=!0,d&&q.setTTLExpiration(d/1e3),b&&nH(),q;function je(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ja.getIndexedValues)(L);if(G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ja.getIndexedValues)(F),G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(je,"updateIndices");function Eu(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&ao(Y,"cache-hit",n),Y&&!y&&(D&&(D[uw]=!0),R))return Qo(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(Eu,"loadRecord");function Bi(){P=new Set,(0,fi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Bi,"setupCommitListeners");async function Qo(Z,S=null,N,D){if(N<0){let L;return P||Bi(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G(Qo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Qo(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;Es(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,ja.getNextMonotonicTime)());let j=je(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],Qu(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a(Qo,"getFromSource");function kn(Z){T||(T=i.get([aw,Sm.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([aw,Sm.threadId],T)},50))}a(kn,"recordDeletion");function RR(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),kn(-1)}}},q.getRecordCount()*100+Pz).unref())}a(RR,"enqueueDeletionCleanup");function gR(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),kn(-1)})}a(gR,"addDeleteRemoval");function nH(){(0,fi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){hi.error("Error in evicting old records",Z)}},Mz).unref()}a(nH,"runRecordExpirationEviction")}function mm(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 lw(){}function vz(e){fw=e}function Ql(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Bz.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zl.autoCast)(e)}function _w(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}var Yr,co,ja,dw,Sm,Za,rc,Ei,ec,tc,hi,Ew,fi,zl,fw,Dz,Lz,Mz,ow,aw,xt,cw,$ae,uw,Xa,Pz,Bz,Xl=Se(()=>{Yr=C(A()),co=require("lmdb"),ja=C(qt()),dw=require("lodash"),Sm=require("worker_threads");jr();DA();Za=C(ke()),rc=C(Q());qA();Ei=C(W()),ec=C(xs()),tc=C(Fr());de();$u();hi=C(x());ku();Qn();Ew=require("ordered-binary"),fi=C(st());ha();zl=C(V());di();Dz=1e8,Lz=1e7,Mz=6e4;rc.initSync();ow=rc.get(Yr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aw=Symbol.for("deletions"),xt=Symbol.for("version"),cw=Symbol.for("incremental-update"),$ae=Symbol("source-resource"),uw=Symbol("load-from-source"),Xa={isNotification:!0,allowInvalidated:!0},Pz=(0,zl.convertToMS)(rc.get(Yr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jl,"makeTable");a(mm,"attributesAsObject");a(lw,"noop");a(vz,"setServerUtilities");Bz=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ql,"coerceType");a(_w,"isDescendantId")});var Ne={};xe(Ne,{database:()=>xa,databases:()=>He,dropDatabase:()=>Mh,dropTableMeta:()=>kz,getDatabases:()=>xr,getTables:()=>Hz,onUpdatedTable:()=>Om,readMetaDb:()=>sc,resetDatabases:()=>qz,table:()=>nt,tables:()=>_r});function Hz(){return t_||xr(),_r||{}}function xr(){if(t_)return He;t_=!0,Eo=new Map;let e=(0,Tt.getHdbBasePath)()&&(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),t=(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,lr.existsSync)(e)?e:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,lr.existsSync)(e))for(let r of(0,lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&sc((0,Me.join)(e,r.name),null,s)}if((0,lr.existsSync)((0,_o.getBaseSchemaPath)())){for(let r of(0,lr.readdirSync)((0,_o.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,_o.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,_o.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);sc((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,lr.existsSync)(n))for(let o of(0,lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&sc((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,lr.existsSync)(u)&&sc(u,o,r,null,!0)}}for(let r in He){let s=Eo.get(r);if(s){let n=He[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete He[r],r==="data"){for(let n in _r)delete _r[n];delete _r[r_]}}return Eo=null,He}}function qz(){t_=!1;for(let[,e]of Nn)e.needsDeletion=!0;xr();for(let[e,t]of Nn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Nn.delete(e));return He}function sc(e,t,r=gm,s,n){let i=new Tm.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Nn.get(e);o?o.needsDeletion=!1:(o=(0,Zl.open)(i),Nn.set(e,o));let c=new mi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(uo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,lr.existsSync)(s)&&(i.path=s,l=(0,Zl.open)(i),l.isLegacy=!0):l=af(o));let _=pw(r),d=_[r_],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let q of T)if(q.is_hash_attribute||q.isPrimaryKey){p=q;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(lo)||0)&&u.putSync(lo,$+1):(p.tableId=$=u.get(lo),$||($=1),u.putSync(lo,$+1),u.putSync(p.key,p));let q=new mi.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,q),U.rootStore=o,U.tableId=$}for(let q of T){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let je=new mi.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,je)}let Oe=k.find(je=>je.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=Tw(_,f,Jl({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of Am)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function pw(e){let t=He[e];if(t||(e==="data"?t=He[e]=_r:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),Eo&&!Eo.has(e)){let r=new Set;t[r_]=r,Eo.set(e,r)}return t}function Tw(e,t,r){return e[t]=r,r}function xa({database:e,table:t}){e||(e=gm),xr();let r=pw(e),s=(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),n=t&&(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||((0,lr.existsSync)(s)?s:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Nn.get(i);if(!o){let c=new Tm.default(i,!1);o=(0,Zl.open)(c),Nn.set(i,o)}return o}async function Mh(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e];for(let r in t){let n=t[r].primaryStore.rootStore;Nn.delete(n.path),n.status==="open"&&(await n.close(),await hw.remove(n.path))}if(e==="data"){for(let r in _r)delete _r[r];delete _r[r_]}delete He[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=gm);let u=xa({database:t,table:e}),l=He[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new mi.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let p,R;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=af(u)),E=s.find(q=>q.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new mi.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(lo),z.tableId||(z.tableId=1),h.putSync(lo,z.tableId+1),E.tableId=z.tableId,_=Tw(l,e,Jl({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let q=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new mi.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<nc.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<nc.workerData?.restartNumber)&&(p=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(p=!0,$(),h.put(b,U))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=xz(_,k,O):p&&jl.signalSchemaChange(new e_.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of Am)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function xz(e,t,r){try{let s=e.schemaVersion;await jl.signalSchemaChange(new e_.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:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,mw.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),nc.workerData&&nc.workerData.restartNumber!==Sw.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>Fz?await n:u>Gz&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await jl.signalSchemaChange(new e_.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function kz({table:e,database:t}){let r=xa({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 Om(e){Am.push(e)}var Tt,uo,Zl,Me,lr,_o,mi,Tm,kt,hw,Rm,mw,jl,e_,nc,Le,Sw,gm,r_,_r,He,lo,Am,t_,Nn,Eo,Fz,Gz,de=Se(()=>{Tt=C(Q()),uo=C(ke()),Zl=require("lmdb"),Me=require("path"),lr=require("fs"),_o=C(we());Xl();mi=C(Zu()),Tm=C(el()),kt=C(A()),hw=C(require("fs-extra")),Rm=require("../index"),mw=C(qt()),jl=C(xs()),e_=C(Fr()),nc=require("worker_threads"),Le=C(x()),Sw=C(st());ha();gm="data",r_=Symbol("defined-tables");(0,Tt.initSync)();_r=Object.create(null),He=Object.create(null);(0,Rm._assignPackageExport)("databases",He);(0,Rm._assignPackageExport)("tables",_r);lo=Symbol.for("next-table-id"),Am=[],Nn=new Map;a(Hz,"getTables");a(xr,"getDatabases");a(qz,"resetDatabases");a(sc,"readMetaDb");a(pw,"ensureDB");a(Tw,"setTable");a(xa,"database");a(Mh,"dropDatabase");a(nt,"table");Fz=1e3,Gz=10;a(xz,"runIndexing");a(kz,"dropTableMeta");a(Om,"onUpdatedTable")});var ym={};xe(ym,{loadGQLSchema:()=>$z,start:()=>bm,startOnMainThread:()=>Vz});function bm({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let U of T.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of T.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let q of P.arguments)q.name.value==="role"&&z.push(q.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,Nm.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let p=E.get(T.type);if(!p)throw new Error(`${T.type} was not found as a Query export`);i.set((0,Nm.dirname)(s)+"/"+T.name,p.tableClass)}}}var Nm,Vz,$z,Rw=Se(()=>{Nm=require("path");de();a(bm,"start");Vz=bm,$z=bm({ensureTable:nt}).handleFile});async function s_(e){return Yz?(ic||(ic=Kz(Qz)),(await(await ic).import(e)).namespace):import(e)}async function Kz(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ic=new Compartment({console,Math,Date,fetch:Wz,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Aw.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:_r,databases:He})}};let s=await(0,gw.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ic}function Wz(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 Qz(){return{Resource:mt,tables:_r}}var gw,Aw,Yz,ic,Im=Se(()=>{jr();de();gw=require("fs/promises"),Aw=require("path"),Yz=!1;a(s_,"secureImport");a(Kz,"getCompartment");a(Wz,"secureOnlyFetch");a(Qz,"getGlobalVars")});var Cm={};xe(Cm,{handleFile:()=>zz});async function zz(e,t,r,s){let n=new Map,i=(0,Ow.pathToFileURL)(r).toString(),o=await s_(i);u(o.default)&&s.set((0,wm.dirname)(t),o.default),c(o,(0,wm.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var Ow,wm,Nw=Se(()=>{Ow=require("url");Im();wm=require("path");a(zz,"handleFile")});var Dm={};xe(Dm,{start:()=>Jz});function Jz({resources:e}){e.set("login",Um),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Um,bw=Se(()=>{jr();a(Jz,"start");Um=class extends mt{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 Mm=m((cce,ww)=>{"use strict";var{Readable:Xz}=require("stream"),Zz=1e4;ww.exports={streamAsJSON(e){return new Lm({value:e})}};var Lm=class extends Xz{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*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](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){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),yw)}catch(n){yield yw(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);Iw(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>Zz?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 Iw(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}}};function yw(e){return console.error(e),JSON.stringify(e.toString())}a(yw,"handleError");function Iw(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Iw,"when")});var n_=m((lce,Cw)=>{"use strict";var jz=Vr();Cw.exports={writeTransaction:eJ};function eJ(e,t,r){return jz.writeTransaction(e,t,r)}a(eJ,"writeTransaction")});var Mw=m((Ece,Lw)=>{"use strict";var tJ=Or(),rJ=Tn(),Uw=x(),sJ=Nr(),dce=n_(),nJ=require("clone"),vm=require("alasql"),iJ=bl(),Dw=require("util"),oJ=Dw.promisify(rJ.getTableSchema),aJ=Dw.promisify(tJ.search),cJ=A(),Pm=V();iJ(vm);Lw.exports={update:lJ};var uJ="There was a problem performing this update. Please check the logs and try again.";async function lJ({statement:e,hdb_user:t}){let r=await oJ(e.table.databaseid,e.table.tableid),s=_J(e.columns);Pm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=nJ(n),c=Pm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=vm.parse(u).statements[0],_=await aJ(l),d=dJ(s,_);return EJ(o,d,t)}a(lJ,"update");function _J(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vm.compile(`SELECT ${r.expression.toString()} AS [${cJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Uw.error(t),new Error(uJ)}}a(_J,"createUpdateRecord");function dJ(e,t){return Pm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dJ,"buildUpdateRecords");async function EJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await sJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Uw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(EJ,"updateRecords")});var vw=m((Sce,Pw)=>{var fJ=require("alasql"),hJ=Or(),mJ=x(),SJ=Vr(),Hm=require("util"),Bm=V(),pJ=A(),TJ=Tn(),hce=n_(),mce=Nr(),RJ="record",gJ="successfully deleted",AJ=Hm.callbackify(yJ),OJ=Hm.promisify(hJ.search),NJ=Hm.promisify(TJ.getTableSchema);Pw.exports={convertDelete:AJ};function bJ(e){return`${e.deleted_hashes.length} ${RJ}${e.deleted_hashes.length===1?"":"s"} ${gJ}`}a(bJ,"generateReturnMessage");async function yJ({statement:e,hdb_user:t}){let r=await NJ(e.table.databaseid,e.table.tableid);Bm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=fJ.parse(o).statements[0],u={operation:pJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await OJ(c);let l=await SJ.deleteRecords(u);return Bm.isEmptyOrZeroLength(l.message)&&(l.message=bJ(l)),delete l.txn_time,l}catch(l){throw mJ.error(l),l.hdb_code?l.message:l}}a(yJ,"convertDelete")});var Gw=m((Tce,Fw)=>{"use strict";var IJ=ni(),{hdb_errors:Bw}=W(),{getDatabases:Hw}=(de(),ee(Ne));Fw.exports={checkSchemaExists:qw,checkSchemaTableExists:wJ,schema_describe:IJ};async function qw(e){if(!Hw()[e])return Bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qw,"checkSchemaExists");async function wJ(e,t){let r=await qw(e);if(r)return r;if(!Hw()[e][t])return Bw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wJ,"checkSchemaTableExists")});var oc=m((gce,CJ)=>{CJ.exports={name:"harperdb",version:"4.2.0-alpha.13",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:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},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":"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:"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":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.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",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","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.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.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.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},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",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:"^4.9.4","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 it=m((yce,iC)=>{"use strict";var Rt=Q();Rt.initSync();var UJ=require("fs-extra"),DJ=require("semver"),lc=require("path"),{monotonicFactory:LJ}=require("ulidx"),xm=LJ(),MJ=require("util"),kw=require("child_process"),PJ=MJ.promisify(kw.exec),vJ=kw.spawn,_e=Be(),Te=A(),i_=V(),yr=x(),o_=$s(),BJ=n_(),ac=Tr(),{Encoder:HJ,decode:km}=require("msgpackr"),Vw=new HJ,{isEmpty:Si}=i_,$w=br(),Yw=12e10,qJ=48*36e11,FJ=5e9,{connect:GJ,StorageType:Kw,RetentionPolicy:Ww,AckPolicy:a_,DeliverPolicy:c_,DiscardPolicy:xJ,NatsConnection:Ace,JetStreamManager:Oce,JetStreamClient:Nce,StringCodec:bce,JSONCodec:kJ,createInbox:Vm,headers:VJ,ErrorCode:xw}=require("nats"),{PACKAGE_ROOT:$J}=A(),YJ=oc(),{recordAction:KJ}=(di(),ee(Wl)),Qw=kJ(),WJ="clustering",QJ=YJ.engines[_e.NATS_SERVER_NAME],zJ=lc.join($J,"dependencies"),Gm=lc.join(zJ,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),qm,Fm,cc,fo,ho;iC.exports={runCommand:zw,checkNATSServerInstalled:JJ,createConnection:$m,getConnection:u_,getJetStreamManager:_c,getJetStream:Jw,getNATSReferences:Vt,getServerList:ZJ,createLocalStream:Ym,listStreams:Xw,deleteLocalStream:jJ,getServerConfig:dc,listRemoteStreams:e2,viewStream:t2,viewStreamIterator:r2,publishToStream:s2,createWorkQueueStream:n2,addSourceToWorkStream:jw,request:o2,removeSourceFromWorkStream:tC,reloadNATS:Km,reloadNATSHub:a2,reloadNATSLeaf:c2,extractServerName:eC,requestErrorHandler:u2,updateWorkStream:l2,createLocalTableStream:sC,createTableStreams:_2,purgeTableStream:nC,purgeSchemaTableStreams:d2,getStreamInfo:E2,updateLocalStreams:h2,closeConnection:XJ,getJsmServerName:Ec,addNatsMsgHeader:Zw,updateIngestStreamConsumer:i2};async function zw(e,t=void 0){let{stdout:r,stderr:s}=await PJ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
8
  `,"")}a(zw,"runCommand");async function JJ(){try{await UJ.access(Gm)}catch{return!1}let e=await zw(`${Gm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return DJ.eq(t,QJ)}a(JJ,"checkNATSServerInstalled");async function $m(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await $w.getClusterUser();if(Si(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await GJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a($m,"createConnection");async function XJ(){hs&&(await hs.drain(),hs=void 0,fo=void 0,ho=void 0,uc=void 0)}a(XJ,"closeConnection");var hs,uc;async function u_(){return uc||(uc=$m(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),hs=await uc),hs||uc}a(u_,"getConnection");async function _c(){if(fo)return fo;Si(hs)&&await u_();let{domain:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Si(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fo=await hs.jetstreamManager({domain:e}),fo}a(_c,"getJetStreamManager");async function Jw(){if(ho)return ho;Si(hs)&&await u_();let{domain:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Si(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ho=hs.jetstream({domain:e}),ho}a(Jw,"getJetStream");async function Vt(){let e=hs||await u_(),t=fo||await _c(),r=ho||await Jw();return{connection:e,jsm:t,js:r}}a(Vt,"getNATSReferences");async function ZJ(e){let t=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await $w.getClusterUser(),n=await $m(t,r,s),i=Vm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=Qw.decode(_.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 i_.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(ZJ,"getServerList");async function Ym(e,t){let{jsm:r}=await Vt(),s=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Kw.File,retention:Ww.Limits,subjects:t,discard:xJ.Old,duplicate_window:Yw,max_msgs:n,max_bytes:i,max_age:s})}a(Ym,"createLocalStream");async function Xw(){let{jsm:e}=await Vt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Xw,"listStreams");async function jJ(e){let{jsm:t}=await Vt();await t.streams.delete(e)}a(jJ,"deleteLocalStream");async function e2(e){let{connection:t}=await Vt(),r=[],s=Vm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Qw.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(e2,"listRemoteStreams");async function t2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=xm(),o={durable_name:i,ack_policy:a_.Explicit};t&&(o.deliver_policy=c_.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 l=[];for await(let _ of u){let d=km(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(t2,"viewStream");async function*r2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=xm(),o={durable_name:i,ack_policy:a_.Explicit};t&&(o.deliver_policy=c_.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 l of u){let _=km(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(r2,"viewStreamIterator");async function s2(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=Zw(s,r);let{js:n}=await Vt(),i=await Ec(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Vw.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),KJ(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 rC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){yr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await Ym(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(s2,"publishToStream");function Zw(e,t){t===void 0&&(t=VJ());let r=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=i_.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${xm()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(Zw,"addNatsMsgHeader");function dc(e){e=e.toLowerCase();let t=lc.join(Rt.get(Te.CONFIG_PARAMS.ROOTPATH),WJ);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Si(Fm)&&(Fm={port:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lc.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),Fm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Si(qm)&&(qm={port:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:lc.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),qm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(dc,"getServerConfig");async function n2(e){let{jsm:t}=await Vt(),r=await Ec();try{await t.streams.add({name:e.stream_name,storage:Kw.File,retention:Ww.Limits,duplicate_window:Yw,max_age:qJ,max_bytes:FJ,subjects:[`${_e.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:a_.Explicit,durable_name:e.durable_name,deliver_policy:c_.All,max_ack_pending:1e4});else throw s}}a(n2,"createWorkQueueStream");async function i2(){let{jsm:e}=await Vt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:a_.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:c_.All,max_ack_pending:1e4}))}a(i2,"updateIngestStreamConsumer");async function jw(e,t,r){let{jsm:s}=await Vt(),n=await s.streams.info(t),i=eC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=o_.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,p=n.config.sources.length;T<p;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(jw,"addSourceToWorkStream");function eC(e){return e.split(".")[1]}a(eC,"extractServerName");async function tC(e,t,r){let{schema:s,table:n}=r,i=o_.createNatsTableStreamName(s,n),{jsm:o}=await Vt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(tC,"removeSourceFromWorkStream");async function o2(e,t,r=2e4,s=Vm()){if(!i_.isObject(t))throw new Error("data param must be an object");let n=Vw.encode(t),{connection:i}=await Vt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return km(c.data)}a(o2,"request");function Km(e){return new Promise(async(t,r)=>{let s=vJ(Gm,["--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(Km,"reloadNATS");async function a2(){let{pid_file_path:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Km(e)}a(a2,"reloadNATSHub");async function c2(){let{pid_file_path:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Km(e)}a(c2,"reloadNATSLeaf");function u2(e,t,r){let s;switch(e.code){case xw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case xw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(u2,"requestErrorHandler");async function l2(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await rC(async()=>{e.subscribe===!0?await jw(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await tC(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(l2,"updateWorkStream");function rC(e){return BJ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(rC,"exclusiveLock");async function sC(e,t){let r=o_.createNatsTableStreamName(e,t),s=await Ec(),n=f2(e,t,s);await Ym(r,[n])}a(sC,"createLocalTableStream");async function _2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await sC(s,n)}}a(_2,"createTableStreams");async function nC(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=o_.createNatsTableStreamName(e,t),{jsm:s}=await Vt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a(nC,"purgeTableStream");async function d2(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await nC(e,t[r])}a(d2,"purgeSchemaTableStreams");async function E2(e){return(await _c()).streams.info(e)}a(E2,"getStreamInfo");function f2(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(f2,"createSubjectName");async function Ec(){if(cc)return cc;if(cc=(await _c())?.nc?.info?.server_name,cc===void 0)throw new Error("Unable to get jetstream manager server name");return cc}a(Ec,"getJsmServerName");async function h2(){let e=await _c(),t=await Ec(),r=await Xw();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=m2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(h2,"updateLocalStreams");function m2(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Rt.get(Te.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(m2,"updateStreamLimits")});var E_=m((Cce,uC)=>{"use strict";var mo=cl(),So=Gw(),S2=x(),p2=require("uuid").v4,wce=require("clone"),__=xs(),po=A(),T2=require("util"),bn=Vr(),{handleHDBError:$t,hdb_errors:R2}=W(),{HDB_ERROR_MSGS:l_,HTTP_STATUS_CODES:Yt}=R2,{SchemaEventMsg:d_}=Fr(),oC=it(),{getDatabases:g2}=(de(),ee(Ne)),{transformReq:To}=V();uC.exports={createSchema:A2,createSchemaStructure:aC,createTable:O2,createTableStructure:cC,createAttribute:w2,dropSchema:N2,dropTable:b2,dropAttribute:y2,getBackup:C2};async function A2(e){let t=await aC(e);return __.signalSchemaChange(new d_(process.pid,e.operation,e.schema)),t}a(A2,"createSchema");async function aC(e){let t=mo.schema_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(To(e),!await So.checkSchemaExists(e.schema))throw $t(new Error,l_.SCHEMA_EXISTS_ERR(e.schema),Yt.BAD_REQUEST,po.LOG_LEVELS.ERROR,l_.SCHEMA_EXISTS_ERR(e.schema),!0);return await bn.createSchema(e),`database '${e.schema}' successfully created`}a(aC,"createSchemaStructure");async function O2(e){return To(e),await cC(e)}a(O2,"createTable");async function cC(e){let t=mo.create_table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(mo.validateTableResidence(e.residence),!await So.checkSchemaTableExists(e.schema,e.table))throw $t(new Error,l_.TABLE_EXISTS_ERR(e.schema,e.table),Yt.BAD_REQUEST,po.LOG_LEVELS.ERROR,l_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:p2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await bn.createTable(s,e);else throw $t(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Yt.BAD_REQUEST);else await bn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(cC,"createTableStructure");async function N2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=mo.schema_object(e),s=t??r;if(s)throw $t(s,s.message,Yt.BAD_REQUEST,void 0,void 0,!0);To(e);let n=await So.checkSchemaExists(e.schema);if(n)throw $t(new Error,n,Yt.NOT_FOUND,po.LOG_LEVELS.ERROR,n,!0);let i=await So.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await bn.dropSchema(e),__.signalSchemaChange(new d_(process.pid,e.operation,e.schema)),await oC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(N2,"dropSchema");async function b2(e){let t=mo.table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);To(e);let r=await So.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,po.LOG_LEVELS.ERROR,r,!0);return await bn.dropTable(e),await oC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(b2,"dropTable");async function y2(e){let t=mo.attribute_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);To(e);let r=await So.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,po.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $t(new Error,"You cannot drop a hash attribute",Yt.BAD_REQUEST,void 0,void 0,!0);if(po.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $t(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Yt.BAD_REQUEST,void 0,void 0,!0);try{return await bn.dropAttribute(e),I2(e),__.signalSchemaChange(new d_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw S2.error(`Got an error deleting attribute ${T2.inspect(e)}.`),s}}a(y2,"dropAttribute");function I2(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(I2,"dropAttributeFromGlobal");async function w2(e){To(e);let t=g2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $t(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Yt.BAD_REQUEST,void 0,void 0,!0);return await bn.createAttribute(e),__.signalSchemaChange(new d_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(w2,"createAttribute");function C2(e){return bn.getBackup(e)}a(C2,"getBackup")});var _C=m((Dce,lC)=>{"use strict";var{OPERATIONS_ENUM:U2}=A(),Wm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=U2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};lC.exports=Wm});var Qm=m((Pce,mC)=>{"use strict";var D2=Vr(),Mce=_C(),f_=V(),h_=A(),L2=Q(),{handleHDBError:dC,hdb_errors:M2}=W(),{HDB_ERROR_MSGS:EC,HTTP_STATUS_CODES:fC}=M2,P2=Object.values(h_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),hC="To use this operation audit log must be enabled in harperdb-config.yaml";mC.exports=v2;async function v2(e){if(f_.isEmpty(e.schema))throw new Error(EC.SCHEMA_REQUIRED_ERR);if(f_.isEmpty(e.table))throw new Error(EC.TABLE_REQUIRED_ERR);if(!L2.get(h_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw dC(new Error,hC,fC.BAD_REQUEST,h_.LOG_LEVELS.ERROR,hC,!0);let t=f_.checkSchemaTableExist(e.schema,e.table);if(t)throw dC(new Error,t,fC.NOT_FOUND,h_.LOG_LEVELS.ERROR,t,!0);if(!f_.isEmpty(e.search_type)&&P2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await D2.readAuditLog(e)}a(v2,"readAuditLog")});var pC=m((Bce,SC)=>{"use strict";var{OPERATIONS_ENUM:B2}=A(),zm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=B2.GET_BACKUP,this.schema=t,this.table=r}};SC.exports=zm});var gC=m((Gce,RC)=>{"use strict";var H2=Vr(),qce=pC(),Jm=V(),q2=A(),Fce=Q(),{handleHDBError:F2,hdb_errors:G2}=W(),{HDB_ERROR_MSGS:TC,HTTP_STATUS_CODES:x2}=G2;RC.exports=k2;async function k2(e){if(Jm.isEmpty(e.schema))throw new Error(TC.SCHEMA_REQUIRED_ERR);if(Jm.isEmpty(e.table))throw new Error(TC.TABLE_REQUIRED_ERR);let t=Jm.checkSchemaTableExist(e.schema,e.table);if(t)throw F2(new Error,t,x2.NOT_FOUND,q2.LOG_LEVELS.ERROR,t,!0);return await H2.getBackup(read_audit_log_object)}a(k2,"getBackup")});var IC=m((kce,yC)=>{var yn=require("validate.js"),OC=ve(),Ro=A(),{handleHDBError:V2,hdb_errors:$2}=W(),{HDB_ERROR_MSGS:$e,HTTP_STATUS_CODES:Y2}=$2,Xm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),K2={STRUCTURE_USER:"structure_user"},AC=Object.values(Ro.ROLE_TYPES_ENUM),W2="attribute_permissions",Q2="attribute_name",{PERMS_CRUD_ENUM:go}=Ro,z2=[W2,...Object.values(go)],NC=[go.READ,go.INSERT,go.UPDATE],J2=[Q2,...NC];function X2(e){let t=Xm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,bC(e,t)}a(X2,"addRoleValidation");function Z2(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,bC(e,t)}a(Z2,"alterRoleValidation");function j2(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,OC.validateObject(e,t)}a(j2,"dropRoleValidation");var e3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function bC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)e3.includes(s[o])||n.push(s[o]);n.length>0&&ze($e.INVALID_ROLE_JSON_KEYS(n),r);let i=OC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=t3(e);o&&ze(o,r),AC.forEach(c=>{e.permission[c]&&!yn.isBoolean(e.permission[c])&&ze($e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(AC.indexOf(o)<0){if(o===K2.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||ze($e.SCHEMA_NOT_FOUND(d),r)}continue}ze($e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze($e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){ze($e.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{z2.includes(_)||ze($e.INVALID_PERM_KEY(_),r,o,u)}),Object.values(go).forEach(_=>{yn.isDefined(l[_])?yn.isBoolean(l[_])||ze($e.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze($e.TABLE_PERM_MISSING(_),r,o,u)}),yn.isDefined(l.attribute_permissions)){if(!yn.isArray(l.attribute_permissions)){ze($e.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze($e.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!J2.includes(T)&&T!==go.DELETE&&ze($e.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!yn.isDefined(f.attribute_name)){ze($e.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze($e.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}NC.forEach(T=>{yn.isDefined(f[T])?yn.isBoolean(f[T])||ze($e.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze($e.ATTR_PERM_MISSING(T,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;ze($e.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return r3(r)}a(bC,"customValidate");yC.exports={addRoleValidation:X2,alterRoleValidation:Z2,dropRoleValidation:j2};function t3(e){let{operation:t,permission:r}=e;if(t===Ro.OPERATIONS_ENUM.ADD_ROLE||t===Ro.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 $e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ro.ROLE_TYPES_ENUM.SUPER_USER:Ro.ROLE_TYPES_ENUM.CLUSTER_USER;return $e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(t3,"validateNoSUPerms");function r3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:$e.ROLE_PERMS_ERROR,...e};return V2(new Error,s,Y2.BAD_REQUEST)}else return null}a(r3,"generateRolePermResponse");function ze(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(ze,"addPermError")});var sS=m(($ce,DC)=>{"use strict";var wC=Nr(),CC=Or(),s3=ui(),jm=IC(),eS=xs(),n3=require("uuid").v4,i3=require("util"),m_=A(),o3=V(),tS=CC.searchByValue,a3=CC.searchByHash,c3=i3.promisify(s3.delete),u3=as(),l3=Zi(),{hdb_errors:_3,handleHDBError:Ao}=W(),{HDB_ERROR_MSGS:UC,HTTP_STATUS_CODES:S_}=_3,{UserEventMsg:rS}=Fr();DC.exports={addRole:d3,alterRole:E3,dropRole:f3,listRoles:h3};function Zm(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(Zm,"scrubRoleDetails");async function d3(e){let t=jm.addRoleValidation(e);if(t)throw t;e=Zm(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 tS(r)||[])}catch(i){throw Ao(i)}if(s&&s.length>0)throw Ao(new Error,UC.ROLE_ALREADY_EXISTS(e.role),S_.CONFLICT,void 0,void 0,!0);e.id||(e.id=n3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await wC.insert(n),eS.signalUserChange(new rS(process.pid)),e=Zm(e),e}a(d3,"addRole");async function E3(e){let t=jm.alterRoleValidation(e);if(t)throw t;e=Zm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await wC.update(r)}catch(n){throw Ao(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ao(new Error,"Invalid role id",S_.BAD_REQUEST,void 0,void 0,!0);return await eS.signalUserChange(new rS(process.pid)),e}a(E3,"alterRole");async function f3(e){let t=jm.dropRoleValidation(e);if(t)throw Ao(new Error,t,S_.BAD_REQUEST,void 0,void 0,!0);let r=new l3(m_.SYSTEM_SCHEMA_NAME,m_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await a3(r));if(s.length===0)throw Ao(new Error,UC.ROLE_NOT_FOUND,S_.NOT_FOUND,void 0,void 0,!0);let n=new u3(m_.SYSTEM_SCHEMA_NAME,m_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tS(n)),o=!1;if(o3.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 c3(c),eS.signalUserChange(new rS(process.pid)),`${s[0].role} successfully deleted`}a(f3,"dropRole");async function h3(){return tS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(h3,"listRoles")});var vC=m((Kce,PC)=>{"use strict";var m3=Q(),In=require("joi"),S3=ve(),LC=require("moment"),p3=require("fs-extra"),nS=require("path"),T3=require("lodash"),fc=A(),{LOG_LEVELS:pi}=A(),R3="YYYY-MM-DD hh:mm:ss",g3=nS.resolve(__dirname,"../logs");PC.exports=function(e){return S3.validateBySchema(e,A3)};var A3=In.object({from:In.custom(MC),until:In.custom(MC),level:In.valid(pi.NOTIFY,pi.FATAL,pi.ERROR,pi.WARN,pi.INFO,pi.DEBUG,pi.TRACE),order:In.valid("asc","desc"),limit:In.number().min(1),start:In.number().min(0),log_name:In.custom(O3)});function MC(e,t){if(LC(e,LC.ISO_8601).format(R3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(MC,"validateDatetime");function O3(e,t){if(T3.invert(fc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=m3.get(fc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?fc.LOG_NAMES.HDB:e,i=n===fc.LOG_NAMES.INSTALL?nS.join(g3,fc.LOG_NAMES.INSTALL):nS.join(s,n);return p3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(O3,"validateReadLogPath")});var oS=m((Qce,HC)=>{"use strict";var p_=A(),N3=x(),b3=Q(),y3=vC(),iS=require("path"),BC=require("fs-extra"),{once:I3}=require("events"),{handleHDBError:w3,hdb_errors:C3}=W(),{PACKAGE_ROOT:U3}=A(),D3=iS.join(U3,"logs"),L3=1e3,M3=200;HC.exports=P3;async function P3(e){let t=y3(e);if(t)throw w3(t,t.message,C3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=b3.get(p_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?p_.LOG_NAMES.HDB:e.log_name,n=s===p_.LOG_NAMES.INSTALL?iS.join(D3,p_.LOG_NAMES.INSTALL):iS.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,l=e.until!==void 0,_=l?new Date(e.until):void 0,d=e.limit===void 0?L3:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,T=0;E==="desc"&&!u&&!_&&(T=Math.max(BC.statSync(n).size-(h+5)*M3,0));let p=BC.createReadStream(n,{start:T});p.on("error",b=>{N3.error(b)});let R=0,O=[],k="",$;p.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,q;for(;(q=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,je,Eu]=q,Bi=Eu.split("] ["),Qo=Bi[0],kn=Bi[1];Bi.splice(0,2),$={timestamp:je,thread:Qo,level:kn,tags:Bi,message:""},z=q.index+Oe.length}k=b.slice(z)}),p.on("end",b=>{p.destroyed||$&&($.message=k.trim(),U($))}),p.resume();function U(b){let P,z,q;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),b.level===o&&P>=z&&P<=q&&R<f?R++:b.level===o&&P>=z&&P<=q&&(wn(b,E,O),R++,R===h&&p.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(wn(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&R<f?R++:b.level===o&&P<=q&&(wn(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&R<f?R++:P>=z&&P<=q&&(wn(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(wn(b,E,O),R++,R===h&&p.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(wn(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&R<f?R++:P<=q&&R>=f&&(wn(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(wn(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await I3(p,"close"),O}a(P3,"readLog");function wn(e,t,r){t==="desc"?v3(e,r):t==="asc"?B3(e,r):r.push(e)}a(wn,"pushLineToResult");function v3(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(v3,"insertDescending");function B3(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(B3,"insertAscending")});var R_=m((jce,xC)=>{"use strict";var aS=require("joi"),{string:T_,boolean:qC,date:H3}=aS.types(),q3=ve(),{validateSchemaExists:Jce,validateTableExists:Xce,validateSchemaName:Zce}=is(),F3=A(),G3=Be(),FC=Q();FC.initSync();var x3=T_.invalid(FC.get(F3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(G3.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(),GC={operation:T_.valid("add_node","update_node"),node_name:x3,subscriptions:aS.array().items({table:T_.optional(),schema:T_.required(),subscribe:qC.required(),publish:qC.required().custom(V3),start_time:H3.iso()}).min(1).required()};function k3(e){return q3.validateBySchema(e,aS.object(GC))}a(k3,"addUpdateNodeValidator");function V3(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(V3,"checkForFalsy");xC.exports={addUpdateNodeValidator:k3,validation_schema:GC}});var VC=m((tue,kC)=>{var $3=ve(),Y3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};kC.exports=function(e){return $3.validateObject(e,Y3)}});var uS=m((rue,$C)=>{"use strict";var K3=A().OPERATIONS_ENUM,cS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=K3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$C.exports=cS});var KC=m((nue,YC)=>{"use strict";var W3={OPERATION:"operation",REFRESH:"refresh"},lS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},_S=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};YC.exports={JWTTokens:lS,TOKEN_TYPE_ENUM:W3,JWTRSAKeys:_S}});var Sc=m((oue,JC)=>{"use strict";var mc=require("jsonwebtoken"),dS=require("fs-extra"),ES=V(),Ir=A(),{handleHDBError:Kt,hdb_errors:Q3}=W(),{HTTP_STATUS_CODES:Wt,AUTHENTICATION_ERROR_MSGS:Qt}=Q3,hc=x(),WC=Bl(),mS=br(),z3=Nr().update,J3=uS(),X3=xs(),{UserEventMsg:Z3}=Fr(),Cn=Q();Cn.initSync();var fS=require("path"),{JWTTokens:j3,JWTRSAKeys:e4,TOKEN_TYPE_ENUM:g_}=KC(),t4=Cn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Cn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",r4=Cn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Cn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",A_="RS256",hS;JC.exports={createTokens:s4,validateOperationToken:i4,refreshOperationToken:n4,validateRefreshToken:zC};async function s4(e){if(ES.isEmpty(e)||typeof e!="object")throw Kt(new Error,Qt.INVALID_AUTH_OBJECT,Wt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.username))throw Kt(new Error,Qt.USERNAME_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.password))throw Kt(new Error,Qt.PASSWORD_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await mS.findAndValidateUser(e.username,e.password),!t)throw Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw hc.error(E),Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}let r=await O_(),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 QC(i,r.private_key,r.passphrase),c=await mc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:r4,algorithm:A_,subject:g_.REFRESH}),u=WC.hash(c),l=new J3(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await z3(l)}catch(E){hc.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Kt(new Error,Qt.REFRESH_TOKEN_SAVE_FAILED,Wt.INTERNAL_SERVER_ERROR);return X3.signalUserChange(new Z3(process.pid)),new j3(o,c)}a(s4,"createTokens");async function QC(e,t,r){return await mc.sign(e,{key:t,passphrase:r},{expiresIn:t4,algorithm:A_,subject:g_.OPERATION})}a(QC,"signOperationToken");async function O_(){if(hS===void 0)try{let e=fS.join(Cn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=fS.join(Cn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=fS.join(Cn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await dS.readFile(e)).toString(),n=(await dS.readFile(t)).toString(),i=(await dS.readFile(r)).toString();hS=new e4(i,n,s)}catch(e){throw hc.error(e),Kt(new Error,Qt.NO_ENCRYPTION_KEYS,Wt.INTERNAL_SERVER_ERROR)}return hS}a(O_,"getJWTRSAKeys");async function n4(e){if(!e)throw Kt(new Error,Qt.INVALID_BODY,Wt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Kt(new Error,Qt.REFRESH_TOKEN_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);await zC(e.refresh_token);let t=await O_(),r=await mc.decode(e.refresh_token);return{operation_token:await QC({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(n4,"refreshOperationToken");async function i4(e){try{let t=await O_(),r=await mc.verify(e,t.public_key,{algorithms:A_,subject:g_.OPERATION});return await mS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw hc.warn(t),t.name&&t.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}}a(i4,"validateOperationToken");async function zC(e){let t;try{let r=await O_(),s=await mc.verify(e,r.public_key,{algorithms:A_,subject:g_.REFRESH});t=await mS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw hc.warn(r),r.name&&r.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}if(!WC.validate(t.refresh_token,e))throw Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED);return t}a(zC,"validateRefreshToken")});var SS=m((uue,jC)=>{"use strict";var o4=VC(),Oo=require("passport"),a4=require("passport-local").Strategy,c4=require("passport-http").BasicStrategy,u4=require("util"),l4=br(),ZC=u4.callbackify(l4.findAndValidateUser),cue=rr(),_4=A(),XC=Sc();Oo.use(new a4(function(e,t,r){ZC(e,t,r)}));Oo.use(new c4(function(e,t,r){ZC(e,t,r)}));Oo.serializeUser(function(e,t){t(null,e)});Oo.deserializeUser(function(e,t){t(null,e)});function d4(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":Oo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===_4.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?XC.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):XC.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Oo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(d4,"authorize");function E4(e,t){let r=o4(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(E4,"checkPermissions");jC.exports={authorize:d4,checkPermissions:E4}});var No=m((_ue,eU)=>{"use strict";var pS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},TS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};eU.exports={Node:pS,NodeSubscription:TS}});var rU=m((Eue,tU)=>{"use strict";var f4=A().OPERATIONS_ENUM,RS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=f4.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tU.exports=RS});var pc=m((hue,sU)=>{"use strict";var gS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},AS=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)}};sU.exports={RemotePayloadObject:gS,RemotePayloadSubscription:AS}});var iU=m((Sue,nU)=>{"use strict";var OS=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}};nU.exports=OS});var cU=m((Aue,aU)=>{"use strict";var h4=iU(),Tue=ke(),oU=ye(),m4=x(),{getSchemaPath:Rue,getTransactionAuditStorePath:gue}=we(),{getDatabases:S4}=(de(),ee(Ne));aU.exports=p4;async function p4(e){let t=new h4;try{let r=S4()[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){m4.warn(`unable to stat table dbi due to ${r}`)}return t}a(p4,"lmdbGetTableSize")});var lU=m((Nue,uU)=>{"use strict";var NS=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}};uU.exports=NS});var bo=m((wue,fU)=>{"use strict";var T4=require("fs-extra"),R4=require("path"),Ut=require("systeminformation"),Un=x(),g4=it(),bS=Be(),b_=A(),A4=cU(),EU=ni(),{getThreadInfo:_U}=st(),vS=Q();vS.initSync();var O4=lU(),{openEnvironment:yue}=ye(),{getSchemaPath:Iue}=we(),{database:N4}=(de(),ee(Ne)),N_;fU.exports={getHDBProcessInfo:CS,getNetworkInfo:DS,getDiskInfo:US,getMemoryInfo:wS,getCPUInfo:IS,getTimeInfo:yS,getSystemInformation:LS,systemInformation:b4,getTableSize:MS,getMetrics:PS};function yS(){return Ut.time()}a(yS,"getTimeInfo");async function IS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:q,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return Un.error(`error in getCPUInfo: ${e}`),{}}}a(IS,"getCPUInfo");async function wS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Un.error(`error in getMemoryInfo: ${e}`),{}}}a(wS,"getMemoryInfo");async function CS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await T4.readFile(R4.join(vS.get(b_.CONFIG_PARAMS.ROOTPATH),b_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===b_.NODE_ERROR_CODES.ENOENT)Un.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 Un.error(`error in getHDBProcessInfo: ${t}`),e}}a(CS,"getHDBProcessInfo");async function US(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Un.error(`error in getDiskInfo: ${t}`),e}}a(US,"getDiskInfo");async function DS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Un.error(`error in getNetworkInfo: ${t}`),e}}a(DS,"getNetworkInfo");async function LS(){if(N_!==void 0)return N_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,N_=e,N_}catch(t){return Un.error(`error in getSystemInformation: ${t}`),e}}a(LS,"getSystemInformation");async function MS(){let e=[],t=await EU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await A4(s));return e}a(MS,"getTableSize");async function PS(){let e=await EU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=N4({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){Un.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(PS,"getMetrics");async function dU(){if(vS.get(b_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await g4.getNATSReferences(),r=await t.streams.info(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name,bS.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(dU,"getNatsStreamInfo");async function b4(e){let t=new O4;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LS(),t.time=yS(),t.cpu=await IS(),t.memory=await wS(),t.disk=await US(),t.network=await DS(),t.harperdb_processes=await CS(),t.table_size=await MS(),t.metrics=await PS(),t.threads=await _U(),t.replication=await dU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LS();break;case"time":t.time=yS();break;case"cpu":t.cpu=await IS();break;case"memory":t.memory=await wS();break;case"disk":t.disk=await US();break;case"network":t.network=await DS();break;case"harperdb_processes":t.harperdb_processes=await CS();break;case"table_size":t.table_size=await MS();break;case"database_metrics":case"metrics":t.metrics=await PS();break;case"threads":t.threads=await _U();break;case"replication":t.replication=await dU();break;default:break}return t}a(b4,"systemInformation")});var BS=m((Lue,hU)=>{"use strict";var Uue=require("fs-extra"),Due=x();hU.exports={version:y4,printVersion:w4,nodeVersion:I4};var Dn=oc();function y4(){if(Dn)return Dn.version}a(y4,"version");function I4(){if(Dn&&Dn.engines&&Dn.engines["preferred-node"])return Dn.engines["preferred-node"]}a(I4,"nodeVersion");function w4(){Dn&&console.log(`HarperDB Version ${Dn.version}`)}a(w4,"printVersion")});var Ys=m((Bue,TU)=>{"use strict";var C4=Nr(),HS=V(),U4=require("util"),Ti=A(),mU=Q();mU.initSync();var D4=SS(),SU=Or(),{Node:Pue,NodeSubscription:vue}=No(),L4=Zi(),M4=rU(),{RemotePayloadObject:P4,RemotePayloadSubscription:v4}=pc(),{handleHDBError:B4,hdb_errors:H4}=W(),{HTTP_STATUS_CODES:q4,HDB_ERROR_MSGS:F4}=H4,G4=as(),x4=bo(),k4=BS(),{getDatabases:V4}=(de(),ee(Ne)),$4=U4.promisify(D4.authorize),Y4=SU.searchByHash,K4=SU.searchByValue;TU.exports={authHeaderToUser:W4,isEmpty:Q4,getNodeRecord:z4,upsertNodeRecord:J4,buildNodePayloads:X4,checkClusteringEnabled:Z4,getAllNodeRecords:j4,getSystemInfo:eX,reverseSubscription:pU};async function W4(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await $4(t,null),e}a(W4,"authHeaderToUser");function Q4(e){return e==null}a(Q4,"isEmpty");async function z4(e){let t=new L4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Y4(t)}a(z4,"getNodeRecord");async function J4(e){let t=new M4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return C4.upsert(t)}a(J4,"upsertNodeRecord");function pU(e){if(HS.isEmpty(e.subscribe)||HS.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(pU,"reverseSubscription");function X4(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=HS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=pU(c),f=V4()[u]?.[l],h=new v4(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new P4(r,t,n,s)}a(X4,"buildNodePayloads");function Z4(){if(!mU.get(Ti.CONFIG_PARAMS.CLUSTERING_ENABLED))throw B4(new Error,F4.CLUSTERING_NOT_ENABLED,q4.BAD_REQUEST,void 0,void 0,!0)}a(Z4,"checkClusteringEnabled");async function j4(){let e=new G4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await K4(e))}a(j4,"getAllNodeRecords");async function eX(){let e=await x4.getSystemInformation();return{hdb_version:k4.version(),node_version:e.node_version,platform:e.platform}}a(eX,"getSystemInfo")});var qS=m((que,IU)=>{"use strict";var y_=it(),RU=V(),gU=Be(),AU=A(),I_=x(),OU=E_(),tX=Eh(),{RemotePayloadObject:rX}=pc(),{handleHDBError:NU,hdb_errors:sX}=W(),{HTTP_STATUS_CODES:bU}=sX,{NodeSubscription:yU}=No();IU.exports=nX;async function nX(e,t){let r;try{r=await y_.request(`${t}.${gU.REQUEST_SUFFIX}`,new rX(AU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),I_.trace("Response from remote describe all request:",r)}catch(o){I_.error(`addNode received error from describe all request to remote node: ${o}`);let c=y_.requestErrorHandler(o,"add_node",t);throw NU(new Error,c,bU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===gU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw NU(new Error,o,bU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===AU.SYSTEM_SCHEMA_NAME){await y_.createLocalTableStream(c,u);let h=new yU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=RU.doesSchemaExist(c),_=s[c]!==void 0,d=u?RU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(I_.trace(`addNode creating schema: ${c}`),await OU.createSchema({operation:"create_schema",schema:c})),!d&&E){I_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new tX(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await OU.createTable(h)}await y_.createLocalTableStream(c,u);let f=new yU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(nX,"reviewSubscriptions")});var U_=m((Gue,UU)=>{"use strict";var{handleHDBError:w_,hdb_errors:iX}=W(),{HTTP_STATUS_CODES:C_}=iX,{addUpdateNodeValidator:oX}=R_(),Tc=x(),CU=A(),wU=Be(),aX=V(),FS=it(),Rc=Ys(),cX=Q(),uX=qS(),{Node:lX,NodeSubscription:_X}=No(),{broadcast:dX}=st(),EX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",fX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hX=cX.get(CU.CONFIG_PARAMS.CLUSTERING_NODENAME);UU.exports=mX;async function mX(e,t=!1){Tc.trace("addNode called with:",e),Rc.checkClusteringEnabled();let r=oX(e);if(r)throw w_(r,r.message,C_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Rc.getNodeRecord(s);if(!aX.isEmptyOrZeroLength(d))throw w_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,C_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await uX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=EX,o;let c=Rc.buildNodePayloads(n,hX,CU.OPERATIONS_ENUM.ADD_NODE,await Rc.getSystemInfo());Tc.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${wU.REQUEST_SUFFIX}`,c)}catch(d){Tc.error(`addNode received error from request: ${d}`);let E=FS.requestErrorHandler(d,"add_node",s);throw w_(new Error,E,C_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===wU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw w_(new Error,d,C_.INTERNAL_SERVER_ERROR,"error",d)}Tc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Tc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await FS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new _X(f.schema,f.table,f.publish,f.subscribe))}let _=new lX(s,l,u.system_info);return await Rc.upsertNodeRecord(_),dX({type:"nats_update"}),i.length>0?o.message=fX:o.message=`Successfully added '${s}' to manifest`,o}a(mX,"addNode")});var xS=m((kue,MU)=>{"use strict";var{handleHDBError:D_,hdb_errors:SX}=W(),{HTTP_STATUS_CODES:L_}=SX,{addUpdateNodeValidator:pX}=R_(),gc=x(),LU=A(),DU=Be(),TX=V(),GS=it(),Ac=Ys(),RX=Q(),{cloneDeep:gX}=require("lodash"),AX=qS(),{NodeSubscription:OX}=No(),{broadcast:NX}=st(),bX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",yX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",IX=RX.get(LU.CONFIG_PARAMS.CLUSTERING_NODENAME);MU.exports=wX;async function wX(e){gc.trace("updateNode called with:",e),Ac.checkClusteringEnabled();let t=pX(e);if(t)throw D_(t,t.message,L_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=gX(await Ac.getNodeRecord(r));if(TX.isEmptyOrZeroLength(s))throw D_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,L_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await AX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=bX,o;let c=Ac.buildNodePayloads(n,IX,LU.OPERATIONS_ENUM.UPDATE_NODE,await Ac.getSystemInfo());gc.trace("updateNode sending remote payload:",c);let u;try{u=await GS.request(`${r}.${DU.REQUEST_SUFFIX}`,c)}catch(l){gc.error(`updateNode received error from request: ${l}`);let _=GS.requestErrorHandler(l,"update_node",r);throw D_(new Error,_,L_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===DU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw D_(new Error,l,L_.INTERNAL_SERVER_ERROR,"error",l)}gc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];gc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await GS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await CX(s[0],n,u.system_info),i.length>0?o.message=yX:o.message=`Successfully updated '${r}'`,o}a(wX,"updateNode");async function CX(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,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new OX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Ac.upsertNodeRecord(s),NX({type:"nats_update"})}a(CX,"updateNodeTable")});var qU=m(($ue,HU)=>{"use strict";var BU=require("joi"),{string:PU}=BU.types(),UX=ve(),vU=A(),DX=Q(),LX=Be();HU.exports=MX;function MX(e){let t=PU.invalid(DX.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(LX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=BU.object({operation:PU.valid(vU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return UX.validateBySchema(e,r)}a(MX,"removeNodeValidator")});var P_=m((Kue,$U)=>{"use strict";var{handleHDBError:FU,hdb_errors:PX}=W(),{HTTP_STATUS_CODES:GU}=PX,vX=qU(),Oc=x(),xU=Ys(),BX=V(),M_=A(),kU=Be(),VU=it(),HX=Q(),{RemotePayloadObject:qX}=pc(),{NodeSubscription:FX}=No(),GX=Ha(),xX=ui(),{broadcast:kX}=st(),VX=HX.get(M_.CONFIG_PARAMS.CLUSTERING_NODENAME);$U.exports=$X;async function $X(e){Oc.trace("removeNode called with:",e),xU.checkClusteringEnabled();let t=vX(e);if(t)throw FU(t,t.message,GU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await xU.getNodeRecord(r);if(BX.isEmptyOrZeroLength(s))throw FU(new Error,`Node '${r}' was not found.`,GU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new qX(M_.OPERATIONS_ENUM.REMOVE_NODE,VX,[]),i,o=!1;try{i=await VU.request(`${r}.${kU.REQUEST_SUFFIX}`,n),Oc.trace("Remove node reply from remote node:",r,i)}catch(u){Oc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Oc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new FX(_.schema,_.table,!1,!1);await VU.updateWorkStream(d,r)}let c=new GX(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xX.deleteRecord(c),kX({type:"nats_update"}),i?.status===kU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Oc.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($X,"removeNode")});var WU=m((Que,KU)=>{"use strict";var YU=require("joi"),{string:YX,array:KX}=YU.types(),WX=ve(),QX=R_();KU.exports=zX;function zX(e){let t=YU.object({operation:YX.valid("configure_cluster").required(),connections:KX.items(QX.validation_schema).required()});return WX.validateBySchema(e,t)}a(zX,"configureClusterValidator")});var kS=m((Jue,ZU)=>{"use strict";var JX=A(),v_=x(),XX=V(),ZX=P_(),jX=U_(),QU=Ys(),eZ=WU(),{handleHDBError:zU,hdb_errors:tZ}=W(),{HTTP_STATUS_CODES:JU}=tZ,rZ="Configure cluster complete.",sZ="Failed to configure the cluster. Check the logs for more details.",nZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";ZU.exports=iZ;async function iZ(e){v_.trace("configure cluster called with:",e),QU.checkClusteringEnabled();let t=eZ(e);if(t)throw zU(t,t.message,JU.BAD_REQUEST,void 0,void 0,!0);let r=await QU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(XU(ZX,{operation:JX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);v_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(XU(jX,f,f.node_name))}let c=await Promise.allSettled(i);v_.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(v_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(XX.isEmptyOrZeroLength(u))return{message:rZ,connections:l};if(_)return{message:nZ,failed_nodes:u,connections:l};throw zU(new Error,sZ,JU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(iZ,"configureCluster");async function XU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(XU,"functionWrapper")});var eD=m((Zue,jU)=>{"use strict";var B_=require("joi"),oZ=ve(),{validateSchemaExists:aZ,validateTableExists:cZ,validateSchemaName:uZ}=is(),lZ=B_.object({operation:B_.string().valid("purge_stream"),schema:B_.string().custom(aZ).custom(uZ).required(),table:B_.string().custom(cZ).required()});function _Z(e){return oZ.validateBySchema(e,lZ)}a(_Z,"purgeStreamValidator");jU.exports=_Z});var VS=m((ele,tD)=>{"use strict";var{handleHDBError:dZ,hdb_errors:EZ}=W(),{HTTP_STATUS_CODES:fZ}=EZ,hZ=eD(),mZ=it(),SZ=Ys();tD.exports=pZ;async function pZ(e){let t=hZ(e);if(t)throw dZ(t,t.message,fZ.BAD_REQUEST,void 0,void 0,!0);SZ.checkClusteringEnabled();let{schema:r,table:s}=e;return await mZ.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(pZ,"purgeStream")});var KS=m((rle,aD)=>{"use strict";var YS=Ys(),TZ=it(),nD=Q(),H_=A(),Ri=Be(),RZ=V(),$S=x(),{RemotePayloadObject:gZ}=pc(),{ErrorCode:rD}=require("nats"),sD=nD.get(H_.CONFIG_PARAMS.CLUSTERING_ENABLED),iD=nD.get(H_.CONFIG_PARAMS.CLUSTERING_NODENAME);aD.exports={clusterStatus:AZ,buildNodeStatus:oD};async function AZ(){let e={node_name:iD,is_enabled:sD,connections:[]};if(!sD)return e;let t=await YS.getAllNodeRecords();if(RZ.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(oD(t[s],e.connections));return await Promise.allSettled(r),e}a(AZ,"clusterStatus");async function oD(e,t){let r=e.name,s=new gZ(H_.OPERATIONS_ENUM.CLUSTER_STATUS,iD,void 0,await YS.getSystemInfo()),n,i,o=Ri.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await TZ.request(Ri.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ri.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ri.CLUSTER_STATUS_STATUSES.CLOSED,$S.error(`Error getting node status from ${r} `,n))}catch(u){$S.warn(`Error getting node status from ${r}`,u),u.code===rD.NoResponders?o=Ri.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===rD.Timeout?o=Ri.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ri.CLUSTER_STATUS_STATUSES.CLOSED}let c=new OZ(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!==H_.PRE_4_0_0_VERSION&&await YS.upsertNodeRecord(u)}catch(u){$S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(oD,"buildNodeStatus");function OZ(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(OZ,"NodeStatusObject")});var QS=m((nle,cD)=>{"use strict";var{handleHDBError:NZ,hdb_errors:bZ}=W(),{HTTP_STATUS_CODES:yZ}=bZ,IZ=it(),wZ=Ys(),WS=V(),q_=require("joi"),CZ=ve(),UZ=2e3,DZ=q_.object({timeout:q_.number().min(1),connected_nodes:q_.boolean(),routes:q_.boolean()});cD.exports=LZ;async function LZ(e){wZ.checkClusteringEnabled();let t=CZ.validateBySchema(e,DZ);if(t)throw NZ(t,t.message,yZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||WS.autoCastBoolean(s),o=n===void 0||WS.autoCastBoolean(n),c={nodes:[]},u=await IZ.getServerList(r??UZ),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:WS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(LZ,"clusterNetwork")});var dD=m((ole,_D)=>{"use strict";var zS=require("joi"),uD=ve(),{route_constraints:lD}=kE();_D.exports={setRoutesValidator:MZ,deleteRoutesValidator:PZ};function MZ(e){let t=zS.object({server:zS.valid("hub","leaf").required(),routes:lD.required()});return uD.validateBySchema(e,t)}a(MZ,"setRoutesValidator");function PZ(e){let t=zS.object({routes:lD.required()});return uD.validateBySchema(e,t)}a(PZ,"deleteRoutesValidator")});var XS=m((cle,mD)=>{"use strict";var gi=Tr(),JS=V(),F_=A(),ED=dD(),{handleHDBError:fD,hdb_errors:vZ}=W(),{HTTP_STATUS_CODES:hD}=vZ,BZ="cluster routes successfully set",HZ="cluster routes successfully deleted";mD.exports={setRoutes:qZ,getRoutes:FZ,deleteRoutes:GZ};function qZ(e){let t=ED.setRoutesValidator(e);if(t)throw fD(t,t.message,hD.BAD_REQUEST,void 0,void 0,!0);let r=gi.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 l=e.routes[c];l.port=JS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:BZ,set:o,skipped:i}}a(qZ,"setRoutes");function FZ(){let e=gi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(FZ,"getRoutes");function GZ(e){let t=ED.deleteRoutesValidator(e);if(t)throw fD(t,t.message,hD.BAD_REQUEST,void 0,void 0,!0);let r=gi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=JS.isEmptyOrZeroLength(s)?null:s,gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=JS.isEmptyOrZeroLength(n)?null:n,gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:HZ,deleted:i,skipped:o}}a(GZ,"deleteRoutes")});var pD=m((lle,SD)=>{"use strict";var Nc=require("alasql"),Ai=require("recursive-iterator"),Kr=x(),xZ=V(),bc=A(),ZS=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,VZ(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=>bc.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=>!bc.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][bc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=kZ(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!bc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Nc.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function kZ(e){return e.filter(t=>t[bc.PERMS_CRUD_ENUM.READ])}a(kZ,"filterReadRestrictedAttrs");function VZ(e,t,r,s,n){$Z(e,t,r,s,n)}a(VZ,"interpretAST");function yc(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(yc,"addSchemaTableToMap");function $Z(e,t,r,s,n){if(!e){Kr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Nc.yy.Insert?QZ(e,t,r):e instanceof Nc.yy.Select?YZ(e,t,r,s,n):e instanceof Nc.yy.Update?KZ(e,t,r):e instanceof Nc.yy.Delete?WZ(e,t,r):Kr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a($Z,"getRecordAttributesAST");function YZ(e,t,r,s,n){if(!e){Kr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(xZ.isEmptyOrZeroLength(i)){Kr.error("No schema specified");return}e.from.forEach(c=>{yc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),yc(c.table,t,r,s,n)});let o=new Ai(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Kr.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new Ai(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Kr.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Ai(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Kr.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new Ai(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Kr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(YZ,"getSelectAttributes");function KZ(e,t,r){if(!e){Kr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ai(e.columns),n=e.table.databaseid;yc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(KZ,"getUpdateAttributes");function WZ(e,t,r){if(!e){Kr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ai(e.where),n=e.table.databaseid;yc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(WZ,"getDeleteAttributes");function QZ(e,t,r){if(!e){Kr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ai(e.columns),n=e.into.databaseid;yc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.into.tableid,n,i.columnid,t,r)}a(QZ,"getInsertAttributes");function jS(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(jS,"pushAttribute");SD.exports=ZS});var rp=m((dle,AD)=>{var G_=Ka(),TD=require("chalk"),dr=x(),RD=require("prompt"),{promisify:zZ}=require("util"),ep=A(),JZ=require("fs-extra"),XZ=require("path"),ZZ=V(),jZ=BS(),gD=Q();gD.initSync();var ej=require("moment"),tj=zZ(RD.get),rj=XZ.join(gD.getHdbBasePath(),ep.LICENSE_KEY_DIR_NAME,ep.LICENSE_FILE_NAME,ep.LICENSE_FILE_NAME);AD.exports={getFingerprint:nj,setLicense:sj,parseLicense:tp,register:ij,getRegistrationInfo:aj};async function sj(e){if(e&&e.key&&e.company){try{dr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tp(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dr.error(r),dr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(sj,"setLicense");async function nj(){let e={};try{e=await G_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dr.error(r),dr.error(t),new Error(r)}return e}a(nj,"getFingerprint");async function tp(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dr.info("Validating license input...");let r=G_.validateLicense(e,t);if(dr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dr.info("writing license to disk"),await JZ.writeFile(rj,JSON.stringify({license_key:e,company:t}))}catch(s){throw dr.error("Failed to write License"),s}return"Registration successful."}a(tp,"parseLicense");async function ij(){let e=await oj();return tp(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(ij,"register");async function oj(){let e=await G_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{RD.start()}catch(s){dr.error(s)}let r;try{r=await tj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(oj,"promptForRegistration");async function aj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await G_.getLicense()}catch(r){throw dr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(ZZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=jZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=ej.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(aj,"getRegistrationInfo")});var ND=m((fle,OD)=>{"use strict";var cj=Be(),sp=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+cj.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:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};OD.exports=sp});var ID=m((mle,yD)=>{"use strict";var bD=Be(),np=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+bD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+bD.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,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"}};yD.exports=np});var CD=m((ple,wD)=>{"use strict";var ip=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wD.exports=ip});var DD=m((Rle,UD)=>{"use strict";var uj=Be(),op=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+uj.SERVER_SUFFIX.ADMIN,this.password=r}};UD.exports=op});var up=m((Ale,PD)=>{"use strict";var Ic=require("path"),$_=require("fs-extra"),lj=ND(),_j=ID(),dj=CD(),Ej=DD(),ap=br(),yo=V(),zt=Tr(),V_=A(),x_=Be(),{CONFIG_PARAMS:Je}=V_,Cc=x(),Y_=Q(),LD=$s(),cp=it(),wc="clustering",fj=1e4,MD=5;PD.exports={generateNatsConfig:hj,removeNatsConfig:mj};async function hj(e=!1,t=void 0){Y_.initSync();let r=Y_.get(Je.ROOTPATH),s=Ic.join(r,wc,x_.PID_FILES.HUB),n=Ic.join(r,wc,x_.PID_FILES.LEAF),i=zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ic.join(r,wc,x_.NATS_CONFIG_FILES.HUB_SERVER),c=Ic.join(r,wc,x_.NATS_CONFIG_FILES.LEAF_SERVER),u=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=zt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=zt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=zt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=zt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cp.checkNATSServerInstalled()||K_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await ap.listUsers(),p=zt.getConfigFromFile(Je.CLUSTERING_USER),R=await ap.getClusterUser();(yo.isEmpty(R)||R.active!==!0)&&K_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await k_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await k_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await k_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await k_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,je]of T.entries())je.role.role===V_.ROLE_TYPES_ENUM.CLUSTER_USER&&je.active&&(O.push(new Ej(je.username,LD.decrypt(je.hash))),k.push(new dj(je.username,LD.decrypt(je.hash))));let $=[],{hub_routes:U}=zt.getClusteringRoutes();if(!yo.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new lj(zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=yo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===V_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await $_.writeJson(o,b),Cc.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=new _j(zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===V_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await $_.writeJson(c,q),Cc.trace(`Leaf server config written to ${c}`))}a(hj,"generateNatsConfig");async function k_(e){let t=Y_.get(e);return yo.isEmpty(t)&&K_(`port undefined for '${e}'`),await yo.isPortTaken(t)&&K_(`'${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(k_,"isPortAvailable");function K_(e){let t=`Error generating clustering config: ${e}`;Cc.error(t),console.error(t),process.exit(1)}a(K_,"generateNatsConfigError");async function mj(e){let{port:t,config_file:r}=cp.getServerConfig(e),{username:s,decrypt_hash:n}=await ap.getClusterUser(),i=0,o=500;for(;i<MD;){try{let l=await cp.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Cc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=MD)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await yo.async_set_timeout(o*i)}let c="0".repeat(fj),u=Ic.join(Y_.get(Je.ROOTPATH),wc,r);await $_.writeFile(u,c),await $_.remove(u),Cc.notify(e,"started.")}a(mj,"removeNatsConfig")});var GD=m((Nle,FD)=>{"use strict";var Er=Q(),Sj=Ka(),oe=A(),Uc=Be(),Ks=require("path"),{PACKAGE_ROOT:Q_}=A(),vD=Q(),W_=V(),Io="/dev/null",pj=Ks.join(Q_,"launchServiceScripts"),BD=Ks.join(Q_,"utility/scripts"),Tj=Ks.join(BD,oe.HDB_RESTART_SCRIPT),HD=Ks.resolve(Q_,"dependencies",`${process.platform}-${process.arch}`,Uc.NATS_BINARY_NAME);function qD(){let t=Sj.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return W_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=W_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Q_}}a(qD,"generateMainServerConfig");var Rj=9930;function gj(){Er.initSync(!0);let e=Er.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",Uc.NATS_CONFIG_FILES.HUB_SERVER),r=Ks.join(Er.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=vD.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Uc.LOG_LEVEL_FLAGS[Er.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Rj?"-"+s:""),script:HD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Io,i.error_file=Io),i}a(gj,"generateNatsHubServerConfig");var Aj=9940;function Oj(){Er.initSync(!0);let e=Er.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",Uc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ks.join(Er.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=vD.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Uc.LOG_LEVEL_FLAGS[Er.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Aj?"-"+s:""),script:HD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Io,i.error_file=Io),i}a(Oj,"generateNatsLeafServerConfig");function Nj(){Er.initSync();let e=Ks.join(Er.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:pj,autorestart:!1};return Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Io,t.error_file=Io),t}a(Nj,"generateClusteringUpgradeV4ServiceConfig");function bj(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return W_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=W_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BD},script:Tj}}a(bj,"generateRestart");function yj(){return{apps:[qD()]}}a(yj,"generateAllServiceConfigs");FD.exports={generateAllServiceConfigs:yj,generateMainServerConfig:qD,generateRestart:bj,generateNatsHubServerConfig:gj,generateNatsLeafServerConfig:Oj,generateClusteringUpgradeV4ServiceConfig:Nj}});var tL=m((Dle,eL)=>{"use strict";var Re=A(),Ij=V(),Dc=up(),Lc=it(),ms=Be(),Ln=GD(),z_=Q(),Ws=x(),wj=Ys(),{startWorker:xD,onMessageFromWorkers:Cj}=st(),Uj=bo(),Dj=require("util"),VD=require("child_process"),{execFile:Lj}=VD,yle=Dj.promisify(VD.exec),Ile=require("systeminformation"),fe;eL.exports={enterPM2Mode:Mj,start:Oi,stop:lp,reload:$D,restart:YD,list:_p,describe:WD,connect:Qs,kill:qj,startAllServices:Fj,startService:dp,getUniqueServicesList:QD,restartAllServices:Gj,isServiceRegistered:zD,reloadStopStart:JD,restartHdb:KD,deleteProcess:Bj,startClusteringProcesses:ZD,startClusteringThreads:jD,isHdbRestartRunning:Hj,isClusteringRunning:kj,stopClustering:xj,reloadClustering:Vj};var{PACKAGE_ROOT:wle}=A(),Cle=A(),{loggerWithTag:Ule}=Ws,Mc=!1;Cj(e=>{e.type==="restart"&&z_.initSync(!0)});function Mj(){Mc=!0}a(Mj,"enterPM2Mode");function Qs(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ws.setupConsoleLogging(),r&&t(r),e(s)})})}a(Qs,"connect");var Jt,Pj=10,kD;function Oi(e){if(Mc)return vj(e);let t=Lj(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Jt.indexOf(t);i>-1&&Jt.splice(i,1),!kD&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Pj&&Oi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=z_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ms.LOG_LEVEL_HIERARCHY[i]>=ms.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ms.LOG_LEVELS.ERR||l===ms.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ms.LOG_LEVELS[d]}if(ms.LOG_LEVEL_HIERARCHY[i]>=ms.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ms.LOG_LEVELS.ERR||l===ms.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Jt){Jt=[];let n=a(()=>{kD=!0,Jt&&(Jt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Jt.push(t)}a(Oi,"start");function vj(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(vj,"startWithPM2");function lp(e){if(!Mc){for(let t of Jt||[])t.name===e&&(Jt.splice(Jt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(lp,"stop");function $D(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a($D,"reload");function YD(e){if(!Mc)for(let t of Jt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(YD,"restart");function Bj(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(Bj,"deleteProcess");async function KD(){await Oi(Ln.generateRestart())}a(KD,"restartHdb");async function Hj(){let e=await _p();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Hj,"isHdbRestartRunning");function _p(){return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(_p,"list");function WD(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(WD,"describe");function qj(){if(!Mc){for(let e of Jt||[])e.kill();Jt=[];return}return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(qj,"kill");async function Fj(){try{await ZD(),await jD(),await Oi(Ln.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(Fj,"startAllServices");async function dp(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Ln.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Ln.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Ln.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Ln.generateNatsHubServerConfig(),await Oi(t),await Dc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Ln.generateNatsLeafServerConfig(),await Oi(t),await Dc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Ln.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(t)}catch(t){throw fe.disconnect(),t}}a(dp,"startService");async function QD(){try{let e=await _p(),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 fe.disconnect(),e}}a(QD,"getUniqueServicesList");async function Gj(e=[]){try{let t=!1,r=await QD();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await YD(o))}t&&await JD(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(Gj,"restartAllServices");async function zD(e){if(Jt?.find(r=>r.name===e))return!0;let t=await Uj.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(zD,"isServiceRegistered");async function JD(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?z_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):z_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await WD(e),s=Ij.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await lp(e),await dp(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await KD():await $D(e)}a(JD,"reloadStopStart");var XD;async function ZD(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await dp(t)}}a(ZD,"startClusteringProcesses");async function jD(){XD=xD(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Lc.createWorkQueueStream(ms.WORK_QUEUE_CONSUMER_NAMES),await Lc.updateIngestStreamConsumer(),await Lc.updateLocalStreams();let e=await wj.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ws.info("Starting clustering upgrade 4.0.0 process"),xD(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(jD,"startClusteringThreads");async function xj(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await XD.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await lp(t)}}a(xj,"stopClustering");async function kj(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await zD(t)===!1)return!1}return!0}a(kj,"isClusteringRunning");async function Vj(){await Dc.generateNatsConfig(!0),await Lc.reloadNATSHub(),await Lc.reloadNATSLeaf(),await Dc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Dc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Vj,"reloadClustering")});var Tp=m((Mle,aL)=>{"use strict";var $j=require("minimist"),{isMainThread:hp,parentPort:nL}=require("worker_threads"),qe=A(),{PROCESS_DESCRIPTORS_VALIDATE:Pc}=qe,Ss=x(),mp=V(),J_=up(),wo=it(),Ep=Be(),iL=Tr(),ps=tL(),rL=bo(),Yj=wE(),{restartWorkers:X_,onMessageByType:Kj}=st(),{handleHDBError:Wj,hdb_errors:Qj}=W(),{HTTP_STATUS_CODES:zj}=Qj,Z_=Q();Z_.initSync();var vc=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,Jj="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",sL="Clustering is not enabled so cannot be restarted",Xj="Invalid service",Ni,Wr;aL.exports={restart:oL,restartService:Sp};hp&&Kj(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?Sp({service:e.workerType}):oL({operation:"restart"})});async function oL(e){Wr=Object.keys(e).length===0,Ni=await ps.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=$j(process.argv);if(t.service){await Sp(t);return}if(Wr&&!Ni){console.error(Jj);return}if(Wr&&console.log(vc),Ni){ps.enterPM2Mode(),Ss.notify(vc);let r=Yj(Object.keys(qe.CONFIG_PARAM_MAP),!0);return mp.isEmptyOrZeroLength(Object.keys(r))||iL.updateConfigValue(void 0,void 0,r,!0,!0),jj(),vc}return hp?(Ss.notify(vc),await pp(),setTimeout(()=>{X_()},50)):nL.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),vc}a(oL,"restart");async function Sp(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Wj(new Error,Xj,zj.BAD_REQUEST,void 0,void 0,!0);if(Ni=await ps.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!hp)return nL.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Pc.clustering:if(!Z_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=sL;break}Wr&&console.log("Restarting clustering"),Ss.notify("Restarting clustering"),await pp();break;case Pc.clustering_config:case Pc["clustering config"]:if(!Z_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=sL;break}Wr&&console.log("Restarting clustering_config"),Ss.notify("Restarting clustering_config"),await ps.reloadClustering();break;case"custom_functions":case"custom functions":case Pc.harperdb:case Pc.http_workers:if(Wr&&!Ni){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}Wr&&console.log("Restarting http_workers"),Ss.notify("Restarting http_workers"),Ni?await ps.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{X_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ss.error(r),Wr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Sp,"restartService");async function Zj(){await wo.publishToStream(`${Ep.SUBJECT_PREFIXES.TXN}.${Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name,wo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Zj,"postDummyNatsMsg");async function jj(){await pp(),await ps.restart(qe.HDB_PROC_DESCRIPTOR),await mp.async_set_timeout(2e3),Z_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await fp(),Wr&&(await wo.closeConnection(),process.exit(0))}a(jj,"restartPM2Mode");async function pp(){if(!iL.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await rL.getHDBProcessInfo()).clustering.length===0)Ss.trace("Clustering not running, restart will start clustering services"),await J_.generateNatsConfig(!0),await ps.startClusteringProcesses(),await ps.startClusteringThreads(),await fp(),Wr&&await wo.closeConnection();else{await Zj(),await J_.generateNatsConfig(!0),Ni?(Ss.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ps.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ps.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await rL.getHDBProcessInfo()).clustering.forEach(n=>{Ss.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await mp.async_set_timeout(3e3),await fp(),await wo.updateLocalStreams(),Wr&&await wo.closeConnection(),Ss.trace("Restart clustering restarting ingest and reply service threads");let t=X_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=X_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pp,"restartClustering");async function fp(){await J_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await J_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(fp,"removeNatsConfig")});var pL=m((Ble,SL)=>{"use strict";var vle=require("lodash"),Xt=A(),{handleHDBError:cL,hdb_errors:e5}=W(),{HDB_ERROR_MSGS:t5,HTTP_STATUS_CODES:r5}=e5,Rp=x();SL.exports={getRolePermissions:n5};var bi=Object.create(null),s5=a(e=>({key:e,perms:{}}),"perms_template_obj"),dL=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),EL=a((e=!1,t=!1,r=!1,s=!1)=>({[Xt.PERMS_CRUD_ENUM.READ]:e,[Xt.PERMS_CRUD_ENUM.INSERT]:t,[Xt.PERMS_CRUD_ENUM.UPDATE]:r,[Xt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),gp=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...EL(t,r,s,n)}),"table_perms_template"),uL=a((e,t=EL())=>({attribute_name:e,describe:mL(t),[Bc]:t[Bc],[Ap]:t[Ap],[Op]:t[Op]}),"attr_perms_template"),lL=a((e,t=!1)=>({attribute_name:e,describe:t,[Bc]:t}),"timestamp_attr_perms_template"),{READ:Bc,INSERT:Ap,UPDATE:Op}=Xt.PERMS_CRUD_ENUM,fL=Object.values(Xt.PERMS_CRUD_ENUM),hL=[Bc,Ap,Op];function n5(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[Xt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(bi[t]&&bi[t].key===s)return bi[t].perms;let n=i5(e,r);return bi[t]?bi[t].key=s:bi[t]=s5(s),bi[t].perms=n,n}catch(r){if(!e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Xt.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 Rp.error(s),Rp.debug(r),cL(new Error,t5.OUTDATED_PERMS_TRANSLATION_ERROR,r5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
9
  ${r.stack}`;throw Rp.error(s),cL(new Error)}}}a(n5,"getRolePermissions");function i5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Xt.SYSTEM_SCHEMA_NAME]=s[Xt.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]=o5(t[i]);return}r[i]=dL(),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],l=a5(c,u);r[i].describe||fL.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=gp()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=gp()})}),r}a(i5,"translateRolePermissions");function o5(e){let t=dL(!0);return Object.keys(e).forEach(r=>{t.tables[r]=gp(!0,!0,!0,!0,!0)}),t}a(o5,"createStructureUserPermissions");function a5(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}=_,E=_;return Xt.TIME_STAMP_NAMES.includes(d)&&(E=lL(d,_[Bc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=uL(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=mL(_),n.attribute_permissions.push(_),c||c5(_,u)}else if(l!==o){let _;Xt.TIME_STAMP_NAMES.includes(l)?_=lL(l):_=uL(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=_L(n),n}else return e.describe=_L(e),e}a(a5,"getTableAttrPerms");function _L(e){return fL.filter(t=>e[t]).length>0}a(_L,"getSchemaTableDescribePerm");function mL(e){return hL.filter(t=>e[t]).length>0}a(mL,"getAttributeDescribePerm");function c5(e,t){hL.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(c5,"checkForHashPerms")});var TL={};xe(TL,{Headers:()=>yi});var yi,j_=Se(()=>{yi=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]}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 Hc={};xe(Hc,{authentication:()=>bL,login:()=>S5,logout:()=>p5,start:()=>m5});async function bL(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?d5?_5:[]:l5?u5:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return ed&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),ed&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(ed){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,T===-1?n.length:T),u=await gL.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new sd.AuthAuditLog(f,h,gt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=T,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===gt.AUTH_AUDIT_STATUS.SUCCESS?RL.notify(p):RL.error(p)},"authAuditLog"),_;if(s){if(_=Co.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await et.auth(T,p):null;break;case"Bearer":try{_=await(0,rd.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,rd.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return h5&&(Co.get(h)||(Co.set(h,h),l(T,gt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:zs({error:R.message},e)}}Co.set(s,_),f5&&l(_.username,gt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await et.auth(u.user,null,!1):E5&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,td.getSuperUser)());ed&&(e.session.update=function(f){if(!c){c=(0,OL.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):d?.headers?.set&&d.headers.set("Set-Cookie",T)}return f.id=c,gL.put(f)},e.login=async function(f,h){e.user=await et.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&fn.loginPath?(d.status=302,d.headers.set("Location",fn.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new yi);for(let h=0;h<E;){let T=o[h++];f.set(T,o[h++])}}return o=null,d}function m5({server:e,port:t}){e.request(bL,{port:t||"all"}),AL||(AL=!0,setInterval(()=>{Co=new Map},wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),NL.user.addListener(()=>{Co=new Map}))}async function S5(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 p5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var td,rd,OL,wr,gt,sd,NL,RL,u5,l5,_5,d5,gL,ed,E5,f5,h5,Co,AL,nd=Se(()=>{td=C(br());Pr();Sa();rd=C(Sc());de();OL=require("uuid"),wr=C(Q()),gt=C(A()),sd=C(x());Uo();NL=C(Qa());j_();RL=(0,sd.loggerWithTag)("auth-event");wr.initSync();u5=wr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),l5=wr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),_5=wr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),d5=wr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);et.auth=td.findAndValidateUser;gL=nt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),ed=wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,E5=wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,f5=wr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,h5=wr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Co=new Map;a(bL,"authentication");a(m5,"start");a(S5,"login");a(p5,"logout")});var LL=m((Yle,DL)=>{"use strict";var he=require("joi"),yL=require("fs-extra"),IL=require("path"),Xs=ve(),wL=Q(),CL=A(),UL=x(),{hdb_errors:T5}=W(),{HDB_ERROR_MSGS:Dt}=T5,Js=/^[a-zA-Z0-9-_]+$/;DL.exports={getDropCustomFunctionValidator:g5,setCustomFunctionValidator:A5,addComponentValidator:y5,dropCustomFunctionProjectValidator:I5,packageComponentValidator:w5,deployComponentValidator:C5,setComponentFileValidator:O5,getComponentFileValidator:b5,dropComponentFileValidator:N5};function id(e,t,r){try{let s=wL.get(CL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=IL.join(s,t);return yL.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return UL.error(s),r.message(Dt.VALIDATION_ERR)}}a(id,"checkProjectExists");function qc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(qc,"checkFilePath");function R5(e,t,r,s){try{let n=wL.get(CL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=IL.join(n,e,t,r+".js");return yL.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return UL.error(n),s.message(Dt.VALIDATION_ERR)}}a(R5,"checkFileExists");function g5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Js).custom(R5.bind(null,e.project,e.type)).custom(qc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Xs.validateBySchema(e,t)}a(g5,"getDropCustomFunctionValidator");function A5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(qc).required(),function_content:he.string().required()});return Xs.validateBySchema(e,t)}a(A5,"setCustomFunctionValidator");function O5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(qc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(O5,"setComponentFileValidator");function N5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(qc).optional()});return Xs.validateBySchema(e,t)}a(N5,"dropComponentFileValidator");function b5(e){let t=he.object({project:he.string().required(),file:he.string().custom(qc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(b5,"getComponentFileValidator");function y5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(y5,"addComponentValidator");function I5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(I5,"dropCustomFunctionProjectValidator");function w5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Xs.validateBySchema(e,t)}a(w5,"packageComponentValidator");function C5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Xs.validateBySchema(e,t)}a(C5,"deployComponentValidator")});var Ip=m((Wle,vL)=>{"use strict";var be=require("fs-extra"),Np=require("fast-glob"),me=require("path"),ML=require("tar-fs"),U5=require("uuid").v4,bp=require("normalize-path"),Ts=LL(),At=x(),Ie=A(),Ye=Q(),od=Tr(),D5=V(),{PACKAGE_ROOT:L5}=A(),{handleHDBError:ot,hdb_errors:M5}=W(),{HDB_ERROR_MSGS:Mn,HTTP_STATUS_CODES:at}=M5,P5=me.join(L5,"application-template"),yp=me.join(Ye.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function PL(){let e=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ot(new Error,Mn.NOT_ENABLED,at.BAD_REQUEST,void 0,void 0,!0)}a(PL,"isCFEnabled");function v5(){At.trace("getting custom api status");let e={};try{e={is_enabled:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ot(new Error,Mn.FUNCTION_STATUS,at.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(v5,"customFunctionsStatus");function B5(){At.trace("getting custom api endpoints");let e={},t=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Np.sync(bp(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Np.sync(bp(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Np.sync(bp(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw ot(new Error,Mn.GET_FUNCTIONS,at.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(B5,"getCustomFunctions");function H5(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ts.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw ot(new Error,Mn.GET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(H5,"getCustomFunction");function q5(e){PL(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ts.setCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("setting custom function file content");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ot(new Error,Mn.SET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(q5,"setCustomFunction");function F5(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ts.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function file");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ot(new Error,Mn.DROP_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(F5,"dropCustomFunction");function G5(e){PL(),e.project&&(e.project=me.parse(e.project).name);let t=Ts.addComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("adding component");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(P5,n),`Successfully added project: ${s}`}catch(n){throw ot(new Error,Mn.ADD_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,n)}}a(G5,"addComponent");function x5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ts.dropCustomFunctionProjectValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function project");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ye.get(Ie.CONFIG_PARAMS.APPS);if(!D5.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 od.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw ot(new Error,Mn.DROP_FUNCTION_PROJECT,at.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(x5,"dropCustomFunctionProject");async function k5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ts.packageComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;At.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join(Ye.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(yp);let i=me.join(yp,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),ML.pack(n,o).pipe(be.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=be.readFileSync(i,{encoding:"base64"});return await be.remove(i),{project:s,payload:c}}a(k5,"packageComponent");async function V5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ts.deployComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(At.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(yp,U5()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(ML.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return od.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(V5,"deployComponent");async function $5(){let e=od.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a($5,"getComponents");async function Y5(e){let t=Ts.getComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(Y5,"getComponentFile");async function K5(e){let t=Ts.setComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(K5,"setComponentFile");async function W5(e){let t=Ts.dropComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),od.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(W5,"dropComponent");vL.exports={customFunctionsStatus:v5,getCustomFunctions:B5,getCustomFunction:H5,setCustomFunction:q5,dropCustomFunction:F5,addComponent:G5,dropCustomFunctionProject:x5,packageComponent:k5,deployComponent:V5,getComponents:$5,getComponentFile:Y5,setComponentFile:K5,dropComponent:W5}});var wp=m((zle,HL)=>{"use strict";var Rs=require("joi"),BL=ve();HL.exports={readTransactionLogValidator:Q5,deleteTransactionLogsBeforeValidator:z5};function Q5(e){let t=Rs.object({schema:Rs.string().required(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return BL.validateBySchema(e,t)}a(Q5,"readTransactionLogValidator");function z5(e){let t=Rs.object({schema:Rs.string().required(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return BL.validateBySchema(e,t)}a(z5,"deleteTransactionLogsBeforeValidator")});var cd=m((Xle,kL)=>{"use strict";var Cp=A(),ad=it(),qL=V(),FL=Q(),GL=$s(),{handleHDBError:Do,hdb_errors:J5}=W(),{HTTP_STATUS_CODES:Lo}=J5,{readTransactionLogValidator:X5,deleteTransactionLogsBeforeValidator:Z5}=wp(),xL="This operation relies on clustering and cannot run with it disable.",j5="Logs successfully deleted from transaction log.",e8="All logs successfully deleted from transaction log.";kL.exports={readTransactionLog:t8,deleteTransactionLogsBefore:r8};async function*t8(e){let t=X5(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST,void 0,void 0,!0);if(!FL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Do(new Error,xL,Lo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qL.checkSchemaTableExist(r,s);if(n)throw Do(new Error,n,Lo.NOT_FOUND,void 0,void 0,!0);let i=GL.createNatsTableStreamName(r,s),o=await ad.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 l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===Cp.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(t8,"readTransactionLog");async function r8(e){let t=Z5(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST,void 0,void 0,!0);if(!FL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Do(new Error,xL,Lo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qL.checkSchemaTableExist(r,s);if(i)throw Do(new Error,i,Lo.NOT_FOUND,void 0,void 0,!0);let o=GL.createNatsTableStreamName(r,s),{jsm:c}=await ad.getNATSReferences(),u=await ad.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=j5,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=e8):d=(await ad.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(r8,"deleteTransactionLogsBefore")});var dd=m((jle,zL)=>{"use strict";var ud=require("joi"),ld=require("path"),VL=require("fs-extra"),{exec:s8}=require("child_process"),n8=require("util"),$L=n8.promisify(s8),Fc=A(),{handleHDBError:Mo,hdb_errors:i8}=W(),{HTTP_STATUS_CODES:Po}=i8,xc=Q(),o8=ve(),Gc=x();xc.initSync();var Up=xc.get(Fc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),YL="npm install --omit=dev --json",a8=`${YL} --dry-run`;zL.exports={installModules:_8,auditModules:d8,installAllRootModules:c8,uninstallRootModule:u8,linkHarperdb:l8};async function c8(e=!1){await _d(),await kc(e?"npm install --ignore-scripts":"npm install",xc.get(Fc.CONFIG_PARAMS.ROOTPATH))}a(c8,"installAllRootModules");async function u8(e){await kc(`npm uninstall ${e}`,xc.get(Fc.CONFIG_PARAMS.ROOTPATH))}a(u8,"uninstallRootModule");async function l8(){await _d(),await kc(`npm link ${Fc.PACKAGE_ROOT}`,xc.get(Fc.CONFIG_PARAMS.ROOTPATH))}a(l8,"linkHarperdb");async function kc(e,t=void 0){let{stdout:r,stderr:s}=await $L(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
@@ -25,7 +25,7 @@ var oH=Object.create;var zo=Object.defineProperty;var aH=Object.getOwnPropertyDe
25
25
 
26
26
  `+DT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(pee,"getServerOptions");function Tee(){let e=Jr.get(cee),t=Jr.get(uee),r;return e&&(e===!0||e.toUpperCase()===vv)&&(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(Tee,"getCORSOpts");function Ree(){return Jr.get(dee)}a(Ree,"getHeaderTimeoutConfig")});var zv=m((Tde,Qv)=>{"use strict";var{decode:gee}=require("msgpackr"),{isMainThread:Aee,parentPort:Oee,threadId:Sde}=require("worker_threads"),LT=it(),ko=Be(),Nee=A(),ou=x(),qv=Q(),xv=A();st();var bee=$s(),{recordAction:yee,recordActionBinary:Iee}=(di(),ee(Wl)),{publishToStream:wee}=LT,pde={durable:ko.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:ko.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Cee,Uee,Dee,kv,Vv;Qv.exports={initialize:$v,workQueueListener:Wv,setSubscription:Lee,setIgnoreOrigin:Pee,getDatabaseSubscriptions:Mee};async function $v(){Vv=!0,ou.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await LT.getNATSReferences();Cee=e,Uee=e.info.server_name,Dee=t,kv=r}a($v,"initialize");var Kd=new Map;function Lee(e,t,r){let s=Kd.get(e);s||Kd.set(e,s=new Map),s.set(t,r),Vv||$v().then(Wv)}a(Lee,"setSubscription");function Mee(){return Kd}a(Mee,"getDatabaseSubscriptions");var Yv;function Pee(e){Yv=e}a(Pee,"setIgnoreOrigin");var Kv=100,Fv=new Array(Kv),Yd=0;async function Wv(){let t=await(await kv.consumers.get(ko.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await Fv[Yd],Fv[Yd]=vee(r).catch(s=>{ou.error(s)}),++Yd>=Kv&&(Yd=0)}a(Wv,"workQueueListener");Aee||Oee.on("message",async e=>{let{type:t}=e;t===xv.ITC_EVENT_TYPES.SHUTDOWN&&LT.closeConnection()});async function vee(e){let t=gee(e.data);yee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(ko.MSG_HEADERS.ORIGIN)===qv.get(Nee.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!Yv;if(Iee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;ou.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),ou.trace(`messageProcessor nats msg id: ${e.headers.get(ko.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Kd.get(o)?.get(u);if(!p)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,p.send(t);else if(l.length===1&&!c)p.send({type:Gv(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:Gv(i),value:O,id:_?.[k],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;p.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}qv.get(xv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&wee(e.subject.split(".").slice(0,-1).join("."),bee.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){ou.error(i)}e.ack()}a(vee,"messageProcessor");function Gv(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Gv,"convertOperation")});var qT={};xe(qT,{disableNATS:()=>Hee,setNATSReplicator:()=>MT,start:()=>Bee});function Bee(){Qd.default.get(zd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Fee()}function Hee(e=!0){eB=e}function Fee(){if(eB)return;let e=xr(),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];MT(n,r,i)}}Om((r,s)=>{MT(r.tableName,r.databaseName,r),s&&rB(r)}),!Jv&&(Jv=!0)}function MT(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends mt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){rB(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Zr;return(0,Xv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<qee}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Wd(i.transaction,i)),o.user=i.user):o=tB),o}a(n,"getNATSTransaction")}function rB(e){let t=Qd.default.get(zd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,HT.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 vT,BT,HT,Xv,Zv,Qd,zd,jv,eB,qee,tB,Jv,Wd,PT,sB=Se(()=>{de();jr();vT=C(it()),BT=C(Be()),HT=C($s());da();Xv=C(zv()),Zv=C(qt()),Qd=C(Q()),zd=C(A()),jv=C(x());a(Bee,"start");a(Hee,"disableNATS");qee=2;a(Fee,"assignReplicationSource");a(MT,"setNATSReplicator");a(rB,"publishSchema");Wd=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Qd.default.get(zd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(jv.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,HT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},PT=class extends Wd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Zv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};tB=new PT});async function iB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await FT.getResource(e,{});n=new xT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await FT.get(e);i&&i.delete()}n=new Xd(e,t)}return n}function GT(){return Jd++,Jd>65500&&(Jd=1),Jd}var nB,au,FT,Jd,Xd,xT,oB=Se(()=>{de();Sa();nB=C(qt()),au=C(x());Qn();FT=nt({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(iB,"getSession");Jd=1;a(GT,"getNextMessageId");Xd=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,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=fn.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,p=h.Resource,R=await Ke(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=GT();let U=k.id;Array.isArray(U)&&(U=xi(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,au.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return GT()}acknowledge(t){}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;let i=fn.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 Ke(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=[]}},xT=class extends Xd{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=GT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);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,au.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,nB.getNextMonotonicTime)()),(0,au.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),FT.put(this.sessionRecord)),t.qos}}});var $T={};xe($T,{start:()=>xee});async function xee({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:l,onClose:_}=uB(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,nn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Gee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,lB.getSuperUser)());let{onMessage:u,onClose:l}=uB(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,nn.info)("Socket error",_)})},{port:t,securePort:s})}function uB(e,t,r,s,n){cB||(cB=!0,fm(_=>{_.push({metric:"mqtt-connections",connections:kT})})),kT++;let i,o={protocolVersion:4},c=(0,Zd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){kT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await et.auth(_.username,_.password.toString()),(0,VT.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&aB.notify({username:s.username,status:on.AUTH_AUDIT_STATUS.SUCCESS,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,VT.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&aB.error({username:s.username,status:on.AUTH_AUDIT_STATUS.FAILURE,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=iB({user:s,..._}),i=await i}catch(O){return(0,nn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,k,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(k),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,nn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let k;try{k=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,nn.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=vo(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Zd.generate)(f,o);t(T),Es(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?zs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Zd,lB,VT,on,nn,aB,Gee,cB,kT,_B=Se(()=>{Zd=require("mqtt-packet");oB();lB=C(br());Uo();di();Pr();VT=C(Q()),on=C(A()),nn=C(x()),aB=(0,nn.loggerWithTag)("auth-event"),Gee=!0;a(xee,"start");kT=0;a(uB,"onSocket")});var gB={};xe(gB,{loadComponent:()=>jd,loadComponentDirectories:()=>RB});function RB(e,t){t&&(KT=t),e&&(WT=e);let r=[];if((0,Os.existsSync)(YT)){let n=(0,Os.readdirSync)(YT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(YT,o);r.push(jd(c,KT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(jd(s,KT,s)),Promise.all(r).then(()=>{TB=!0})}async function jd(e,t,r,s,n){if(!EB.has(e)){EB.set(e,!0),n&&(WT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(o)?i=(0,fB.parseDocument)((0,Os.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Yee;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Os.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,pB.getHdbBasePath)().length){f=null;break}if(f)_=await jd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=$ee[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,nt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(cu.isMainThread&&(_=await _.startOnMainThread?.({server:et,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!dB.includes(p)){dB.push(p);let R=QT.get(zT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);JT(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:et,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),WT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,SB.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,hB.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Mr.relative)(e,O),U=(0,Mr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(k.isFile()){let P=await Vee(O);cu.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else cu.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${k.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new uu(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new uu(E),null,!0)}}if(cu.isMainThread&&!TB&&(0,mB.watchDir)(e,async()=>RB()),i.extensionModule)return await s_((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new uu(i))}}}var Os,Mr,cu,fB,QT,zT,hB,mB,SB,pB,kee,Vee,YT,WT,TB,KT,$ee,Yee,dB,EB,uu,AB=Se(()=>{Os=require("fs"),Mr=require("path"),cu=require("worker_threads"),fB=require("yaml"),QT=C(Q()),zT=C(A());Rw();Nw();bw();VM();wv();Lv();hB=C(require("fast-glob")),mB=C(st());Im();Pr();SB=C(W());jr();de();XT();pB=C(Q()),kee=C(Hv());nd();sB();_B();({readFile:Vee}=Os.promises),YT=QT.get(zT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),WT=new Map;a(RB,"loadComponentDirectories");$ee={REST:Xp,graphqlSchema:ym,jsResource:Cm,fastifyRoutes:CT,login:Dm,static:UT,operationsApi:kee,customFunctions:{},clustering:qT,authentication:Hc,mqtt:$T},Yee={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},dB=[],EB=new Map;a(jd,"loadComponent");uu=class extends mt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var wB=m((Wde,IB)=>{"use strict";var rE=require("fs-extra"),ZT=require("path"),eE=x(),OB=V(),tE=A(),yB=Q(),Kee=Tr();IB.exports=Wee;async function Wee(){let e=Qee(),t=yB.get(tE.CONFIG_PARAMS.ROOTPATH),r=ZT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+tE.PACKAGE_ROOT}},n=ZT.join(t,"node_modules");await rE.ensureDir(n);let i,o=!0,c=!1;try{i=await rE.readJson(r)}catch(u){if(OB.isEmptyOrZeroLength(e))return;if(u.code!==tE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!OB.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await NB(l);s.dependencies[u]=_+l}if(!o){eE.notify("Installing components"),await bB(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await NB(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(eE.notify("Removing component",u),c=!0);c&&(eE.notify("Updating components."),await bB(r,s))}a(Wee,"installComponents");function Qee(){let e=Kee.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Qee,"getComponentsConfig");async function NB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ZT.extname(e)||await rE.pathExists(e)?"file:":"github:"}a(NB,"getPkgPrefix");async function bB(e,t){eE.trace("npm installing components package.json",t),await rE.writeFile(e,JSON.stringify(t,null," ")),await dd().installAllRootModules(yB.get(tE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(bB,"installPackages")});var sE=m((zde,UB)=>{var{isMainThread:CB}=require("worker_threads"),{getTables:zee}=(de(),ee(Ne)),{loadComponentDirectories:Jee,loadComponent:Xee}=(AB(),ee(gB)),{resetResources:Zee}=(Sa(),ee(LA)),jee=wB(),ete=Tr(),{dirname:tte}=require("path"),{getConnection:rte}=it(),ste=Q(),nte=A(),jT=new Map;async function ite(e=!1){!CB&&ste.get(nte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&rte(),CB&&await jee();let t=Zee();zee(),t.isWorker=e,await Xee(tte(ete.getConfigFilePath()),t,"hdb",!0,jT),await Jee(jT,t);let r=[];for(let[s]of jT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ite,"loadRootComponents");UB.exports.loadRootComponents=ite});var st=m((Zde,qn)=>{"use strict";var{Worker:ote,MessageChannel:ate,parentPort:Ns,isMainThread:nR,threadId:cte,workerData:lu}=require("worker_threads"),{PACKAGE_ROOT:ute}=A(),{join:MB,isAbsolute:lte,extname:iE}=require("path"),{server:_te}=(Pr(),ee(Zo)),{watch:dte,readdir:Ete}=require("fs/promises"),{totalmem:DB}=require("os"),iR=A(),vi=x(),Xde=A(),{randomBytes:fte}=require("crypto"),hte=1024*1024,Hn=[],Bn=[],mte=50,PB=1e4,Ste="restart",vB="request_thread_info",BB="resource_report",HB="thread_info",qB="added-port",pte="ack",eR;qn.exports={startWorker:tR,restartWorkers:oR,shutdownWorkers:Ate,workers:Hn,setMonitorListener:Ute,onMessageFromWorkers:Ote,onMessageByType:Nte,broadcast:bte,broadcastWithAcknowledgement:Ite,setChildListenerByType:gte,getWorkerIndex:GB,getTicketKeys:xB,setMainIsWorker:Tte,restartNumber:lu?.restartNumber||1};var FB;function GB(){return lu?lu.workerIndex:FB?0:void 0}a(GB,"getWorkerIndex");function Tte(e){FB=e}a(Tte,"setMainIsWorker");var nE;function xB(){return nE||(nE=nR?fte(48):lu.ticketKeys,nE)}a(xB,"getTicketKeys");Object.defineProperty(_te,"workerIndex",{get(){return GB()}});var kB={[vB](e,t){wte(t)},[BB](e,t){Cte(t,e)}};function tR(e,t={}){let r=process.constrainedMemory?.()||DB();r=Math.min(r,DB());let s=Math.max(Math.floor(r/hte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Bn){let{port1:u,port2:l}=new ate;c.postMessage({type:qB,port:u},[u]),i.push(l)}iE(e)||(e+=".js");let o=new ote(lte(e)?e:MB(ute,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:qn.exports.restartNumber,ticketKeys:xB()},transferList:i},t));return aE(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{tR(e,t)},o.on("error",c=>{console.error("Worker error:",c),vi.error("Worker error:",c)}),o.on("exit",c=>{Hn.splice(Hn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<mte?(t.unexpectedRestarts=o.unexpectedRestarts+1,tR(e,t)):vi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{kB[c.type]?.(c,o)}),Hn.push(o),Lte(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(tR,"startWorker");var Rte=[iR.THREAD_TYPES.HTTP];async function oR(e=null,t=2,r=!0){if(nR){if(r){let{loadRootComponents:n}=sE();await n()}qn.exports.restartNumber++,t<1&&(t=t*Hn.length);let s=[];for(let n of Hn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:qn.exports.restartNumber,type:iR.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=Rte.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),PB*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Ns.postMessage({type:Ste,workerType:e})}a(oR,"restartWorkers");function gte(e,t){kB[e]=t}a(gte,"setChildListenerByType");function Ate(e){return oR(e,1/0,!1)}a(Ate,"shutdownWorkers");var VB=[];function Ote(e){VB.push(e)}a(Ote,"onMessageFromWorkers");var rR=new Map;function Nte(e,t){let r=rR.get(e);r||rR.set(e,r=[]),r.push(t)}a(Nte,"onMessageByType");function bte(e){for(let t of Bn)try{t.postMessage(e)}catch(r){vi.error("Unable to send message to worker",r)}}a(bte,"broadcast");var oE=new Map,yte=1;function Ite(e){return new Promise(t=>{let r=0;for(let s of Bn)try{let n=yte++,i=a(()=>{oE.delete(n),--r===0&&t(),s!==Ns&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,oE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of oE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){vi.error("Unable to send message to worker",n)}r===0&&t()})}a(Ite,"broadcastWithAcknowledgement");function wte(e){e.postMessage({type:HB,workers:$B()})}a(wte,"sendThreadInfo");function $B(){let e=Date.now();return Hn.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($B,"getChildWorkerInfo");function Cte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Cte,"recordResourceReport");var sR;function Ute(e){sR=e}a(Ute,"setMonitorListener");var Dte=1e3,LB=!1;function Lte(){LB||(LB=!0,setInterval(()=>{for(let e of Hn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}sR&&sR()},Dte).unref())}a(Lte,"startMonitoring");var Mte=1e3;if(Ns){aE(Ns);for(let e of lu.addPorts)aE(e);setInterval(()=>{let e=process.memoryUsage();Ns.postMessage({type:BB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Mte).unref(),eR=a(()=>new Promise((e,t)=>{Ns.on("message",r),Ns.postMessage({type:vB});function r(s){s.type===HB&&(Ns.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else eR=$B;qn.exports.getThreadInfo=eR;function aE(e,t){Bn.push(e),e.on("message",r=>{if(r.type===qB)aE(r.port);else if(r.type===pte){let s=oE.get(r.id);s&&s()}else{for(let n of VB)n(r,e);let s=rR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){vi.error(i)}}}).on("close",()=>{Bn.splice(Bn.indexOf(e),1)}).on("exit",()=>{Bn.splice(Bn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(aE,"addPort");if(nR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Ete(s,{withFileTypes:!0}))i.isDirectory()&&r(MB(s,i.name));for await(let{filename:i}of dte(s,{persistent:!1}))(iE(i)===".ts"||iE(i)===".js"||iE(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await oR(),vi.info("Reloaded HarperDB components")},100))},"watch_dir");qn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ns.on("message",async e=>{let{type:t}=e;t===iR.ITC_EVENT_TYPES.SHUTDOWN&&(qn.exports.restartNumber=e.restartNumber,Ns.unref(),setTimeout(()=>{vi.warn("Thread did not voluntarily terminate",cte),process.exit(0)},PB).unref())})});var zB=m(dE=>{"use strict";var{isMainThread:Pte,parentPort:du,threadId:vte}=require("worker_threads"),{Socket:Bte}=require("net"),{createServer:Hte,IncomingMessage:qte}=require("http"),{createServer:Fte}=require("https"),{readFileSync:Vo}=require("fs"),cE=x(),bs=Q(),$o=A(),{server:_E}=(Pr(),ee(Zo)),{WebSocketServer:Gte}=require("ws"),{createServer:xte}=require("tls"),{getTicketKeys:kte}=st(),{Headers:Vte}=(j_(),ee(TL));process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:eEe,CONFIG_PARAMS:tEe}=$o;bs.initSync();var Gn={};dE.registerServer=ER;dE.httpServer=fR;dE.deliverSocket=dR;_E.http=fR;_E.request=Qte;_E.socket=zte;_E.ws=Jte;var aR=[],cR=[],$te,_u={},uE={},Yte=[],uR=[];Pte||sE().loadRootComponents(!0).then(()=>{du.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)dR(r,t,s);else if(e.requestId)Kte(e);else if(e.type===$o.ITC_EVENT_TYPES.SHUTDOWN)for(let n in Gn){let i=Gn[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||cE.warn("Had to forcefully exit the thread",vte),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),du.postMessage({type:$o.ITC_EVENT_TYPES.CHILD_STARTED})});function dR(e,t,r){let s=e?.read?e:new Bte({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Gn[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Gn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(cE.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(dR,"deliverSocket");var YB=new Map;function Kte(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=YB.get(n),r){case"connection":i=dR(void 0,t),YB.set(n,i),i.write=(c,u,l)=>(du.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(du.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),du.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(Kte,"proxyRequest");function ER(e,t){+t||(t=parseInt(bs.get($o.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=Gn[t];if(r){let s=r.lastServer||r;s.off("unhandled",KB),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Gn[t]=e;e.on("unhandled",KB)}a(ER,"registerServer");function WB(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=[{port:parseInt(bs.get($o.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:bs.get($o.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(WB,"getPorts");function fR(e,t){for(let{port:r,secure:s}of WB(t))QB(r,s,t?.isOperationsServer),typeof e=="function"?uR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):ER(e,r),uE[r]=lR(uR,r),$te=lR(Yte,r)}a(fR,"httpServer");function QB(e,t,r){if(!_u[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=bs.get(n+"_tls_privatekey"),o=bs.get(n+"_tls_certificate"),c=bs.get(n+"_tls_certificateauthority");s={key:Vo(i),cert:Vo(o)+(c?`
27
27
 
28
- `+Vo(c):""),ticketKeys:kte()}}_u[e]=(t?Fte:Hte)(s,async(n,i)=>{try{let o=new lE(n);r&&(o.isOperationsServer=!0);let c=await uE[e](o);if(c.headers?.set?.("Server","HarperDB"),c.status===-1){for(let l of c.headers||[])i.setHeader(l[0],l[1]);return n.baseRequest=o,i.baseResponse=c,_u[e].emit("unhandled",n,i)}c.handlesHeaders||i.writeHead(c.status||200,c.headers&&Array.from(c.headers));let u=c.body;u?.pipe?(u.pipe(i),u.destroy&&i.on("close",()=>{u.destroy()})):u?.then?u.then(l=>{i.end(l)},l=>{i.writeHead(l.statusCode||500),i.end(l.toString()),cE.error(l)}):i.end(u)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),cE.error(o)}}),ER(_u[e],e)}return _u[e]}a(QB,"getHTTPServer");function lR(e,t){let r=Wte;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(lR,"makeCallbackChain");function Wte(e){return e.user&&(e[Fn].user=e.user),{status:-1,body:"Not found",headers:new Vte}}a(Wte,"unhandled");function Qte(e,t){fR(e,{requestOnly:!0,...t})}a(Qte,"onRequest");function zte(e,t){if(t.securePort){let r=bs.get("customfunctions_tls_privatekey"),s=bs.get("customfunctions_tls_certificate"),n=bs.get("customfunctions_tls_certificateauthority"),i=xte({key:Vo(r),cert:Vo(s)+(n?`
28
+ `+Vo(c):""),ticketKeys:kte()}}_u[e]=(t?Fte:Hte)(s,async(n,i)=>{try{let o=new lE(n);r&&(o.isOperationsServer=!0);let c=await uE[e](o);if(c.headers?.set?.("Server","HarperDB"),c.status===-1){for(let l of c.headers||[])i.setHeader(l[0],l[1]);return n.baseRequest=o,i.baseResponse=c,_u[e].emit("unhandled",n,i)}c.handlesHeaders||i.writeHead(c.status||200,c.headers&&(c.headers[Symbol.iterator]?Array.from(c.headers):c.headers));let u=c.body;u?.pipe?(u.pipe(i),u.destroy&&i.on("close",()=>{u.destroy()})):u?.then?u.then(l=>{i.end(l)},l=>{i.writeHead(l.statusCode||500),i.end(l.toString()),cE.error(l)}):i.end(u)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),cE.error(o)}}),ER(_u[e],e)}return _u[e]}a(QB,"getHTTPServer");function lR(e,t){let r=Wte;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(lR,"makeCallbackChain");function Wte(e){return e.user&&(e[Fn].user=e.user),{status:-1,body:"Not found",headers:new Vte}}a(Wte,"unhandled");function Qte(e,t){fR(e,{requestOnly:!0,...t})}a(Qte,"onRequest");function zte(e,t){if(t.securePort){let r=bs.get("customfunctions_tls_privatekey"),s=bs.get("customfunctions_tls_certificate"),n=bs.get("customfunctions_tls_certificateauthority"),i=xte({key:Vo(r),cert:Vo(s)+(n?`
29
29
 
30
30
  `+Vo(n):"")},e);Gn[t.securePort]=o=>{i.emit("connection",o)}}t.port&&(Gn[t.port]=e)}a(zte,"onSocket");Object.defineProperty(qte.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 Jte(e,t){for(let{port:r,secure:s}of WB(t)){cR[r]||(cR[r]=new Gte({server:QB(r,s)}),cR[r].on("connection",async(i,o)=>{let c=new lE(o);c.isWebSocket=!0;let u=uE[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<aR.length;_++){let d=aR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";aR.push({listener:e,protocol:n}),uE[r]=lR(uR,r)}}a(Jte,"onWebSocket");function KB(e,t){t.writeHead(404),t.end(`Not found
31
31
  `)}a(KB,"defaultNotFound");var Fn=Symbol("node request"),lE=class{static{a(this,"Request")}[Fn];#e;constructor(t){this.method=t.method;let r=t.url;this[Fn]=t,this.url=r,this.headers=t.headers,this.headers.get=Xte}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[Fn].socket.encrypted?"https":"http"}get ip(){return this[Fn].socket.remoteAddress}get body(){return this.#e||(this.#e=new _R(this[Fn]))}get host(){return this[Fn].authority||this[Fn].headers.host}get isAborted(){return!1}},_R=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function Xte(e){return this[e.toLowerCase()]}a(Xte,"get")});var rH={};xe(rH,{debugMode:()=>eH,startHTTPThreads:()=>jte,startSocketServer:()=>JT,updateWorkerIdleness:()=>tH});async function jte(e=2,t){if(t)SR(0,1,!0);else{let{loadRootComponents:r}=sE();if(e===0||eH)return(0,xn.setMainIsWorker)(!0),hR=zB(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)SR(r,e);return Promise.all(jB)}function SR(e,t=1,r){if(mR++,(0,xn.startWorker)("server/threads/threadServer.js",{name:hE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===hE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});jB.push(n),await n,Yo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=fE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Yo.indexOf(s);o>-1&&Yo.splice(o,1)}if(a(i,"removeWorker"),Ko){let o=Ko;Ko=[];for(let c of o)ZB[c.localPort](c)}}}),r){let s=setInterval(()=>{pR?pR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,xn.shutdownWorkers)(),mR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function JT(e=0,t){if(typeof e=="string")try{(0,SE.existsSync)(e)&&(0,SE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=ere:r=tre(t):r=TR;let s=(0,XB.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},ZB[e]=i=>{pR=!0,r(i,(o,c)=>{if(!o){hR?(hR.deliverSocket(i,e,c),i.resume()):mR>0?(Ko.length===0&&setTimeout(()=>{Ko.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(),Ko.push(i)):(console.log("start up a dynamic thread to handle request"),SR(0));return}o.requests++;let u=i._handle.fd;mE.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):nre(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=oc();return mE.info(`HarperDB ${n.version} Server running on port ${e}`),s}function TR(e,t){let r,s=0;for(let n of Yo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=EE)return EE=i,t(r);s=i}EE=0,t(r)}function ere(e,t){let r=e.remoteAddress,s=Wo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);TR(e,i=>{Wo.set(r,{worker:i,lastUsed:n}),t(i)})}function tre(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Wo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);TR(s,_=>{Wo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function tH(){EE=0;for(let e of Yo)e.expectedIdle=e.recentELU.idle+rre,e.requests=1;Yo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function nre(e,t,r){let s=sre++;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(),fE.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")),fE.delete(s)),n.event=="destroy"&&(e.destroy(),fE.delete(s))})}var xn,XB,hE,mE,SE,Zte,Yo,Ko,ZB,hR,mR,jB,eH,pR,EE,JB,Wo,rre,fE,sre,XT=Se(()=>{xn=C(st()),XB=require("net"),hE=C(A()),mE=C(x()),SE=require("fs"),{isMainThread:Zte}=require("worker_threads"),Yo=[],Ko=[],ZB=[],mR=0,jB=[];Zte&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(jte,"startHTTPThreads");a(SR,"startHTTPWorker");a(JT,"startSocketServer");EE=0;a(TR,"findMostIdleWorker");JB=36e5,Wo=new Map;a(ere,"findByRemoteAddressAffinity");a(tre,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Wo)r.lastUsed+JB<e&&Wo.delete(t)},JB).unref();rre=1e3;a(tH,"updateWorkerIdleness");(0,xn.setMonitorListener)(tH);fE=new Map,sre=1;a(nre,"proxySocket")});NE();var{startHTTPThreads:ire,startSocketServer:sH}=(XT(),ee(rH));ire(0,!0);sH(9925);sH(9926);