harperdb 4.4.26 → 4.4.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +8 -8
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.457cac00.js → main.11792bb9.js} +2 -2
- package/utility/scripts/restartHdb.js +1 -1
- /package/studio/build-local/static/js/{main.457cac00.js.LICENSE.txt → main.11792bb9.js.LICENSE.txt} +0 -0
|
@@ -8,7 +8,7 @@ Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Obje
|
|
|
8
8
|
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:vQ.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(kQ,"findPs")});var Ht=N((Mge,yC)=>{"use strict";var FQ="__dbis__",GQ="__txns__",qQ="__environment_name__",$Q="__dbi_defintion__",VQ={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"},KQ=["__createdtime__","__updatedtime__"],YQ="\uFFFF",RC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},WQ=Object.values(RC);yC.exports={AUDIT_STORE_NAME:GQ,INTERNAL_DBIS_NAME:FQ,DBI_DEFINITION_NAME:$Q,SEARCH_TYPES:VQ,TIMESTAMP_NAMES:KQ,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:qQ,TRANSACTIONS_DBI_NAMES_ENUM:RC,TRANSACTIONS_DBIS:WQ,OVERFLOW_MARKER:YQ}});var Dn=N((Uge,LC)=>{"use strict";var bC=M(),OC=Ht(),NC={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},IC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),wC={500:IC("There was an error processing your request."),400:"Invalid request"},jQ=wC[NC.INTERNAL_SERVER_ERROR],zQ={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},QQ={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},JQ={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},XQ={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 ${OC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${OC.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"},ZQ={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${bC.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${bC.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"},CC={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"},e2={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},t2={ATTR_PERM_MISSING:a((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:a((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:a(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},r2={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},n2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},s2={ALTER_USER_DUP_ROLES:a(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},DC={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},PC={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},i2={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},o2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},a2={...CC,...JQ,...zQ,...e2,...t2,...r2,...n2,...s2,...ZQ,...DC,...PC,...i2,...o2,...QQ};LC.exports={CHECK_LOGS_WRAPPER:IC,HDB_ERROR_MSGS:a2,DEFAULT_ERROR_MSGS:wC,DEFAULT_ERROR_RESP:jQ,HTTP_STATUS_CODES:NC,LMDB_ERRORS_ENUM:XQ,AUTHENTICATION_ERROR_MSGS:CC,VALIDATION_ERROR_MSGS:DC,ITC_ERRORS:PC}});var _e=N((Bge,vC)=>{"use strict";var Cl=Dn(),c2=W(),l2=M(),ah=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,MC),this.statusCode=n||Cl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Cl.DEFAULT_ERROR_MSGS[n]?Cl.DEFAULT_ERROR_MSGS[n]:Cl.DEFAULT_ERROR_MSGS[Cl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&c2[s](i)}},pg=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}},mg=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function MC(e,t,r,n=l2.LOG_LEVELS.ERROR,s=null,i=!1){if(UC(e))return e;let o=new ah(e,t,r,n,s);return i&&delete o.stack,o}a(MC,"handleHDBError");function UC(e){return e.__proto__.constructor.name===ah.name}a(UC,"isHDBError");vC.exports={isHDBError:UC,handleHDBError:MC,ClientError:pg,ServerError:mg,hdb_errors:Cl}});var Sg=N(BC=>{"use strict";var u2={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
9
9
|
`),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
10
10
|
`)},d2="certificate.pem",_2="privateKey.pem",f2="caCertificate.pem",E2="natsCertificate.pem",h2="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},p2={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},m2={[Rt.SERVER]:2,[Rt.DEFAULT]:1},S2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},T2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},g2={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},A2={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},R2={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(BC,{CERTIFICATE_PEM_NAME:d2,PRIVATEKEY_PEM_NAME:_2,CA_PEM_NAME:f2,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:p2,CERT_PREFERENCE_APP:m2,CERT_PREFERENCE_OPS:S2,CERT_PREFERENCE_REP:T2,CA_CERT_PREFERENCE_REP:g2,CA_CERT_PREFERENCE_OPS:A2,CA_CERT_PREFERENCE_APP:R2,CERTIFICATE_VALUES:u2,NATS_CERTIFICATE_PEM_NAME:E2,NATS_CA_PEM_NAME:h2})});var Tt=N((kge,HC)=>{"use strict";var nn=require("validate.js");nn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||nn.validators.type.checks[t](e)?null:` must be a '${t}' value`};nn.validators.type.checks={Object:a(function(e){return nn.isObject(e)&&!nn.isArray(e)},"Object"),Array:nn.isArray,Integer:nn.isInteger,Number:nn.isNumber,String:nn.isString,Date:nn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};nn.validators.hasValidFileExt=function(e,t){return nn.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};HC.exports={validateObject:y2,validateObjectAsync:b2,validateBySchema:O2};function y2(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=nn(e,t,{format:"flat"});return r?new Error(r):null}a(y2,"validateObject");async function b2(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await nn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(b2,"validateObjectAsync");function O2(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(O2,"validateBySchema")});var gg=N((qge,$C)=>{"use strict";var GC=require("fs-extra"),me=require("joi"),N2=require("os"),{boolean:He,string:It,number:tr,array:Qa}=me.types(),{totalmem:xC}=require("os"),za=require("path"),I2=W(),Tg=te(),Gge=Sg(),kC=M(),w2=Tt(),FC="log",C2="components",D2="Invalid logging.rotation.maxSize unit. Available units are G, M or K",P2="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",L2="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",M2="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",U2="rootPath config parameter is undefined",sn=me.alternatives([tr.min(0),It]).optional().empty(null),ch=me.alternatives([Qa.items(It,{host:It.required(),port:sn},{hostname:It.required(),port:sn}).empty(null),Qa.items(It)]),mi,qC=!1;$C.exports={configValidator:v2,routesValidator:G2,route_constraints:ch};function v2(e,t=!1){if(qC=t,mi=e.rootPath,Tg.isEmpty(mi))throw U2;let r=He.optional(),n=tr.min(0).max(1e3).empty(null).default(F2),s=It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Gd),i=It.optional().empty(null),o=It.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=me.string().empty(null).default(Gd),l=me.custom(H2).empty(null).default(Gd),u=e.clustering?.enabled,d=me.object({certificate:i,certificateAuthority:i,privateKey:i}),_;return u===!0?_=me.object({enabled:r,hubServer:me.object({cluster:me.object({name:me.required().empty(null),network:me.object({port:sn,routes:ch}).required()}).required(),leafNodes:me.object({network:me.object({port:sn}).required()}).required(),network:me.object({port:sn}).required()}).required(),leafServer:me.object({network:me.object({port:sn,routes:ch}).required(),streams:me.object({maxAge:tr.min(120).allow(null).optional(),maxBytes:tr.min(1).allow(null).optional(),maxMsgs:tr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:me.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:It.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:He,cacheTTL:tr.required(),enableSessions:He}),He).optional(),analytics:me.object({aggregatePeriod:tr}),replication:me.object({hostname:me.alternatives(It,tr).optional().empty(null),url:It.optional().empty(null),port:sn,securePort:sn,routes:Qa.optional().empty(null),databases:me.alternatives(It,Qa),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:He,logSuccessful:He}),file:He.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:He.optional(),compress:He.optional(),interval:It.custom(k2).optional().empty(null),maxSize:It.custom(x2).optional().empty(null),path:It.optional().empty(null).default(Gd)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:me.object({network:me.object({cors:He.optional(),corsAccessList:Qa.optional(),headersTimeout:tr.min(1).optional(),keepAliveTimeout:tr.min(1).optional(),port:sn,domainSocket:me.optional().empty("hdb/operations-server").default(Gd),securePort:sn,timeout:tr.min(1).optional()}).optional(),tls:me.alternatives([me.array().items(d),d])}).required(),rootPath:It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:me.object({network:me.object({port:sn,securePort:sn,mtls:me.alternatives([He.optional(),me.object({user:It.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:me.object({compressionThreshold:tr.optional(),cors:He.optional(),corsAccessList:Qa.optional(),headersTimeout:tr.min(1).optional(),port:sn,securePort:sn,maxHeaderSize:tr.optional(),mtls:me.alternatives([He.optional(),me.object({user:It.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:me.alternatives([Qa.optional(),It.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(He.optional(),me.object({startingPort:tr.min(1).optional(),host:It.optional(),waitForDebugger:He.optional()})),maxHeapMemory:tr.min(0).optional()})),storage:me.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:me.alternatives([He.optional(),me.object({dictionary:It.optional(),threshold:tr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:tr.optional(),maxFreeSpaceToRetain:tr.optional()}).required(),ignoreScripts:He.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(v2,"configValidator");function B2(e){return qC||GC.existsSync(e)?null:`Specified path ${e} does not exist.`}a(B2,"doesPathExist");function H2(e,t){me.assert(e,It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=B2(e);if(r)return t.message(r)}a(H2,"validatePath");function x2(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(D2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L2):e}a(x2,"validateRotationMaxSize");function k2(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(P2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(M2):e}a(k2,"validateRotationInterval");function F2(e,t){let r=t.state.path.join("."),n=N2.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||xC();return i=Math.round(Math.min(i,xC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),I2.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(F2,"setDefaultThreads");function Gd(e,t){let r=t.state.path.join(".");if(!Tg.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Tg.isEmpty(mi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return za.join(mi,C2);case"logging.root":return za.join(mi,FC);case"clustering.leafServer.streams.path":return za.join(mi,"clustering","leaf");case"storage.path":let n=za.join(mi,kC.LEGACY_DATABASES_DIR_NAME);return GC.existsSync(n)?n:za.join(mi,kC.DATABASES_DIR_NAME);case"logging.rotation.path":return za.join(mi,FC);case"operationsApi.network.domainSocket":return r==null?null:za.join(mi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Gd,"setDefaultRoot");function G2(e){let t=me.object({routes:ch});return w2.validateBySchema({routes:e},t)}a(G2,"routesValidator")});var Ja={};je(Ja,{server:()=>it});var VC,it,qr=Ie(()=>{VC=L(Ei()),it={};(0,VC._assignPackageExport)("server",it)});var wt=N(eD=>{"use strict";var on=M(),Er=te(),hr=W(),{configValidator:q2,routesValidator:KC}=gg(),$r=require("fs-extra"),WC=require("yaml"),Ln=require("path"),$2=require("is-number"),jC=require("properties-reader"),V2=require("lodash"),{handleHDBError:K2}=_e(),{HTTP_STATUS_CODES:Y2,HDB_ERROR_MSGS:Dl}=Dn(),{server:W2}=(qr(),oe(Ja)),{DATABASES_PARAM_CONFIG:qd,CONFIG_PARAMS:Pn,CONFIG_PARAM_MAP:ks}=on,j2="Unable to get config value because config is uninitialized",z2="Config successfully initialized",Q2="Error backing up config file",J2="Empty parameter sent to getConfigValue",zC=Ln.join(on.PACKAGE_ROOT,"config","yaml",on.HDB_DEFAULT_CONFIG_FILE),X2=Ln.join(on.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),Z2="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",YC={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"},lh,jt,uh;Object.assign(eD,{createConfigFile:e4,getDefaultConfig:t4,getConfigValue:JC,initConfig:dh,flattenConfig:Pl,updateConfigValue:XC,updateConfigObject:n4,getConfiguration:o4,setConfiguration:a4,readConfigFile:bg,getClusteringRoutes:c4,initOldConfig:ZC,getConfigFromFile:l4,getConfigFilePath:Xa,addConfig:u4,deleteConfigFromFile:d4,getConfigObj:_4,resolvePath:Ag,getFlatConfigObj:f4});function Ag(e){if(e?.startsWith("~/"))return Ln.join(Er.getHomeDir(),e.slice(1));let t=se();return Ln.resolve(t.getHdbBasePath(),e)}a(Ag,"resolvePath");function e4(e,t=!1){let r=Vo(zC);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=WC.parseDocument($r.readFileSync(X2,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}lh=Pl(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===Pn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=Rg(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){hr.error(_)}}}n&&QC(r,n),yg(r,t);let s=r.toJSON();jt=Pl(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,on.HDB_CONFIG_FILE);$r.createFileSync(o),$r.writeFileSync(o,String(r)),hr.trace(`Config file written to ${o}`)}a(e4,"createConfigFile");function QC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Er.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(qd.TABLES))for(let i in n[s][qd.TABLES])for(let o in n[s][qd.TABLES][i]){let c=n[s][qd.TABLES][i][o],l=[Pn.DATABASES,s,qd.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[Pn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){hr.error("Error parsing schemas CLI/env config arguments",n)}}a(QC,"setSchemasConfig");function t4(e){if(lh===void 0){let r=Vo(zC);lh=Pl(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return lh[t.toLowerCase()]}a(t4,"getDefaultConfig");function JC(e){if(e==null){hr.info(J2);return}if(jt===void 0){hr.trace(j2);return}let t=ks[e.toLowerCase()];if(t!==void 0)return jt[t.toLowerCase()]}a(JC,"getConfigValue");function Xa(e=Er.getPropsFilePath()){let t=Er.getEnvCliRootPath();if(t)return Ag(Ln.join(t,on.HDB_CONFIG_FILE));let r=jC(e);return Ag(r.get(on.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Xa,"getConfigFilePath");function dh(e=!1){if(jt===void 0||e){let t;if(!Er.noBootFile()){t=Er.getPropsFilePath();try{$r.accessSync(t,$r.constants.F_OK|$r.constants.R_OK)}catch(i){throw hr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Xa(t),n;if(r.includes("config/settings.js"))try{ZC(r);return}catch(i){if(i.code!==on.NODE_ERROR_CODES.ENOENT)throw i}try{n=Vo(r)}catch(i){if(i.code===on.NODE_ERROR_CODES.ENOENT){hr.trace(`HarperDB config file not found at ${r}.
|
|
11
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw hr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}r4(n,r),yg(n);let s=n.toJSON();if(W2.config=s,jt=Pl(s),jt.logging_rotation_rotate)for(let i in YC)jt[i]&&hr.error(`Config ${YC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);hr.trace(z2)}}a(dh,"initConfig");function r4(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(hr.trace("Updating config file with missing config params"),$r.writeFileSync(t,String(e)))}a(r4,"checkForUpdatedConfig");function yg(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Dl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Dl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=q2(r,t);if(n.error)throw Dl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(yg,"validateConfig");function n4(e,t){jt===void 0&&(jt={});let r=ks[e.toLowerCase()];if(r===void 0){hr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(n4,"updateConfigObject");function XC(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&dh();let o=JC(ks.hdb_root),c=Ln.join(o,on.HDB_CONFIG_FILE),l=Vo(c),u;if(r===void 0&&e.toLowerCase()===Pn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=ks[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Rg(E,t);l.setIn([...f],h)}else for(let E in r){let f=ks[E.toLowerCase()];if(f===Pn.HTTP_SECUREPORT&&r[E]===jt[Pn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Pn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[Pn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Pn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=on.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=Rg(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){hr.error(g)}}}u&&QC(l,u),yg(l);let d=l.getIn(["rootPath"]),_=Ln.join(d,on.HDB_CONFIG_FILE);n===!0&&s4(c,d),$r.writeFileSync(_,String(l)),s&&(jt=Pl(l.toJSON())),hr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(XC,"updateConfigValue");function s4(e,t){try{let r=Ln.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${on.HDB_CONFIG_FILE}.bak`);$r.copySync(e,r),hr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){hr.error(Q2),hr.error(r)}}a(s4,"backupConfigFile");var i4=["databases"];function Pl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),uh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!i4.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Pn[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Pl,"flattenConfig");function Rg(e,t){if(e===Pn.CLUSTERING_NODENAME||e===Pn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if($2(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Er.autoCast(t)}a(Rg,"castConfigValue");function o4(){let e=Er.getPropsFilePath(),t=Xa(e);return Vo(t).toJSON()}a(o4,"getConfiguration");async function a4(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return XC(void 0,void 0,s,!0),Z2}catch(i){throw typeof i=="string"||i instanceof String?K2(i,i,Y2.BAD_REQUEST,void 0,void 0,!0):i}}a(a4,"setConfiguration");function bg(){let e=Er.getPropsFilePath();try{$r.accessSync(e,$r.constants.F_OK|$r.constants.R_OK)}catch(n){if(!Er.noBootFile())throw hr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xa(e);return Vo(t).toJSON()}a(bg,"readConfigFile");function Vo(e){return WC.parseDocument($r.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Vo,"parseYamlDoc");function c4(){let e=bg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=KC(t);if(r)throw Dl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=KC(n);if(s)throw Dl.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Dl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(c4,"getClusteringRoutes");function ZC(e){let t=jC(e);jt={};for(let r in ks){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Pn.LOGGING_ROOT?jt[s]=Ln.dirname(n):jt[s]=n}return jt}a(ZC,"initOldConfig");function l4(e){let t=bg();return V2.get(t,e.replaceAll("_","."))}a(l4,"getConfigFromFile");async function u4(e,t){let r=Vo(Xa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await $r.writeFile(Xa(),String(r))}a(u4,"addConfig");function d4(e){let t=Xa(Er.getPropsFilePath()),r=Vo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,on.HDB_CONFIG_FILE);$r.writeFileSync(s,String(r))}a(d4,"deleteConfigFromFile");function _4(){return uh||(dh(),uh)}a(_4,"getConfigObj");function f4(){return jt||dh(),jt}a(f4,"getFlatConfigObj")});var se=N((iD,oD)=>{"use strict";var Og=require("fs-extra"),Za=require("path"),tD=require("os"),E4=require("properties-reader"),Vd=W(),$d=te(),De=M(),_h=wt(),h4="Error initializing environment manager",fh="BOOT_PROPS_FILE_PATH",rD=!1,p4={[De.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Qi={};Object.assign(iD,oD.exports={BOOT_PROPS_FILE_PATH:fh,getHdbBasePath:m4,setHdbBasePath:S4,get:nD,initSync:g4,setProperty:Qe,initTestEnvironment:R4,setCloneVar:A4});function m4(){return Qi[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(m4,"getHdbBasePath");function S4(e){Qi[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(S4,"setHdbBasePath");function nD(e){let t=_h.getConfigValue(e);return t===void 0?Qi[e]:t}a(nD,"get");function Qe(e,t){p4[e]&&(Qi[e]=t),_h.updateConfigObject(e,t)}a(Qe,"setProperty");function T4(){let e;try{e=$d.getPropsFilePath(),Og.accessSync(e,Og.constants.F_OK|Og.constants.R_OK),rD=!0;let t=E4(e);return Qi[De.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(De.HDB_SETTINGS_NAMES.INSTALL_USER),Qi[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Qi[fh]=e,!0}catch{return Vd.trace(`Environment manager found no properties file at ${e}`),!1}}a(T4,"doesPropFileExist");function g4(e=!1){try{((rD||T4()||$d.noBootFile())&&!sD||e)&&(_h.initConfig(e),Qi[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=_h.getConfigValue(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Vd.error(h4),Vd.error(t),console.error(t),process.exit(1)}}a(g4,"initSync");var sD=!1;function A4(e){sD=e}a(A4,"setCloneVar");function R4(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Za.join(__dirname,"../../","unitTests");Qi[fh]=Za.join(l,"hdb_boot_properties.file"),Qe(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Za.join(l,"settings.test")),Qe(De.HDB_SETTINGS_NAMES.INSTALL_USER,tD.userInfo()?tD.userInfo().username:void 0),Qe(De.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Qe(De.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Za.join(l,"envDir","log")),Qe(De.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Qe(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Za.join(l,"envDir")),Qe(De.CONFIG_PARAMS.STORAGE_PATH,Za.join(l,"envDir")),s&&(Qe(De.CONFIG_PARAMS.HTTP_SECUREPORT,nD(De.CONFIG_PARAMS.HTTP_PORT)),Qe(De.CONFIG_PARAMS.HTTP_PORT,null)),Qe(De.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Qe(De.CONFIG_PARAMS.HTTP_PORT,9926),Qe(De.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Qe(De.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Qe(De.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,$d.isEmpty(i)?!1:i),Qe(De.CONFIG_PARAMS.HTTP_CORS,$d.isEmpty(i)?!1:i),Qe(De.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Qe(De.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Qe(De.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,$d.isEmpty(c)?!1:c),o&&(Qe("CORS_ACCESSLIST",o),Qe(De.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Qe(De.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Qe(De.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Qe(De.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${fh}. Please check your boot props and settings files`;Vd.fatal(r),Vd.error(t)}}a(R4,"initTestEnvironment")});var gt=N((Wge,fD)=>{"use strict";var zd=M(),y4=te(),an=se(),Qd=require("path"),b4=require("minimist"),aD=require("fs-extra"),cD=require("lodash");an.initSync();var{CONFIG_PARAMS:Ko,DATABASES_PARAM_CONFIG:Kd,SYSTEM_SCHEMA_NAME:Eh}=zd,Yd,Wd,jd;function lD(){if(Yd!==void 0)return Yd;if(an.getHdbBasePath()!==void 0)return Yd=an.get(Ko.STORAGE_PATH)||Qd.join(an.getHdbBasePath(),zd.DATABASES_DIR_NAME),Yd}a(lD,"getBaseSchemaPath");function uD(){if(Wd!==void 0)return Wd;if(an.getHdbBasePath()!==void 0)return Wd=_D(Eh),Wd}a(uD,"getSystemSchemaPath");function dD(){if(jd!==void 0)return jd;if(an.getHdbBasePath()!==void 0)return jd=an.get(zd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Qd.join(an.getHdbBasePath(),zd.TRANSACTIONS_DIR_NAME),jd}a(dD,"getTransactionAuditStoreBasePath");function O4(e,t){let r=an.get(Ko.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Qd.join(dD(),e.toString())}a(O4,"getTransactionAuditStorePath");function _D(e,t){e=e.toString(),t=t&&t.toString();let r=an.get(zd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Qd.join(lD(),e)}a(_D,"getSchemaPath");function N4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,b4(process.argv));let n=r[Ko.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!y4.isObject(n))throw o;i=n}for(let o of i){let c=o[Eh];if(!c)continue;let l=an.get(Ko.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Kd.PATH];if(u)return cD.set(l,[Eh,Kd.TABLES,t,Kd.PATH],u),an.setProperty(Ko.DATABASES,l),u;let d=c?.[Kd.PATH];if(d)return cD.set(l,[Eh,Kd.PATH],d),an.setProperty(Ko.DATABASES,l),d}}let s=r[Ko.STORAGE_PATH.toUpperCase()];if(s){if(!aD.pathExistsSync(s))throw new Error(s+" does not exist");let i=Qd.join(s,e);return aD.mkdirsSync(i),an.setProperty(Ko.STORAGE_PATH,s),i}return uD()}a(N4,"initSystemSchemaPaths");function I4(){Yd=void 0,Wd=void 0,jd=void 0}a(I4,"resetPaths");fD.exports={getBaseSchemaPath:lD,getSystemSchemaPath:uD,getTransactionAuditStorePath:O4,getTransactionAuditStoreBasePath:dD,getSchemaPath:_D,initSystemSchemaPaths:N4,resetPaths:I4}});var cn=N((Jge,SD)=>{"use strict";var w4=Dn().LMDB_ERRORS_ENUM,zge=require("lmdb"),C4=Ht(),Qge=require("buffer").Buffer,{OVERFLOW_MARKER:ED,MAX_SEARCH_KEY_LENGTH:hh}=C4,hD=["number","string","symbol","boolean","bigint"];function D4(e){if(e=e?.primaryStore||e,!e)throw new Error(w4.ENV_REQUIRED)}a(D4,"validateEnv");function P4(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(P4,"stringifyData");function L4(e){return e instanceof Date?e.valueOf():e}a(L4,"convertKeyValueToWrite");function M4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hD.includes(typeof e))return e.length>hh?[e.slice(0,hh)+ED]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hD.includes(typeof i))i.length>hh?r.push(i.slice(0,hh)+ED):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(M4,"getIndexedValues");var ph=0,pD=0;function mD(){pD=Date.now()-performance.now()}a(mD,"adjustStartTime");mD();var U4=6e4;setInterval(mD,U4).unref();function v4(){let e=performance.now()+pD;return e>ph?(ph=e,e):(ph+=488e-6,ph)}a(v4,"getNextMonotonicTime");SD.exports={validateEnv:D4,stringifyData:P4,convertKeyValueToWrite:L4,getNextMonotonicTime:v4,getIndexedValues:M4}});var Jd=N((Zge,TD)=>{"use strict";var B4=M().OPERATIONS_ENUM,Ng=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=B4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};TD.exports=Ng});var Xd=N((rAe,yD)=>{"use strict";var tAe=Jd(),mh=M(),Ig=te(),gD=W(),H4=require("uuid"),{handleHDBError:Sh,hdb_errors:x4}=_e(),{HDB_ERROR_MSGS:Th,HTTP_STATUS_CODES:gh}=x4;yD.exports=AD;function AD(e,t,r){for(let s=0;s<t.length;s++)RD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];k4(i,r,e.operation)}}a(AD,"processRows");AD.validateAttribute=RD;function RD(e){if(Buffer.byteLength(String(e))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Sh(new Error,Th.ATTR_NAME_LENGTH_ERR(e),gh.BAD_REQUEST,void 0,void 0,!0);if(Ig.isEmptyOrZeroLength(e)||Ig.isEmpty(e.trim()))throw Sh(new Error,Th.ATTR_NAME_NULLISH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(RD,"validateAttribute");function k4(e,t,r){if(!e.hasOwnProperty(t)||Ig.isEmptyOrZeroLength(e[t])){if(r===mh.OPERATIONS_ENUM.INSERT||r===mh.OPERATIONS_ENUM.UPSERT){e[t]=H4.v4();return}throw gD.error("Update transaction aborted due to record with no hash value:",e),Sh(new Error,Th.RECORD_MISSING_HASH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gD.error(e),Sh(new Error,Th.HASH_VAL_LENGTH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(k4,"validateHash")});var bD,Mn,wg,Ll=Ie(()=>{bD=require("events"),Mn=class extends bD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new wg;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},wg=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Pg={};je(Pg,{loadGQLSchema:()=>q4,start:()=>Dg,startOnMainThread:()=>G4});function Dg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(Y){if(Y.kind==="NonNullType"){let Q=H(Y.type);return Q.nullable=!1,Q}if(Y.kind==="ListType")return{type:"array",elements:H(Y.type)};let ne={type:Y.name?.value};return Object.defineProperty(ne,"location",{value:Y.loc.startToken}),ne};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let Y of g.directives){if(Y.name.value==="table"){for(let ne of Y.arguments)I[ne.name.value]=ne.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(Y.name.value==="sealed"&&(I.sealed=!0),Y.name.value==="splitSegments"&&(I.splitSegments=!0),Y.name.value==="replicate"&&(I.replicate=!0),Y.name.value==="export"){I.export=!0;for(let ne of Y.arguments)typeof I.export!="object"&&(I.export={}),I.export[ne.name.value]=ne.value.value}}let U=!1,X={};for(let Y of g.fields){let V=H(Y.type);V.name=Y.name.value,y.push(V),X[V.name]=void 0;for(let ne of Y.directives){let Q=ne.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",ne.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of ne.arguments||[])if(de.name.value==="from"){let j=de.value.value;V.computed={from:m(j,de,X)},V.version==null&&(V.version=j)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let j of ne.arguments)de[j.name.value]=j.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let j of ne.arguments)j.name.value==="role"&&de.push(j.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,ne.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):F4.includes(g.type)||(0,ND.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,Cg.dirname)(n),g.tableClass):i.set((0,Cg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new OD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var Cg,OD,ND,F4,G4,q4,ID=Ie(()=>{Cg=require("path"),OD=require("node:vm");Pe();ND=L(dt()),F4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Dg,"start");G4=Dg,q4=Dg({ensureTable:Et}).handleFile});var UD={};je(UD,{parse:()=>Mg,streamAsJSON:()=>Zd,stringify:()=>ec});function Zd(e){return new Lg({value:e})}function wD(e){return console.error(e),JSON.stringify(e.toString())}function CD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ec(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===LD)return MD(e);if(t.resolution)return t.resolution.then(()=>ec(e));throw t}}function MD(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=MD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ec(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Mg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),K4.test(e)?$4.parse(e):JSON.parse(e)):null}var DD,PD,$4,V4,LD,Lg,K4,Ug=Ie(()=>{DD=require("stream"),PD=L(require("json-bigint-fixes")),$4=(0,PD.default)({useNativeBigInt:!0}),V4=1e4,LD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw LD};a(Zd,"streamAsJSON");Lg=class extends DD.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),wD)}catch(s){yield wD(s)}else yield ec(t)}else yield ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);CD(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>V4?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 CD(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(wD,"handleError");a(CD,"when");a(ec,"stringify");a(MD,"jsStringify");K4=/[[,:]\s*-?\d{16,}/;a(Mg,"parse")});var WD=N((uAe,YD)=>{"use strict";var vg=require("recursive-iterator"),Y4=require("alasql"),Bg=require("clone"),vD=te(),{handleHDBError:BD,hdb_errors:W4}=_e(),{HDB_ERROR_MSGS:HD,HTTP_STATUS_CODES:xD}=W4,{getDatabases:j4}=(Pe(),oe(lt)),z4=["DISTINCT_ARRAY"],kD=Symbol("validateTables"),Hg=Symbol("validateTable"),lAe=Symbol("getAllColumns"),FD=Symbol("validateAllColumns"),Ah=Symbol("findColumn"),GD=Symbol("validateOrderBy"),e_=Symbol("validateSegment"),xg=Symbol("validateColumn"),qD=Symbol("setColumnsForTable"),$D=Symbol("checkColumnsForAsterisk"),VD=Symbol("validateGroupBy"),KD=Symbol("hasColumns"),kg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[kD](),this[$D](),this[FD]()}[kD](){if(this[KD]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Hg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Hg](t.table)})}}[KD](){let t=!1,r=new vg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Hg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=j4();if(!r[t.databaseid])throw BD(new Error,HD.SCHEMA_NOT_FOUND(t.databaseid),xD.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw BD(new Error,HD.TABLE_NOT_FOUND(t.databaseid,t.tableid),xD.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Bg(s);i.table=Bg(t),this.attributes.push(i)})}[Ah](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)}[$D](){let t=new vg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[qD](r.tableid)}[qD](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Y4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[FD](){this[e_](this.statement.columns,!1),this[e_](this.statement.joins,!1),this[e_](this.statement.where,!1),this[VD](this.statement.group,!1),this[e_](this.statement.order,!0)}[e_](t,r){if(!t)return;let n=new vg(t),s=[];for(let{node:i,path:o}of n)!vD.isEmpty(i)&&!vD.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[GD](i):s.push(this[xg](i)));return s}[VD](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&z4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Bg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Ah](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Ah](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[GD](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[xg](t)}[xg](t){let r=this[Ah](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};YD.exports=kg});var zD=N((_Ae,jD)=>{"use strict";var Fg=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};jD.exports=Fg});var JD=N((EAe,QD)=>{"use strict";var Gg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};QD.exports=Gg});var tP={};je(tP,{HAS_EXPIRATION:()=>bh,HAS_RESIDENCY_ID:()=>zg,HAS_STRUCTURE_UPDATE:()=>Oh,LAST_TIMESTAMP_PLACEHOLDER:()=>s_,LOCAL_TIMESTAMP:()=>Q4,METADATA:()=>t_,NO_TIMESTAMP:()=>$g,PENDING_LOCAL_TIME:()=>Qg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>jg,RecordEncoder:()=>Wg,TIMESTAMP_ASSIGN_LAST:()=>X4,TIMESTAMP_ASSIGN_NEW:()=>ZD,TIMESTAMP_ASSIGN_PREVIOUS:()=>eP,TIMESTAMP_PLACEHOLDER:()=>Rh,TIMESTAMP_RECORD_PREVIOUS:()=>Vg,getUpdateRecord:()=>Jg,handleLocalTimeForGets:()=>Nh});function eJ(){return n_[0]=n_[0]^64,J4.getFloat64(0)}function Nh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[t_]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tc.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<tc.length;l++){let u=tc[l].deref();(!u||u.isDone||u.isCommitted)&&tc.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Jg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Vg|eP:$g:Ml=l?i?.localTime?Vg|16384:ZD|16384:$g;let f=u?.expiresAt;if(f>=0&&(c|=bh),r_=c,Kg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ml>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Yg=S,r_|=zg,m|=rc),g!==S&&(m|=nc,g||(g=0)),c&bh&&(m|=o_),u?.originatingOperation&&(m|=i_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(yh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=Oh,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Ul(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,yh,m,S,g,f),{ifVersion:T}),y}}r.put(s_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,yh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var XD,qg,Rh,s_,jg,Q4,t_,n_,J4,$g,ZD,X4,eP,Vg,bh,zg,Qg,Oh,Z4,yh,Ml,r_,Kg,Yg,Wg,tc,vl=Ie(()=>{XD=require("msgpackr");Ji();qg=L(W()),Rh=new Uint8Array([1,1,1,1,4,64,0,0]),s_=new Uint8Array([1,1,1,1,1,0,0,0]),jg=new Uint8Array([1,1,1,1,3,64,0,0]),Q4=Symbol("local-timestamp"),t_=Symbol("metadata"),n_=new Uint8Array(8),J4=new DataView(n_.buffer,0,8),$g=0,ZD=0,X4=1,eP=3,Vg=4,bh=16,zg=32,Qg=1,Oh=256,Ml=0,r_=-1,Kg=-1,Yg=0,Wg=class extends XD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||r_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=r_,u=Kg,d=Yg;l>=0&&(o+=2,r_=-1,u>=0&&(o+=8,Kg=-1),d&&(o+=4,Yg=0));let _=Z4=r.call(this,s,i|2048|o);yh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Rh[4]=c,Rh[5]=c>>8,_.set(Rh,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(n_,0,c),c+=8;else for(let E=0;E<8;E++)n_[E]=t[c++];l=eJ(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&bh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&zg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[t_]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(eJ,"getTimestamp");a(Nh,"handleLocalTimeForGets");tc=[];setInterval(()=>{for(let e=0;e<tc.length;e++){let t=tc[e].deref();!t||t.isDone||t.isCommitted?tc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(qg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):qg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(Jg,"getUpdateRecord")});var a_=N((TAe,nP)=>{"use strict";var rP=se(),tJ=M(),{RecordEncoder:rJ}=(vl(),oe(tP)),SAe=require("fs");rP.initSync();var nJ=rP.get(tJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Xg=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=nJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:rJ})}};nP.exports=Xg});var c_=N((AAe,sP)=>{"use strict";var Un=se(),cs=M();Un.initSync();var Ih=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Un.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Un.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Un.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Un.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Un.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Un.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Un.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Un.get(cs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};sP.exports=Ih;Ih.MAX_DBS=1e4});var ht=N((yAe,EP)=>{"use strict";var eA=require("lmdb"),Fs=require("fs-extra"),vn=require("path"),wh=cn(),aP=W(),ln=Dn().LMDB_ERRORS_ENUM,Ch=JD(),tA=a_(),cP=c_(),Yo=Ht(),iP=M(),{table:sJ,resetDatabases:iJ}=(Pe(),oe(lt)),oP=se(),Gs=Yo.INTERNAL_DBIS_NAME,lP=Yo.DBI_DEFINITION_NAME,oJ="data.mdb",aJ="lock.mdb",l_=".mdb",cJ="-lock",Zg=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Yo.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Yo.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new eA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Dh(e,t){if(e===void 0)throw new Error(ln.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ln.ENV_NAME_REQUIRED)}a(Dh,"pathEnvNameValidation");async function rA(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(ln.INVALID_BASE_PATH):n}try{let n=vn.join(e,t+l_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(vn.join(e,t,oJ),Fs.constants.R_OK|Fs.constants.F_OK),vn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(ln.INVALID_ENVIRONMENT)}else throw new Error(ln.INVALID_ENVIRONMENT);throw n}}a(rA,"validateEnvironmentPath");function Ph(e,t){if(wh.validateEnv(e),t===void 0)throw new Error(ln.DBI_NAME_REQUIRED)}a(Ph,"validateEnvDBIName");async function lJ(e,t,r=!1,n=!1){Dh(e,t);let s=vn.basename(e);t=t.toString();let i=oP.get(iP.CONFIG_PARAMS.DATABASES);i||oP.setProperty(iP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await rA(e,t,n),uP(e,t,r)}catch(o){if(o.message===ln.INVALID_ENVIRONMENT){let c=vn.join(e,t);await Fs.mkdirp(n?c:e);let l=new cP(n?c:c+l_,!1),u=eA.open(l);u.dbis=Object.create(null);let d=new tA(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=nA(e,t,r);return u[Yo.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(lJ,"createEnvironment");async function uJ(e,t,r,n=!0){Dh(e,t),t=t.toString();let s=vn.join(e,t);return sJ({table:t,database:vn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(uJ,"copyEnvironment");async function uP(e,t,r=!1){Dh(e,t),t=t.toString();let n=nA(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await rA(e,t),i=vn.join(e,t+l_),o=s!=i,c=new cP(s,o),l=eA.open(c);l.dbis=Object.create(null);let u=_P(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Yo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(uP,"openEnvironment");async function dJ(e,t,r=!1){Dh(e,t),t=t.toString();let n=vn.join(e,t+l_),s=await rA(e,t);if(global.lmdb_map!==void 0){let i=nA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await dP(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+cJ:vn.join(vn.dirname(s),aJ))}a(dJ,"deleteEnvironment");async function dP(e){wh.validateEnv(e);let t=e[Yo.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(dP,"closeEnvironment");function nA(e,t,r=!1){let s=`${vn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(nA,"getCachedEnvironmentName");function _J(e){wh.validateEnv(e);let t=Object.create(null),r=ls(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Ch,s)}catch{aP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(_J,"listDBIDefinitions");function _P(e){wh.validateEnv(e);let t=[],r=ls(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(_P,"listDBIs");function fJ(e,t){let n=ls(e,Gs).getEntry(t),s=new Ch;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{aP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(fJ,"getDBIDefinition");function fP(e,t,r,n=!r){if(Ph(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ls(e,t)}catch(s){if(s.message===ln.DBI_DOES_NOT_EXIST){let i=new tA(r,n===!0),o=e.openDB(t,i),c=new Ch(r===!0,n);return o[lP]=c,ls(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(fP,"createDBI");function ls(e,t){if(Ph(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=fJ(e,t):r=new Ch,r===void 0)throw new Error(ln.DBI_DOES_NOT_EXIST);let n;try{let s=new tA(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(ln.DBI_DOES_NOT_EXIST):s}return n[lP]=r,e.dbis[t]=n,n}a(ls,"openDBI");function EJ(e,t){Ph(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Yo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(EJ,"statDBI");async function hJ(e,t){try{let r=vn.join(e,t+l_);return(await Fs.stat(r)).size}catch{throw new Error(ln.INVALID_ENVIRONMENT)}}a(hJ,"environmentDataSize");function pJ(e,t){if(Ph(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_DROP_INTERNAL_DBIS_NAME);ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ls(e,Gs).removeSync(t)}a(pJ,"dropDBI");function mJ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ls(e,i)}catch(o){if(o.message===ln.DBI_DOES_NOT_EXIST)fP(e,i,i!==t,i===t),n=!0;else throw o}}n&&iJ()}a(mJ,"initializeDBIs");EP.exports={openDBI:ls,openEnvironment:uP,createEnvironment:lJ,listDBIs:_P,listDBIDefinitions:_J,createDBI:fP,dropDBI:pJ,statDBI:EJ,deleteEnvironment:dJ,initializeDBIs:mJ,TransactionCursor:Zg,environmentDataSize:hJ,copyEnvironment:uJ,closeEnvironment:dP}});var pP=N((OAe,hP)=>{"use strict";var sA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};hP.exports=sA});var SP=N((IAe,mP)=>{"use strict";var iA=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};mP.exports=iA});var gP=N((CAe,TP)=>{"use strict";var oA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};TP.exports=oA});var ic=N((UAe,yP)=>{"use strict";var SJ=ht(),TJ=pP(),gJ=SP(),AJ=gP(),Si=cn(),u_=Dn().LMDB_ERRORS_ENUM,RJ=Ht(),Xi=M(),yJ=te(),bJ=require("uuid"),PAe=require("lmdb"),{handleHDBError:OJ,hdb_errors:NJ}=_e(),{OVERFLOW_MARKER:LAe,MAX_SEARCH_KEY_LENGTH:MAe}=RJ,AP=se();AP.initSync();var Lh=AP.get(Xi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aA=Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sc=Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function IJ(e,t,r,n,s=Si.getNextMonotonicTime()){dA(e,t,r,n),cA(e,t,r);let i=new TJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];RP(u,!0,s);let d=wJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return lA(o,c,n,i,s)}a(IJ,"insertRecords");function wJ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Xi.FUNC_VAL],n[o]=c)}let l=Si.getIndexedValues(c),u=e.dbis[o];if(l){Lh&&u.prefetch(l.map(d=>({key:d,value:s})),Mh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Lh&&e.dbis[t].prefetch([s],Mh),e.dbis[t].put(s,n,n[sc])})}a(wJ,"insertRecord");function CJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(CJ,"removeSkippedRecords");function RP(e,t,r){let n=r>0;(n||!Number.isInteger(e[sc]))&&(e[sc]=r||(r=Si.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[aA]))&&(e[aA]=r||Si.getNextMonotonicTime()):delete e[aA]}a(RP,"setTimestamps");function cA(e,t,r){r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),SJ.initializeDBIs(e,t,r)}a(cA,"initializeTransaction");async function DJ(e,t,r,n,s=Si.getNextMonotonicTime()){dA(e,t,r,n),cA(e,t,r);let i=new gJ,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=uA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return lA(c,l,n,i,s,o)}a(DJ,"updateRecords");async function PJ(e,t,r,n,s=Si.getNextMonotonicTime()){try{dA(e,t,r,n)}catch(l){throw OJ(l,l.message,NJ.HTTP_STATUS_CODES.BAD_REQUEST)}cA(e,t,r);let i=new AJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;yJ.isEmpty(u[t])?(d=bJ.v4(),u[t]=d):d=u[t];let _=uA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return lA(o,c,n,i,s)}a(PJ,"upsertRecords");async function lA(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Si.getNextMonotonicTime(),CJ(r,i),n}a(lA,"finalizeWrite");function uA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(RP(r,!d,o),Number.isInteger(r[sc])&&u[sc]>r[sc])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][Xi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=Si.getIndexedValues(g);if(S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=Si.getIndexedValues(T),S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[sc])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:uA(e,t,r,n,s,i,o))}a(uA,"updateUpsertRecord");function LJ(e,t,r){if(Si.validateEnv(e),t===void 0)throw new Error(u_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(u_.WRITE_ATTRIBUTES_REQUIRED):new Error(u_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(LJ,"validateBasic");function dA(e,t,r,n){if(LJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(u_.RECORDS_REQUIRED):new Error(u_.RECORDS_MUST_BE_ARRAY)}a(dA,"validateWrite");function Mh(){}a(Mh,"noop");yP.exports={insertRecords:IJ,updateRecords:DJ,upsertRecords:PJ}});var Zi=N((BAe,MJ)=>{MJ.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var gi=N((HAe,NP)=>{"use strict";var OP=te(),bP=M(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ti=require("joi"),Wo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},UJ=Ti.alternatives(Ti.string().min(1).max(Wo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Wo.schema_format.message}),Ti.number(),Ti.array()).required(),vJ=Ti.alternatives(Ti.string().min(1).max(Wo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Wo.schema_format.message}),Ti.number()),BJ=Ti.alternatives(Ti.string().min(1).max(Wo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Wo.schema_format.message}),Ti.number()).required();function HJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wo.schema_length.maximum?`'${e}' maximum of 250 characters`:Bl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(HJ,"checkValidTable");function xJ(e,t){return OP.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(xJ,"validateSchemaExists");function kJ(e,t){let r=t.state.ancestors[0].schema;return OP.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(kJ,"validateTableExists");function FJ(e,t){return e.toLowerCase()===bP.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${bP.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(FJ,"validateSchemaName");NP.exports={common_validators:Wo,schema_regex:Bl,hdb_schema_table:UJ,validateSchemaExists:xJ,validateTableExists:kJ,validateSchemaName:FJ,checkValidTable:HJ,hdb_database:vJ,hdb_table:BJ}});var Uh=N((kAe,IP)=>{var{common_validators:Ai}=gi(),__=Tt(),d_="is required",rr={database:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},schema:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},table:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},hash_attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length}};function f_(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(f_,"makeAttributesStrings");function GJ(e){return e=f_(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(GJ,"schema_object");function qJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(qJ,"table_object");function $J(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,__.validateObject(e,rr)}a($J,"create_table_object");function VJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence={message:d_},rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(VJ,"attribute_object");function KJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(KJ,"describe_table");function YJ(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(YJ,"validateTableResidence");IP.exports={schema_object:GJ,create_table_object:$J,table_object:qJ,attribute_object:VJ,describe_table:KJ,validateTableResidence:YJ}});var CP=N((GAe,wP)=>{"use strict";var WJ=require("uuid"),_A=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||WJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};wP.exports=_A});var vh=N(($Ae,DP)=>{"use strict";var jJ=CP(),fA=class extends jJ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};DP.exports=fA});var LP=N((KAe,PP)=>{"use strict";PP.exports=QJ;var zJ="inserted";function QJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===zJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(QJ,"returnObject")});var Bh=N((jAe,BP)=>{"use strict";var JJ=M(),EA=ht(),XJ=ic(),{getSystemSchemaPath:ZJ,getSchemaPath:e3}=gt(),WAe=Zi(),t3=Uh(),r3=vh(),n3=LP(),{handleHDBError:MP,hdb_errors:vP}=_e(),UP=te(),{HTTP_STATUS_CODES:s3}=vP,i3="inserted";BP.exports=o3;async function o3(e){let t=t3.attribute_object(e);if(t)throw MP(new Error,t.message,vP.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&UP.checkGlobalSchemaTable(e.schema,e.table);if(r)throw MP(new Error,r,s3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=UP.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new r3(e.schema,e.table,e.attribute,e.id);try{let i=await EA.openEnvironment(e3(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}`);EA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await EA.openEnvironment(ZJ(),JJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await XJ.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return n3(i3,c,{records:[s]},l)}catch(i){throw i}}a(o3,"lmdbCreateAttribute")});var pA=N((QAe,xP)=>{var{hdb_table:a3,hdb_database:HP}=gi(),c3=Tt(),hA=require("joi"),l3={undefined:"undefined",null:"null"},u3=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||l3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),d3=hA.object({database:HP,schema:HP,table:a3,records:hA.array().items(hA.object().custom(u3)).required()});xP.exports=function(e){return c3.validateBySchema(e,d3)}});var E_=N((ZAe,FP)=>{"use strict";var eo=te(),kP=W(),XAe=pA(),{getDatabases:_3}=(Pe(),oe(lt)),{ClientError:oc}=_e();FP.exports=f3;function f3(e){if(eo.isEmpty(e))throw new oc("invalid update parameters defined.");if(eo.isEmptyOrZeroLength(e.schema))throw new oc("invalid schema specified.");if(eo.isEmptyOrZeroLength(e.table))throw new oc("invalid table specified.");if(!Array.isArray(e.records))throw new oc("records must be an array");let t=_3()[e.schema]?.[e.table];if(eo.isEmpty(t))throw new oc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&eo.isEmptyOrZeroLength(o[r]))throw kP.error("a valid hash attribute must be provided with update record:",o),new oc("a valid hash attribute must be provided with update record, check log for more info");if(!eo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw kP.error(`a valid hash value must be provided with ${e.operation} record:`,o),new oc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!eo.isEmpty(o[r])&&o[r]!==""&&n.has(eo.autoCast(o[r]))&&(o.skip=!0),n.add(eo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(f3,"insertUpdateValidate")});var qP=N((tRe,GP)=>{"use strict";var mA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};GP.exports=mA});var KP=N((nRe,VP)=>{"use strict";var SA=ht(),E3=W(),$P=Dn().LMDB_ERRORS_ENUM;VP.exports=h3;async function h3(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 SA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==$P.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await SA.closeEnvironment(global.lmdb_map[n]),await SA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==$P.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){E3.error(t)}}a(h3,"cleanLMDBMap")});var to=N((iRe,zP)=>{"use strict";var h_=require("crypto"),p3=se(),{CONFIG_PARAMS:m3}=M(),WP="aes-256-cbc",S3=32,T3=16,TA=64,jP=32,g3=TA+jP,YP=new Map;zP.exports={encrypt:A3,decrypt:R3,createNatsTableStreamName:y3};function A3(e){let t=h_.randomBytes(S3),r=h_.randomBytes(T3),n=h_.createCipheriv(WP,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(A3,"encrypt");function R3(e){let t=e.substr(0,TA),r=e.substr(TA,jP),n=e.substr(g3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=h_.createDecipheriv(WP,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R3,"decrypt");function y3(e,t){let r=p3.get(m3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=YP.get(r);return n||(n=h_.createHash("md5").update(r).digest("hex"),YP.set(r,n)),n}a(y3,"createNatsTableStreamName")});var ro=N((cRe,XP)=>{"use strict";var aRe=Vr(),p_=W(),QP=Uh(),b3=to(),Hh=te(),{handleHDBError:xh,hdb_errors:O3}=_e(),{HDB_ERROR_MSGS:kh,HTTP_STATUS_CODES:gA}=O3,JP=se();JP.initSync();var{getDatabases:AA}=(Pe(),oe(lt)),N3=require("fs-extra"),I3=M();XP.exports={describeAll:w3,describeTable:Fh,describeSchema:C3};async function w3(e={}){try{let t=Hh.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=AA(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await Fh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Fh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){p_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return p_.error("Got an error in describeAll"),p_.error(t),xh(new Error,kh.DESCRIBE_ALL_ERR)}}a(w3,"describeAll");async function Fh(e,t){Hh.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=QP.describe_table(e);if(i)throw i;let c=AA()[r];if(!c)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),gA.NOT_FOUND);let l=c[n];if(!l)throw xh(new Error,kh.TABLE_NOT_FOUND(e.schema,e.table),gA.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await N3.stat(l.primaryStore.env.path)).size}catch(f){p_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),JP.get(I3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=b3.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){p_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Fh,"descTable");async function C3(e){Hh.transformReq(e);let t=QP.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=AA()[n];if(!i)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),gA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Hh.isEmpty(l)||l.describe){let u=await Fh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(C3,"describeSchema")});var us=N((_Re,nL)=>{var D3=Zi(),{callbackify:eL,promisify:P3}=require("util"),{getDatabases:tL}=(Pe(),oe(lt));nL.exports={setSchemaDataToGlobal:ZP,getTableSchema:L3,getSystemSchema:M3,setSchemaDataToGlobalAsync:P3(ZP)};var rL=ro(),uRe=eL(rL.describeAll),dRe=eL(rL.describeTable);function ZP(e){global.hdb_schema=tL(),e&&e()}a(ZP,"setSchemaDataToGlobal");function L3(e,t,r){let n=tL()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(L3,"getTableSchema");function M3(){return D3}a(M3,"getSystemSchema")});var un=N((ERe,aL)=>{"use strict";var qh=pA(),Cr=te(),U3=require("util"),$h=Bn(),v3=us(),sL=W(),{handleHDBError:ac,hdb_errors:B3}=_e(),{HTTP_STATUS_CODES:cc}=B3,H3=U3.promisify(v3.getTableSchema),x3="updated",iL="inserted",oL="upserted";aL.exports={insert:F3,update:G3,upsert:q3,validation:k3,flush:$3};async function k3(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await H3(e.schema,e.table),r=qh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw sL.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(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw sL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(k3,"validation");async function F3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await $h.createRecords(e);return Gh(iL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(F3,"insertData");async function G3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await $h.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Gh(x3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Gh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(G3,"updateData");async function q3(e){if(e.operation!=="upsert")throw ac(new Error,"invalid operation, must be upsert",cc.INTERNAL_SERVER_ERROR);let t=qh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await $h.upsertRecords(e);return Gh(oL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(q3,"upsertData");function Gh(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===iL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===oL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Gh,"returnObject");function $3(e){return Cr.transformReq(e),$h.flush(e.schema,e.table)}a($3,"flush")});var yA=N((pRe,uL)=>{var V3=Tt(),RA=require("joi"),{hdb_table:K3,hdb_database:cL}=gi(),lL={schema:cL,database:cL,table:K3},Y3={date:RA.date().iso().required()},W3={timestamp:RA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};uL.exports=function(e,t){let r=t==="timestamp"?{...lL,...W3}:{...lL,...Y3},n=RA.object(r);return V3.validateBySchema(e,n)}});var fL=N((mRe,_L)=>{var j3=Tt(),bA=require("joi"),{hdb_table:z3,hdb_database:dL}=gi(),Q3=bA.object({schema:dL,database:dL,table:z3,hash_values:bA.array().required(),ids:bA.array()});_L.exports=function(e){return j3.validateBySchema(e,Q3)}});var wA=N((SRe,EL)=>{"use strict";var OA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},NA=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},IA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};EL.exports={InsertObject:OA,NoSQLSeachObject:NA,DeleteResponseObject:IA}});var dc=N((gRe,TL)=>{"use strict";var pL=yA(),J3=fL(),lc=te(),hL=require("moment"),mL=W(),{promisify:X3,callbackify:Z3}=require("util"),uc=M(),eX=us(),CA=X3(eX.getTableSchema),DA=Bn(),{DeleteResponseObject:tX}=wA(),{handleHDBError:jo,hdb_errors:rX}=_e(),{HDB_ERROR_MSGS:Vh,HTTP_STATUS_CODES:zo}=rX,nX="records successfully deleted",sX=Z3(SL);TL.exports={delete:sX,deleteRecord:SL,deleteFilesBefore:iX,deleteAuditLogsBefore:oX};async function iX(e){let t=pL(e,"date");if(t)throw jo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),!hL(e.date,hL.ISO_8601).isValid())throw jo(new Error,Vh.INVALID_DATE,zo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,Vh.INVALID_DATE,!0);let n=lc.checkSchemaTableExist(e.schema,e.table);if(n)throw jo(new Error,n,zo.NOT_FOUND,uc.LOG_LEVELS.ERROR,n,!0);let s=await DA.deleteRecordsBefore(e);if(await CA(e.schema,e.table),mL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(iX,"deleteFilesBefore");async function oX(e){let t=pL(e,"timestamp");if(t)throw jo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),isNaN(e.timestamp))throw jo(new Error,Vh.INVALID_VALUE("Timestamp"),zo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,Vh.INVALID_VALUE("Timestamp"),!0);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw jo(new Error,r,zo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);let n=await DA.deleteAuditLogsBefore(e);return await CA(e.schema,e.table),mL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(oX,"deleteAuditLogsBefore");async function SL(e){e.ids&&(e.hash_values=e.ids);let t=J3(e);if(t)throw jo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);lc.transformReq(e);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw jo(new Error,r,zo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);try{await CA(e.schema,e.table);let n=await DA.deleteRecords(e);return lc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${nX}`),n}catch(n){if(n.message===uc.SEARCH_NOT_FOUND_MESSAGE){let s=new tX;return s.message=uc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(SL,"deleteRecord")});var Kh=N((RRe,RL)=>{var aX=require("crypto"),gL=9;function cX(e){let t=uX(gL),r=AL(e+t);return t+r}a(cX,"createHash");function lX(e,t){let r=e?.substr(0,gL),n=r+AL(t+r);return e===n}a(lX,"validateHash");function uX(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(uX,"generateSalt");function AL(e){return aX.createHash("md5").update(e).digest("hex")}a(AL,"md5");RL.exports={hash:cX,validate:lX}});var bL=N((bRe,yL)=>{var PA=Tt(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function dX(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,PA.validateObject(e,Kr)}a(dX,"addUserValidation");function _X(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,PA.validateObject(e,Kr)}a(_X,"alterUserValidation");function fX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,PA.validateObject(e,Kr)}a(fX,"dropUserValidation");yL.exports={addUserValidation:dX,alterUserValidation:_X,dropUserValidation:fX}});var Ct=N((IRe,NL)=>{"use strict";var{platform:NRe}=require("os"),EX="nats-server.zip",LA="nats-server",hX=process.platform==="win32"?`${LA}.exe`:LA,pX=/^[^\s.,*>]+$/,OL="__request__",mX=a(e=>`${e}.${OL}`,"REQUEST_SUBJECT"),SX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},TX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},gX={HUB:"hub.pid",LEAF:"leaf.pid"},AX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},RX={SUCCESS:"success",ERROR:"error"},yX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},bX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},OX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},NX={debug:"-D",trace:"-DVV"};NL.exports={NATS_SERVER_ZIP:EX,NATS_SERVER_NAME:LA,NATS_BINARY_NAME:hX,PID_FILES:gX,NATS_CONFIG_FILES:TX,SERVER_SUFFIX:AX,NATS_TERM_CONSTRAINTS_RX:pX,REQUEST_SUFFIX:OL,UPDATE_REMOTE_RESPONSE_STATUSES:RX,CLUSTER_STATUS_STATUSES:yX,REQUEST_SUBJECT:mX,SUBJECT_PREFIXES:bX,MSG_HEADERS:SX,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:NX,LOG_LEVEL_HIERARCHY:OX}});var wL=N((CRe,IL)=>{"use strict";var Yh=M(),Wh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Yh.RAM_ALLOCATION_ENUM.DEFAULT,n=Yh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},MA=class extends Wh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Yh.RAM_ALLOCATION_ENUM.DEFAULT,n=Yh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};IL.exports={BaseLicense:Wh,ExtendedLicense:MA}});var _c=N((PRe,vL)=>{"use strict";var kl=require("fs-extra"),DL=Kh(),PL=require("crypto"),IX=require("moment"),wX=require("uuid").v4,Yr=W(),vA=require("path"),CX=te(),Qo=M(),{totalmem:CL}=require("os"),DX=wL().ExtendedLicense,xl="invalid license key format",PX="061183",LX="mofi25",MX="aes-256-cbc",UX=16,vX=32,LL=se(),{resolvePath:ML}=wt();LL.initSync();var UA;vL.exports={validateLicense:UL,generateFingerPrint:HX,licenseSearch:xA,getLicense:FX,checkMemoryLimit:GX};function BA(){return vA.join(LL.getHdbBasePath(),Qo.LICENSE_KEY_DIR_NAME,Qo.LICENSE_FILE_NAME)}a(BA,"getLicenseDirPath");function BX(){let e=BA();return ML(vA.join(e,Qo.LICENSE_FILE_NAME))}a(BX,"getLicenseFilePath");function HA(){let e=BA();return ML(vA.join(e,Qo.REG_KEY_FILE_NAME))}a(HA,"getFingerPrintFilePath");async function HX(){let e=HA();try{return await kl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await xX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(HX,"generateFingerPrint");async function xX(){let e=wX(),t=DL.hash(e),r=HA();try{await kl.mkdirp(BA()),await kl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(xX,"writeFingerprint");function UL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Qo.RAM_ALLOCATION_ENUM.DEFAULT,version:Qo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=HA(),s=!1;try{s=kl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=kl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(LX),c=o[1];c=Buffer.concat([Buffer.from(c)],UX);let l=Buffer.concat([Buffer.from(i)],vX),u=PL.createDecipheriv(MX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=kX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xl),Yr.error(xl),new Error(xl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(xl),Yr.error(xl),new Error(xl)}else r.exp_date=d;r.exp_date<IX().valueOf()&&(r.valid_date=!1),DL.validate(o[1],`${PX}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Yr.error("Invalid licence"),r}a(UL,"validateLicense");function kX(e,t){try{let r=PL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(kX,"checkOldLicense");function xA(){let e=new DX,t=[];try{t=kl.readFileSync(BX(),"utf-8").split(Qo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(CX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=UL(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=Qo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return UA=e,e}a(xA,"licenseSearch");async function FX(){return UA||await xA(),UA}a(FX,"getLicense");function GX(){let e=xA().ram_allocation,t=process.constrainedMemory?.()||CL();if(t=Math.round(Math.min(t,CL())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(GX,"checkMemoryLimit")});var xn=N((BRe,JL)=>{"use strict";var kL="username is required",FL="nothing to update, must supply active, role or password to update",GL="password cannot be an empty string",qL="If role is specified, it cannot be empty.",$L="active must be true or false";JL.exports={addUser:QX,alterUser:JX,dropUser:ZX,getSuperUser:nZ,userInfo:eZ,listUsers:zh,listUsersExternal:tZ,setUsersToGlobal:Gl,findAndValidateUser:zL,getClusterUser:sZ,USERNAME_REQUIRED:kL,ALTERUSER_NOTHING_TO_UPDATE:FL,EMPTY_PASSWORD:GL,EMPTY_ROLE:qL,ACTIVE_BOOLEAN:$L};var VL=un(),qX=dc(),GA=Kh(),KL=bL(),YL=Vr(),qA=no(),Hn=te(),WL=require("validate.js"),Ke=W(),{promisify:$X}=require("util"),$A=to(),BL=M(),HL=Ct(),VX=wt(),MRe=se(),URe=_c(),KX=Zi(),{table:vRe}=(Pe(),oe(lt)),{handleHDBError:Ri,hdb_errors:YX}=_e(),{HTTP_STATUS_CODES:yi,AUTHENTICATION_ERROR_MSGS:kA,HDB_ERROR_MSGS:Fl}=YX,{UserEventMsg:VA}=qs(),FA=require("lodash"),{server:KA}=(qr(),oe(Ja)),WX=W();KA.getUser=(e,t)=>zL(e,t,t!=null);var jL={username:!0,active:!0,role:!0,password:!0},xL=new Map,jh=YL.searchByValue,jX=YL.searchByHash,zX=$X(qX.delete);async function QX(e){let t=WL.cleanAttributes(e,jL),r=KL.addUserValidation(t);if(r)throw Ri(new Error,r.message,yi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw Ri(new Error,Fl.ROLE_NAME_NOT_FOUND(t.role),yi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ri(new Error,Fl.DUP_ROLES_FOUND(t.role),yi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=$A.encrypt(t.password)),t.password=GA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await VL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Gl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw Ri(new Error,Fl.USER_ALREADY_EXISTS(t.username),yi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],qA.signalUserChange(new VA(process.pid)),`${c.username} successfully added`}a(QX,"addUser");async function JX(e){let t=WL.cleanAttributes(e,jL);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(kL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(FL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(GL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error($L);let r=XX(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=$A.encrypt(t.password)),t.password=GA.hash(t.password)),t.role==="")throw new Error(qL);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 jh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=Fl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),Ri(new Error,c,yi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ri(new Error,c,yi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await VL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Gl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return qA.signalUserChange(new VA(process.pid)),s}a(JX,"alterUser");function XX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(XX,"isClusterUser");async function ZX(e){try{let t=KL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw Ri(new Error,Fl.USER_NOT_EXIST(e.username),yi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await zX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Gl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return qA.signalUserChange(new VA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(ZX,"dropUser");async function eZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=FA.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await jX(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(eZ,"userInfo");async function tZ(){let e;try{e=await zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.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(tZ,"listUsersExternal");async function zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=FA.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=FA.cloneDeep(o),o.role=r[o.role],rZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(zh,"listUsers");function rZ(e){try{if(!e){Ke.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(KX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(rZ,"appendSystemTablesToRole");async function Gl(){try{let e=await zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Gl,"setUsersToGlobal");async function zL(e,t,r=!0){global.hdb_users||await Gl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ri(new Error,kA.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ri(new Error,kA.USER_INACTIVE,yi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(xL.get(t)===n.password)return s;if(GA.validate(n.password,t))xL.set(t,n.password);else throw Ri(new Error,kA.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(zL,"findAndValidateUser");async function nZ(){global.hdb_users||await Gl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(nZ,"getSuperUser");async function sZ(){let e=await zh(),t=VX.getConfigFromFile(BL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===BL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=$A.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+HL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+HL.SERVER_SUFFIX.ADMIN,r}a(sZ,"getClusterUser");var QL=[];KA.invalidateUser=function(e){for(let t of QL)try{t(e)}catch(r){WX.error("Error invalidating user",r)}};KA.onInvalidatedUser=function(e){QL.push(e)}});var S_=N((FRe,tM)=>{"use strict";var fc=W(),kn=M(),iZ=KP(),xRe=us(),kRe=ro(),oZ=xn(),{validateEvent:XL}=qs(),m_=Bn(),aZ=require("process"),{resetDatabases:cZ}=(Pe(),oe(lt)),lZ={[kn.ITC_EVENT_TYPES.SCHEMA]:uZ,[kn.ITC_EVENT_TYPES.USER]:eM};async function uZ(e){let t=XL(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await iZ(e.message),await dZ(e.message)}a(uZ,"schemaHandler");async function dZ(e){try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=cZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a(dZ,"syncSchemaMetadata");var ZL=[];async function eM(e){try{try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=XL(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${aZ.pid} received user event:`,e),await oZ.setUsersToGlobal();for(let r of ZL)r()}catch(t){fc.error(t)}}a(eM,"userHandler");eM.addListener=function(e){ZL.push(e)};tM.exports=lZ});var qs=N((YRe,nM)=>{"use strict";var qRe=W(),YA=te(),_Z=M(),{ITC_ERRORS:T_}=Dn(),{parentPort:$Re,threadId:fZ,isMainThread:EZ,workerData:VRe}=require("worker_threads"),{onMessageFromWorkers:hZ,broadcast:KRe,broadcastWithAcknowledgement:pZ}=dt();nM.exports={sendItcEvent:mZ,validateEvent:rM,SchemaEventMsg:SZ,UserEventMsg:TZ};var Qh;hZ(async(e,t)=>{Qh=Qh||S_(),rM(e),Qh[e.type]&&await Qh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mZ(e){return!EZ&&e.message&&(e.message.originator=fZ),pZ(e)}a(mZ,"sendItcEvent");function rM(e){if(typeof e!="object")return T_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||YA.isEmpty(e.type))return T_.MISSING_TYPE;if(!e.hasOwnProperty("message")||YA.isEmpty(e.message))return T_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||YA.isEmpty(e.message.originator))return T_.MISSING_ORIGIN;if(_Z.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return T_.INVALID_EVENT(e.type)}a(rM,"validateEvent");function SZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(SZ,"SchemaEventMsg");function TZ(e){this.originator=e}a(TZ,"UserEventMsg")});var no=N((zRe,aM)=>{"use strict";var sM=M(),jRe=te(),Jh=W(),iM=qP(),ql,{sendItcEvent:oM}=qs();function gZ(e){try{Jh.info("signalSchemaChange called with message:",e),ql=ql||S_();let t=new iM(sM.ITC_EVENT_TYPES.SCHEMA,e);return ql.schema(t),oM(t)}catch(t){Jh.error(t)}}a(gZ,"signalSchemaChange");function AZ(e){try{Jh.trace("signalUserChange called with message:",e),ql=ql||S_();let t=new iM(sM.ITC_EVENT_TYPES.USER,e);return ql.user(t),oM(t)}catch(t){Jh.error(t)}}a(AZ,"signalUserChange");aM.exports={signalSchemaChange:gZ,signalUserChange:AZ}});var Xh=N((JRe,lM)=>{"use strict";var cM=te(),RZ=M(),yZ=W(),bZ=Bh(),OZ=vh(),NZ=no(),{SchemaEventMsg:IZ}=qs(),wZ="already exists in";lM.exports=CZ;async function CZ(e,t,r){if(cM.isEmptyOrZeroLength(r))return r;let n=[];cM.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await DZ(e,t.schema,t.name,i)})),s}a(CZ,"lmdbCheckForNewAttributes");async function DZ(e,t,r,n){let s=new OZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await PZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wZ))yZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(DZ,"createNewAttribute");async function PZ(e){let t;return t=await bZ(e),NZ.signalSchemaChange(new IZ(process.pid,RZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(PZ,"createAttribute")});var $l=N((ZRe,uM)=>{"use strict";var WA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};uM.exports=WA});var _M=N((tye,dM)=>{"use strict";var LZ=$l(),MZ=M().OPERATIONS_ENUM,jA=class extends LZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(MZ.INSERT,r,n,s,i),this.records=t}};dM.exports=jA});var EM=N((nye,fM)=>{"use strict";var UZ=$l(),vZ=M().OPERATIONS_ENUM,zA=class extends UZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(vZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};fM.exports=zA});var pM=N((iye,hM)=>{"use strict";var BZ=$l(),HZ=M().OPERATIONS_ENUM,QA=class extends BZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};hM.exports=QA});var SM=N((aye,mM)=>{"use strict";var xZ=$l(),kZ=M().OPERATIONS_ENUM,JA=class extends xZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(kZ.DELETE,n,s,t,i),this.original_records=r}};mM.exports=JA});var g_=N((uye,RM)=>{"use strict";var lye=require("path"),TM=ht(),FZ=_M(),GZ=EM(),qZ=pM(),$Z=SM(),Vl=Ht(),gM=te(),{CONFIG_PARAMS:VZ}=M(),AM=se();AM.initSync();var Zh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:KZ}=gt();RM.exports=YZ;async function YZ(e,t){if(AM.get(VZ.LOGGING_AUDITLOG)===!1)return;let r=KZ(e.schema,e.table),n=await TM.openEnvironment(r,e.table,!0),s=WZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){TM.initializeDBIs(n,Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Vl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),gM.isEmpty(s.user_name)||n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(YZ,"writeTransaction");function WZ(e,t){let r=gM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Zh.INSERT)return new FZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Zh.UPDATE)return new GZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Zh.UPSERT)return new qZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Zh.DELETE)return new $Z(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(WZ,"createTransactionObject")});var XA=N((fye,yM)=>{"use strict";var jZ=E_(),_ye=Jd(),A_=M(),zZ=Xd(),QZ=ic().insertRecords,JZ=ht(),XZ=W(),ZZ=Xh(),{getSchemaPath:e5}=gt(),t5=g_();yM.exports=r5;async function r5(e){try{let{schema_table:t,attributes:r}=jZ(e);zZ(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ZZ(e.hdb_auth_header,t,r),s=e5(e.schema,e.table),i=await JZ.openEnvironment(s,e.table),o=await QZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await t5(e,o)}catch(c){XZ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(r5,"lmdbCreateRecords")});var NM=N((hye,OM)=>{"use strict";var bM=M(),n5=XA(),s5=Jd(),i5=require("fs-extra"),{getSchemaPath:o5}=gt();OM.exports=a5;async function a5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new s5(bM.SYSTEM_SCHEMA_NAME,bM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await n5(r),await i5.mkdirp(o5(e.schema))}a(a5,"lmdbCreateSchema")});var wM=N((mye,IM)=>{"use strict";var ZA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};IM.exports=ZA});var LM=N((Rye,PM)=>{"use strict";var CM=ht(),eR=cn(),tR=Dn().LMDB_ERRORS_ENUM,c5=Ht(),DM=W(),Tye=te(),l5=require("lmdb"),u5=wM(),d5=M(),{OVERFLOW_MARKER:gye,MAX_SEARCH_KEY_LENGTH:Aye}=c5,_5=d5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function f5(e,t,r,n){if(eR.validateEnv(e),t===void 0)throw new Error(tR.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(tR.IDS_REQUIRED):new Error(tR.IDS_MUST_BE_ITERABLE);try{let s=CM.listDBIs(e);CM.initializeDBIs(e,t,s);let i=new u5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[_5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,l5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=eR.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{DM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){DM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=eR.getNextMonotonicTime(),i}catch(s){throw s}}a(f5,"deleteRecords");PM.exports={deleteRecords:f5}});var R_=N((bye,UM)=>{"use strict";var Kl=te(),E5=LM(),h5=ht(),{getSchemaPath:p5}=gt(),m5=g_(),S5=W();UM.exports=T5;async function T5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Kl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Kl.isEmptyOrZeroLength(e.hash_values)&&!Kl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Kl.isEmpty(l)||e.hash_values.push(l)}}if(Kl.isEmptyOrZeroLength(e.hash_values))return MM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Kl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=p5(e.schema,e.table),i=await h5.openEnvironment(s,e.table),o=await E5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await m5(e,o)}catch(c){S5.error(`unable to write transaction due to ${c.message}`)}return MM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(T5,"lmdbDeleteRecords");function MM(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(MM,"createDeleteResponse")});var nR=N((Iye,vM)=>{"use strict";var g5=M(),Nye=cn();function rR(e,t){let r=Object.create(null);if(t.length===1&&g5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(rR,"parseRow");function A5(e,t,r,n){let s=rR(r,e);n.push(s)}a(A5,"searchAll");function R5(e,t,r,n){let s=rR(r,e);n[t]=s}a(R5,"searchAllToMap");function y5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(y5,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function b5(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(b5,"endsWith");function O5(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(O5,"contains");function N5(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(N5,"greaterThanCompare");function I5(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(I5,"greaterThanEqualCompare");function w5(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(w5,"lessThanCompare");function C5(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(C5,"lessThanEqualCompare");vM.exports={parseRow:rR,searchAll:A5,searchAllToMap:R5,iterateDBI:y5,endsWith:b5,contains:O5,greaterThanCompare:N5,greaterThanEqualCompare:I5,lessThanCompare:w5,lessThanEqualCompare:C5,pushResults:Ec}});var Yl=N((Lye,qM)=>{"use strict";var Jo=ht(),Cye=W(),Fn=cn(),ep=Ht(),zt=Dn().LMDB_ERRORS_ENUM,Dye=te(),D5=M(),tp=nR(),{parseRow:P5}=tp,Pye=require("lmdb"),{OVERFLOW_MARKER:BM,MAX_SEARCH_KEY_LENGTH:L5}=ep;function HM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(HM,"iterateFullIndex");function y_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(y_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Jo.openDBI(s,r);i[ep.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Jo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function xM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(BM)){if(!s)if(r)s=Jo.openDBI(e,r);else{let l=Jo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Jo.openDBI(e,l[u]),!s[ep.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(xM,"getOverflowCheck");function M5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(rp(r),r=b_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>P5(u.value,r))))}a(M5,"searchAll");function U5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);rp(r),r=b_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of HM(e,t,t,n,s,i))o.set(c,tp.parseRow(l,r));return o}a(U5,"searchAllToMap");function v5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=HM(e,void 0,t,r,n,s),c=o.transaction,l=xM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(v5,"iterateDBI");function B5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Jo.statDBI(e,t).entryCount}a(B5,"countAll");function H5(e,t,r,n,s=!1,i=void 0,o=void 0){return Xo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(H5,"equals");function x5(e,t,r){return Xo(e,t,r),Jo.openDBI(e,t).getValuesCount(r)}a(x5,"count");function k5(e,t,r,n,s=!1,i=void 0,o=void 0){return Xo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(k5,"startsWith");function F5(e,t,r,n,s=!1,i=void 0,o=void 0){return kM(e,t,r,n,s,i,o,!0)}a(F5,"endsWith");function kM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Xo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=xM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(BM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[ep.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(kM,"contains");function G5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!0,!1)}a(G5,"greaterThan");function q5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!1,!1)}a(q5,"greaterThanEqual");function $5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!0)}a($5,"lessThan");function V5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!1)}a(V5,"lessThanEqual");function K5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return y_(e,t,r,n,s,i,o,c)}a(K5,"between");function Y5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(rp(r),r=b_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=tp.parseRow(c,r)),o}a(Y5,"searchByHash");function W5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(W5,"checkHashExists");function j5(e,t,r,n,s=[]){return GM(e,t,r,n,s),FM(e,t,r,n,s).map(i=>i[1])}a(j5,"batchSearchByHash");function z5(e,t,r,n,s=[]){GM(e,t,r,n,s);let i=new Map;for(let[o,c]of FM(e,t,r,n,s))i.set(o,c);return i}a(z5,"batchSearchByHashToMap");function FM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=b_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,tp.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(FM,"batchHashSearch");function GM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(rp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(GM,"initializeBatchSearchByHash");function rp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(rp,"validateFetchAttributes");function Xo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>L5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Xo,"validateComparisonFunctions");function b_(e,t){return t.length===1&&D5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Jo.listDBIs(e)),t}a(b_,"setGetWholeRowAttributes");qM.exports={searchAll:M5,searchAllToMap:U5,count:x5,countAll:B5,equals:H5,startsWith:k5,endsWith:F5,contains:kM,searchByHash:Y5,setGetWholeRowAttributes:b_,batchSearchByHash:j5,batchSearchByHashToMap:z5,checkHashExists:W5,iterateDBI:v5,greaterThan:G5,greaterThanEqual:q5,lessThan:$5,lessThanEqual:V5,between:K5}});var Wl=N((Uye,WM)=>{var $M=require("lodash"),VM=Tt(),xe=require("joi"),Q5=te(),{hdb_schema_table:O_,checkValidTable:KM,hdb_table:YM,hdb_database:np}=gi(),{handleHDBError:J5,hdb_errors:X5}=_e(),{getDatabases:Z5}=(Pe(),oe(lt)),{HTTP_STATUS_CODES:e6}=X5,t6=xe.object({database:np,schema:np,table:YM,search_attribute:O_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),r6=xe.object({database:np,schema:np,table:YM,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(O_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(O_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});WM.exports=function(e,t){let r=null;switch(t){case"value":r=VM.validateBySchema(e,t6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(KM("database",e.schema)),i(KM("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=VM.validateBySchema(e,r6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Q5.checkGlobalSchemaTable(e.schema,e.table);if(s)return J5(new Error,s,e6.NOT_FOUND);let o=Z5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=$M.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!$M.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var sR=N((Bye,jM)=>{"use strict";var n6=ht(),s6=Wl(),{getSchemaPath:i6}=gt();jM.exports=o6;function o6(e){let t=s6(e,"hashes");if(t)throw t;let r=i6(e.schema,e.table);return n6.openEnvironment(r,e.table)}a(o6,"initialize")});var iR=N((xye,zM)=>{"use strict";var a6=Yl(),c6=sR();zM.exports=l6;async function l6(e){let t=await c6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return a6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(l6,"lmdbGetDataByHash")});var jl=N((Fye,QM)=>{"use strict";var oR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};QM.exports=oR});var XM=N(($ye,JM)=>{"use strict";var qye=jl(),u6=Yl(),d6=sR();JM.exports=_6;async function _6(e){let t=await d6(e),r=global.hdb_schema[e.schema][e.table];return u6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(_6,"lmdbSearchByHash")});var $s=N((Kye,ZM)=>{"use strict";var aR=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};ZM.exports=aR});var sp=N((Wye,iU)=>{"use strict";var Wr=Yl(),f6=ht(),E6=te(),ke=Ht(),pc=M(),h6=Zi(),eU=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:p6}=gt(),so=pc.SEARCH_WILDCARDS;async function m6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=h6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=sU(e,n.hash_attribute,r,t);return rU(e,s,n.hash_attribute,r)}a(m6,"prepSearch");async function rU(e,t,r,n){let s=p6(e.schema,e.table),i=await f6.openEnvironment(s,e.table),o=nU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(S6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?tU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?tU(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(rU,"executeSearch");function nU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(nU,"searchByType");function tU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(tU,"createMapFromIterable");function S6(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(S6,"checkToFetchMore");function sU(e,t,r,n){if(E6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),so.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(so[0])<0&&s.indexOf(so[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(so.indexOf(i)>=0&&so.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(so.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(so.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(so[0])||s.includes(so[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(eU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(eU.UNKNOWN_SEARCH_TYPE)}}a(sU,"createSearchTypeFromSearchObject");iU.exports={executeSearch:rU,createSearchTypeFromSearchObject:sU,prepSearch:m6,searchByType:nU}});var aU=N((Qye,oU)=>{"use strict";var zye=$s(),T6=Wl(),g6=te(),A6=M(),R6=sp();oU.exports=y6;function y6(e,t){if(!g6.isEmpty(t)&&A6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=T6(e,"value");if(n)throw n;return R6.prepSearch(e,t,!0)}a(y6,"lmdbGetDataByValue")});var N_=N((Zye,cU)=>{"use strict";var Xye=$s(),b6=Wl(),O6=te(),N6=M(),I6=sp();cU.exports=w6;async function w6(e,t){if(!O6.isEmpty(t)&&N6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=b6(e,"value");if(n)throw n;return I6.prepSearch(e,t,!1)}a(w6,"lmdbSearchByValue")});var uU=N((rbe,lU)=>{"use strict";var tbe=Ht(),cR=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},lR=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},uR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};lU.exports={SearchByConditionsObject:cR,SearchCondition:lR,SortAttribute:uR}});var hU=N((obe,EU)=>{"use strict";var sbe=uU().SearchByConditionsObject,C6=$s(),D6=Wl(),dR=Yl(),ip=Ht(),{Resource:ibe}=(Vs(),oe(_R)),fU=sp(),P6=nR(),L6=require("lodash"),{getSchemaPath:M6}=gt(),dU=ht(),{handleHDBError:U6,hdb_errors:v6}=_e(),{HTTP_STATUS_CODES:B6}=v6,H6=1e8;EU.exports=x6;async function x6(e){let t=D6(e,"conditions");if(t)throw U6(t,t.message,B6.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=M6(e.schema,e.table),n=await dU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)dU.openDBI(n,u.search_attribute);let i=L6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===ip.SEARCH_TYPES.EQUALS?u.estimated_count=dR.count(n,u.search_attribute,u.search_value):d===ip.SEARCH_TYPES.CONTAINS||d===ip.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=H6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await _U(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(fU.filterByType),_=d.length,E=dR.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>P6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await _U(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=dR.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(x6,"lmdbSearchByConditions");async function _U(e,t,r,n){let s=new C6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===ip.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,fU.searchByType(e,s,i,n).map(o=>o.value)}a(_U,"executeConditionSearch")});var I_=N((cbe,pU)=>{"use strict";var k6=M().OPERATIONS_ENUM,fR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=k6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};pU.exports=fR});var ER=N((ube,bU)=>{"use strict";var gU=$s(),AU=I_(),RU=N_(),yU=R_(),dn=M(),mU=te(),SU=ht(),{getTransactionAuditStorePath:F6,getSchemaPath:G6}=gt(),TU=W();bU.exports=q6;async function q6(e){try{if(mU.isEmpty(global.hdb_schema[e.schema])||mU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await $6(e),await V6(e);let t=G6(e.schema,e.table);try{await SU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")TU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=F6(e.schema,e.table);await SU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")TU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(q6,"lmdbDropTable");async function $6(e){let t=new gU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await RU(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new AU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await yU(s)}a($6,"deleteAttributesFromSystem");async function V6(e){let t=new gU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await RU(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new AU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await yU(s)}catch(i){throw i}}a(V6,"dropTableFromSystem")});var NU=N((_be,OU)=>{"use strict";var K6=require("fs-extra"),Y6=$s(),W6=jl(),j6=I_(),z6=ER(),Q6=R_(),J6=iR(),X6=N_(),io=M(),{getSchemaPath:Z6}=gt(),{handleHDBError:e8,hdb_errors:t8}=_e(),{HDB_ERROR_MSGS:r8,HTTP_STATUS_CODES:n8}=t8;OU.exports=s8;async function s8(e){let t;try{t=await i8(e.schema);let r=new Y6(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,io.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[io.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await X6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await z6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j6(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Q6(s);let i=Z6(t);await K6.remove(i)}catch(r){throw r}}a(s8,"lmdbDropSchema");async function i8(e){let t=new W6(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[io.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await J6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw e8(new Error,r8.SCHEMA_NOT_FOUND(e),n8.NOT_FOUND,void 0,void 0,!0);return n}a(i8,"validateDropSchema")});var w_=N((Ebe,IU)=>{"use strict";var hR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};IU.exports=hR});var mR=N((mbe,wU)=>{"use strict";var o8=require("fs-extra"),op=ht(),{getTransactionAuditStorePath:a8}=gt(),pR=Ht(),pbe=w_();wU.exports=c8;async function c8(e){let t;try{let r=a8(e.schema,e.table);await o8.mkdirp(r),t=await op.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{op.createDBI(t,pR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),op.createDBI(t,pR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),op.createDBI(t,pR.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(c8,"createTransactionsAuditEnvironment")});var PU=N((gbe,DU)=>{"use strict";var SR=M(),CU=ht(),l8=ic(),{getSystemSchemaPath:u8,getSchemaPath:d8}=gt(),Tbe=Zi(),_8=Bh(),TR=vh(),f8=W(),E8=mR();DU.exports=h8;async function h8(e,t){let r=d8(t.schema,t.table),n=new TR(t.schema,t.table,SR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new TR(t.schema,t.table,SR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new TR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await CU.createEnvironment(r,t.table),e!==void 0){let o=await CU.openEnvironment(u8(),SR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await l8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await gR(n),await gR(s),await gR(i)}await E8(t)}catch(o){throw o}}a(h8,"lmdbCreateTable");async function gR(e){try{await _8(e)}catch(t){f8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(gR,"createAttribute")});var MU=N((Rbe,LU)=>{"use strict";var p8=E_(),m8=Xd(),S8=Xh(),C_=M(),T8=ic().updateRecords,g8=ht(),{getSchemaPath:A8}=gt(),R8=g_(),y8=W();LU.exports=b8;async function b8(e){try{let{schema_table:t,attributes:r}=p8(e);m8(e,r,t.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await S8(e.hdb_auth_header,t,r),s=A8(e.schema,e.table),i=await g8.openEnvironment(s,e.table),o=await T8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await R8(e,o)}catch(c){y8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(b8,"lmdbUpdateRecords")});var vU=N((bbe,UU)=>{"use strict";var O8=M().OPERATIONS_ENUM,AR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=O8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};UU.exports=AR});var HU=N((Ibe,BU)=>{"use strict";var Nbe=vU(),N8=E_(),I8=Xd(),w8=Xh(),D_=M(),C8=ic().upsertRecords,D8=ht(),{getSchemaPath:P8}=gt(),L8=g_(),M8=W(),{handleHDBError:U8,hdb_errors:v8}=_e();BU.exports=B8;async function B8(e){let t;try{t=N8(e)}catch(l){throw U8(l,l.message,v8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;I8(e,n,r.hash_attribute),e.schema!==D_.SYSTEM_SCHEMA_NAME&&(n.includes(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await w8(e.hdb_auth_header,r,n),i=P8(e.schema,e.table),o=await D8.openEnvironment(i,e.table),c=await C8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await L8(e,c)}catch(l){M8.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(B8,"lmdbUpsertRecords")});var kU=N((Cbe,xU)=>{"use strict";var RR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};xU.exports=RR});var GU=N((Pbe,FU)=>{"use strict";var yR=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};FU.exports=yR});var VU=N((Ube,$U)=>{"use strict";var bR=ht(),{getTransactionAuditStorePath:H8}=gt(),Mbe=kU(),P_=Ht(),x8=te(),qU=GU(),k8=require("util").promisify,F8=k8(setTimeout),G8=1e4,q8=100;$U.exports=$8;async function $8(e){let t=H8(e.schema,e.table),r=await bR.openEnvironment(t,e.table,!0),n=bR.listDBIs(r);bR.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new qU;do s=await V8(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await F8(q8);while(s.transactions_deleted>0);return i}a($8,"deleteAuditLogsBefore");async function V8(e,t){let r=new qU;try{let n=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];x8.isEmpty(c)||(s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>G8)break}return await s,r}catch(n){throw n}}a(V8,"deleteTransactions")});var YU=N((Bbe,KU)=>{"use strict";var OR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};KU.exports=OR});var jU=N((kbe,WU)=>{"use strict";var K8=$s(),Y8=I_(),xbe=YU(),bi=M(),W8=te(),NR=ht(),j8=Zi(),z8=N_(),Q8=R_(),{getSchemaPath:J8}=gt();WU.exports=X8;async function X8(e,t=!0){let r;e.schema===bi.SYSTEM_SCHEMA_NAME?r=j8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await e9(e),s=J8(e.schema,e.table),i=await NR.openEnvironment(s,e.table);return t===!0&&await Z8(e,i,r.hash_attribute),NR.dropDBI(i,e.attribute),n}a(X8,"lmdbDropAttribute");async function Z8(e,t,r){let n=NR.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(Z8,"removeAttributeFromAllObjects");async function e9(e){let t=new K8(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await z8(t)).filter(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(W8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Y8(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Q8(i)}a(e9,"dropAttributeFromSystem")});var ev=N((qbe,ZU)=>{"use strict";var IR=ht(),zl=Ht(),Gbe=cn(),wR=M(),zU=te(),{getTransactionAuditStorePath:t9}=gt(),r9=Yl(),ap=$l(),n9=W();ZU.exports=s9;async function s9(e){let t=t9(e.schema,e.table),r=await IR.openEnvironment(t,e.table,!0),n=IR.listDBIs(r);IR.initializeDBIs(r,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return QU(r,e.search_values);case wR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,o9(r,e.search_values,s);case wR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return i9(r,e.search_values);default:return QU(r)}}a(s9,"readAuditLog");function QU(e,t=[0,Date.now()]){zU.isEmpty(t[0])&&(t[0]=0),zU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new ap,s))}a(QU,"searchTransactionsByTimestamp");function i9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,XU(e,i))}return Object.fromEntries(r)}a(i9,"searchTransactionsByUsername");function o9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=r9.equals(e,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=XU(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);JU(l,"records",r,d,o),JU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(o9,"searchTransactionsByHashValues");function JU(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new ap(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new ap(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(JU,"loopRecords");function XU(e,t){let r=[];try{let n=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new ap,i);r.push(o)}}catch(i){n9.warn(i)}return r}catch(n){throw n}}a(XU,"batchSearchTransactions")});var rv=N((Ybe,tv)=>{"use strict";var{getSchemaPath:Vbe}=gt(),Kbe=ht(),{database:a9}=(Pe(),oe(lt));tv.exports={writeTransaction:c9};async function c9(e,t,r){return a9({database:e,table:t}).transaction(r)}a(c9,"writeTransaction")});var ov=N((jbe,iv)=>{"use strict";var{getSchemaPath:nv}=gt(),sv=ht();iv.exports={flush:l9,resetReadTxn:u9};async function l9(e,t){return(await sv.openEnvironment(nv(e,t),t.toString())).flushed}a(l9,"flush");async function u9(e,t){try{(await sv.openEnvironment(nv(e,t),t.toString())).resetReadTxn()}catch{}}a(u9,"resetReadTxn")});var uv=N((Qbe,lv)=>{"use strict";var{Readable:d9}=require("stream"),{getDatabases:_9}=(Pe(),oe(lt)),{readSync:f9,openSync:E9,createReadStream:av}=require("fs"),{open:h9}=require("lmdb"),cv=a_(),p9=c_(),{AUDIT_STORE_OPTIONS:m9}=(Ji(),oe(dv)),{INTERNAL_DBIS_NAME:S9,AUDIT_STORE_NAME:T9}=Ht();lv.exports=A9;var CR=32768,g9=100;async function A9(e){let t=e.database||e.schema||"data",r=_9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=h9({noSync:!0,maxDbs:p9.MAX_DBS}),E,f=_.openDB(S9,new cv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%g9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new cv(!U,U);await m(S,H)}e.include_audit&&await m(T9,{...m9}),await E;let g=av(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=E9(o.path);return o.transaction(()=>{let u=Buffer.alloc(CR);f9(c,u,0,CR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=av(null,{fd:c,start:CR}),E=new d9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(A9,"getBackup")});var Ev=N((Xbe,fv)=>{"use strict";var R9=W(),{handleHDBError:y9}=_e(),b9=zD(),O9=Bh(),N9=XA(),I9=NM(),w9=R_(),C9=iR(),D9=XM(),P9=aU(),L9=N_(),M9=hU(),U9=NU(),v9=PU(),B9=MU(),H9=HU(),x9=VU(),k9=ER(),F9=jU(),G9=ev(),q9=rv(),_v=ov(),$9=uv(),DR=class extends b9{static{a(this,"LMDBBridge")}async searchByConditions(t){return M9(t)}async getDataByHash(t){return await C9(t)}async searchByHash(t){return await D9(t)}async getDataByValue(t,r){return await P9(t,r)}async searchByValue(t){return await L9(t)}async createSchema(t){return await I9(t)}async dropSchema(t){return await U9(t)}async createTable(t,r){return await v9(t,r)}async dropTable(t){return await k9(t)}async createAttribute(t){return await O9(t)}async createRecords(t){return await N9(t)}async updateRecords(t){return await B9(t)}async upsertRecords(t){try{return await H9(t)}catch(r){throw y9(r,null,null,R9.ERR,r)}}async deleteRecords(t){return await w9(t)}async dropAttribute(t){return await F9(t)}async deleteAuditLogsBefore(t){return await x9(t)}async readAuditLog(t){return await G9(t)}writeTransaction(t,r,n){return q9.writeTransaction(t,r,n)}flush(t,r){return _v.flush(t,r)}resetReadTxn(t,r){return _v.resetReadTxn(t,r)}getBackup(t){return $9(t)}};fv.exports=DR});function Rv(e){LR=e}function W9(){Y9=setInterval(function(){for(let e of PR)if(e.stale){let t=e[Fe]?.url;Sv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},K9).unref()}var MR,mv,Sv,Tv,gv,Av,hv,PR,V9,L_,pv,LR,mc,cp,K9,Y9,lp=Ie(()=>{MR=L(cn()),mv=L(_e()),Sv=L(W());Vs();Tv=L(se()),gv=L(M()),Av=L(te()),hv=100,PR=new Set,V9=(0,Av.convertToMS)(Tv.get(gv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Rv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),PR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(PR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(L_&&!this.overloadChecked&&performance.now()-pv>V9)throw new mv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,MR.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<hv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return L_||(L_=s,pv=performance.now(),L_.then(()=>{L_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];LR&&f&&i.push(LR(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+hv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},cp=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,MR.getNextMonotonicTime)())}getReadTxn(){}},K9=3e4;a(W9,"startMonitoringTxns");W9()});function Dt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var yv,Sc=Ie(()=>{yv=L(Ei());Vs();lp();a(Dt,"transaction");(0,yv._assignPackageExport)("transaction",Dt);Dt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Dt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var Pv={};je(Pv,{ResourceBridge:()=>BR});function HR({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 Ov(e,t){let r=Oi(e),n=HR(e,r);if(!r)throw new Ks.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Dt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&dp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Oi(e){let t=e.database||e.schema||z9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,j9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Nv(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*Iv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var wv,up,Ks,Cv,Ys,UR,vR,Dv,j9,z9,Q9,J9,bv,BR,Lv=Ie(()=>{"use strict";wv=L(Ev()),up=L(Wl()),Ks=L(_e());Pe();Cv=L(E_()),Ys=L(M()),UR=L(no()),vR=L(qs()),Dv=L(te());Sc();_p();({HDB_ERROR_MSGS:j9}=Ks.hdb_errors),z9="data",Q9=1e4,J9=10,BR=class extends wv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),bv=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,up.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Oi(t);if(!n)throw new Ks.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:HR(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ks.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Oi(t).dropTable()}createSchema(t){return Ql({database:t.schema,table:null}),UR.signalSchemaChange(new vR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xR(t.schema),UR.signalSchemaChange(new vR.SchemaEventMsg(process.pid,Ys.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,bv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Cv.default)(t),s,i=ut()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Dt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=dp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ut()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Dt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Nv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ys.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Dv.async_set_timeout)(J9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Q9===0&&await u();return l.length>0&&await u(),s?Nv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,up.default)(t,"hashes");if(r)throw r;return Ov(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Ov(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,up.default)(t,"value");if(n)throw n;let s=Oi(t);if(!s)throw new Ks.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===Ys.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:HR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Oi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(t),n={};switch(t.search_type){case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Iv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Iv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(HR,"getSelect");a(Ov,"getRecords");a(Oi,"getTable");a(Nv,"createDeleteResponse");a(Iv,"groupRecordsInHistory")});var Bn=N((fOe,Mv)=>{"use strict";var{ResourceBridge:X9}=(Lv(),oe(Pv)),Z9=se();Z9.initSync();var fp;function e7(){return fp||(fp=new X9,fp)}a(e7,"getBridge");Mv.exports=e7()});var Hv=N((hOe,Bv)=>{"use strict";var Uv=require("lodash"),M_=require("mathjs"),t7=require("jsonata"),vv=te();Bv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Uv.uniqWith(e,Uv.isEqual):e,"distinct_array"),searchJSON:r7,mad:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(U_,"aggregateFunction");function r7(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(vv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),vv.isEmpty(this.__ala__.res[r])){let n=t7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(r7,"searchJSON")});var kv=N((mOe,xv)=>{"use strict";var nr=require("moment"),kR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;xv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(kR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(kR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(kR),"offset_utc")}});var $v=N((TOe,qv)=>{"use strict";var n7=require("@turf/area"),s7=require("@turf/length"),i7=require("@turf/circle"),o7=require("@turf/difference"),a7=require("@turf/distance"),c7=require("@turf/boolean-contains"),l7=require("@turf/boolean-equal"),u7=require("@turf/boolean-disjoint"),d7=require("@turf/helpers"),Fv=M(),$e=te(),oo=W();qv.exports={geoArea:_7,geoLength:f7,geoCircle:E7,geoDifference:h7,geoDistance:Gv,geoNear:p7,geoContains:m7,geoEqual:S7,geoCrosses:T7,geoConvert:g7};function _7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return n7.default(e)}catch(t){return oo.trace(t,e),NaN}}a(_7,"geoArea");function f7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return s7.default(e,{units:t||"kilometers"})}catch(r){return oo.trace(r,e),NaN}}a(f7,"geoLength");function E7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return i7.default(e,t,{units:r||"kilometers"})}catch(n){return oo.trace(n,e,t),NaN}}a(E7,"geoCircle");function h7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return o7(e,t)}catch(r){return oo.trace(r,e,t),NaN}}a(h7,"geoDifference");function Gv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return a7.default(e,t,{units:r||"kilometers"})}catch(n){return oo.trace(n,e,t),NaN}}a(Gv,"geoDistance");function p7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Gv(e,t,n)<=r}catch(s){return oo.trace(s,e,t),!1}}a(p7,"geoNear");function m7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return c7.default(e,t)}catch(r){return oo.trace(r,e,t),!1}}a(m7,"geoContains");function S7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return l7.default(e,t)}catch(r){return oo.trace(r,e,t),!1}}a(S7,"geoEqual");function T7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!u7.default(e,t)}catch(r){return oo.trace(r,e,t),!1}}a(T7,"geoCrosses");function g7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Fv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Fv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),d7[t](e,r)}a(g7,"geoConvert")});var Ep=N((AOe,Vv)=>{var Tc=Hv(),Gn=kv(),Ni=$v();Vv.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ni.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ni.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ni.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ni.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ni.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ni.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ni.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ni.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ni.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ni.geoNear}});var jv=N((ROe,Wv)=>{"use strict";var v_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var A7=Ep(),Kv=require("clone"),hp=require("recursive-iterator"),Ue=W(),et=te(),Jl=Bn(),R7=M(),{hdb_errors:y7}=_e(),{getDatabases:Yv}=(Pe(),oe(lt)),b7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";A7(_n);var FR=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Ws)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}}_getColumns(){let t=new hp(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(Kv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=v_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=Yv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hp(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(R7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.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(et.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"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&v_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(Kv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.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(b7)>-1&&this.tables.forEach(s=>{let i={columnid:Yv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=v_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Jl.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await Jl.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Jl.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Jl.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(Ws)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof _n.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,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 l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.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(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=v_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hp(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=v_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Ws)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Jl.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(y7.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Jl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Wv.exports=FR});var Vr=N((bOe,zv)=>{"use strict";var O7=WD();zv.exports={searchByConditions:I7,searchByHash:w7,searchByValue:C7,search:D7};var GR=Bn(),{transformReq:qR}=te(),N7=jv();async function I7(e){return qR(e),GR.searchByConditions(e)}a(I7,"searchByConditions");async function w7(e){qR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of GR.searchByHash(e))r&&t.push(r);return t}a(w7,"searchByHash");async function C7(e){qR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of GR.searchByValue(e))t.push(r);return t}a(C7,"searchByValue");function D7(e,t){try{let r=new O7(e);r.validate(),new N7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(D7,"search")});var pp=N((NOe,Qv)=>{"use strict";var P7=Bn();Qv.exports={writeTransaction:L7};function L7(e,t,r){return P7.writeTransaction(e,t,r)}a(L7,"writeTransaction")});var e0=N((COe,Zv)=>{"use strict";var M7=Vr(),U7=us(),Jv=W(),v7=un(),wOe=pp(),B7=require("clone"),VR=require("alasql"),H7=Ep(),Xv=require("util"),x7=Xv.promisify(U7.getTableSchema),k7=Xv.promisify(M7.search),F7=M(),$R=te();H7(VR);Zv.exports={update:q7};var G7="There was a problem performing this update. Please check the logs and try again.";async function q7({statement:e,hdb_user:t}){let r=await x7(e.table.databaseid,e.table.tableid),n=$7(e.columns);$R.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=B7(s),c=$R.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=VR.parse(l).statements[0],d=await k7(u),_=V7(n,d);return K7(o,_,t)}a(q7,"update");function $7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=VR.compile(`SELECT ${r.expression.toString()} AS [${F7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Jv.error(t),new Error(G7)}}a($7,"createUpdateRecord");function V7(e,t){return $R.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(V7,"buildUpdateRecords");async function K7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await v7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Jv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(K7,"updateRecords")});var r0=N((MOe,t0)=>{var Y7=require("alasql"),W7=Vr(),j7=W(),z7=Bn(),YR=require("util"),KR=te(),Q7=M(),J7=us(),POe=pp(),LOe=un(),X7="record",Z7="successfully deleted",eee=YR.callbackify(see),tee=YR.promisify(W7.search),ree=YR.promisify(J7.getTableSchema);t0.exports={convertDelete:eee};function nee(e){return`${e.deleted_hashes.length} ${X7}${e.deleted_hashes.length===1?"":"s"} ${Z7}`}a(nee,"generateReturnMessage");async function see({statement:e,hdb_user:t}){let r=await ree(e.table.databaseid,e.table.tableid);KR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=KR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Y7.parse(o).statements[0],l={operation:Q7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await tee(c);let u=await z7.deleteRecords(l);return KR.isEmptyOrZeroLength(u.message)&&(u.message=nee(u)),delete u.txn_time,u}catch(u){throw j7.error(u),u.hdb_code?u.message:u}}a(see,"convertDelete")});var a0=N((vOe,o0)=>{"use strict";var iee=ro(),{hdb_errors:n0}=_e(),{getDatabases:s0}=(Pe(),oe(lt));o0.exports={checkSchemaExists:i0,checkSchemaTableExists:oee,schema_describe:iee};async function i0(e){if(!s0()[e])return n0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(i0,"checkSchemaExists");async function oee(e,t){let r=await i0(e);if(r)return r;if(!s0()[e][t])return n0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(oee,"checkSchemaTableExists")});var Xl=N((HOe,aee)=>{aee.exports={name:"harperdb",version:"4.4.26",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2",chokidar:"^4.0.3","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var F_={};je(F_,{addAnalyticsListener:()=>k_,recordAction:()=>pr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>cee});function cee(e){p0=e}function pr(e,t,r,n,s){if(!p0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Tp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Tp.set(i,o)}mp||lee()}function qn(e,t,r,n,s){pr(!!e,t,r,n,s)}function k_(e){T0.push(e)}function lee(){mp=performance.now(),setTimeout(async()=>{let e=performance.now()-mp;mp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of Tp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of g0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await A0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of T0)s(t);Tp=new Map,gc.parentPort?gc.parentPort.postMessage({type:S0,report:r}):b0({report:r})},m0).unref()}async function uee(e,t=6e4){let r=zR(),n=R0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...ne):l.set(j,ne)}}await A0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of g0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,Y,V,ne,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Sp.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Sp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-c0,active:h-l0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}c0=f,l0=h}async function u0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function zR(){return d0||(d0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function R0(){return _0||(_0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function fee(){y0=!0;let e=(0,x_.get)(jR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await uee(m0,e),await u0(zR(),dee),await u0(R0(),_ee)},Math.min(e/2,2147483647)).unref()}function b0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(f0+=n.mean*n.count);r.totalBytesProcessed=f0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(E0.get(t))}),E0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Sp.getNextMonotonicTime)(),zR().primaryStore.put(r.id,r),y0||fee(),Eee&&(O0=pee(r))}async function pee(e){if(await O0,!Zo){let r=(0,H_.dirname)((0,B_.getLogFilePath)());try{Zo=await(0,WR.open)((0,H_.join)(r,"analytics.log"),"r+")}catch{Zo=await(0,WR.open)((0,H_.join)(r,"analytics.log"),"w+")}}let t=(await Zo.stat()).size;if(t>hee){let r=Buffer.alloc(t);await Zo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Zo.write(r,{position:0}),await Zo.truncate(r.length),t=r.length}await Zo.write(JSON.stringify(e)+`
|
|
11
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw hr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}r4(n,r),yg(n);let s=n.toJSON();if(W2.config=s,jt=Pl(s),jt.logging_rotation_rotate)for(let i in YC)jt[i]&&hr.error(`Config ${YC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);hr.trace(z2)}}a(dh,"initConfig");function r4(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(hr.trace("Updating config file with missing config params"),$r.writeFileSync(t,String(e)))}a(r4,"checkForUpdatedConfig");function yg(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw Dl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw Dl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=q2(r,t);if(n.error)throw Dl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(yg,"validateConfig");function n4(e,t){jt===void 0&&(jt={});let r=ks[e.toLowerCase()];if(r===void 0){hr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(n4,"updateConfigObject");function XC(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&dh();let o=JC(ks.hdb_root),c=Ln.join(o,on.HDB_CONFIG_FILE),l=Vo(c),u;if(r===void 0&&e.toLowerCase()===Pn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=ks[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Rg(E,t);l.setIn([...f],h)}else for(let E in r){let f=ks[E.toLowerCase()];if(f===Pn.HTTP_SECUREPORT&&r[E]===jt[Pn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Pn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[Pn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Pn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=on.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=Rg(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){hr.error(g)}}}u&&QC(l,u),yg(l);let d=l.getIn(["rootPath"]),_=Ln.join(d,on.HDB_CONFIG_FILE);n===!0&&s4(c,d),$r.writeFileSync(_,String(l)),s&&(jt=Pl(l.toJSON())),hr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(XC,"updateConfigValue");function s4(e,t){try{let r=Ln.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${on.HDB_CONFIG_FILE}.bak`);$r.copySync(e,r),hr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){hr.error(Q2),hr.error(r)}}a(s4,"backupConfigFile");var i4=["databases"];function Pl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),uh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!i4.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Pn[l.toUpperCase()]&&ks[l]&&(s[ks[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Pl,"flattenConfig");function Rg(e,t){if(e===Pn.CLUSTERING_NODENAME||e===Pn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if($2(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Er.autoCast(t)}a(Rg,"castConfigValue");function o4(){let e=Er.getPropsFilePath(),t=Xa(e);return Vo(t).toJSON()}a(o4,"getConfiguration");async function a4(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return XC(void 0,void 0,s,!0),Z2}catch(i){throw typeof i=="string"||i instanceof String?K2(i,i,Y2.BAD_REQUEST,void 0,void 0,!0):i}}a(a4,"setConfiguration");function bg(){let e=Er.getPropsFilePath();try{$r.accessSync(e,$r.constants.F_OK|$r.constants.R_OK)}catch(n){if(!Er.noBootFile())throw hr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xa(e);return Vo(t).toJSON()}a(bg,"readConfigFile");function Vo(e){return WC.parseDocument($r.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Vo,"parseYamlDoc");function c4(){let e=bg(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=KC(t);if(r)throw Dl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=KC(n);if(s)throw Dl.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Dl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(c4,"getClusteringRoutes");function ZC(e){let t=jC(e);jt={};for(let r in ks){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Pn.LOGGING_ROOT?jt[s]=Ln.dirname(n):jt[s]=n}return jt}a(ZC,"initOldConfig");function l4(e){let t=bg();return V2.get(t,e.replaceAll("_","."))}a(l4,"getConfigFromFile");async function u4(e,t){let r=Vo(Xa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await $r.writeFile(Xa(),String(r))}a(u4,"addConfig");function d4(e){let t=Xa(Er.getPropsFilePath()),r=Vo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,on.HDB_CONFIG_FILE);$r.writeFileSync(s,String(r))}a(d4,"deleteConfigFromFile");function _4(){return uh||(dh(),uh)}a(_4,"getConfigObj");function f4(){return jt||dh(),jt}a(f4,"getFlatConfigObj")});var se=N((iD,oD)=>{"use strict";var Og=require("fs-extra"),Za=require("path"),tD=require("os"),E4=require("properties-reader"),Vd=W(),$d=te(),De=M(),_h=wt(),h4="Error initializing environment manager",fh="BOOT_PROPS_FILE_PATH",rD=!1,p4={[De.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Qi={};Object.assign(iD,oD.exports={BOOT_PROPS_FILE_PATH:fh,getHdbBasePath:m4,setHdbBasePath:S4,get:nD,initSync:g4,setProperty:Qe,initTestEnvironment:R4,setCloneVar:A4});function m4(){return Qi[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(m4,"getHdbBasePath");function S4(e){Qi[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(S4,"setHdbBasePath");function nD(e){let t=_h.getConfigValue(e);return t===void 0?Qi[e]:t}a(nD,"get");function Qe(e,t){p4[e]&&(Qi[e]=t),_h.updateConfigObject(e,t)}a(Qe,"setProperty");function T4(){let e;try{e=$d.getPropsFilePath(),Og.accessSync(e,Og.constants.F_OK|Og.constants.R_OK),rD=!0;let t=E4(e);return Qi[De.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(De.HDB_SETTINGS_NAMES.INSTALL_USER),Qi[De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Qi[fh]=e,!0}catch{return Vd.trace(`Environment manager found no properties file at ${e}`),!1}}a(T4,"doesPropFileExist");function g4(e=!1){try{((rD||T4()||$d.noBootFile())&&!sD||e)&&(_h.initConfig(e),Qi[De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=_h.getConfigValue(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Vd.error(h4),Vd.error(t),console.error(t),process.exit(1)}}a(g4,"initSync");var sD=!1;function A4(e){sD=e}a(A4,"setCloneVar");function R4(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Za.join(__dirname,"../../","unitTests");Qi[fh]=Za.join(l,"hdb_boot_properties.file"),Qe(De.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Za.join(l,"settings.test")),Qe(De.HDB_SETTINGS_NAMES.INSTALL_USER,tD.userInfo()?tD.userInfo().username:void 0),Qe(De.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Qe(De.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Za.join(l,"envDir","log")),Qe(De.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Qe(De.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Za.join(l,"envDir")),Qe(De.CONFIG_PARAMS.STORAGE_PATH,Za.join(l,"envDir")),s&&(Qe(De.CONFIG_PARAMS.HTTP_SECUREPORT,nD(De.CONFIG_PARAMS.HTTP_PORT)),Qe(De.CONFIG_PARAMS.HTTP_PORT,null)),Qe(De.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Qe(De.CONFIG_PARAMS.HTTP_PORT,9926),Qe(De.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Qe(De.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Qe(De.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,$d.isEmpty(i)?!1:i),Qe(De.CONFIG_PARAMS.HTTP_CORS,$d.isEmpty(i)?!1:i),Qe(De.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Qe(De.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Qe(De.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Qe(De.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,$d.isEmpty(c)?!1:c),o&&(Qe("CORS_ACCESSLIST",o),Qe(De.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Qe(De.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Qe(De.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Qe(De.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Qe(De.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${fh}. Please check your boot props and settings files`;Vd.fatal(r),Vd.error(t)}}a(R4,"initTestEnvironment")});var gt=N((Wge,fD)=>{"use strict";var zd=M(),y4=te(),an=se(),Qd=require("path"),b4=require("minimist"),aD=require("fs-extra"),cD=require("lodash");an.initSync();var{CONFIG_PARAMS:Ko,DATABASES_PARAM_CONFIG:Kd,SYSTEM_SCHEMA_NAME:Eh}=zd,Yd,Wd,jd;function lD(){if(Yd!==void 0)return Yd;if(an.getHdbBasePath()!==void 0)return Yd=an.get(Ko.STORAGE_PATH)||Qd.join(an.getHdbBasePath(),zd.DATABASES_DIR_NAME),Yd}a(lD,"getBaseSchemaPath");function uD(){if(Wd!==void 0)return Wd;if(an.getHdbBasePath()!==void 0)return Wd=_D(Eh),Wd}a(uD,"getSystemSchemaPath");function dD(){if(jd!==void 0)return jd;if(an.getHdbBasePath()!==void 0)return jd=an.get(zd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Qd.join(an.getHdbBasePath(),zd.TRANSACTIONS_DIR_NAME),jd}a(dD,"getTransactionAuditStoreBasePath");function O4(e,t){let r=an.get(Ko.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Qd.join(dD(),e.toString())}a(O4,"getTransactionAuditStorePath");function _D(e,t){e=e.toString(),t=t&&t.toString();let r=an.get(zd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Qd.join(lD(),e)}a(_D,"getSchemaPath");function N4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,b4(process.argv));let n=r[Ko.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!y4.isObject(n))throw o;i=n}for(let o of i){let c=o[Eh];if(!c)continue;let l=an.get(Ko.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Kd.PATH];if(u)return cD.set(l,[Eh,Kd.TABLES,t,Kd.PATH],u),an.setProperty(Ko.DATABASES,l),u;let d=c?.[Kd.PATH];if(d)return cD.set(l,[Eh,Kd.PATH],d),an.setProperty(Ko.DATABASES,l),d}}let s=r[Ko.STORAGE_PATH.toUpperCase()];if(s){if(!aD.pathExistsSync(s))throw new Error(s+" does not exist");let i=Qd.join(s,e);return aD.mkdirsSync(i),an.setProperty(Ko.STORAGE_PATH,s),i}return uD()}a(N4,"initSystemSchemaPaths");function I4(){Yd=void 0,Wd=void 0,jd=void 0}a(I4,"resetPaths");fD.exports={getBaseSchemaPath:lD,getSystemSchemaPath:uD,getTransactionAuditStorePath:O4,getTransactionAuditStoreBasePath:dD,getSchemaPath:_D,initSystemSchemaPaths:N4,resetPaths:I4}});var cn=N((Jge,SD)=>{"use strict";var w4=Dn().LMDB_ERRORS_ENUM,zge=require("lmdb"),C4=Ht(),Qge=require("buffer").Buffer,{OVERFLOW_MARKER:ED,MAX_SEARCH_KEY_LENGTH:hh}=C4,hD=["number","string","symbol","boolean","bigint"];function D4(e){if(e=e?.primaryStore||e,!e)throw new Error(w4.ENV_REQUIRED)}a(D4,"validateEnv");function P4(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(P4,"stringifyData");function L4(e){return e instanceof Date?e.valueOf():e}a(L4,"convertKeyValueToWrite");function M4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hD.includes(typeof e))return e.length>hh?[e.slice(0,hh)+ED]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hD.includes(typeof i))i.length>hh?r.push(i.slice(0,hh)+ED):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(M4,"getIndexedValues");var ph=0,pD=0;function mD(){pD=Date.now()-performance.now()}a(mD,"adjustStartTime");mD();var U4=6e4;setInterval(mD,U4).unref();function v4(){let e=performance.now()+pD;return e>ph?(ph=e,e):(ph+=488e-6,ph)}a(v4,"getNextMonotonicTime");SD.exports={validateEnv:D4,stringifyData:P4,convertKeyValueToWrite:L4,getNextMonotonicTime:v4,getIndexedValues:M4}});var Jd=N((Zge,TD)=>{"use strict";var B4=M().OPERATIONS_ENUM,Ng=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=B4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};TD.exports=Ng});var Xd=N((rAe,yD)=>{"use strict";var tAe=Jd(),mh=M(),Ig=te(),gD=W(),H4=require("uuid"),{handleHDBError:Sh,hdb_errors:x4}=_e(),{HDB_ERROR_MSGS:Th,HTTP_STATUS_CODES:gh}=x4;yD.exports=AD;function AD(e,t,r){for(let s=0;s<t.length;s++)RD(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];k4(i,r,e.operation)}}a(AD,"processRows");AD.validateAttribute=RD;function RD(e){if(Buffer.byteLength(String(e))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Sh(new Error,Th.ATTR_NAME_LENGTH_ERR(e),gh.BAD_REQUEST,void 0,void 0,!0);if(Ig.isEmptyOrZeroLength(e)||Ig.isEmpty(e.trim()))throw Sh(new Error,Th.ATTR_NAME_NULLISH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(RD,"validateAttribute");function k4(e,t,r){if(!e.hasOwnProperty(t)||Ig.isEmptyOrZeroLength(e[t])){if(r===mh.OPERATIONS_ENUM.INSERT||r===mh.OPERATIONS_ENUM.UPSERT){e[t]=H4.v4();return}throw gD.error("Update transaction aborted due to record with no hash value:",e),Sh(new Error,Th.RECORD_MISSING_HASH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>mh.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gD.error(e),Sh(new Error,Th.HASH_VAL_LENGTH_ERR,gh.BAD_REQUEST,void 0,void 0,!0)}a(k4,"validateHash")});var bD,Mn,wg,Ll=Ie(()=>{bD=require("events"),Mn=class extends bD.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new wg;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},wg=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Pg={};je(Pg,{loadGQLSchema:()=>q4,start:()=>Dg,startOnMainThread:()=>G4});function Dg({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(Y){if(Y.kind==="NonNullType"){let Q=H(Y.type);return Q.nullable=!1,Q}if(Y.kind==="ListType")return{type:"array",elements:H(Y.type)};let ne={type:Y.name?.value};return Object.defineProperty(ne,"location",{value:Y.loc.startToken}),ne};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let Y of g.directives){if(Y.name.value==="table"){for(let ne of Y.arguments)I[ne.name.value]=ne.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(Y.name.value==="sealed"&&(I.sealed=!0),Y.name.value==="splitSegments"&&(I.splitSegments=!0),Y.name.value==="replicate"&&(I.replicate=!0),Y.name.value==="export"){I.export=!0;for(let ne of Y.arguments)typeof I.export!="object"&&(I.export={}),I.export[ne.name.value]=ne.value.value}}let U=!1,X={};for(let Y of g.fields){let V=H(Y.type);V.name=Y.name.value,y.push(V),X[V.name]=void 0;for(let ne of Y.directives){let Q=ne.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",ne.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of ne.arguments||[])if(de.name.value==="from"){let j=de.value.value;V.computed={from:m(j,de,X)},V.version==null&&(V.version=j)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let j of ne.arguments)de[j.name.value]=j.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let j of ne.arguments)j.name.value==="role"&&de.push(j.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,ne.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):F4.includes(g.type)||(0,ND.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,Cg.dirname)(n),g.tableClass):i.set((0,Cg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new OD.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var Cg,OD,ND,F4,G4,q4,ID=Ie(()=>{Cg=require("path"),OD=require("node:vm");Pe();ND=L(dt()),F4=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Dg,"start");G4=Dg,q4=Dg({ensureTable:Et}).handleFile});var UD={};je(UD,{parse:()=>Mg,streamAsJSON:()=>Zd,stringify:()=>ec});function Zd(e){return new Lg({value:e})}function wD(e){return console.error(e),JSON.stringify(e.toString())}function CD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function ec(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===LD)return MD(e);if(t.resolution)return t.resolution.then(()=>ec(e));throw t}}function MD(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=MD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+ec(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function Mg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),K4.test(e)?$4.parse(e):JSON.parse(e)):null}var DD,PD,$4,V4,LD,Lg,K4,Ug=Ie(()=>{DD=require("stream"),PD=L(require("json-bigint-fixes")),$4=(0,PD.default)({useNativeBigInt:!0}),V4=1e4,LD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw LD};a(Zd,"streamAsJSON");Lg=class extends DD.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),wD)}catch(s){yield wD(s)}else yield ec(t)}else yield ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);CD(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>V4?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 CD(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(wD,"handleError");a(CD,"when");a(ec,"stringify");a(MD,"jsStringify");K4=/[[,:]\s*-?\d{16,}/;a(Mg,"parse")});var WD=N((uAe,YD)=>{"use strict";var vg=require("recursive-iterator"),Y4=require("alasql"),Bg=require("clone"),vD=te(),{handleHDBError:BD,hdb_errors:W4}=_e(),{HDB_ERROR_MSGS:HD,HTTP_STATUS_CODES:xD}=W4,{getDatabases:j4}=(Pe(),oe(lt)),z4=["DISTINCT_ARRAY"],kD=Symbol("validateTables"),Hg=Symbol("validateTable"),lAe=Symbol("getAllColumns"),FD=Symbol("validateAllColumns"),Ah=Symbol("findColumn"),GD=Symbol("validateOrderBy"),e_=Symbol("validateSegment"),xg=Symbol("validateColumn"),qD=Symbol("setColumnsForTable"),$D=Symbol("checkColumnsForAsterisk"),VD=Symbol("validateGroupBy"),KD=Symbol("hasColumns"),kg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[kD](),this[$D](),this[FD]()}[kD](){if(this[KD]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Hg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Hg](t.table)})}}[KD](){let t=!1,r=new vg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Hg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=j4();if(!r[t.databaseid])throw BD(new Error,HD.SCHEMA_NOT_FOUND(t.databaseid),xD.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw BD(new Error,HD.TABLE_NOT_FOUND(t.databaseid,t.tableid),xD.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Bg(s);i.table=Bg(t),this.attributes.push(i)})}[Ah](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)}[$D](){let t=new vg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[qD](r.tableid)}[qD](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Y4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[FD](){this[e_](this.statement.columns,!1),this[e_](this.statement.joins,!1),this[e_](this.statement.where,!1),this[VD](this.statement.group,!1),this[e_](this.statement.order,!0)}[e_](t,r){if(!t)return;let n=new vg(t),s=[];for(let{node:i,path:o}of n)!vD.isEmpty(i)&&!vD.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[GD](i):s.push(this[xg](i)));return s}[VD](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&z4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Bg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Ah](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[Ah](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[GD](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[xg](t)}[xg](t){let r=this[Ah](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};YD.exports=kg});var zD=N((_Ae,jD)=>{"use strict";var Fg=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};jD.exports=Fg});var JD=N((EAe,QD)=>{"use strict";var Gg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};QD.exports=Gg});var tP={};je(tP,{HAS_EXPIRATION:()=>bh,HAS_RESIDENCY_ID:()=>zg,HAS_STRUCTURE_UPDATE:()=>Oh,LAST_TIMESTAMP_PLACEHOLDER:()=>s_,LOCAL_TIMESTAMP:()=>Q4,METADATA:()=>t_,NO_TIMESTAMP:()=>$g,PENDING_LOCAL_TIME:()=>Qg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>jg,RecordEncoder:()=>Wg,TIMESTAMP_ASSIGN_LAST:()=>X4,TIMESTAMP_ASSIGN_NEW:()=>ZD,TIMESTAMP_ASSIGN_PREVIOUS:()=>eP,TIMESTAMP_PLACEHOLDER:()=>Rh,TIMESTAMP_RECORD_PREVIOUS:()=>Vg,getUpdateRecord:()=>Jg,handleLocalTimeForGets:()=>Nh});function eJ(){return n_[0]=n_[0]^64,J4.getFloat64(0)}function Nh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[t_]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[t_];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tc.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<tc.length;l++){let u=tc[l].deref();(!u||u.isDone||u.isCommitted)&&tc.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function Jg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Vg|eP:$g:Ml=l?i?.localTime?Vg|16384:ZD|16384:$g;let f=u?.expiresAt;if(f>=0&&(c|=bh),r_=c,Kg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Ml>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Yg=S,r_|=zg,m|=rc),g!==S&&(m|=nc,g||(g=0)),c&bh&&(m|=o_),u?.originatingOperation&&(m|=i_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(yh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=Oh,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Ul(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,yh,m,S,g,f),{ifVersion:T}),y}}r.put(s_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,yh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var XD,qg,Rh,s_,jg,Q4,t_,n_,J4,$g,ZD,X4,eP,Vg,bh,zg,Qg,Oh,Z4,yh,Ml,r_,Kg,Yg,Wg,tc,vl=Ie(()=>{XD=require("msgpackr");Ji();qg=L(W()),Rh=new Uint8Array([1,1,1,1,4,64,0,0]),s_=new Uint8Array([1,1,1,1,1,0,0,0]),jg=new Uint8Array([1,1,1,1,3,64,0,0]),Q4=Symbol("local-timestamp"),t_=Symbol("metadata"),n_=new Uint8Array(8),J4=new DataView(n_.buffer,0,8),$g=0,ZD=0,X4=1,eP=3,Vg=4,bh=16,zg=32,Qg=1,Oh=256,Ml=0,r_=-1,Kg=-1,Yg=0,Wg=class extends XD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||r_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=r_,u=Kg,d=Yg;l>=0&&(o+=2,r_=-1,u>=0&&(o+=8,Kg=-1),d&&(o+=4,Yg=0));let _=Z4=r.call(this,s,i|2048|o);yh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Rh[4]=c,Rh[5]=c>>8,_.set(Rh,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(n_,0,c),c+=8;else for(let E=0;E<8;E++)n_[E]=t[c++];l=eJ(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&bh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&zg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[t_]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(eJ,"getTimestamp");a(Nh,"handleLocalTimeForGets");tc=[];setInterval(()=>{for(let e=0;e<tc.length;e++){let t=tc[e].deref();!t||t.isDone||t.isCommitted?tc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(qg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):qg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(Jg,"getUpdateRecord")});var a_=N((TAe,nP)=>{"use strict";var rP=se(),tJ=M(),{RecordEncoder:rJ}=(vl(),oe(tP)),SAe=require("fs");rP.initSync();var nJ=rP.get(tJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Xg=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=nJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:rJ})}};nP.exports=Xg});var c_=N((AAe,sP)=>{"use strict";var Un=se(),cs=M();Un.initSync();var Ih=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Un.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Un.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Un.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Un.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Un.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Un.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Un.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Un.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Un.get(cs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};sP.exports=Ih;Ih.MAX_DBS=1e4});var ht=N((yAe,EP)=>{"use strict";var eA=require("lmdb"),Fs=require("fs-extra"),vn=require("path"),wh=cn(),aP=W(),ln=Dn().LMDB_ERRORS_ENUM,Ch=JD(),tA=a_(),cP=c_(),Yo=Ht(),iP=M(),{table:sJ,resetDatabases:iJ}=(Pe(),oe(lt)),oP=se(),Gs=Yo.INTERNAL_DBIS_NAME,lP=Yo.DBI_DEFINITION_NAME,oJ="data.mdb",aJ="lock.mdb",l_=".mdb",cJ="-lock",Zg=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Yo.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Yo.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new eA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Dh(e,t){if(e===void 0)throw new Error(ln.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ln.ENV_NAME_REQUIRED)}a(Dh,"pathEnvNameValidation");async function rA(e,t,r=!0){try{await Fs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(ln.INVALID_BASE_PATH):n}try{let n=vn.join(e,t+l_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(vn.join(e,t,oJ),Fs.constants.R_OK|Fs.constants.F_OK),vn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(ln.INVALID_ENVIRONMENT)}else throw new Error(ln.INVALID_ENVIRONMENT);throw n}}a(rA,"validateEnvironmentPath");function Ph(e,t){if(wh.validateEnv(e),t===void 0)throw new Error(ln.DBI_NAME_REQUIRED)}a(Ph,"validateEnvDBIName");async function lJ(e,t,r=!1,n=!1){Dh(e,t);let s=vn.basename(e);t=t.toString();let i=oP.get(iP.CONFIG_PARAMS.DATABASES);i||oP.setProperty(iP.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await rA(e,t,n),uP(e,t,r)}catch(o){if(o.message===ln.INVALID_ENVIRONMENT){let c=vn.join(e,t);await Fs.mkdirp(n?c:e);let l=new cP(n?c:c+l_,!1),u=eA.open(l);u.dbis=Object.create(null);let d=new tA(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=nA(e,t,r);return u[Yo.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(lJ,"createEnvironment");async function uJ(e,t,r,n=!0){Dh(e,t),t=t.toString();let s=vn.join(e,t);return sJ({table:t,database:vn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(uJ,"copyEnvironment");async function uP(e,t,r=!1){Dh(e,t),t=t.toString();let n=nA(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await rA(e,t),i=vn.join(e,t+l_),o=s!=i,c=new cP(s,o),l=eA.open(c);l.dbis=Object.create(null);let u=_P(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Yo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(uP,"openEnvironment");async function dJ(e,t,r=!1){Dh(e,t),t=t.toString();let n=vn.join(e,t+l_),s=await rA(e,t);if(global.lmdb_map!==void 0){let i=nA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await dP(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+cJ:vn.join(vn.dirname(s),aJ))}a(dJ,"deleteEnvironment");async function dP(e){wh.validateEnv(e);let t=e[Yo.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(dP,"closeEnvironment");function nA(e,t,r=!1){let s=`${vn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(nA,"getCachedEnvironmentName");function _J(e){wh.validateEnv(e);let t=Object.create(null),r=ls(e,Gs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Gs)try{t[n]=Object.assign(new Ch,s)}catch{aP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(_J,"listDBIDefinitions");function _P(e){wh.validateEnv(e);let t=[],r=ls(e,Gs);for(let{key:n}of r.getRange({start:!1}))n!==Gs&&t.push(n);return t}a(_P,"listDBIs");function fJ(e,t){let n=ls(e,Gs).getEntry(t),s=new Ch;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{aP.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(fJ,"getDBIDefinition");function fP(e,t,r,n=!r){if(Ph(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ls(e,t)}catch(s){if(s.message===ln.DBI_DOES_NOT_EXIST){let i=new tA(r,n===!0),o=e.openDB(t,i),c=new Ch(r===!0,n);return o[lP]=c,ls(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(fP,"createDBI");function ls(e,t){if(Ph(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gs?r=fJ(e,t):r=new Ch,r===void 0)throw new Error(ln.DBI_DOES_NOT_EXIST);let n;try{let s=new tA(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(ln.DBI_DOES_NOT_EXIST):s}return n[lP]=r,e.dbis[t]=n,n}a(ls,"openDBI");function EJ(e,t){Ph(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Yo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(EJ,"statDBI");async function hJ(e,t){try{let r=vn.join(e,t+l_);return(await Fs.stat(r)).size}catch{throw new Error(ln.INVALID_ENVIRONMENT)}}a(hJ,"environmentDataSize");function pJ(e,t){if(Ph(e,t),t=t.toString(),t===Gs)throw new Error(ln.CANNOT_DROP_INTERNAL_DBIS_NAME);ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ls(e,Gs).removeSync(t)}a(pJ,"dropDBI");function mJ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ls(e,i)}catch(o){if(o.message===ln.DBI_DOES_NOT_EXIST)fP(e,i,i!==t,i===t),n=!0;else throw o}}n&&iJ()}a(mJ,"initializeDBIs");EP.exports={openDBI:ls,openEnvironment:uP,createEnvironment:lJ,listDBIs:_P,listDBIDefinitions:_J,createDBI:fP,dropDBI:pJ,statDBI:EJ,deleteEnvironment:dJ,initializeDBIs:mJ,TransactionCursor:Zg,environmentDataSize:hJ,copyEnvironment:uJ,closeEnvironment:dP}});var pP=N((OAe,hP)=>{"use strict";var sA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};hP.exports=sA});var SP=N((IAe,mP)=>{"use strict";var iA=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};mP.exports=iA});var gP=N((CAe,TP)=>{"use strict";var oA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};TP.exports=oA});var ic=N((UAe,yP)=>{"use strict";var SJ=ht(),TJ=pP(),gJ=SP(),AJ=gP(),Si=cn(),u_=Dn().LMDB_ERRORS_ENUM,RJ=Ht(),Xi=M(),yJ=te(),bJ=require("uuid"),PAe=require("lmdb"),{handleHDBError:OJ,hdb_errors:NJ}=_e(),{OVERFLOW_MARKER:LAe,MAX_SEARCH_KEY_LENGTH:MAe}=RJ,AP=se();AP.initSync();var Lh=AP.get(Xi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aA=Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sc=Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function IJ(e,t,r,n,s=Si.getNextMonotonicTime()){dA(e,t,r,n),cA(e,t,r);let i=new TJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];RP(u,!0,s);let d=wJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return lA(o,c,n,i,s)}a(IJ,"insertRecords");function wJ(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Xi.FUNC_VAL],n[o]=c)}let l=Si.getIndexedValues(c),u=e.dbis[o];if(l){Lh&&u.prefetch(l.map(d=>({key:d,value:s})),Mh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Lh&&e.dbis[t].prefetch([s],Mh),e.dbis[t].put(s,n,n[sc])})}a(wJ,"insertRecord");function CJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(CJ,"removeSkippedRecords");function RP(e,t,r){let n=r>0;(n||!Number.isInteger(e[sc]))&&(e[sc]=r||(r=Si.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[aA]))&&(e[aA]=r||Si.getNextMonotonicTime()):delete e[aA]}a(RP,"setTimestamps");function cA(e,t,r){r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Xi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),SJ.initializeDBIs(e,t,r)}a(cA,"initializeTransaction");async function DJ(e,t,r,n,s=Si.getNextMonotonicTime()){dA(e,t,r,n),cA(e,t,r);let i=new gJ,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=uA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return lA(c,l,n,i,s,o)}a(DJ,"updateRecords");async function PJ(e,t,r,n,s=Si.getNextMonotonicTime()){try{dA(e,t,r,n)}catch(l){throw OJ(l,l.message,NJ.HTTP_STATUS_CODES.BAD_REQUEST)}cA(e,t,r);let i=new AJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;yJ.isEmpty(u[t])?(d=bJ.v4(),u[t]=d):d=u[t];let _=uA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return lA(o,c,n,i,s)}a(PJ,"upsertRecords");async function lA(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Si.getNextMonotonicTime(),CJ(r,i),n}a(lA,"finalizeWrite");function uA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(RP(r,!d,o),Number.isInteger(r[sc])&&u[sc]>r[sc])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][Xi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=Si.getIndexedValues(g);if(S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=Si.getIndexedValues(T),S){Lh&&m.prefetch(S.map(y=>({key:y,value:n})),Mh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[sc])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:uA(e,t,r,n,s,i,o))}a(uA,"updateUpsertRecord");function LJ(e,t,r){if(Si.validateEnv(e),t===void 0)throw new Error(u_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(u_.WRITE_ATTRIBUTES_REQUIRED):new Error(u_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(LJ,"validateBasic");function dA(e,t,r,n){if(LJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(u_.RECORDS_REQUIRED):new Error(u_.RECORDS_MUST_BE_ARRAY)}a(dA,"validateWrite");function Mh(){}a(Mh,"noop");yP.exports={insertRecords:IJ,updateRecords:DJ,upsertRecords:PJ}});var Zi=N((BAe,MJ)=>{MJ.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var gi=N((HAe,NP)=>{"use strict";var OP=te(),bP=M(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ti=require("joi"),Wo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},UJ=Ti.alternatives(Ti.string().min(1).max(Wo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Wo.schema_format.message}),Ti.number(),Ti.array()).required(),vJ=Ti.alternatives(Ti.string().min(1).max(Wo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Wo.schema_format.message}),Ti.number()),BJ=Ti.alternatives(Ti.string().min(1).max(Wo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Wo.schema_format.message}),Ti.number()).required();function HJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wo.schema_length.maximum?`'${e}' maximum of 250 characters`:Bl.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(HJ,"checkValidTable");function xJ(e,t){return OP.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(xJ,"validateSchemaExists");function kJ(e,t){let r=t.state.ancestors[0].schema;return OP.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(kJ,"validateTableExists");function FJ(e,t){return e.toLowerCase()===bP.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${bP.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(FJ,"validateSchemaName");NP.exports={common_validators:Wo,schema_regex:Bl,hdb_schema_table:UJ,validateSchemaExists:xJ,validateTableExists:kJ,validateSchemaName:FJ,checkValidTable:HJ,hdb_database:vJ,hdb_table:BJ}});var Uh=N((kAe,IP)=>{var{common_validators:Ai}=gi(),__=Tt(),d_="is required",rr={database:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},schema:{presence:!1,format:Ai.schema_format,length:Ai.schema_length},table:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length},hash_attribute:{presence:!0,format:Ai.schema_format,length:Ai.schema_length}};function f_(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(f_,"makeAttributesStrings");function GJ(e){return e=f_(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(GJ,"schema_object");function qJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(qJ,"table_object");function $J(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,__.validateObject(e,rr)}a($J,"create_table_object");function VJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence={message:d_},rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(VJ,"attribute_object");function KJ(e){return e=f_(e),rr.table.presence={message:d_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,__.validateObject(e,rr)}a(KJ,"describe_table");function YJ(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(YJ,"validateTableResidence");IP.exports={schema_object:GJ,create_table_object:$J,table_object:qJ,attribute_object:VJ,describe_table:KJ,validateTableResidence:YJ}});var CP=N((GAe,wP)=>{"use strict";var WJ=require("uuid"),_A=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||WJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};wP.exports=_A});var vh=N(($Ae,DP)=>{"use strict";var jJ=CP(),fA=class extends jJ{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};DP.exports=fA});var LP=N((KAe,PP)=>{"use strict";PP.exports=QJ;var zJ="inserted";function QJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===zJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(QJ,"returnObject")});var Bh=N((jAe,BP)=>{"use strict";var JJ=M(),EA=ht(),XJ=ic(),{getSystemSchemaPath:ZJ,getSchemaPath:e3}=gt(),WAe=Zi(),t3=Uh(),r3=vh(),n3=LP(),{handleHDBError:MP,hdb_errors:vP}=_e(),UP=te(),{HTTP_STATUS_CODES:s3}=vP,i3="inserted";BP.exports=o3;async function o3(e){let t=t3.attribute_object(e);if(t)throw MP(new Error,t.message,vP.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&UP.checkGlobalSchemaTable(e.schema,e.table);if(r)throw MP(new Error,r,s3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=UP.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new r3(e.schema,e.table,e.attribute,e.id);try{let i=await EA.openEnvironment(e3(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}`);EA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await EA.openEnvironment(ZJ(),JJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await XJ.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return n3(i3,c,{records:[s]},l)}catch(i){throw i}}a(o3,"lmdbCreateAttribute")});var pA=N((QAe,xP)=>{var{hdb_table:a3,hdb_database:HP}=gi(),c3=Tt(),hA=require("joi"),l3={undefined:"undefined",null:"null"},u3=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||l3[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),d3=hA.object({database:HP,schema:HP,table:a3,records:hA.array().items(hA.object().custom(u3)).required()});xP.exports=function(e){return c3.validateBySchema(e,d3)}});var E_=N((ZAe,FP)=>{"use strict";var eo=te(),kP=W(),XAe=pA(),{getDatabases:_3}=(Pe(),oe(lt)),{ClientError:oc}=_e();FP.exports=f3;function f3(e){if(eo.isEmpty(e))throw new oc("invalid update parameters defined.");if(eo.isEmptyOrZeroLength(e.schema))throw new oc("invalid schema specified.");if(eo.isEmptyOrZeroLength(e.table))throw new oc("invalid table specified.");if(!Array.isArray(e.records))throw new oc("records must be an array");let t=_3()[e.schema]?.[e.table];if(eo.isEmpty(t))throw new oc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&eo.isEmptyOrZeroLength(o[r]))throw kP.error("a valid hash attribute must be provided with update record:",o),new oc("a valid hash attribute must be provided with update record, check log for more info");if(!eo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw kP.error(`a valid hash value must be provided with ${e.operation} record:`,o),new oc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!eo.isEmpty(o[r])&&o[r]!==""&&n.has(eo.autoCast(o[r]))&&(o.skip=!0),n.add(eo.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(f3,"insertUpdateValidate")});var qP=N((tRe,GP)=>{"use strict";var mA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};GP.exports=mA});var KP=N((nRe,VP)=>{"use strict";var SA=ht(),E3=W(),$P=Dn().LMDB_ERRORS_ENUM;VP.exports=h3;async function h3(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 SA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==$P.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await SA.closeEnvironment(global.lmdb_map[n]),await SA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==$P.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){E3.error(t)}}a(h3,"cleanLMDBMap")});var to=N((iRe,zP)=>{"use strict";var h_=require("crypto"),p3=se(),{CONFIG_PARAMS:m3}=M(),WP="aes-256-cbc",S3=32,T3=16,TA=64,jP=32,g3=TA+jP,YP=new Map;zP.exports={encrypt:A3,decrypt:R3,createNatsTableStreamName:y3};function A3(e){let t=h_.randomBytes(S3),r=h_.randomBytes(T3),n=h_.createCipheriv(WP,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(A3,"encrypt");function R3(e){let t=e.substr(0,TA),r=e.substr(TA,jP),n=e.substr(g3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=h_.createDecipheriv(WP,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(R3,"decrypt");function y3(e,t){let r=p3.get(m3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=YP.get(r);return n||(n=h_.createHash("md5").update(r).digest("hex"),YP.set(r,n)),n}a(y3,"createNatsTableStreamName")});var ro=N((cRe,XP)=>{"use strict";var aRe=Vr(),p_=W(),QP=Uh(),b3=to(),Hh=te(),{handleHDBError:xh,hdb_errors:O3}=_e(),{HDB_ERROR_MSGS:kh,HTTP_STATUS_CODES:gA}=O3,JP=se();JP.initSync();var{getDatabases:AA}=(Pe(),oe(lt)),N3=require("fs-extra"),I3=M();XP.exports={describeAll:w3,describeTable:Fh,describeSchema:C3};async function w3(e={}){try{let t=Hh.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=AA(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await Fh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Fh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){p_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return p_.error("Got an error in describeAll"),p_.error(t),xh(new Error,kh.DESCRIBE_ALL_ERR)}}a(w3,"describeAll");async function Fh(e,t){Hh.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=QP.describe_table(e);if(i)throw i;let c=AA()[r];if(!c)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),gA.NOT_FOUND);let l=c[n];if(!l)throw xh(new Error,kh.TABLE_NOT_FOUND(e.schema,e.table),gA.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await N3.stat(l.primaryStore.env.path)).size}catch(f){p_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),JP.get(I3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=b3.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){p_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Fh,"descTable");async function C3(e){Hh.transformReq(e);let t=QP.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=AA()[n];if(!i)throw xh(new Error,kh.SCHEMA_NOT_FOUND(e.schema),gA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Hh.isEmpty(l)||l.describe){let u=await Fh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(C3,"describeSchema")});var us=N((_Re,nL)=>{var D3=Zi(),{callbackify:eL,promisify:P3}=require("util"),{getDatabases:tL}=(Pe(),oe(lt));nL.exports={setSchemaDataToGlobal:ZP,getTableSchema:L3,getSystemSchema:M3,setSchemaDataToGlobalAsync:P3(ZP)};var rL=ro(),uRe=eL(rL.describeAll),dRe=eL(rL.describeTable);function ZP(e){global.hdb_schema=tL(),e&&e()}a(ZP,"setSchemaDataToGlobal");function L3(e,t,r){let n=tL()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(L3,"getTableSchema");function M3(){return D3}a(M3,"getSystemSchema")});var un=N((ERe,aL)=>{"use strict";var qh=pA(),Cr=te(),U3=require("util"),$h=Bn(),v3=us(),sL=W(),{handleHDBError:ac,hdb_errors:B3}=_e(),{HTTP_STATUS_CODES:cc}=B3,H3=U3.promisify(v3.getTableSchema),x3="updated",iL="inserted",oL="upserted";aL.exports={insert:F3,update:G3,upsert:q3,validation:k3,flush:$3};async function k3(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await H3(e.schema,e.table),r=qh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw sL.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(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw sL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(k3,"validation");async function F3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await $h.createRecords(e);return Gh(iL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(F3,"insertData");async function G3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await $h.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Gh(x3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Gh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(G3,"updateData");async function q3(e){if(e.operation!=="upsert")throw ac(new Error,"invalid operation, must be upsert",cc.INTERNAL_SERVER_ERROR);let t=qh(e);if(t)throw ac(new Error,t.message,cc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw ac(new Error,r,cc.BAD_REQUEST);let n=await $h.upsertRecords(e);return Gh(oL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(q3,"upsertData");function Gh(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===iL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===oL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Gh,"returnObject");function $3(e){return Cr.transformReq(e),$h.flush(e.schema,e.table)}a($3,"flush")});var yA=N((pRe,uL)=>{var V3=Tt(),RA=require("joi"),{hdb_table:K3,hdb_database:cL}=gi(),lL={schema:cL,database:cL,table:K3},Y3={date:RA.date().iso().required()},W3={timestamp:RA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};uL.exports=function(e,t){let r=t==="timestamp"?{...lL,...W3}:{...lL,...Y3},n=RA.object(r);return V3.validateBySchema(e,n)}});var fL=N((mRe,_L)=>{var j3=Tt(),bA=require("joi"),{hdb_table:z3,hdb_database:dL}=gi(),Q3=bA.object({schema:dL,database:dL,table:z3,hash_values:bA.array().required(),ids:bA.array()});_L.exports=function(e){return j3.validateBySchema(e,Q3)}});var wA=N((SRe,EL)=>{"use strict";var OA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},NA=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},IA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};EL.exports={InsertObject:OA,NoSQLSeachObject:NA,DeleteResponseObject:IA}});var dc=N((gRe,TL)=>{"use strict";var pL=yA(),J3=fL(),lc=te(),hL=require("moment"),mL=W(),{promisify:X3,callbackify:Z3}=require("util"),uc=M(),eX=us(),CA=X3(eX.getTableSchema),DA=Bn(),{DeleteResponseObject:tX}=wA(),{handleHDBError:jo,hdb_errors:rX}=_e(),{HDB_ERROR_MSGS:Vh,HTTP_STATUS_CODES:zo}=rX,nX="records successfully deleted",sX=Z3(SL);TL.exports={delete:sX,deleteRecord:SL,deleteFilesBefore:iX,deleteAuditLogsBefore:oX};async function iX(e){let t=pL(e,"date");if(t)throw jo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),!hL(e.date,hL.ISO_8601).isValid())throw jo(new Error,Vh.INVALID_DATE,zo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,Vh.INVALID_DATE,!0);let n=lc.checkSchemaTableExist(e.schema,e.table);if(n)throw jo(new Error,n,zo.NOT_FOUND,uc.LOG_LEVELS.ERROR,n,!0);let s=await DA.deleteRecordsBefore(e);if(await CA(e.schema,e.table),mL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(iX,"deleteFilesBefore");async function oX(e){let t=pL(e,"timestamp");if(t)throw jo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),isNaN(e.timestamp))throw jo(new Error,Vh.INVALID_VALUE("Timestamp"),zo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,Vh.INVALID_VALUE("Timestamp"),!0);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw jo(new Error,r,zo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);let n=await DA.deleteAuditLogsBefore(e);return await CA(e.schema,e.table),mL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(oX,"deleteAuditLogsBefore");async function SL(e){e.ids&&(e.hash_values=e.ids);let t=J3(e);if(t)throw jo(t,t.message,zo.BAD_REQUEST,void 0,void 0,!0);lc.transformReq(e);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw jo(new Error,r,zo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);try{await CA(e.schema,e.table);let n=await DA.deleteRecords(e);return lc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${nX}`),n}catch(n){if(n.message===uc.SEARCH_NOT_FOUND_MESSAGE){let s=new tX;return s.message=uc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(SL,"deleteRecord")});var Kh=N((RRe,RL)=>{var aX=require("crypto"),gL=9;function cX(e){let t=uX(gL),r=AL(e+t);return t+r}a(cX,"createHash");function lX(e,t){let r=e?.substr(0,gL),n=r+AL(t+r);return e===n}a(lX,"validateHash");function uX(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(uX,"generateSalt");function AL(e){return aX.createHash("md5").update(e).digest("hex")}a(AL,"md5");RL.exports={hash:cX,validate:lX}});var bL=N((bRe,yL)=>{var PA=Tt(),Kr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function dX(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,PA.validateObject(e,Kr)}a(dX,"addUserValidation");function _X(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,PA.validateObject(e,Kr)}a(_X,"alterUserValidation");function fX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,PA.validateObject(e,Kr)}a(fX,"dropUserValidation");yL.exports={addUserValidation:dX,alterUserValidation:_X,dropUserValidation:fX}});var Ct=N((IRe,NL)=>{"use strict";var{platform:NRe}=require("os"),EX="nats-server.zip",LA="nats-server",hX=process.platform==="win32"?`${LA}.exe`:LA,pX=/^[^\s.,*>]+$/,OL="__request__",mX=a(e=>`${e}.${OL}`,"REQUEST_SUBJECT"),SX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},TX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},gX={HUB:"hub.pid",LEAF:"leaf.pid"},AX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},RX={SUCCESS:"success",ERROR:"error"},yX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},bX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},OX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},NX={debug:"-D",trace:"-DVV"};NL.exports={NATS_SERVER_ZIP:EX,NATS_SERVER_NAME:LA,NATS_BINARY_NAME:hX,PID_FILES:gX,NATS_CONFIG_FILES:TX,SERVER_SUFFIX:AX,NATS_TERM_CONSTRAINTS_RX:pX,REQUEST_SUFFIX:OL,UPDATE_REMOTE_RESPONSE_STATUSES:RX,CLUSTER_STATUS_STATUSES:yX,REQUEST_SUBJECT:mX,SUBJECT_PREFIXES:bX,MSG_HEADERS:SX,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:NX,LOG_LEVEL_HIERARCHY:OX}});var wL=N((CRe,IL)=>{"use strict";var Yh=M(),Wh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Yh.RAM_ALLOCATION_ENUM.DEFAULT,n=Yh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},MA=class extends Wh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Yh.RAM_ALLOCATION_ENUM.DEFAULT,n=Yh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};IL.exports={BaseLicense:Wh,ExtendedLicense:MA}});var _c=N((PRe,vL)=>{"use strict";var kl=require("fs-extra"),DL=Kh(),PL=require("crypto"),IX=require("moment"),wX=require("uuid").v4,Yr=W(),vA=require("path"),CX=te(),Qo=M(),{totalmem:CL}=require("os"),DX=wL().ExtendedLicense,xl="invalid license key format",PX="061183",LX="mofi25",MX="aes-256-cbc",UX=16,vX=32,LL=se(),{resolvePath:ML}=wt();LL.initSync();var UA;vL.exports={validateLicense:UL,generateFingerPrint:HX,licenseSearch:xA,getLicense:FX,checkMemoryLimit:GX};function BA(){return vA.join(LL.getHdbBasePath(),Qo.LICENSE_KEY_DIR_NAME,Qo.LICENSE_FILE_NAME)}a(BA,"getLicenseDirPath");function BX(){let e=BA();return ML(vA.join(e,Qo.LICENSE_FILE_NAME))}a(BX,"getLicenseFilePath");function HA(){let e=BA();return ML(vA.join(e,Qo.REG_KEY_FILE_NAME))}a(HA,"getFingerPrintFilePath");async function HX(){let e=HA();try{return await kl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await xX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(HX,"generateFingerPrint");async function xX(){let e=wX(),t=DL.hash(e),r=HA();try{await kl.mkdirp(BA()),await kl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(xX,"writeFingerprint");function UL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Qo.RAM_ALLOCATION_ENUM.DEFAULT,version:Qo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=HA(),s=!1;try{s=kl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=kl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(LX),c=o[1];c=Buffer.concat([Buffer.from(c)],UX);let l=Buffer.concat([Buffer.from(i)],vX),u=PL.createDecipheriv(MX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=kX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xl),Yr.error(xl),new Error(xl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(xl),Yr.error(xl),new Error(xl)}else r.exp_date=d;r.exp_date<IX().valueOf()&&(r.valid_date=!1),DL.validate(o[1],`${PX}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Yr.error("Invalid licence"),r}a(UL,"validateLicense");function kX(e,t){try{let r=PL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(kX,"checkOldLicense");function xA(){let e=new DX,t=[];try{t=kl.readFileSync(BX(),"utf-8").split(Qo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(CX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=UL(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=Qo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return UA=e,e}a(xA,"licenseSearch");async function FX(){return UA||await xA(),UA}a(FX,"getLicense");function GX(){let e=xA().ram_allocation,t=process.constrainedMemory?.()||CL();if(t=Math.round(Math.min(t,CL())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(GX,"checkMemoryLimit")});var xn=N((BRe,JL)=>{"use strict";var kL="username is required",FL="nothing to update, must supply active, role or password to update",GL="password cannot be an empty string",qL="If role is specified, it cannot be empty.",$L="active must be true or false";JL.exports={addUser:QX,alterUser:JX,dropUser:ZX,getSuperUser:nZ,userInfo:eZ,listUsers:zh,listUsersExternal:tZ,setUsersToGlobal:Gl,findAndValidateUser:zL,getClusterUser:sZ,USERNAME_REQUIRED:kL,ALTERUSER_NOTHING_TO_UPDATE:FL,EMPTY_PASSWORD:GL,EMPTY_ROLE:qL,ACTIVE_BOOLEAN:$L};var VL=un(),qX=dc(),GA=Kh(),KL=bL(),YL=Vr(),qA=no(),Hn=te(),WL=require("validate.js"),Ke=W(),{promisify:$X}=require("util"),$A=to(),BL=M(),HL=Ct(),VX=wt(),MRe=se(),URe=_c(),KX=Zi(),{table:vRe}=(Pe(),oe(lt)),{handleHDBError:Ri,hdb_errors:YX}=_e(),{HTTP_STATUS_CODES:yi,AUTHENTICATION_ERROR_MSGS:kA,HDB_ERROR_MSGS:Fl}=YX,{UserEventMsg:VA}=qs(),FA=require("lodash"),{server:KA}=(qr(),oe(Ja)),WX=W();KA.getUser=(e,t)=>zL(e,t,t!=null);var jL={username:!0,active:!0,role:!0,password:!0},xL=new Map,jh=YL.searchByValue,jX=YL.searchByHash,zX=$X(qX.delete);async function QX(e){let t=WL.cleanAttributes(e,jL),r=KL.addUserValidation(t);if(r)throw Ri(new Error,r.message,yi.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await jh(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw Ri(new Error,Fl.ROLE_NAME_NOT_FOUND(t.role),yi.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ri(new Error,Fl.DUP_ROLES_FOUND(t.role),yi.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=$A.encrypt(t.password)),t.password=GA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await VL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Gl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw Ri(new Error,Fl.USER_ALREADY_EXISTS(t.username),yi.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],qA.signalUserChange(new VA(process.pid)),`${c.username} successfully added`}a(QX,"addUser");async function JX(e){let t=WL.cleanAttributes(e,jL);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(kL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(FL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(GL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error($L);let r=XX(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=$A.encrypt(t.password)),t.password=GA.hash(t.password)),t.role==="")throw new Error(qL);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 jh(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=Fl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),Ri(new Error,c,yi.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ri(new Error,c,yi.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await VL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Gl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return qA.signalUserChange(new VA(process.pid)),s}a(JX,"alterUser");function XX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(XX,"isClusterUser");async function ZX(e){try{let t=KL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw Ri(new Error,Fl.USER_NOT_EXIST(e.username),yi.NOT_FOUND,void 0,void 0,!0);let n;try{n=await zX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Gl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return qA.signalUserChange(new VA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(ZX,"dropUser");async function eZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=FA.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await jX(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(eZ,"userInfo");async function tZ(){let e;try{e=await zh()}catch(t){throw Ke.error("Got an error listing users."),Ke.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(tZ,"listUsersExternal");async function zh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await jh(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=FA.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await jh(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=FA.cloneDeep(o),o.role=r[o.role],rZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(zh,"listUsers");function rZ(e){try{if(!e){Ke.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(KX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a(rZ,"appendSystemTablesToRole");async function Gl(){try{let e=await zh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Gl,"setUsersToGlobal");async function zL(e,t,r=!0){global.hdb_users||await Gl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ri(new Error,kA.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ri(new Error,kA.USER_INACTIVE,yi.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(xL.get(t)===n.password)return s;if(GA.validate(n.password,t))xL.set(t,n.password);else throw Ri(new Error,kA.GENERIC_AUTH_FAIL,yi.UNAUTHORIZED,void 0,void 0,!0)}return s}a(zL,"findAndValidateUser");async function nZ(){global.hdb_users||await Gl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(nZ,"getSuperUser");async function sZ(){let e=await zh(),t=VX.getConfigFromFile(BL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===BL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=$A.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+HL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+HL.SERVER_SUFFIX.ADMIN,r}a(sZ,"getClusterUser");var QL=[];KA.invalidateUser=function(e){for(let t of QL)try{t(e)}catch(r){WX.error("Error invalidating user",r)}};KA.onInvalidatedUser=function(e){QL.push(e)}});var S_=N((FRe,tM)=>{"use strict";var fc=W(),kn=M(),iZ=KP(),xRe=us(),kRe=ro(),oZ=xn(),{validateEvent:XL}=qs(),m_=Bn(),aZ=require("process"),{resetDatabases:cZ}=(Pe(),oe(lt)),lZ={[kn.ITC_EVENT_TYPES.SCHEMA]:uZ,[kn.ITC_EVENT_TYPES.USER]:eM};async function uZ(e){let t=XL(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await iZ(e.message),await dZ(e.message)}a(uZ,"schemaHandler");async function dZ(e){try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=cZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a(dZ,"syncSchemaMetadata");var ZL=[];async function eM(e){try{try{m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),m_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=XL(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${aZ.pid} received user event:`,e),await oZ.setUsersToGlobal();for(let r of ZL)r()}catch(t){fc.error(t)}}a(eM,"userHandler");eM.addListener=function(e){ZL.push(e)};tM.exports=lZ});var qs=N((YRe,nM)=>{"use strict";var qRe=W(),YA=te(),_Z=M(),{ITC_ERRORS:T_}=Dn(),{parentPort:$Re,threadId:fZ,isMainThread:EZ,workerData:VRe}=require("worker_threads"),{onMessageFromWorkers:hZ,broadcast:KRe,broadcastWithAcknowledgement:pZ}=dt();nM.exports={sendItcEvent:mZ,validateEvent:rM,SchemaEventMsg:SZ,UserEventMsg:TZ};var Qh;hZ(async(e,t)=>{Qh=Qh||S_(),rM(e),Qh[e.type]&&await Qh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mZ(e){return!EZ&&e.message&&(e.message.originator=fZ),pZ(e)}a(mZ,"sendItcEvent");function rM(e){if(typeof e!="object")return T_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||YA.isEmpty(e.type))return T_.MISSING_TYPE;if(!e.hasOwnProperty("message")||YA.isEmpty(e.message))return T_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||YA.isEmpty(e.message.originator))return T_.MISSING_ORIGIN;if(_Z.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return T_.INVALID_EVENT(e.type)}a(rM,"validateEvent");function SZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(SZ,"SchemaEventMsg");function TZ(e){this.originator=e}a(TZ,"UserEventMsg")});var no=N((zRe,aM)=>{"use strict";var sM=M(),jRe=te(),Jh=W(),iM=qP(),ql,{sendItcEvent:oM}=qs();function gZ(e){try{Jh.info("signalSchemaChange called with message:",e),ql=ql||S_();let t=new iM(sM.ITC_EVENT_TYPES.SCHEMA,e);return ql.schema(t),oM(t)}catch(t){Jh.error(t)}}a(gZ,"signalSchemaChange");function AZ(e){try{Jh.trace("signalUserChange called with message:",e),ql=ql||S_();let t=new iM(sM.ITC_EVENT_TYPES.USER,e);return ql.user(t),oM(t)}catch(t){Jh.error(t)}}a(AZ,"signalUserChange");aM.exports={signalSchemaChange:gZ,signalUserChange:AZ}});var Xh=N((JRe,lM)=>{"use strict";var cM=te(),RZ=M(),yZ=W(),bZ=Bh(),OZ=vh(),NZ=no(),{SchemaEventMsg:IZ}=qs(),wZ="already exists in";lM.exports=CZ;async function CZ(e,t,r){if(cM.isEmptyOrZeroLength(r))return r;let n=[];cM.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await DZ(e,t.schema,t.name,i)})),s}a(CZ,"lmdbCheckForNewAttributes");async function DZ(e,t,r,n){let s=new OZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await PZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wZ))yZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(DZ,"createNewAttribute");async function PZ(e){let t;return t=await bZ(e),NZ.signalSchemaChange(new IZ(process.pid,RZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(PZ,"createAttribute")});var $l=N((ZRe,uM)=>{"use strict";var WA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};uM.exports=WA});var _M=N((tye,dM)=>{"use strict";var LZ=$l(),MZ=M().OPERATIONS_ENUM,jA=class extends LZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(MZ.INSERT,r,n,s,i),this.records=t}};dM.exports=jA});var EM=N((nye,fM)=>{"use strict";var UZ=$l(),vZ=M().OPERATIONS_ENUM,zA=class extends UZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(vZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};fM.exports=zA});var pM=N((iye,hM)=>{"use strict";var BZ=$l(),HZ=M().OPERATIONS_ENUM,QA=class extends BZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};hM.exports=QA});var SM=N((aye,mM)=>{"use strict";var xZ=$l(),kZ=M().OPERATIONS_ENUM,JA=class extends xZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(kZ.DELETE,n,s,t,i),this.original_records=r}};mM.exports=JA});var g_=N((uye,RM)=>{"use strict";var lye=require("path"),TM=ht(),FZ=_M(),GZ=EM(),qZ=pM(),$Z=SM(),Vl=Ht(),gM=te(),{CONFIG_PARAMS:VZ}=M(),AM=se();AM.initSync();var Zh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:KZ}=gt();RM.exports=YZ;async function YZ(e,t){if(AM.get(VZ.LOGGING_AUDITLOG)===!1)return;let r=KZ(e.schema,e.table),n=await TM.openEnvironment(r,e.table,!0),s=WZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){TM.initializeDBIs(n,Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Vl.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),gM.isEmpty(s.user_name)||n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[Vl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(YZ,"writeTransaction");function WZ(e,t){let r=gM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Zh.INSERT)return new FZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Zh.UPDATE)return new GZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Zh.UPSERT)return new qZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Zh.DELETE)return new $Z(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(WZ,"createTransactionObject")});var XA=N((fye,yM)=>{"use strict";var jZ=E_(),_ye=Jd(),A_=M(),zZ=Xd(),QZ=ic().insertRecords,JZ=ht(),XZ=W(),ZZ=Xh(),{getSchemaPath:e5}=gt(),t5=g_();yM.exports=r5;async function r5(e){try{let{schema_table:t,attributes:r}=jZ(e);zZ(e,r,t.hash_attribute),e.schema!==A_.SYSTEM_SCHEMA_NAME&&(r.includes(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(A_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ZZ(e.hdb_auth_header,t,r),s=e5(e.schema,e.table),i=await JZ.openEnvironment(s,e.table),o=await QZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await t5(e,o)}catch(c){XZ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(r5,"lmdbCreateRecords")});var NM=N((hye,OM)=>{"use strict";var bM=M(),n5=XA(),s5=Jd(),i5=require("fs-extra"),{getSchemaPath:o5}=gt();OM.exports=a5;async function a5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new s5(bM.SYSTEM_SCHEMA_NAME,bM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await n5(r),await i5.mkdirp(o5(e.schema))}a(a5,"lmdbCreateSchema")});var wM=N((mye,IM)=>{"use strict";var ZA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};IM.exports=ZA});var LM=N((Rye,PM)=>{"use strict";var CM=ht(),eR=cn(),tR=Dn().LMDB_ERRORS_ENUM,c5=Ht(),DM=W(),Tye=te(),l5=require("lmdb"),u5=wM(),d5=M(),{OVERFLOW_MARKER:gye,MAX_SEARCH_KEY_LENGTH:Aye}=c5,_5=d5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function f5(e,t,r,n){if(eR.validateEnv(e),t===void 0)throw new Error(tR.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(tR.IDS_REQUIRED):new Error(tR.IDS_MUST_BE_ITERABLE);try{let s=CM.listDBIs(e);CM.initializeDBIs(e,t,s);let i=new u5,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[_5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,l5.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=eR.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{DM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){DM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=eR.getNextMonotonicTime(),i}catch(s){throw s}}a(f5,"deleteRecords");PM.exports={deleteRecords:f5}});var R_=N((bye,UM)=>{"use strict";var Kl=te(),E5=LM(),h5=ht(),{getSchemaPath:p5}=gt(),m5=g_(),S5=W();UM.exports=T5;async function T5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Kl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Kl.isEmptyOrZeroLength(e.hash_values)&&!Kl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Kl.isEmpty(l)||e.hash_values.push(l)}}if(Kl.isEmptyOrZeroLength(e.hash_values))return MM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Kl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=p5(e.schema,e.table),i=await h5.openEnvironment(s,e.table),o=await E5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await m5(e,o)}catch(c){S5.error(`unable to write transaction due to ${c.message}`)}return MM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(T5,"lmdbDeleteRecords");function MM(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(MM,"createDeleteResponse")});var nR=N((Iye,vM)=>{"use strict";var g5=M(),Nye=cn();function rR(e,t){let r=Object.create(null);if(t.length===1&&g5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(rR,"parseRow");function A5(e,t,r,n){let s=rR(r,e);n.push(s)}a(A5,"searchAll");function R5(e,t,r,n){let s=rR(r,e);n[t]=s}a(R5,"searchAllToMap");function y5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(y5,"iterateDBI");function Ec(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(Ec,"pushResults");function b5(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(b5,"endsWith");function O5(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(O5,"contains");function N5(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(N5,"greaterThanCompare");function I5(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(I5,"greaterThanEqualCompare");function w5(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(w5,"lessThanCompare");function C5(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(C5,"lessThanEqualCompare");vM.exports={parseRow:rR,searchAll:A5,searchAllToMap:R5,iterateDBI:y5,endsWith:b5,contains:O5,greaterThanCompare:N5,greaterThanEqualCompare:I5,lessThanCompare:w5,lessThanEqualCompare:C5,pushResults:Ec}});var Yl=N((Lye,qM)=>{"use strict";var Jo=ht(),Cye=W(),Fn=cn(),ep=Ht(),zt=Dn().LMDB_ERRORS_ENUM,Dye=te(),D5=M(),tp=nR(),{parseRow:P5}=tp,Pye=require("lmdb"),{OVERFLOW_MARKER:BM,MAX_SEARCH_KEY_LENGTH:L5}=ep;function HM(e,t,r,n=!1,s=void 0,i=void 0){return hc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(HM,"iterateFullIndex");function y_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return hc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(y_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Jo.openDBI(s,r);i[ep.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Jo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(hc,"setupTransaction");function xM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(BM)){if(!s)if(r)s=Jo.openDBI(e,r);else{let l=Jo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Jo.openDBI(e,l[u]),!s[ep.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(xM,"getOverflowCheck");function M5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return hc(e,t,t,(o,c,l)=>(rp(r),r=b_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>P5(u.value,r))))}a(M5,"searchAll");function U5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);rp(r),r=b_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of HM(e,t,t,n,s,i))o.set(c,tp.parseRow(l,r));return o}a(U5,"searchAllToMap");function v5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=HM(e,void 0,t,r,n,s),c=o.transaction,l=xM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(v5,"iterateDBI");function B5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Jo.statDBI(e,t).entryCount}a(B5,"countAll");function H5(e,t,r,n,s=!1,i=void 0,o=void 0){return Xo(e,r,n),hc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(H5,"equals");function x5(e,t,r){return Xo(e,t,r),Jo.openDBI(e,t).getValuesCount(r)}a(x5,"count");function k5(e,t,r,n,s=!1,i=void 0,o=void 0){return Xo(e,r,n),hc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(k5,"startsWith");function F5(e,t,r,n,s=!1,i=void 0,o=void 0){return kM(e,t,r,n,s,i,o,!0)}a(F5,"endsWith");function kM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Xo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=xM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(BM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[ep.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(kM,"contains");function G5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!0,!1)}a(G5,"greaterThan");function q5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),y_(e,t,r,n,l,s,i,o,!1,!1)}a(q5,"greaterThanEqual");function $5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!0)}a($5,"lessThan");function V5(e,t,r,n,s=!1,i=void 0,o=void 0){Xo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),y_(e,t,r,l,n,s,i,o,!1,!1)}a(V5,"lessThanEqual");function K5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return y_(e,t,r,n,s,i,o,c)}a(K5,"between");function Y5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(rp(r),r=b_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=tp.parseRow(c,r)),o}a(Y5,"searchByHash");function W5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(W5,"checkHashExists");function j5(e,t,r,n,s=[]){return GM(e,t,r,n,s),FM(e,t,r,n,s).map(i=>i[1])}a(j5,"batchSearchByHash");function z5(e,t,r,n,s=[]){GM(e,t,r,n,s);let i=new Map;for(let[o,c]of FM(e,t,r,n,s))i.set(o,c);return i}a(z5,"batchSearchByHashToMap");function FM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=b_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,tp.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(FM,"batchHashSearch");function GM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(rp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(GM,"initializeBatchSearchByHash");function rp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(rp,"validateFetchAttributes");function Xo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>L5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Xo,"validateComparisonFunctions");function b_(e,t){return t.length===1&&D5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Jo.listDBIs(e)),t}a(b_,"setGetWholeRowAttributes");qM.exports={searchAll:M5,searchAllToMap:U5,count:x5,countAll:B5,equals:H5,startsWith:k5,endsWith:F5,contains:kM,searchByHash:Y5,setGetWholeRowAttributes:b_,batchSearchByHash:j5,batchSearchByHashToMap:z5,checkHashExists:W5,iterateDBI:v5,greaterThan:G5,greaterThanEqual:q5,lessThan:$5,lessThanEqual:V5,between:K5}});var Wl=N((Uye,WM)=>{var $M=require("lodash"),VM=Tt(),xe=require("joi"),Q5=te(),{hdb_schema_table:O_,checkValidTable:KM,hdb_table:YM,hdb_database:np}=gi(),{handleHDBError:J5,hdb_errors:X5}=_e(),{getDatabases:Z5}=(Pe(),oe(lt)),{HTTP_STATUS_CODES:e6}=X5,t6=xe.object({database:np,schema:np,table:YM,search_attribute:O_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),r6=xe.object({database:np,schema:np,table:YM,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(O_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(O_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(O_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});WM.exports=function(e,t){let r=null;switch(t){case"value":r=VM.validateBySchema(e,t6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(KM("database",e.schema)),i(KM("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=VM.validateBySchema(e,r6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Q5.checkGlobalSchemaTable(e.schema,e.table);if(s)return J5(new Error,s,e6.NOT_FOUND);let o=Z5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=$M.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!$M.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var sR=N((Bye,jM)=>{"use strict";var n6=ht(),s6=Wl(),{getSchemaPath:i6}=gt();jM.exports=o6;function o6(e){let t=s6(e,"hashes");if(t)throw t;let r=i6(e.schema,e.table);return n6.openEnvironment(r,e.table)}a(o6,"initialize")});var iR=N((xye,zM)=>{"use strict";var a6=Yl(),c6=sR();zM.exports=l6;async function l6(e){let t=await c6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return a6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(l6,"lmdbGetDataByHash")});var jl=N((Fye,QM)=>{"use strict";var oR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};QM.exports=oR});var XM=N(($ye,JM)=>{"use strict";var qye=jl(),u6=Yl(),d6=sR();JM.exports=_6;async function _6(e){let t=await d6(e),r=global.hdb_schema[e.schema][e.table];return u6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(_6,"lmdbSearchByHash")});var $s=N((Kye,ZM)=>{"use strict";var aR=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};ZM.exports=aR});var sp=N((Wye,iU)=>{"use strict";var Wr=Yl(),f6=ht(),E6=te(),ke=Ht(),pc=M(),h6=Zi(),eU=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:p6}=gt(),so=pc.SEARCH_WILDCARDS;async function m6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=h6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=sU(e,n.hash_attribute,r,t);return rU(e,s,n.hash_attribute,r)}a(m6,"prepSearch");async function rU(e,t,r,n){let s=p6(e.schema,e.table),i=await f6.openEnvironment(s,e.table),o=nU(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(S6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?tU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?tU(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(rU,"executeSearch");function nU(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(nU,"searchByType");function tU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(tU,"createMapFromIterable");function S6(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(S6,"checkToFetchMore");function sU(e,t,r,n){if(E6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),so.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(so[0])<0&&s.indexOf(so[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(so.indexOf(i)>=0&&so.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(so.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(so.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(so[0])||s.includes(so[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(eU.UNKNOWN_SEARCH_TYPE)}else switch(n){case pc.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case pc.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case pc.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case pc.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case pc.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(eU.UNKNOWN_SEARCH_TYPE)}}a(sU,"createSearchTypeFromSearchObject");iU.exports={executeSearch:rU,createSearchTypeFromSearchObject:sU,prepSearch:m6,searchByType:nU}});var aU=N((Qye,oU)=>{"use strict";var zye=$s(),T6=Wl(),g6=te(),A6=M(),R6=sp();oU.exports=y6;function y6(e,t){if(!g6.isEmpty(t)&&A6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=T6(e,"value");if(n)throw n;return R6.prepSearch(e,t,!0)}a(y6,"lmdbGetDataByValue")});var N_=N((Zye,cU)=>{"use strict";var Xye=$s(),b6=Wl(),O6=te(),N6=M(),I6=sp();cU.exports=w6;async function w6(e,t){if(!O6.isEmpty(t)&&N6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=b6(e,"value");if(n)throw n;return I6.prepSearch(e,t,!1)}a(w6,"lmdbSearchByValue")});var uU=N((rbe,lU)=>{"use strict";var tbe=Ht(),cR=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},lR=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},uR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};lU.exports={SearchByConditionsObject:cR,SearchCondition:lR,SortAttribute:uR}});var hU=N((obe,EU)=>{"use strict";var sbe=uU().SearchByConditionsObject,C6=$s(),D6=Wl(),dR=Yl(),ip=Ht(),{Resource:ibe}=(Vs(),oe(_R)),fU=sp(),P6=nR(),L6=require("lodash"),{getSchemaPath:M6}=gt(),dU=ht(),{handleHDBError:U6,hdb_errors:v6}=_e(),{HTTP_STATUS_CODES:B6}=v6,H6=1e8;EU.exports=x6;async function x6(e){let t=D6(e,"conditions");if(t)throw U6(t,t.message,B6.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=M6(e.schema,e.table),n=await dU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)dU.openDBI(n,u.search_attribute);let i=L6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===ip.SEARCH_TYPES.EQUALS?u.estimated_count=dR.count(n,u.search_attribute,u.search_value):d===ip.SEARCH_TYPES.CONTAINS||d===ip.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=H6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await _U(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(fU.filterByType),_=d.length,E=dR.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>P6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await _U(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=dR.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(x6,"lmdbSearchByConditions");async function _U(e,t,r,n){let s=new C6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===ip.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,fU.searchByType(e,s,i,n).map(o=>o.value)}a(_U,"executeConditionSearch")});var I_=N((cbe,pU)=>{"use strict";var k6=M().OPERATIONS_ENUM,fR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=k6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};pU.exports=fR});var ER=N((ube,bU)=>{"use strict";var gU=$s(),AU=I_(),RU=N_(),yU=R_(),dn=M(),mU=te(),SU=ht(),{getTransactionAuditStorePath:F6,getSchemaPath:G6}=gt(),TU=W();bU.exports=q6;async function q6(e){try{if(mU.isEmpty(global.hdb_schema[e.schema])||mU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await $6(e),await V6(e);let t=G6(e.schema,e.table);try{await SU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")TU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=F6(e.schema,e.table);await SU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")TU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(q6,"lmdbDropTable");async function $6(e){let t=new gU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await RU(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new AU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await yU(s)}a($6,"deleteAttributesFromSystem");async function V6(e){let t=new gU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await RU(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new AU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await yU(s)}catch(i){throw i}}a(V6,"dropTableFromSystem")});var NU=N((_be,OU)=>{"use strict";var K6=require("fs-extra"),Y6=$s(),W6=jl(),j6=I_(),z6=ER(),Q6=R_(),J6=iR(),X6=N_(),io=M(),{getSchemaPath:Z6}=gt(),{handleHDBError:e8,hdb_errors:t8}=_e(),{HDB_ERROR_MSGS:r8,HTTP_STATUS_CODES:n8}=t8;OU.exports=s8;async function s8(e){let t;try{t=await i8(e.schema);let r=new Y6(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,io.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[io.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await X6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await z6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new j6(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Q6(s);let i=Z6(t);await K6.remove(i)}catch(r){throw r}}a(s8,"lmdbDropSchema");async function i8(e){let t=new W6(io.SYSTEM_SCHEMA_NAME,io.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[io.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await J6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw e8(new Error,r8.SCHEMA_NOT_FOUND(e),n8.NOT_FOUND,void 0,void 0,!0);return n}a(i8,"validateDropSchema")});var w_=N((Ebe,IU)=>{"use strict";var hR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};IU.exports=hR});var mR=N((mbe,wU)=>{"use strict";var o8=require("fs-extra"),op=ht(),{getTransactionAuditStorePath:a8}=gt(),pR=Ht(),pbe=w_();wU.exports=c8;async function c8(e){let t;try{let r=a8(e.schema,e.table);await o8.mkdirp(r),t=await op.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{op.createDBI(t,pR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),op.createDBI(t,pR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),op.createDBI(t,pR.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(c8,"createTransactionsAuditEnvironment")});var PU=N((gbe,DU)=>{"use strict";var SR=M(),CU=ht(),l8=ic(),{getSystemSchemaPath:u8,getSchemaPath:d8}=gt(),Tbe=Zi(),_8=Bh(),TR=vh(),f8=W(),E8=mR();DU.exports=h8;async function h8(e,t){let r=d8(t.schema,t.table),n=new TR(t.schema,t.table,SR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new TR(t.schema,t.table,SR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new TR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await CU.createEnvironment(r,t.table),e!==void 0){let o=await CU.openEnvironment(u8(),SR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await l8.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await gR(n),await gR(s),await gR(i)}await E8(t)}catch(o){throw o}}a(h8,"lmdbCreateTable");async function gR(e){try{await _8(e)}catch(t){f8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(gR,"createAttribute")});var MU=N((Rbe,LU)=>{"use strict";var p8=E_(),m8=Xd(),S8=Xh(),C_=M(),T8=ic().updateRecords,g8=ht(),{getSchemaPath:A8}=gt(),R8=g_(),y8=W();LU.exports=b8;async function b8(e){try{let{schema_table:t,attributes:r}=p8(e);m8(e,r,t.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(r.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await S8(e.hdb_auth_header,t,r),s=A8(e.schema,e.table),i=await g8.openEnvironment(s,e.table),o=await T8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await R8(e,o)}catch(c){y8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(b8,"lmdbUpdateRecords")});var vU=N((bbe,UU)=>{"use strict";var O8=M().OPERATIONS_ENUM,AR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=O8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};UU.exports=AR});var HU=N((Ibe,BU)=>{"use strict";var Nbe=vU(),N8=E_(),I8=Xd(),w8=Xh(),D_=M(),C8=ic().upsertRecords,D8=ht(),{getSchemaPath:P8}=gt(),L8=g_(),M8=W(),{handleHDBError:U8,hdb_errors:v8}=_e();BU.exports=B8;async function B8(e){let t;try{t=N8(e)}catch(l){throw U8(l,l.message,v8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;I8(e,n,r.hash_attribute),e.schema!==D_.SYSTEM_SCHEMA_NAME&&(n.includes(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(D_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await w8(e.hdb_auth_header,r,n),i=P8(e.schema,e.table),o=await D8.openEnvironment(i,e.table),c=await C8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await L8(e,c)}catch(l){M8.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(B8,"lmdbUpsertRecords")});var kU=N((Cbe,xU)=>{"use strict";var RR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};xU.exports=RR});var GU=N((Pbe,FU)=>{"use strict";var yR=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};FU.exports=yR});var VU=N((Ube,$U)=>{"use strict";var bR=ht(),{getTransactionAuditStorePath:H8}=gt(),Mbe=kU(),P_=Ht(),x8=te(),qU=GU(),k8=require("util").promisify,F8=k8(setTimeout),G8=1e4,q8=100;$U.exports=$8;async function $8(e){let t=H8(e.schema,e.table),r=await bR.openEnvironment(t,e.table,!0),n=bR.listDBIs(r);bR.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new qU;do s=await V8(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await F8(q8);while(s.transactions_deleted>0);return i}a($8,"deleteAuditLogsBefore");async function V8(e,t){let r=new qU;try{let n=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];x8.isEmpty(c)||(s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[P_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>G8)break}return await s,r}catch(n){throw n}}a(V8,"deleteTransactions")});var YU=N((Bbe,KU)=>{"use strict";var OR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};KU.exports=OR});var jU=N((kbe,WU)=>{"use strict";var K8=$s(),Y8=I_(),xbe=YU(),bi=M(),W8=te(),NR=ht(),j8=Zi(),z8=N_(),Q8=R_(),{getSchemaPath:J8}=gt();WU.exports=X8;async function X8(e,t=!0){let r;e.schema===bi.SYSTEM_SCHEMA_NAME?r=j8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await e9(e),s=J8(e.schema,e.table),i=await NR.openEnvironment(s,e.table);return t===!0&&await Z8(e,i,r.hash_attribute),NR.dropDBI(i,e.attribute),n}a(X8,"lmdbDropAttribute");async function Z8(e,t,r){let n=NR.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(Z8,"removeAttributeFromAllObjects");async function e9(e){let t=new K8(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await z8(t)).filter(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(W8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[bi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Y8(bi.SYSTEM_SCHEMA_NAME,bi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Q8(i)}a(e9,"dropAttributeFromSystem")});var ev=N((qbe,ZU)=>{"use strict";var IR=ht(),zl=Ht(),Gbe=cn(),wR=M(),zU=te(),{getTransactionAuditStorePath:t9}=gt(),r9=Yl(),ap=$l(),n9=W();ZU.exports=s9;async function s9(e){let t=t9(e.schema,e.table),r=await IR.openEnvironment(t,e.table,!0),n=IR.listDBIs(r);IR.initializeDBIs(r,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case wR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return QU(r,e.search_values);case wR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,o9(r,e.search_values,s);case wR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return i9(r,e.search_values);default:return QU(r)}}a(s9,"readAuditLog");function QU(e,t=[0,Date.now()]){zU.isEmpty(t[0])&&(t[0]=0),zU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new ap,s))}a(QU,"searchTransactionsByTimestamp");function i9(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,XU(e,i))}return Object.fromEntries(r)}a(i9,"searchTransactionsByUsername");function o9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=r9.equals(e,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=XU(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);JU(l,"records",r,d,o),JU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(o9,"searchTransactionsByHashValues");function JU(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new ap(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new ap(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(JU,"loopRecords");function XU(e,t){let r=[];try{let n=e.dbis[zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new ap,i);r.push(o)}}catch(i){n9.warn(i)}return r}catch(n){throw n}}a(XU,"batchSearchTransactions")});var rv=N((Ybe,tv)=>{"use strict";var{getSchemaPath:Vbe}=gt(),Kbe=ht(),{database:a9}=(Pe(),oe(lt));tv.exports={writeTransaction:c9};async function c9(e,t,r){return a9({database:e,table:t}).transaction(r)}a(c9,"writeTransaction")});var ov=N((jbe,iv)=>{"use strict";var{getSchemaPath:nv}=gt(),sv=ht();iv.exports={flush:l9,resetReadTxn:u9};async function l9(e,t){return(await sv.openEnvironment(nv(e,t),t.toString())).flushed}a(l9,"flush");async function u9(e,t){try{(await sv.openEnvironment(nv(e,t),t.toString())).resetReadTxn()}catch{}}a(u9,"resetReadTxn")});var uv=N((Qbe,lv)=>{"use strict";var{Readable:d9}=require("stream"),{getDatabases:_9}=(Pe(),oe(lt)),{readSync:f9,openSync:E9,createReadStream:av}=require("fs"),{open:h9}=require("lmdb"),cv=a_(),p9=c_(),{AUDIT_STORE_OPTIONS:m9}=(Ji(),oe(dv)),{INTERNAL_DBIS_NAME:S9,AUDIT_STORE_NAME:T9}=Ht();lv.exports=A9;var CR=32768,g9=100;async function A9(e){let t=e.database||e.schema||"data",r=_9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=h9({noSync:!0,maxDbs:p9.MAX_DBS}),E,f=_.openDB(S9,new cv(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%g9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new cv(!U,U);await m(S,H)}e.include_audit&&await m(T9,{...m9}),await E;let g=av(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=E9(o.path);return o.transaction(()=>{let u=Buffer.alloc(CR);f9(c,u,0,CR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=av(null,{fd:c,start:CR}),E=new d9.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(A9,"getBackup")});var Ev=N((Xbe,fv)=>{"use strict";var R9=W(),{handleHDBError:y9}=_e(),b9=zD(),O9=Bh(),N9=XA(),I9=NM(),w9=R_(),C9=iR(),D9=XM(),P9=aU(),L9=N_(),M9=hU(),U9=NU(),v9=PU(),B9=MU(),H9=HU(),x9=VU(),k9=ER(),F9=jU(),G9=ev(),q9=rv(),_v=ov(),$9=uv(),DR=class extends b9{static{a(this,"LMDBBridge")}async searchByConditions(t){return M9(t)}async getDataByHash(t){return await C9(t)}async searchByHash(t){return await D9(t)}async getDataByValue(t,r){return await P9(t,r)}async searchByValue(t){return await L9(t)}async createSchema(t){return await I9(t)}async dropSchema(t){return await U9(t)}async createTable(t,r){return await v9(t,r)}async dropTable(t){return await k9(t)}async createAttribute(t){return await O9(t)}async createRecords(t){return await N9(t)}async updateRecords(t){return await B9(t)}async upsertRecords(t){try{return await H9(t)}catch(r){throw y9(r,null,null,R9.ERR,r)}}async deleteRecords(t){return await w9(t)}async dropAttribute(t){return await F9(t)}async deleteAuditLogsBefore(t){return await x9(t)}async readAuditLog(t){return await G9(t)}writeTransaction(t,r,n){return q9.writeTransaction(t,r,n)}flush(t,r){return _v.flush(t,r)}resetReadTxn(t,r){return _v.resetReadTxn(t,r)}getBackup(t){return $9(t)}};fv.exports=DR});function Rv(e){LR=e}function W9(){Y9=setInterval(function(){for(let e of PR)if(e.stale){let t=e[Fe]?.url;Sv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},K9).unref()}var MR,mv,Sv,Tv,gv,Av,hv,PR,V9,L_,pv,LR,mc,cp,K9,Y9,lp=Ie(()=>{MR=L(cn()),mv=L(_e()),Sv=L(W());Vs();Tv=L(se()),gv=L(M()),Av=L(te()),hv=100,PR=new Set,V9=(0,Av.convertToMS)(Tv.get(gv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(Rv,"replicationConfirmation");mc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),PR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(PR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(L_&&!this.overloadChecked&&performance.now()-pv>V9)throw new mv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,MR.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<hv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return L_||(L_=s,pv=performance.now(),L_.then(()=>{L_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];LR&&f&&i.push(LR(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+hv/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},cp=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,MR.getNextMonotonicTime)())}getReadTxn(){}},K9=3e4;a(W9,"startMonitoringTxns");W9()});function Dt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new mc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var yv,Sc=Ie(()=>{yv=L(Ei());Vs();lp();a(Dt,"transaction");(0,yv._assignPackageExport)("transaction",Dt);Dt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Dt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var Pv={};je(Pv,{ResourceBridge:()=>BR});function HR({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 Ov(e,t){let r=Oi(e),n=HR(e,r);if(!r)throw new Ks.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Dt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&dp(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function Oi(e){let t=e.database||e.schema||z9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,j9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Nv(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*Iv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var wv,up,Ks,Cv,Ys,UR,vR,Dv,j9,z9,Q9,J9,bv,BR,Lv=Ie(()=>{"use strict";wv=L(Ev()),up=L(Wl()),Ks=L(_e());Pe();Cv=L(E_()),Ys=L(M()),UR=L(no()),vR=L(qs()),Dv=L(te());Sc();_p();({HDB_ERROR_MSGS:j9}=Ks.hdb_errors),z9="data",Q9=1e4,J9=10,BR=class extends wv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),bv=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,up.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=Oi(t);if(!n)throw new Ks.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:HR(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ks.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Oi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Oi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Oi(t).dropTable()}createSchema(t){return Ql({database:t.schema,table:null}),UR.signalSchemaChange(new vR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xR(t.schema),UR.signalSchemaChange(new vR.SchemaEventMsg(process.pid,Ys.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,bv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Cv.default)(t),s,i=ut()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Dt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=dp(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ut()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Dt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return Nv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ys.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Dv.async_set_timeout)(J9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Q9===0&&await u();return l.length>0&&await u(),s?Nv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,up.default)(t,"hashes");if(r)throw r;return Ov(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Ov(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,up.default)(t,"value");if(n)throw n;let s=Oi(t);if(!s)throw new Ks.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===Ys.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:HR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Oi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Oi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Oi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Oi(t),n={};switch(t.search_type){case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Iv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Iv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(HR,"getSelect");a(Ov,"getRecords");a(Oi,"getTable");a(Nv,"createDeleteResponse");a(Iv,"groupRecordsInHistory")});var Bn=N((fOe,Mv)=>{"use strict";var{ResourceBridge:X9}=(Lv(),oe(Pv)),Z9=se();Z9.initSync();var fp;function e7(){return fp||(fp=new X9,fp)}a(e7,"getBridge");Mv.exports=e7()});var Hv=N((hOe,Bv)=>{"use strict";var Uv=require("lodash"),M_=require("mathjs"),t7=require("jsonata"),vv=te();Bv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Uv.uniqWith(e,Uv.isEqual):e,"distinct_array"),searchJSON:r7,mad:U_.bind(null,M_.mad),mean:U_.bind(null,M_.mean),mode:U_.bind(null,M_.mode),prod:U_.bind(null,M_.prod),median:U_.bind(null,M_.median)};function U_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(U_,"aggregateFunction");function r7(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(vv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),vv.isEmpty(this.__ala__.res[r])){let n=t7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(r7,"searchJSON")});var kv=N((mOe,xv)=>{"use strict";var nr=require("moment"),kR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;xv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(kR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(kR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(kR),"offset_utc")}});var $v=N((TOe,qv)=>{"use strict";var n7=require("@turf/area"),s7=require("@turf/length"),i7=require("@turf/circle"),o7=require("@turf/difference"),a7=require("@turf/distance"),c7=require("@turf/boolean-contains"),l7=require("@turf/boolean-equal"),u7=require("@turf/boolean-disjoint"),d7=require("@turf/helpers"),Fv=M(),$e=te(),oo=W();qv.exports={geoArea:_7,geoLength:f7,geoCircle:E7,geoDifference:h7,geoDistance:Gv,geoNear:p7,geoContains:m7,geoEqual:S7,geoCrosses:T7,geoConvert:g7};function _7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return n7.default(e)}catch(t){return oo.trace(t,e),NaN}}a(_7,"geoArea");function f7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return s7.default(e,{units:t||"kilometers"})}catch(r){return oo.trace(r,e),NaN}}a(f7,"geoLength");function E7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return i7.default(e,t,{units:r||"kilometers"})}catch(n){return oo.trace(n,e,t),NaN}}a(E7,"geoCircle");function h7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return o7(e,t)}catch(r){return oo.trace(r,e,t),NaN}}a(h7,"geoDifference");function Gv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return a7.default(e,t,{units:r||"kilometers"})}catch(n){return oo.trace(n,e,t),NaN}}a(Gv,"geoDistance");function p7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Gv(e,t,n)<=r}catch(s){return oo.trace(s,e,t),!1}}a(p7,"geoNear");function m7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return c7.default(e,t)}catch(r){return oo.trace(r,e,t),!1}}a(m7,"geoContains");function S7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return l7.default(e,t)}catch(r){return oo.trace(r,e,t),!1}}a(S7,"geoEqual");function T7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!u7.default(e,t)}catch(r){return oo.trace(r,e,t),!1}}a(T7,"geoCrosses");function g7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Fv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Fv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),d7[t](e,r)}a(g7,"geoConvert")});var Ep=N((AOe,Vv)=>{var Tc=Hv(),Gn=kv(),Ni=$v();Vv.exports=e=>{e.aggr.mad=e.aggr.MAD=Tc.mad,e.aggr.mean=e.aggr.MEAN=Tc.mean,e.aggr.mode=e.aggr.MODE=Tc.mode,e.aggr.prod=e.aggr.PROD=Tc.prod,e.aggr.median=e.aggr.MEDIAN=Tc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Tc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Tc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ni.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ni.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ni.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ni.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ni.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ni.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ni.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ni.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ni.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ni.geoNear}});var jv=N((ROe,Wv)=>{"use strict";var v_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var A7=Ep(),Kv=require("clone"),hp=require("recursive-iterator"),Ue=W(),et=te(),Jl=Bn(),R7=M(),{hdb_errors:y7}=_e(),{getDatabases:Yv}=(Pe(),oe(lt)),b7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";A7(_n);var FR=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Ws)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}}_getColumns(){let t=new hp(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(Kv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=v_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=Yv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new hp(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new hp(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(R7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.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(et.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"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&v_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(Kv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.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(b7)>-1&&this.tables.forEach(s=>{let i={columnid:Yv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=v_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Jl.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await Jl.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Jl.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Jl.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(Ws)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof _n.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,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 l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(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.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.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(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=v_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new hp(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=v_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Ws)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Jl.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(y7.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Jl.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Wv.exports=FR});var Vr=N((bOe,zv)=>{"use strict";var O7=WD();zv.exports={searchByConditions:I7,searchByHash:w7,searchByValue:C7,search:D7};var GR=Bn(),{transformReq:qR}=te(),N7=jv();async function I7(e){return qR(e),GR.searchByConditions(e)}a(I7,"searchByConditions");async function w7(e){qR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of GR.searchByHash(e))r&&t.push(r);return t}a(w7,"searchByHash");async function C7(e){qR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of GR.searchByValue(e))t.push(r);return t}a(C7,"searchByValue");function D7(e,t){try{let r=new O7(e);r.validate(),new N7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(D7,"search")});var pp=N((NOe,Qv)=>{"use strict";var P7=Bn();Qv.exports={writeTransaction:L7};function L7(e,t,r){return P7.writeTransaction(e,t,r)}a(L7,"writeTransaction")});var e0=N((COe,Zv)=>{"use strict";var M7=Vr(),U7=us(),Jv=W(),v7=un(),wOe=pp(),B7=require("clone"),VR=require("alasql"),H7=Ep(),Xv=require("util"),x7=Xv.promisify(U7.getTableSchema),k7=Xv.promisify(M7.search),F7=M(),$R=te();H7(VR);Zv.exports={update:q7};var G7="There was a problem performing this update. Please check the logs and try again.";async function q7({statement:e,hdb_user:t}){let r=await x7(e.table.databaseid,e.table.tableid),n=$7(e.columns);$R.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=B7(s),c=$R.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=VR.parse(l).statements[0],d=await k7(u),_=V7(n,d);return K7(o,_,t)}a(q7,"update");function $7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=VR.compile(`SELECT ${r.expression.toString()} AS [${F7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Jv.error(t),new Error(G7)}}a($7,"createUpdateRecord");function V7(e,t){return $R.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(V7,"buildUpdateRecords");async function K7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await v7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Jv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(K7,"updateRecords")});var r0=N((MOe,t0)=>{var Y7=require("alasql"),W7=Vr(),j7=W(),z7=Bn(),YR=require("util"),KR=te(),Q7=M(),J7=us(),POe=pp(),LOe=un(),X7="record",Z7="successfully deleted",eee=YR.callbackify(see),tee=YR.promisify(W7.search),ree=YR.promisify(J7.getTableSchema);t0.exports={convertDelete:eee};function nee(e){return`${e.deleted_hashes.length} ${X7}${e.deleted_hashes.length===1?"":"s"} ${Z7}`}a(nee,"generateReturnMessage");async function see({statement:e,hdb_user:t}){let r=await ree(e.table.databaseid,e.table.tableid);KR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=KR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=Y7.parse(o).statements[0],l={operation:Q7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await tee(c);let u=await z7.deleteRecords(l);return KR.isEmptyOrZeroLength(u.message)&&(u.message=nee(u)),delete u.txn_time,u}catch(u){throw j7.error(u),u.hdb_code?u.message:u}}a(see,"convertDelete")});var a0=N((vOe,o0)=>{"use strict";var iee=ro(),{hdb_errors:n0}=_e(),{getDatabases:s0}=(Pe(),oe(lt));o0.exports={checkSchemaExists:i0,checkSchemaTableExists:oee,schema_describe:iee};async function i0(e){if(!s0()[e])return n0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(i0,"checkSchemaExists");async function oee(e,t){let r=await i0(e);if(r)return r;if(!s0()[e][t])return n0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(oee,"checkSchemaTableExists")});var Xl=N((HOe,aee)=>{aee.exports={name:"harperdb",version:"4.4.27",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2",chokidar:"^4.0.3","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var F_={};je(F_,{addAnalyticsListener:()=>k_,recordAction:()=>pr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>cee});function cee(e){p0=e}function pr(e,t,r,n,s){if(!p0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Tp.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Tp.set(i,o)}mp||lee()}function qn(e,t,r,n,s){pr(!!e,t,r,n,s)}function k_(e){T0.push(e)}function lee(){mp=performance.now(),setTimeout(async()=>{let e=performance.now()-mp;mp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of Tp){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of g0){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await A0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of T0)s(t);Tp=new Map,gc.parentPort?gc.parentPort.postMessage({type:S0,report:r}):b0({report:r})},m0).unref()}async function uee(e,t=6e4){let r=zR(),n=R0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,B_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let j=X+(I?"-"+I:"");U!==void 0&&(j+="-"+U),H!==void 0&&(j+="-"+H);let ae=c.get(j);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(j,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(j);Oe?Oe.push(...ne):l.set(j,ne)}}await A0()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of g0){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,Y,V,ne,Q,de,j,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:j,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Sp.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Sp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-c0,active:h-l0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}c0=f,l0=h}async function u0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function zR(){return d0||(d0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function R0(){return _0||(_0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function fee(){y0=!0;let e=(0,x_.get)(jR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await uee(m0,e),await u0(zR(),dee),await u0(R0(),_ee)},Math.min(e/2,2147483647)).unref()}function b0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(f0+=n.mean*n.count);r.totalBytesProcessed=f0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(E0.get(t))}),E0.set(t,t.performance.eventLoopUtilization())),r.id=(0,Sp.getNextMonotonicTime)(),zR().primaryStore.put(r.id,r),y0||fee(),Eee&&(O0=pee(r))}async function pee(e){if(await O0,!Zo){let r=(0,H_.dirname)((0,B_.getLogFilePath)());try{Zo=await(0,WR.open)((0,H_.join)(r,"analytics.log"),"r+")}catch{Zo=await(0,WR.open)((0,H_.join)(r,"analytics.log"),"w+")}}let t=(await Zo.stat()).size;if(t>hee){let r=Buffer.alloc(t);await Zo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Zo.write(r,{position:0}),await Zo.truncate(r.length),t=r.length}await Zo.write(JSON.stringify(e)+`
|
|
12
12
|
`,t)}var gc,h0,B_,H_,WR,Sp,x_,jR,Tp,p0,mp,m0,S0,T0,g0,c0,l0,A0,dee,_ee,d0,_0,y0,f0,E0,Eee,O0,Zo,hee,Ii=Ie(()=>{gc=require("worker_threads"),h0=L(dt());Pe();B_=L(W()),H_=require("path"),WR=require("fs/promises"),Sp=L(cn()),x_=L(se()),jR=L(M());qr();(0,x_.initSync)();Tp=new Map,p0=(0,x_.get)(jR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(cee,"setAnalyticsEnabled");a(pr,"recordAction");it.recordAnalytics=pr;a(qn,"recordActionBinary");mp=0,m0=1e3,S0="analytics-report",T0=[];a(k_,"addAnalyticsListener");g0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(lee,"sendAnalytics");a(uee,"aggregation");c0=0,l0=0,A0=a(()=>new Promise(setImmediate),"rest");a(u0,"cleanup");dee=36e5,_ee=31536e6;a(zR,"getRawAnalyticsTable");a(R0,"getAnalyticsTable");(0,h0.setChildListenerByType)(S0,b0);a(fee,"startScheduledTasks");f0=0,E0=new Map,Eee=!1;a(b0,"recordAnalytics");hee=1e6;a(pee,"logAnalytics")});var ey=N((QOe,H0)=>{"use strict";var{decode:mee}=require("msgpackr"),{isMainThread:WOe,parentPort:jOe,threadId:zOe}=require("worker_threads"),Rp=mr(),Zl=Ct(),XR=M(),jr=W(),JR=se(),See=M(),{onMessageByType:Tee}=dt(),C0=to(),{recordAction:N0,recordActionBinary:gee}=(Ii(),oe(F_)),{publishToStream:Aee}=Rp,{ConsumerEvents:I0}=require("nats"),Ree=Vr(),{promisify:yee}=require("util"),D0=yee(setTimeout),yp=1e4,bp,Ap,bee,Oee,P0,G_=new Map,eu=new Map;H0.exports={initialize:L0,ingestConsumer:ZR,setSubscription:Nee,setIgnoreOrigin:Cee,getDatabaseSubscriptions:wee,updateConsumer:M0};async function L0(){Tee(XR.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await M0(n)}),P0=!0,jr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Rp.getNATSReferences();bp=e,Ap=e.info.server_name,bee=t,Oee=r}a(L0,"initialize");async function M0(e){if(e.status==="start"){let{js:t,jsm:r}=await U0(e.node_domain_name);ZR(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=G_.get(e.stream_name+e.node_domain_name);t&&(jr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),G_.set(e.stream_name+e.node_domain_name,"close")),eu.get(e.node_domain_name)==="failed"&&eu.set(e.node_domain_name,"close")}}a(M0,"updateConsumer");var Op=new Map;function Nee(e,t,r){let n=Op.get(e);n||Op.set(e,n=new Map),n.set(t,r),P0||L0().then(Iee)}a(Nee,"setSubscription");async function Iee(){let e=await Ree.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Zl.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await U0(r),!n))break;let{schema:o,table:c}=i,l=C0.createNatsTableStreamName(o,c);ZR(l,n,s,r)}}}a(Iee,"accessConsumers");async function U0(e){let t,r,n=1;for(;!r;)try{t=await bp.jetstream({domain:e}),r=await bp.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(eu.get(e)==="close")break;eu.set(e,"failed"),n%10===1&&jr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<yp?n++*100:yp;await D0(i)}return{js:t,jsm:r}}a(U0,"connectToRemoteJS");function wee(){return Op}a(wee,"getDatabaseSubscriptions");var v0;function Cee(e){v0=e}a(Cee,"setIgnoreOrigin");var B0=100,w0=new Array(B0),gp=0;async function ZR(e,t,r,n){let{connection:s}=await Rp.getNATSReferences();bp=s,Ap=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ap),jr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(eu.get(n)==="close")break;o%10===1&&jr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(jr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Rp.createConsumer(r,e,Ap,new Date(Date.now()).toISOString()));let d=o++*100<yp?o++*100:yp;await D0(d)}let c=!1,l;for(;!c;){if(G_.get(e+n)==="close"||eu.get(n)==="close"){G_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:JR.get(XR.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),G_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===I0.ConsumerDeleted&&(await l.close(),c=!0),d.type===I0.HeartbeatsMissed){let _=d.data;jr.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(jr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await w0[gp],w0[gp]=Dee(d).catch(_=>{jr.error(_)}),++gp>=B0&&(gp=0)}catch(d){d.message==="consumer deleted"?(jr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):jr.error("Error consuming clustering ingest, restarting consumer",d)}}}a(ZR,"ingestConsumer");async function Dee(e){let t=mee(e.data);N0(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),jr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=JR.get(XR.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Zl.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Zl.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Zl.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!v0),gee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Zl.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;jr.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),jr.trace(`messageProcessor nats msg id: ${e.headers.get(Zl.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=_);let T=new Promise(U=>h=U),{timestamp:m,user:g,node_name:S}=E||{},y=Op.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:QR(o),value:d[0],id:_?.[0],expiresAt:f,timestamp:m,table:u,onCommit:h,user:g,nodeName:S});else{let U=d.map((H,X)=>({type:QR(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:QR(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:U,table:u,timestamp:m,onCommit:h,user:g,nodeName:S})}JR.get(See.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Aee(e.subject.split(".").slice(0,-1).join("."),C0.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&N0(I,"replication-latency",e.subject,o,"ingest")}catch(o){jr.error(o)}e.ack()}a(Dee,"messageProcessor");function QR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(QR,"convertOperation")});var mr=N((nNe,eB)=>{"use strict";var Or=se();Or.initSync();var Pee=require("fs-extra"),Lee=require("semver"),V_=require("path"),{monotonicFactory:Mee}=require("ulidx"),k0=Mee(),Uee=require("util"),F0=require("child_process"),vee=Uee.promisify(F0.exec),Bee=F0.spawn,Dr=Ct(),Je=M(),Np=te(),js=W(),Ip=to(),Hee=pp(),q_=wt(),{broadcast:xee,onMessageByType:kee,getWorkerIndex:Fee}=dt(),{isMainThread:G0}=require("worker_threads"),{Encoder:Gee,decode:sy}=require("msgpackr"),q0=new Gee,{isEmpty:bc}=Np,$0=xn(),XOe=48*36e11;G0&&kee(Je.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,yc=void 0});var{connect:qee,StorageType:$ee,RetentionPolicy:Vee,AckPolicy:iy,DeliverPolicy:oy,DiscardPolicy:Kee,NatsConnection:ZOe,JetStreamManager:eNe,JetStreamClient:tNe,StringCodec:rNe,JSONCodec:Yee,createInbox:ay,headers:Wee,ErrorCode:x0}=require("nats"),{PACKAGE_ROOT:jee}=M(),zee=Xl(),{recordAction:Qee}=(Ii(),oe(F_)),V0=Yee(),Jee="clustering",Xee=zee.engines[Dr.NATS_SERVER_NAME],Zee=V_.join(jee,"dependencies"),ny=V_.join(Zee,`${process.platform}-${process.arch}`,Dr.NATS_BINARY_NAME),ty,ry,$_,Ac,Rc;eB.exports={runCommand:K0,checkNATSServerInstalled:ete,createConnection:cy,getConnection:K_,getJetStreamManager:Y_,getJetStream:W0,getNATSReferences:wi,getServerList:rte,createLocalStream:ly,listStreams:j0,deleteLocalStream:nte,getServerConfig:tu,listRemoteStreams:ste,viewStream:ite,viewStreamIterator:ote,publishToStream:ate,request:ute,reloadNATS:uy,reloadNATSHub:dte,reloadNATSLeaf:_te,extractServerName:lte,requestErrorHandler:fte,createLocalTableStream:X0,createTableStreams:pte,purgeTableStream:Z0,purgeSchemaTableStreams:mte,getStreamInfo:Ste,updateLocalStreams:gte,closeConnection:tte,getJsmServerName:wp,addNatsMsgHeader:z0,clearClientCache:Y0,updateRemoteConsumer:Ete,createConsumer:Q0,updateConsumerIterator:hte};async function K0(e,t=void 0){let{stdout:r,stderr:n}=await vee(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
13
|
`,""));return r.replace(`
|
|
14
14
|
`,"")}a(K0,"runCommand");async function ete(){try{await Pee.access(ny)}catch{return!1}let e=await K0(`${ny} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Lee.eq(t,Xee)}a(ete,"checkNATSServerInstalled");async function cy(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await $0.getClusterUser();if(bc(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}js.trace("create nats connection called");let i=await qee({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Or.get(Je.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Or.get(Je.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Or.get(Je.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),js.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&js.error("Error with Nats client connection, connection closed",o),i===zr&&Y0()}),i}a(cy,"createConnection");function Y0(){zr=void 0,Ac=void 0,Rc=void 0,yc=void 0}a(Y0,"clearClientCache");async function tte(){zr&&(await zr.drain(),zr=void 0,Ac=void 0,Rc=void 0,yc=void 0)}a(tte,"closeConnection");var zr,yc;async function K_(){return yc||(yc=cy(Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await yc),zr||yc}a(K_,"getConnection");async function Y_(){if(Ac)return Ac;bc(zr)&&await K_();let{domain:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ac=await zr.jetstreamManager({domain:e,timeout:6e4}),Ac}a(Y_,"getJetStreamManager");async function W0(){if(Rc)return Rc;bc(zr)&&await K_();let{domain:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bc(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rc=zr.jetstream({domain:e,timeout:6e4}),Rc}a(W0,"getJetStream");async function wi(){let e=zr||await K_(),t=Ac||await Y_(),r=Rc||await W0();return{connection:e,jsm:t,js:r}}a(wi,"getNATSReferences");async function rte(e){let t=Or.get(Je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await $0.getClusterUser(),s=await cy(t,r,n),i=ay(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=V0.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await Np.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(rte,"getServerList");async function ly(e,t){let{jsm:r}=await wi(),n=Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:$ee.File,retention:Vee.Limits,subjects:t,discard:Kee.Old,max_msgs:s,max_bytes:i,max_age:n})}a(ly,"createLocalStream");async function j0(){let{jsm:e}=await wi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(j0,"listStreams");async function nte(e){let{jsm:t}=await wi();await t.streams.delete(e)}a(nte,"deleteLocalStream");async function ste(e){let{connection:t}=await wi(),r=[],n=ay(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(V0.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(ste,"listRemoteStreams");async function ite(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wi(),i=k0(),o={durable_name:i,ack_policy:iy.Explicit};t&&(o.deliver_policy=oy.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let _=sy(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Dr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(ite,"viewStream");async function*ote(e,t=void 0,r=void 0){let{jsm:n,js:s}=await wi(),i=k0(),o={durable_name:i,ack_policy:iy.Explicit};t&&(o.deliver_policy=oy.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=sy(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Dr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(ote,"viewStreamIterator");async function ate(e,t,r,n){js.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=z0(n,r);let{js:s}=await wi(),i=await wp(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:q0.encode(n);try{js.trace(`publishToStream publishing to subject: ${o}`),Qee(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return J0(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){js.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await ly(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(ate,"publishToStream");function z0(e,t){t===void 0&&(t=Wee());let r=Or.get(Je.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Dr.MSG_HEADERS.ORIGIN)&&r&&t.append(Dr.MSG_HEADERS.ORIGIN,r),t}a(z0,"addNatsMsgHeader");function tu(e){e=e.toLowerCase();let t=V_.join(Or.get(Je.CONFIG_PARAMS.ROOTPATH),Jee);if(e===Je.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(ry)&&(ry={port:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.HUB,config_file:Dr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:V_.join(t,Dr.PID_FILES.HUB),hdb_nats_path:t}),ry;if(e===Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(ty)&&(ty={port:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.LEAF,config_file:Dr.NATS_CONFIG_FILES.LEAF_SERVER,domain:q_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Dr.SERVER_SUFFIX.LEAF,pid_file_path:V_.join(t,Dr.PID_FILES.LEAF),hdb_nats_path:t}),ty;js.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(tu,"getServerConfig");async function Q0(e,t,r,n){try{await e.consumers.add(t,{ack_policy:iy.Explicit,durable_name:r,deliver_policy:oy.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(Q0,"createConsumer");async function cte(e,t,r){await e.consumers.delete(t,r)}a(cte,"removeConsumer");function lte(e){return e.split(".")[1]}a(lte,"extractServerName");async function ute(e,t,r=6e4,n=ay()){if(!Np.isObject(t))throw new Error("data param must be an object");let s=q0.encode(t),{connection:i}=await wi(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return sy(c.data)}a(ute,"request");function uy(e){return new Promise(async(t,r)=>{let n=Bee(ny,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(uy,"reloadNATS");async function dte(){let{pid_file_path:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await uy(e)}a(dte,"reloadNATSHub");async function _te(){let{pid_file_path:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await uy(e)}a(_te,"reloadNATSLeaf");function fte(e,t,r){let n;switch(e.code){case x0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case x0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(fte,"requestErrorHandler");async function Ete(e,t){let r=t+Dr.SERVER_SUFFIX.LEAF,{connection:n}=await wi(),{jsm:s}=await Rte(r),{schema:i,table:o}=e,c=Ip.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await J0(async()=>{if(e.subscribe===!0)await Q0(s,c,n.info.server_name,l);else try{await cte(s,c,n.info.server_name)}catch(u){js.trace(u)}})}a(Ete,"updateRemoteConsumer");async function hte(e,t,r,n){let s=Ip.createNatsTableStreamName(e,t),i=r+Dr.SERVER_SUFFIX.LEAF,o={type:Je.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!G0&&Fee()<Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=ey();await c(o)}await xee(o),n==="stop"&&await Np.async_set_timeout(1e3)}a(hte,"updateConsumerIterator");function J0(e){return Hee.writeTransaction(Je.SYSTEM_SCHEMA_NAME,Je.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(J0,"exclusiveLock");async function X0(e,t){let r=Ip.createNatsTableStreamName(e,t),n=await wp(),s=Tte(e,t,n);await ly(r,[s])}a(X0,"createLocalTableStream");async function pte(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await X0(n,s)}}a(pte,"createTableStreams");async function Z0(e,t,r=void 0){if(Or.get(Je.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Ip.createNatsTableStreamName(e,t),{domain:s}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await K_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")js.warn(n);else throw n}}a(Z0,"purgeTableStream");async function mte(e,t){if(Or.get(Je.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await Z0(e,t[r])}a(mte,"purgeSchemaTableStreams");async function Ste(e){return(await Y_()).streams.info(e)}a(Ste,"getStreamInfo");function Tte(e,t,r){return`${Dr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Tte,"createSubjectName");async function wp(){if($_)return $_;if($_=(await Y_())?.nc?.info?.server_name,$_===void 0)throw new Error("Unable to get jetstream manager server name");return $_}a(wp,"getJsmServerName");async function gte(){let e=await Y_(),t=await wp(),r=await j0();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Ate(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");js.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(gte,"updateLocalStreams");function Ate(e){let{config:t}=e,r=!1,n=Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Ate,"updateStreamLimits");async function Rte(e){let t,r;try{t=await zr.jetstream({domain:e}),r=await zr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw js.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Rte,"connectToRemoteJS")});var Oc=N(Dp=>{var Cp=W();for(let e of["trace","debug","info","warn","error","fatal","notify"])Cp.logsAtLevel(e)&&(Dp[e]=Cp[e]);Dp.loggerWithTag=e=>Cp.loggerWithTag(e,!0);Dp.setLogLevel=Cp.setLogLevel});function dy(e){let t=e.get(Pp),r=t?(0,ru.unpack)(t):null;r||(r={remoteNameToId:{}});let n=ot(),s=!1;r.nodeName=ot();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:j_(e)??1,nodes:[]})})}i[n]=0,e.putSync(Pp,(0,ru.pack)(r))}return r}function W_(e){return dy(e).remoteNameToId}function rB(e,t,r){let n=dy(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(Pp,(0,ru.pack)(n)),i}function Lp(e,t){let r=dy(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(Pp,(0,ru.pack)(r))}return tB.info?.("The remote node name map",e,n,s),s}var tB,ru,Pp,_y=Ie(()=>{tB=L(Oc());ds();ru=require("msgpackr"),Pp=Symbol.for("remote-ids");a(dy,"getIdMappingRecord");a(W_,"exportIdMapping");a(rB,"remoteToLocalNodeId");a(Lp,"getIdOfRemoteNode")});var ea,fy=Ie(()=>{ea=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var iB={};je(iB,{Resources:()=>Mp,keyArrayToString:()=>nu,resetResources:()=>yte,resources:()=>Ci});function yte(){return Ci=new Mp}function nu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var nB,sB,Mp,Ci,su=Ie(()=>{Sc();fy();nB=L(W()),sB=L(_e()),Mp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new sB.ServerError(`Conflicting paths for ${t}`);nB.default.error(c),i.Resource=new ea(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Dt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(yte,"resetResources");a(nu,"keyArrayToString")});function py(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=aB,bte(e.primaryStore,e.auditStore)):(c=oB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{cB(oB[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=nu(t);let d=new hy(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function cB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),lB(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=nu(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,Ey.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,Ey.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_!==l.length-1&&u++,_>-1?l=l.slice(0,_+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function bte(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=aB[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{cB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function lB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function uB(e){return e.nextTransaction||(py({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),lB(e)),e.nextTransaction}var Ey,oB,aB,hy,my=Ie(()=>{Ey=L(W());Ll();su();Ji();oB=Object.create(null),aB=Object.create(null);a(py,"addSubscription");hy=class extends Mn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(cB,"notifyFromTransactionData");a(bte,"listenToCommits");a(lB,"nextTransaction");a(uB,"whenNextTransaction")});var pB={};je(pB,{commits_awaiting_replication:()=>au,getHDBNodeTable:()=>Sr,iterateRoutes:()=>Q_,shouldReplicateToNode:()=>z_,subscribeToNodeUpdates:()=>cu});function Sr(){return dB||(dB=Et({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function cu(e){Sr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;hB.debug?.("adding node",n,"on node",ot()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==ot()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function z_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Sr().primaryStore.get(ot())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Ote(){cu(e=>{ta({},(t,r)=>{let n=e.name,s=_B.get(n);if(s||_B.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of au.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*Q_(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=iu.default.get(ou.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!iu.default.get(ou.CONFIG_PARAMS.REPLICATION_PORT)&&iu.default.get(ou.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||iu.default.get(ou.CONFIG_PARAMS.REPLICATION_PORT)||iu.default.get(ou.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){fB.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,start_time:t.startTime}}}var fB,EB,iu,ou,hB,dB,_B,au,lu=Ie(()=>{Pe();ds();lp();fB=require("worker_threads"),EB=L(_e()),iu=L(se()),ou=L(M()),hB=L(Oc());server.nodes=[];a(Sr,"getHDBNodeTable");a(cu,"subscribeToNodeUpdates");a(z_,"shouldReplicateToNode");_B=new Map;Rv((e,t,r)=>{if(r>server.nodes.length)throw new EB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);au||(au=new Map,Ote());let n=au.get(e);return n||(n=[],au.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Ote,"startSubscriptionToReplications");a(Q_,"iterateRoutes")});var AB={};je(AB,{connectedToNode:()=>Nc,disconnectedFromNode:()=>_u,ensureNode:()=>co,requestClusterStatus:()=>gB,startOnMainThread:()=>Ty});async function Ty(e){let t=0,r=ut();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){Up.set(i,j_(l.auditStore));break}}}Di.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of Q_(e))try{let c=!o.subscriptions;if(c){let u=ot();Sr().primaryStore.get(u)===void 0&&await co(u,{name:u,url:e.url??ra(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}cu(s)});let n;function s(i,o=i?.name){let c=ot()&&o===ot()||ra()&&i?.url===ra();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of Sr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(_t.trace("Setting up node replication for",i),!i){for(let[_,E]of ao){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),_t.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){ao.get(_).iterator.remove(),ao.delete(_);return}}return}if(c)return;if(!i.url){_t.info(`Node ${i.name} is missing url`);return}let l=ao.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(_t.info(`Added node ${i.name} at ${i.url} for process ${ot()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of uu)if(i.url===E.url){uu.delete(_);break}uu.set(i.name,i)}let u=ut();if(l||(l=new Map,ao.set(i.url,l)),l.iterator=ta(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(_t.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){_t.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];Up.has(_)&&(T.push({replicateByDefault:E,name:ot(),start_time:Up.get(_),end_time:Date.now(),replicates:!0}),Up.delete(_));let m=z_(i,_),g=Di.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):du(S)},Nte);else{_t.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],Sr().primaryStore.get(ot())?.replicates),Sr().primaryStore.get(ot())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Bp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),_u=a(function(i){try{_t.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(uu.keys()),c=o.sort(),l=c.indexOf(i.name||zs(i.url));if(l===-1){_t.warn("Disconnected node not found in node map",i.name,o);return}let u=ao.get(i.url),d=u?.get(i.database);if(!d){_t.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=uu.get(f);u=ao.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){_t.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){_t.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,_t.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):du({database:i.database,nodes:g});return}_t.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){_t.error("Error failing over node",o)}},"disconnectedFromNode"),Nc=a(function(i){let o=ao.get(i.url),c=o?.get(i.database);if(!c){_t.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):du({database:i.database,nodes:u}))}},"connectedToNode"),(0,Di.onMessageByType)("disconnected-from-node",_u),(0,Di.onMessageByType)("connected-to-node",Nc),(0,Di.onMessageByType)("request-cluster-status",gB)}function gB(e,t){let r=[];for(let[n,s]of uu)try{let i=ao.get(s.url);_t.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,Sy.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){_t.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function co(e,t){let r=Sr();e=e??zs(t.url),t.name=e;try{if(t.ca){let s=new TB.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){_t.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(_t.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!mB.default.get(SB.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,Sy.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}_t.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Di,vp,_t,Sy,mB,SB,TB,Nte,ao,_u,Nc,uu,Up,J_=Ie(()=>{Pe();Di=L(dt());ds();vp=require("worker_threads");lu();_t=L(W()),Sy=require("lodash"),mB=L(se()),SB=L(M()),TB=require("crypto"),Nte=200,ao=new Map,uu=new Map,Up=new Map;a(Ty,"startOnMainThread");a(gB,"requestClusterStatus");vp.parentPort&&(_u=a(e=>{vp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Nc=a(e=>{vp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Di.onMessageByType)("subscribe-to-node",e=>{du(e)}),(0,Di.onMessageByType)("unsubscribe-from-node",e=>{Bp(e)}));a(co,"ensureNode")});var Hp=N((PNe,RB)=>{"use strict";var Ite=M().OPERATIONS_ENUM,gy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Ite.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};RB.exports=gy});var bB=N((MNe,yB)=>{"use strict";var wte={OPERATION:"operation",REFRESH:"refresh"},Ay=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Ry=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};yB.exports={JWTTokens:Ay,TOKEN_TYPE_ENUM:wte,JWTRSAKeys:Ry}});var fu=N((vNe,wB)=>{"use strict";var Z_=require("jsonwebtoken"),yy=require("fs-extra"),by=te(),_s=M(),{handleHDBError:fn,hdb_errors:Cte}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=Cte,X_=W(),OB=Kh(),Iy=xn(),Dte=un().update,Pte=Hp(),Lte=no(),{UserEventMsg:Mte}=qs(),na=se();na.initSync();var Oy=require("path"),{JWTTokens:Ute,JWTRSAKeys:vte,TOKEN_TYPE_ENUM:xp}=bB(),Bte=na.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?na.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Hte=na.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?na.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",kp="RS256",Ny;wB.exports={createTokens:xte,validateOperationToken:Fte,refreshOperationToken:kte,validateRefreshToken:IB,getJWTRSAKeys:ef};async function xte(e){if(by.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(by.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(by.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Iy.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw X_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await ef(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await NB(i,r.private_key,r.passphrase),c=await Z_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Hte,algorithm:kp,subject:xp.REFRESH}),l=OB.hash(c),u=new Pte(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await Dte(u)}catch(E){X_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw fn(new Error,hn.REFRESH_TOKEN_SAVE_FAILED,En.INTERNAL_SERVER_ERROR);return Lte.signalUserChange(new Mte(process.pid)),new Ute(o,c)}a(xte,"createTokens");async function NB(e,t,r){return await Z_.sign(e,{key:t,passphrase:r},{expiresIn:Bte,algorithm:kp,subject:xp.OPERATION})}a(NB,"signOperationToken");async function ef(){if(Ny===void 0)try{let e=Oy.join(na.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Oy.join(na.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Oy.join(na.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await yy.readFile(e)).toString(),s=(await yy.readFile(t)).toString(),i=(await yy.readFile(r)).toString();Ny=new vte(i,s,n)}catch(e){throw X_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return Ny}a(ef,"getJWTRSAKeys");async function kte(e){if(!e)throw fn(new Error,hn.INVALID_BODY,En.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fn(new Error,hn.REFRESH_TOKEN_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);await IB(e.refresh_token);let t=await ef(),r=await Z_.decode(e.refresh_token);return{operation_token:await NB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(kte,"refreshOperationToken");async function Fte(e){try{let t=await ef(),r=await Z_.verify(e,t.public_key,{algorithms:kp,subject:xp.OPERATION});return await Iy.findAndValidateUser(r.username,void 0,!1)}catch(t){throw X_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(Fte,"validateOperationToken");async function IB(e){let t;try{let r=await ef(),n=await Z_.verify(e,r.public_key,{algorithms:kp,subject:xp.REFRESH});t=await Iy.findAndValidateUser(n.username,void 0,!1)}catch(r){throw X_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!OB.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(IB,"validateRefreshToken")});var Xs=N(ZB=>{"use strict";var sr=require("path"),{watch:Gte}=require("chokidar"),pn=require("fs-extra"),Eu=require("node-forge"),vB=require("net"),{generateKeyPair:Cy,X509Certificate:lo,createPrivateKey:BB}=require("crypto"),qte=require("util");Cy=qte.promisify(Cy);var yt=Eu.pki,Qs=require("joi"),{v4:HB}=require("uuid"),{validateBySchema:My}=Tt(),pt=W(),Es=se(),hs=M(),{CONFIG_PARAMS:hu}=hs,Js=Sg(),{ClientError:ia}=_e(),wc=require("node:tls"),{relative:xB,join:$te}=require("node:path"),{CERT_PREFERENCE_APP:HNe,CERTIFICATE_VALUES:CB}=Js,Vte=ja(),Dy=wt(),DB=parseInt(process.version.slice(1))<20,{table:Kte,getDatabases:Yte,databases:wy}=(Pe(),oe(lt)),{getJWTRSAKeys:PB}=fu();Object.assign(ZB,{generateKeys:By,updateConfigCert:YB,createCsr:Zte,signCertificate:ere,setCertTable:pu,loadCertificates:$B,reviewSelfSignedCert:xy,createTLSSelector:zB,listCertificates:JB,addCertificate:ore,removeCertificate:cre,createNatsCerts:nre,generateCertsKeys:rre,getReplicationCert:rf,getReplicationCertAuth:Xte,renewSelfSigned:sre,hostnamesFromCert:XB,getKey:lre});var{urlToNodeName:kB,getThisNodeUrl:Wte,getThisNodeName:Gp,clearThisNodeName:jte}=(ds(),oe(ca)),{readFileSync:zte,statSync:FB}=require("node:fs"),xNe=se(),{getTicketKeys:Qte,onMessageFromWorkers:Jte}=dt(),sa=W(),{isMainThread:GB}=require("worker_threads"),{TLSSocket:qB,createSecureContext:kNe}=require("node:tls"),Uy=3650,tf=["127.0.0.1","localhost","::1"],vy=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Jte(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(Es.initSync(!0),await xy())});var Pr;function aa(){return Pr||(Pr=Yte().system.hdb_certificate,Pr||(Pr=Kte({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Pr}a(aa,"getCertTable");async function rf(){let e=zB("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Gp());if(!r)return;let n=new lo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(rf,"getReplicationCert");async function Xte(){aa();let e=(await rf()).options.cert,r=new lo(e).issuer.match(/CN=(.*)/)?.[1];return Pr.get(r)}a(Xte,"getReplicationCertAuth");var LB,oa=new Map;function $B(){if(LB)return;LB=!0;let e=[{configKey:hu.TLS},{configKey:hu.OPERATIONSAPI_TLS}];aa();let t=sr.dirname(Dy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=Dy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&xB($te(t,"keys"),o);c&&MB(o,l=>{oa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&GB){let d;MB(u,_=>{if(CB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=WB(u),h=new lo(f),T;try{T=ky(h)}catch(y){pt.error("error extracting common name from certificate",y);return}if(T==null){pt.error("error extracting common name from certificate");return}if(h.checkIssued(new lo(CB.cert)))return;let m=Pr.primaryStore.get(T),g=FB(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&pt.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Pr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a($B,"loadCertificates");function MB(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&GB&&pt.warn(`Reloading ${r}:`,i),n=c,t(WB(i)))}catch(c){pt.error(`Error loading ${r}:`,i,c)}},"loadFile");pn.existsSync(e)?s(e,FB(e)):pt.error(`${r} file not found:`,e),Gte(e,{persistent:!1}).on("change",s)}a(MB,"loadAndWatch");function Py(){let e=Wte();if(e==null){let t=tf[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return kB(e)}a(Py,"getHost");function Fp(){let e=Gp();if(e==null){let t=tf[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(Fp,"getCommonName");async function Zte(){let e=await rf(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);pt.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:Fp()},...vy];pt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:VB()}];return pt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Eu.pki.certificationRequestToPem(n)}a(Zte,"createCsr");function VB(){let e=tf.includes(Fp())?tf:[...tf,Fp()];return e.includes(Py())||e.push(Py()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>vB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(VB,"certExtensions");async function ere(e){let t={},r=sr.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;aa();for await(let d of Pr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(oa.has(d.private_key_name)){n=oa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(sr.join(r,d.private_key_name))){n=pn.readFile(sr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await Ly();s=d.ca,n=d.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);pt.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return pt.error(d),new Error("Error verifying CSR: "+d.message)}let c=Eu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Uy),pt.info("sign cert setting validity:",c.validity),pt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),pt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;pt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Eu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else pt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(ere,"signCertificate");async function tre(e,t){await pu({name:Gp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await pu({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(tre,"createCertificateTable");async function pu(e){let t=new lo(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},aa(),await Pr.patch(e)}a(pu,"setCertTable");async function By(){let e=await Cy("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(By,"generateKeys");async function Hy(e,t,r){let n=yt.createCertificate();if(!t){let o=await rf();t=yt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Uy);let i=[{name:"commonName",value:Fp()},...vy];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(VB()),n.sign(e,Eu.md.sha256.create()),yt.certificateToPem(n)}a(Hy,"generateCertificates");async function Ly(){let e=await JB(),t;for(let r of e){if(!r.is_authority)continue;let n=await QB(r.private_key_name);if(r.private_key_name&&n&&new lo(r.certificate).checkPrivateKey(BB(n))){pt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;pt.trace("No CA found with matching private key")}a(Ly,"getCertAuthority");async function KB(e,t,r=!0){let n=yt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Uy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Es.get(hu.REPLICATION_HOSTNAME)??kB(Es.get(hu.REPLICATION_URL))??HB().split("-")[0]}`},...vy];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Eu.md.sha256.create());let o=sr.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=sr.join(o,Js.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,yt.privateKeyToPem(e)),n}a(KB,"generateCertAuthority");async function rre(){let{private_key:e,public_key:t}=await By(),r=await KB(e,t),n=await Hy(e,t,r);await tre(n,r),YB()}a(rre,"generateCertsKeys");async function nre(){let e=await Hy(yt.privateKeyFromPem(Js.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Js.CERTIFICATE_VALUES.cert)),t=sr.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=sr.join(t,Js.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=sr.join(t,Js.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Js.CERTIFICATE_VALUES.cert)}a(nre,"createNatsCerts");async function sre(){aa();for await(let e of Pr.search([{attribute:"is_self_signed",value:!0}]))await Pr.delete(e.name);await xy()}a(sre,"renewSelfSigned");async function xy(){jte(),await $B(),aa();let e=await Ly();if(!e){pt.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=Es.get(hu.TLS_PRIVATEKEY),n=sr.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=xB(n,r);try{s=yt.privateKeyFromPem(await pn.readFile(r))}catch(c){pt.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await By(),await pn.exists(sr.join(n,Js.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${HB().split("-")[0]}.pem`),await pn.writeFile(sr.join(n,i),yt.privateKeyToPem(s))}let o=await KB(s,yt.setRsaPublicKey(s.n,s.e),!1);await pu({name:o.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await rf()){let r=Gp();pt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await Ly();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Hy(yt.privateKeyFromPem(e.private_key),s,n);await pu({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(xy,"reviewSelfSignedCert");function YB(){let e=Vte(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=sr.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=sr.join(t,Js.PRIVATEKEY_PEM_NAME),n=sr.join(t,Js.NATS_CERTIFICATE_PEM_NAME),s=sr.join(t,Js.NATS_CA_PEM_NAME),i=hs.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),Dy.updateConfigValue(void 0,void 0,o,!1,!0)}a(YB,"updateConfigCert");function WB(e){return e.startsWith("-----BEGIN")?e:zte(e,"utf8")}a(WB,"readPEM");var UB=wc.createSecureContext;wc.createSecureContext=function(e){if(!e.cert||!e.key)return UB(e);let t={...e};delete t.key,delete t.cert;let r=UB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var jB=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),jB.call(this,e,t)};wc.Server.prototype=jB.prototype;var ire=qB.prototype._init;qB.prototype._init=function(e,t){ire.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Ic=new Map;function zB(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ic.clear();let d=0;for await(let _ of wy.system.hdb_certificate.search([])){let E=_.certificate,f=new lo(E);_.is_authority&&(f.asString=E,Ic.set(f.subject,E))}for await(let _ of wy.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await QB(_.private_key_name),T=_.certificate,m=new lo(T);if(Ic.has(m.issuer)&&(T+=`
|