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:HQ.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(GQ,"findPs")});var Ht=N((Pge,OC)=>{"use strict";var qQ="__dbis__",$Q="__txns__",VQ="__environment_name__",KQ="__dbi_defintion__",YQ={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"},WQ=["__createdtime__","__updatedtime__"],jQ="\uFFFF",bC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},zQ=Object.values(bC);OC.exports={AUDIT_STORE_NAME:$Q,INTERNAL_DBIS_NAME:qQ,DBI_DEFINITION_NAME:KQ,SEARCH_TYPES:YQ,TIMESTAMP_NAMES:WQ,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:VQ,TRANSACTIONS_DBI_NAMES_ENUM:bC,TRANSACTIONS_DBIS:zQ,OVERFLOW_MARKER:jQ}});var Dn=N((Dge,UC)=>{"use strict";var NC=M(),IC=Ht(),wC={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},CC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),PC={500:CC("There was an error processing your request."),400:"Invalid request"},QQ=PC[wC.INTERNAL_SERVER_ERROR],JQ={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")},XQ={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},ZQ={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"},e2={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 ${IC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${IC.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"},t2={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${NC.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 ${NC.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"},DC={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"},r2={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."},n2={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")},s2={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"},i2={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},o2={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")},LC={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")},MC={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")},a2={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"},c2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},l2={...DC,...ZQ,...JQ,...r2,...n2,...s2,...i2,...o2,...t2,...LC,...MC,...a2,...c2,...XQ};UC.exports={CHECK_LOGS_WRAPPER:CC,HDB_ERROR_MSGS:l2,DEFAULT_ERROR_MSGS:PC,DEFAULT_ERROR_RESP:QQ,HTTP_STATUS_CODES:wC,LMDB_ERRORS_ENUM:e2,AUTHENTICATION_ERROR_MSGS:DC,VALIDATION_ERROR_MSGS:LC,ITC_ERRORS:MC}});var _e=N((Mge,HC)=>{"use strict";var Cl=Dn(),u2=W(),d2=M(),oh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,vC),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&&u2[s](i)}},Tg=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}},gg=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function vC(e,t,r,n=d2.LOG_LEVELS.ERROR,s=null,i=!1){if(BC(e))return e;let o=new oh(e,t,r,n,s);return i&&delete o.stack,o}a(vC,"handleHDBError");function BC(e){return e.__proto__.constructor.name===oh.name}a(BC,"isHDBError");HC.exports={isHDBError:BC,handleHDBError:vC,ClientError:Tg,ServerError:gg,hdb_errors:Cl}});var Ag=N(xC=>{"use strict";var _2={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
|
`)},f2="certificate.pem",E2="privateKey.pem",h2="caCertificate.pem",p2="natsCertificate.pem",m2="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},S2={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"]},T2={[Rt.SERVER]:2,[Rt.DEFAULT]:1},g2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},A2={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},R2={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},y2={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},b2={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(xC,{CERTIFICATE_PEM_NAME:f2,PRIVATEKEY_PEM_NAME:E2,CA_PEM_NAME:h2,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:S2,CERT_PREFERENCE_APP:T2,CERT_PREFERENCE_OPS:g2,CERT_PREFERENCE_REP:A2,CA_CERT_PREFERENCE_REP:R2,CA_CERT_PREFERENCE_OPS:y2,CA_CERT_PREFERENCE_APP:b2,CERTIFICATE_VALUES:_2,NATS_CERTIFICATE_PEM_NAME:p2,NATS_CA_PEM_NAME:m2})});var Tt=N((Bge,kC)=>{"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};kC.exports={validateObject:O2,validateObjectAsync:N2,validateBySchema:I2};function O2(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(O2,"validateObject");async function N2(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(N2,"validateObjectAsync");function I2(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(I2,"validateBySchema")});var yg=N((kge,KC)=>{"use strict";var $C=require("fs-extra"),me=require("joi"),w2=require("os"),{boolean:He,string:It,number:tr,array:Qa}=me.types(),{totalmem:FC}=require("os"),za=require("path"),C2=W(),Rg=te(),xge=Ag(),GC=M(),P2=Tt(),qC="log",D2="components",L2="Invalid logging.rotation.maxSize unit. Available units are G, M or K",M2="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",U2="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",v2="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",B2="rootPath config parameter is undefined",sn=me.alternatives([tr.min(0),It]).optional().empty(null),ah=me.alternatives([Qa.items(It,{host:It.required(),port:sn},{hostname:It.required(),port:sn}).empty(null),Qa.items(It)]),pi,VC=!1;KC.exports={configValidator:H2,routesValidator:$2,route_constraints:ah};function H2(e,t=!1){if(VC=t,pi=e.rootPath,Rg.isEmpty(pi))throw B2;let r=He.optional(),n=tr.min(0).max(1e3).empty(null).default(q2),s=It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Fd),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(Fd),l=me.custom(k2).empty(null).default(Fd),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:ah}).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:ah}).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(G2).optional().empty(null),maxSize:It.custom(F2).optional().empty(null),path:It.optional().empty(null).default(Fd)}).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(Fd),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(H2,"configValidator");function x2(e){return VC||$C.existsSync(e)?null:`Specified path ${e} does not exist.`}a(x2,"doesPathExist");function k2(e,t){me.assert(e,It.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=x2(e);if(r)return t.message(r)}a(k2,"validatePath");function F2(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(L2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(U2):e}a(F2,"validateRotationMaxSize");function G2(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(M2);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(v2):e}a(G2,"validateRotationInterval");function q2(e,t){let r=t.state.path.join("."),n=w2.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||FC();return i=Math.round(Math.min(i,FC())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),C2.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(q2,"setDefaultThreads");function Fd(e,t){let r=t.state.path.join(".");if(!Rg.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Rg.isEmpty(pi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return za.join(pi,D2);case"logging.root":return za.join(pi,qC);case"clustering.leafServer.streams.path":return za.join(pi,"clustering","leaf");case"storage.path":let n=za.join(pi,GC.LEGACY_DATABASES_DIR_NAME);return $C.existsSync(n)?n:za.join(pi,GC.DATABASES_DIR_NAME);case"logging.rotation.path":return za.join(pi,qC);case"operationsApi.network.domainSocket":return r==null?null:za.join(pi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Fd,"setDefaultRoot");function $2(e){let t=me.object({routes:ah});return P2.validateBySchema({routes:e},t)}a($2,"routesValidator")});var Ja={};je(Ja,{server:()=>it});var YC,it,qr=Ie(()=>{YC=L(fi()),it={};(0,YC._assignPackageExport)("server",it)});var wt=N(rP=>{"use strict";var on=M(),hr=te(),pr=W(),{configValidator:V2,routesValidator:WC}=yg(),$r=require("fs-extra"),zC=require("yaml"),Mn=require("path"),K2=require("is-number"),QC=require("properties-reader"),Y2=require("lodash"),{handleHDBError:W2}=_e(),{HTTP_STATUS_CODES:j2,HDB_ERROR_MSGS:Pl}=Dn(),{server:z2}=(qr(),oe(Ja)),{DATABASES_PARAM_CONFIG:Gd,CONFIG_PARAMS:Ln,CONFIG_PARAM_MAP:ks}=on,Q2="Unable to get config value because config is uninitialized",J2="Config successfully initialized",X2="Error backing up config file",Z2="Empty parameter sent to getConfigValue",JC=Mn.join(on.PACKAGE_ROOT,"config","yaml",on.HDB_DEFAULT_CONFIG_FILE),e4=Mn.join(on.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),t4="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",jC={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"},ch,jt,lh;Object.assign(rP,{createConfigFile:r4,getDefaultConfig:n4,getConfigValue:ZC,initConfig:uh,flattenConfig:Dl,updateConfigValue:eP,updateConfigObject:i4,getConfiguration:c4,setConfiguration:l4,readConfigFile:Ig,getClusteringRoutes:u4,initOldConfig:tP,getConfigFromFile:d4,getConfigFilePath:Xa,addConfig:_4,deleteConfigFromFile:f4,getConfigObj:E4,resolvePath:bg,getFlatConfigObj:h4});function bg(e){if(e?.startsWith("~/"))return Mn.join(hr.getHomeDir(),e.slice(1));let t=se();return Mn.resolve(t.getHdbBasePath(),e)}a(bg,"resolvePath");function r4(e,t=!1){let r=$o(JC);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=zC.parseDocument($r.readFileSync(e4,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}ch=Dl(r.toJSON());let n;for(let c in e){let l=ks[c.toLowerCase()];if(l===Ln.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=Og(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){pr.error(_)}}}n&&XC(r,n),Ng(r,t);let s=r.toJSON();jt=Dl(s);let i=r.getIn(["rootPath"]),o=Mn.join(i,on.HDB_CONFIG_FILE);$r.createFileSync(o),$r.writeFileSync(o,String(r)),pr.trace(`Config file written to ${o}`)}a(r4,"createConfigFile");function XC(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!hr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Gd.TABLES))for(let i in n[s][Gd.TABLES])for(let o in n[s][Gd.TABLES][i]){let c=n[s][Gd.TABLES][i][o],l=[Ln.DATABASES,s,Gd.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=[Ln.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){pr.error("Error parsing schemas CLI/env config arguments",n)}}a(XC,"setSchemasConfig");function n4(e){if(ch===void 0){let r=$o(JC);ch=Dl(r.toJSON())}let t=ks[e.toLowerCase()];if(t!==void 0)return ch[t.toLowerCase()]}a(n4,"getDefaultConfig");function ZC(e){if(e==null){pr.info(Z2);return}if(jt===void 0){pr.trace(Q2);return}let t=ks[e.toLowerCase()];if(t!==void 0)return jt[t.toLowerCase()]}a(ZC,"getConfigValue");function Xa(e=hr.getPropsFilePath()){let t=hr.getEnvCliRootPath();if(t)return bg(Mn.join(t,on.HDB_CONFIG_FILE));let r=QC(e);return bg(r.get(on.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Xa,"getConfigFilePath");function uh(e=!1){if(jt===void 0||e){let t;if(!hr.noBootFile()){t=hr.getPropsFilePath();try{$r.accessSync(t,$r.constants.F_OK|$r.constants.R_OK)}catch(i){throw pr.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{tP(r);return}catch(i){if(i.code!==on.NODE_ERROR_CODES.ENOENT)throw i}try{n=$o(r)}catch(i){if(i.code===on.NODE_ERROR_CODES.ENOENT){pr.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 pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}s4(n,r),Ng(n);let s=n.toJSON();if(z2.config=s,jt=Dl(s),jt.logging_rotation_rotate)for(let i in jC)jt[i]&&pr.error(`Config ${jC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(J2)}}a(uh,"initConfig");function s4(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.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&&(pr.trace("Updating config file with missing config params"),$r.writeFileSync(t,String(e)))}a(s4,"checkForUpdatedConfig");function Ng(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 Pl.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 Pl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=V2(r,t);if(n.error)throw Pl.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(Ng,"validateConfig");function i4(e,t){jt===void 0&&(jt={});let r=ks[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(i4,"updateConfigObject");function eP(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&uh();let o=ZC(ks.hdb_root),c=Mn.join(o,on.HDB_CONFIG_FILE),l=$o(c),u;if(r===void 0&&e.toLowerCase()===Ln.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=Og(E,t);l.setIn([...f],h)}else for(let E in r){let f=ks[E.toLowerCase()];if(f===Ln.HTTP_SECUREPORT&&r[E]===jt[Ln.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Ln.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[Ln.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Ln.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=Og(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){pr.error(g)}}}u&&XC(l,u),Ng(l);let d=l.getIn(["rootPath"]),_=Mn.join(d,on.HDB_CONFIG_FILE);n===!0&&o4(c,d),$r.writeFileSync(_,String(l)),s&&(jt=Dl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eP,"updateConfigValue");function o4(e,t){try{let r=Mn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${on.HDB_CONFIG_FILE}.bak`);$r.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(X2),pr.error(r)}}a(o4,"backupConfigFile");var a4=["databases"];function Dl(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}),lh=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])&&!a4.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;!Ln[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(Dl,"flattenConfig");function Og(e,t){if(e===Ln.CLUSTERING_NODENAME||e===Ln.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(K2(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.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 hr.autoCast(t)}a(Og,"castConfigValue");function c4(){let e=hr.getPropsFilePath(),t=Xa(e);return $o(t).toJSON()}a(c4,"getConfiguration");async function l4(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return eP(void 0,void 0,s,!0),t4}catch(i){throw typeof i=="string"||i instanceof String?W2(i,i,j2.BAD_REQUEST,void 0,void 0,!0):i}}a(l4,"setConfiguration");function Ig(){let e=hr.getPropsFilePath();try{$r.accessSync(e,$r.constants.F_OK|$r.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xa(e);return $o(t).toJSON()}a(Ig,"readConfigFile");function $o(e){return zC.parseDocument($r.readFileSync(e,"utf8"),{simpleKeys:!0})}a($o,"parseYamlDoc");function u4(){let e=Ig(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=WC(t);if(r)throw Pl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=WC(n);if(s)throw Pl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Pl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(u4,"getClusteringRoutes");function tP(e){let t=QC(e);jt={};for(let r in ks){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Ln.LOGGING_ROOT?jt[s]=Mn.dirname(n):jt[s]=n}return jt}a(tP,"initOldConfig");function d4(e){let t=Ig();return Y2.get(t,e.replaceAll("_","."))}a(d4,"getConfigFromFile");async function _4(e,t){let r=$o(Xa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await $r.writeFile(Xa(),String(r))}a(_4,"addConfig");function f4(e){let t=Xa(hr.getPropsFilePath()),r=$o(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,on.HDB_CONFIG_FILE);$r.writeFileSync(s,String(r))}a(f4,"deleteConfigFromFile");function E4(){return lh||(uh(),lh)}a(E4,"getConfigObj");function h4(){return jt||uh(),jt}a(h4,"getFlatConfigObj")});var se=N((aP,cP)=>{"use strict";var wg=require("fs-extra"),Za=require("path"),nP=require("os"),p4=require("properties-reader"),$d=W(),qd=te(),Pe=M(),dh=wt(),m4="Error initializing environment manager",_h="BOOT_PROPS_FILE_PATH",sP=!1,S4={[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ji={};Object.assign(aP,cP.exports={BOOT_PROPS_FILE_PATH:_h,getHdbBasePath:T4,setHdbBasePath:g4,get:iP,initSync:R4,setProperty:Qe,initTestEnvironment:b4,setCloneVar:y4});function T4(){return ji[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(T4,"getHdbBasePath");function g4(e){ji[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(g4,"setHdbBasePath");function iP(e){let t=dh.getConfigValue(e);return t===void 0?ji[e]:t}a(iP,"get");function Qe(e,t){S4[e]&&(ji[e]=t),dh.updateConfigObject(e,t)}a(Qe,"setProperty");function A4(){let e;try{e=qd.getPropsFilePath(),wg.accessSync(e,wg.constants.F_OK|wg.constants.R_OK),sP=!0;let t=p4(e);return ji[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Pe.HDB_SETTINGS_NAMES.INSTALL_USER),ji[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ji[_h]=e,!0}catch{return $d.trace(`Environment manager found no properties file at ${e}`),!1}}a(A4,"doesPropFileExist");function R4(e=!1){try{((sP||A4()||qd.noBootFile())&&!oP||e)&&(dh.initConfig(e),ji[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dh.getConfigValue(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){$d.error(m4),$d.error(t),console.error(t),process.exit(1)}}a(R4,"initSync");var oP=!1;function y4(e){oP=e}a(y4,"setCloneVar");function b4(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");ji[_h]=Za.join(l,"hdb_boot_properties.file"),Qe(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Za.join(l,"settings.test")),Qe(Pe.HDB_SETTINGS_NAMES.INSTALL_USER,nP.userInfo()?nP.userInfo().username:void 0),Qe(Pe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Qe(Pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Za.join(l,"envDir","log")),Qe(Pe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Qe(Pe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Qe(Pe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Qe(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Za.join(l,"envDir")),Qe(Pe.CONFIG_PARAMS.STORAGE_PATH,Za.join(l,"envDir")),s&&(Qe(Pe.CONFIG_PARAMS.HTTP_SECUREPORT,iP(Pe.CONFIG_PARAMS.HTTP_PORT)),Qe(Pe.CONFIG_PARAMS.HTTP_PORT,null)),Qe(Pe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Qe(Pe.CONFIG_PARAMS.HTTP_PORT,9926),Qe(Pe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Qe(Pe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Qe(Pe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,qd.isEmpty(i)?!1:i),Qe(Pe.CONFIG_PARAMS.HTTP_CORS,qd.isEmpty(i)?!1:i),Qe(Pe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Qe(Pe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Qe(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Qe(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Qe(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Qe(Pe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,qd.isEmpty(c)?!1:c),o&&(Qe("CORS_ACCESSLIST",o),Qe(Pe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Qe(Pe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Qe(Pe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Qe(Pe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Qe(Pe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Qe(Pe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Qe(Pe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${_h}. Please check your boot props and settings files`;$d.fatal(r),$d.error(t)}}a(b4,"initTestEnvironment")});var gt=N((Vge,hP)=>{"use strict";var jd=M(),O4=te(),an=se(),zd=require("path"),N4=require("minimist"),lP=require("fs-extra"),uP=require("lodash");an.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:Vd,SYSTEM_SCHEMA_NAME:fh}=jd,Kd,Yd,Wd;function dP(){if(Kd!==void 0)return Kd;if(an.getHdbBasePath()!==void 0)return Kd=an.get(Vo.STORAGE_PATH)||zd.join(an.getHdbBasePath(),jd.DATABASES_DIR_NAME),Kd}a(dP,"getBaseSchemaPath");function _P(){if(Yd!==void 0)return Yd;if(an.getHdbBasePath()!==void 0)return Yd=EP(fh),Yd}a(_P,"getSystemSchemaPath");function fP(){if(Wd!==void 0)return Wd;if(an.getHdbBasePath()!==void 0)return Wd=an.get(jd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||zd.join(an.getHdbBasePath(),jd.TRANSACTIONS_DIR_NAME),Wd}a(fP,"getTransactionAuditStoreBasePath");function I4(e,t){let r=an.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||zd.join(fP(),e.toString())}a(I4,"getTransactionAuditStorePath");function EP(e,t){e=e.toString(),t=t&&t.toString();let r=an.get(jd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||zd.join(dP(),e)}a(EP,"getSchemaPath");function w4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,N4(process.argv));let n=r[Vo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!O4.isObject(n))throw o;i=n}for(let o of i){let c=o[fh];if(!c)continue;let l=an.get(Vo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Vd.PATH];if(u)return uP.set(l,[fh,Vd.TABLES,t,Vd.PATH],u),an.setProperty(Vo.DATABASES,l),u;let d=c?.[Vd.PATH];if(d)return uP.set(l,[fh,Vd.PATH],d),an.setProperty(Vo.DATABASES,l),d}}let s=r[Vo.STORAGE_PATH.toUpperCase()];if(s){if(!lP.pathExistsSync(s))throw new Error(s+" does not exist");let i=zd.join(s,e);return lP.mkdirsSync(i),an.setProperty(Vo.STORAGE_PATH,s),i}return _P()}a(w4,"initSystemSchemaPaths");function C4(){Kd=void 0,Yd=void 0,Wd=void 0}a(C4,"resetPaths");hP.exports={getBaseSchemaPath:dP,getSystemSchemaPath:_P,getTransactionAuditStorePath:I4,getTransactionAuditStoreBasePath:fP,getSchemaPath:EP,initSystemSchemaPaths:w4,resetPaths:C4}});var cn=N((jge,gP)=>{"use strict";var P4=Dn().LMDB_ERRORS_ENUM,Yge=require("lmdb"),D4=Ht(),Wge=require("buffer").Buffer,{OVERFLOW_MARKER:pP,MAX_SEARCH_KEY_LENGTH:Eh}=D4,mP=["number","string","symbol","boolean","bigint"];function L4(e){if(e=e?.primaryStore||e,!e)throw new Error(P4.ENV_REQUIRED)}a(L4,"validateEnv");function M4(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(M4,"stringifyData");function U4(e){return e instanceof Date?e.valueOf():e}a(U4,"convertKeyValueToWrite");function v4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(mP.includes(typeof e))return e.length>Eh?[e.slice(0,Eh)+pP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(mP.includes(typeof i))i.length>Eh?r.push(i.slice(0,Eh)+pP):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(v4,"getIndexedValues");var hh=0,SP=0;function TP(){SP=Date.now()-performance.now()}a(TP,"adjustStartTime");TP();var B4=6e4;setInterval(TP,B4).unref();function H4(){let e=performance.now()+SP;return e>hh?(hh=e,e):(hh+=488e-6,hh)}a(H4,"getNextMonotonicTime");gP.exports={validateEnv:L4,stringifyData:M4,convertKeyValueToWrite:U4,getNextMonotonicTime:H4,getIndexedValues:v4}});var Qd=N((Qge,AP)=>{"use strict";var x4=M().OPERATIONS_ENUM,Cg=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=x4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};AP.exports=Cg});var Jd=N((Zge,OP)=>{"use strict";var Xge=Qd(),ph=M(),Pg=te(),RP=W(),k4=require("uuid"),{handleHDBError:mh,hdb_errors:F4}=_e(),{HDB_ERROR_MSGS:Sh,HTTP_STATUS_CODES:Th}=F4;OP.exports=yP;function yP(e,t,r){for(let s=0;s<t.length;s++)bP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];G4(i,r,e.operation)}}a(yP,"processRows");yP.validateAttribute=bP;function bP(e){if(Buffer.byteLength(String(e))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mh(new Error,Sh.ATTR_NAME_LENGTH_ERR(e),Th.BAD_REQUEST,void 0,void 0,!0);if(Pg.isEmptyOrZeroLength(e)||Pg.isEmpty(e.trim()))throw mh(new Error,Sh.ATTR_NAME_NULLISH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(bP,"validateAttribute");function G4(e,t,r){if(!e.hasOwnProperty(t)||Pg.isEmptyOrZeroLength(e[t])){if(r===ph.OPERATIONS_ENUM.INSERT||r===ph.OPERATIONS_ENUM.UPSERT){e[t]=k4.v4();return}throw RP.error("Update transaction aborted due to record with no hash value:",e),mh(new Error,Sh.RECORD_MISSING_HASH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw RP.error(e),mh(new Error,Sh.HASH_VAL_LENGTH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(G4,"validateHash")});var NP,Un,Dg,Ll=Ie(()=>{NP=require("events"),Un=class extends NP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Dg;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)}},Dg=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 Ug={};je(Ug,{loadGQLSchema:()=>V4,start:()=>Mg,startOnMainThread:()=>$4});function Mg({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):q4.includes(g.type)||(0,wP.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,Lg.dirname)(n),g.tableClass):i.set((0,Lg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new IP.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 Lg,IP,wP,q4,$4,V4,CP=Ie(()=>{Lg=require("path"),IP=require("node:vm");De();wP=L(dt()),q4=["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(Mg,"start");$4=Mg,V4=Mg({ensureTable:Et}).handleFile});var BP={};je(BP,{parse:()=>Bg,streamAsJSON:()=>Xd,stringify:()=>ec});function Xd(e){return new vg({value:e})}function PP(e){return console.error(e),JSON.stringify(e.toString())}function DP(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===UP)return vP(e);if(t.resolution)return t.resolution.then(()=>ec(e));throw t}}function vP(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+=vP(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 Bg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),W4.test(e)?K4.parse(e):JSON.parse(e)):null}var LP,MP,K4,Y4,UP,vg,W4,Hg=Ie(()=>{LP=require("stream"),MP=L(require("json-bigint-fixes")),K4=(0,MP.default)({useNativeBigInt:!0}),Y4=1e4,UP={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw UP};a(Xd,"streamAsJSON");vg=class extends LP.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),PP)}catch(s){yield PP(s)}else yield ec(t)}else yield ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);DP(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>Y4?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 DP(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(PP,"handleError");a(DP,"when");a(ec,"stringify");a(vP,"jsStringify");W4=/[[,:]\s*-?\d{16,}/;a(Bg,"parse")});var zP=N((aAe,jP)=>{"use strict";var xg=require("recursive-iterator"),j4=require("alasql"),kg=require("clone"),HP=te(),{handleHDBError:xP,hdb_errors:z4}=_e(),{HDB_ERROR_MSGS:kP,HTTP_STATUS_CODES:FP}=z4,{getDatabases:Q4}=(De(),oe(lt)),J4=["DISTINCT_ARRAY"],GP=Symbol("validateTables"),Fg=Symbol("validateTable"),oAe=Symbol("getAllColumns"),qP=Symbol("validateAllColumns"),gh=Symbol("findColumn"),$P=Symbol("validateOrderBy"),Zd=Symbol("validateSegment"),Gg=Symbol("validateColumn"),VP=Symbol("setColumnsForTable"),KP=Symbol("checkColumnsForAsterisk"),YP=Symbol("validateGroupBy"),WP=Symbol("hasColumns"),qg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[GP](),this[KP](),this[qP]()}[GP](){if(this[WP]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Fg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Fg](t.table)})}}[WP](){let t=!1,r=new xg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Fg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Q4();if(!r[t.databaseid])throw xP(new Error,kP.SCHEMA_NOT_FOUND(t.databaseid),FP.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw xP(new Error,kP.TABLE_NOT_FOUND(t.databaseid,t.tableid),FP.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=kg(s);i.table=kg(t),this.attributes.push(i)})}[gh](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)}[KP](){let t=new xg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[VP](r.tableid)}[VP](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new j4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qP](){this[Zd](this.statement.columns,!1),this[Zd](this.statement.joins,!1),this[Zd](this.statement.where,!1),this[YP](this.statement.group,!1),this[Zd](this.statement.order,!0)}[Zd](t,r){if(!t)return;let n=new xg(t),s=[];for(let{node:i,path:o}of n)!HP.isEmpty(i)&&!HP.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$P](i):s.push(this[Gg](i)));return s}[YP](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&J4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=kg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[gh](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[gh](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`}[$P](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[Gg](t)}[Gg](t){let r=this[gh](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]}};jP.exports=qg});var JP=N((lAe,QP)=>{"use strict";var $g=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")}};QP.exports=$g});var ZP=N((dAe,XP)=>{"use strict";var Vg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};XP.exports=Vg});var nD={};je(nD,{HAS_EXPIRATION:()=>yh,HAS_RESIDENCY_ID:()=>Xg,HAS_STRUCTURE_UPDATE:()=>bh,LAST_TIMESTAMP_PLACEHOLDER:()=>n_,LOCAL_TIMESTAMP:()=>X4,METADATA:()=>e_,NO_TIMESTAMP:()=>Yg,PENDING_LOCAL_TIME:()=>Zg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Jg,RecordEncoder:()=>Qg,TIMESTAMP_ASSIGN_LAST:()=>eJ,TIMESTAMP_ASSIGN_NEW:()=>tD,TIMESTAMP_ASSIGN_PREVIOUS:()=>rD,TIMESTAMP_PLACEHOLDER:()=>Ah,TIMESTAMP_RECORD_PREVIOUS:()=>Wg,getUpdateRecord:()=>eA,handleLocalTimeForGets:()=>Oh});function rJ(){return r_[0]=r_[0]^64,Z4.getFloat64(0)}function Oh(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?.[e_];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?.[e_]>=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[e_];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 eA(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Wg|rD:Yg:Ml=l?i?.localTime?Wg|16384:tD|16384:Yg;let f=u?.expiresAt;if(f>=0&&(c|=yh),t_=c,jg=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&&(zg=S,t_|=Xg,m|=rc),g!==S&&(m|=nc,g||(g=0)),c&yh&&(m|=i_),u?.originatingOperation&&(m|=s_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(Rh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=bh,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,Rh,m,S,g,f),{ifVersion:T}),y}}r.put(n_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Rh,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 eD,Kg,Ah,n_,Jg,X4,e_,r_,Z4,Yg,tD,eJ,rD,Wg,yh,Xg,Zg,bh,tJ,Rh,Ml,t_,jg,zg,Qg,tc,vl=Ie(()=>{eD=require("msgpackr");zi();Kg=L(W()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),n_=new Uint8Array([1,1,1,1,1,0,0,0]),Jg=new Uint8Array([1,1,1,1,3,64,0,0]),X4=Symbol("local-timestamp"),e_=Symbol("metadata"),r_=new Uint8Array(8),Z4=new DataView(r_.buffer,0,8),Yg=0,tD=0,eJ=1,rD=3,Wg=4,yh=16,Xg=32,Zg=1,bh=256,Ml=0,t_=-1,jg=-1,zg=0,Qg=class extends eD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||t_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=t_,u=jg,d=zg;l>=0&&(o+=2,t_=-1,u>=0&&(o+=8,jg=-1),d&&(o+=4,zg=0));let _=tJ=r.call(this,s,i|2048|o);Rh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Ah[4]=c,Ah[5]=c>>8,_.set(Ah,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(r_,0,c),c+=8;else for(let E=0;E<8;E++)r_[E]=t[c++];l=rJ(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&yh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Xg&&(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:_,[e_]: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(rJ,"getTimestamp");a(Oh,"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?(Kg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Kg.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(eA,"getUpdateRecord")});var o_=N((pAe,iD)=>{"use strict";var sD=se(),nJ=M(),{RecordEncoder:sJ}=(vl(),oe(nD)),hAe=require("fs");sD.initSync();var iJ=sD.get(nJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,tA=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=iJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:sJ})}};iD.exports=tA});var a_=N((SAe,oD)=>{"use strict";var vn=se(),cs=M();vn.initSync();var Nh=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=vn.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||vn.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||vn.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",vn.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=vn.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),vn.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=vn.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=vn.get(cs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};oD.exports=Nh;Nh.MAX_DBS=1e4});var ht=N((gAe,pD)=>{"use strict";var nA=require("lmdb"),Fs=require("fs-extra"),Bn=require("path"),Ih=cn(),lD=W(),ln=Dn().LMDB_ERRORS_ENUM,wh=ZP(),sA=o_(),uD=a_(),Ko=Ht(),aD=M(),{table:oJ,resetDatabases:aJ}=(De(),oe(lt)),cD=se(),Gs=Ko.INTERNAL_DBIS_NAME,dD=Ko.DBI_DEFINITION_NAME,cJ="data.mdb",lJ="lock.mdb",c_=".mdb",uJ="-lock",rA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Ko.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ko.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new nA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ch(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(Ch,"pathEnvNameValidation");async function iA(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=Bn.join(e,t+c_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Bn.join(e,t,cJ),Fs.constants.R_OK|Fs.constants.F_OK),Bn.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(iA,"validateEnvironmentPath");function Ph(e,t){if(Ih.validateEnv(e),t===void 0)throw new Error(ln.DBI_NAME_REQUIRED)}a(Ph,"validateEnvDBIName");async function dJ(e,t,r=!1,n=!1){Ch(e,t);let s=Bn.basename(e);t=t.toString();let i=cD.get(aD.CONFIG_PARAMS.DATABASES);i||cD.setProperty(aD.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await iA(e,t,n),_D(e,t,r)}catch(o){if(o.message===ln.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Fs.mkdirp(n?c:e);let l=new uD(n?c:c+c_,!1),u=nA.open(l);u.dbis=Object.create(null);let d=new sA(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=oA(e,t,r);return u[Ko.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(dJ,"createEnvironment");async function _J(e,t,r,n=!0){Ch(e,t),t=t.toString();let s=Bn.join(e,t);return oJ({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(_J,"copyEnvironment");async function _D(e,t,r=!1){Ch(e,t),t=t.toString();let n=oA(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 iA(e,t),i=Bn.join(e,t+c_),o=s!=i,c=new uD(s,o),l=nA.open(c);l.dbis=Object.create(null);let u=ED(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Ko.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(_D,"openEnvironment");async function fJ(e,t,r=!1){Ch(e,t),t=t.toString();let n=Bn.join(e,t+c_),s=await iA(e,t);if(global.lmdb_map!==void 0){let i=oA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fD(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+uJ:Bn.join(Bn.dirname(s),lJ))}a(fJ,"deleteEnvironment");async function fD(e){Ih.validateEnv(e);let t=e[Ko.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fD,"closeEnvironment");function oA(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(oA,"getCachedEnvironmentName");function EJ(e){Ih.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 wh,s)}catch{lD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(EJ,"listDBIDefinitions");function ED(e){Ih.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(ED,"listDBIs");function hJ(e,t){let n=ls(e,Gs).getEntry(t),s=new wh;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{lD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(hJ,"getDBIDefinition");function hD(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 sA(r,n===!0),o=e.openDB(t,i),c=new wh(r===!0,n);return o[dD]=c,ls(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(hD,"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=hJ(e,t):r=new wh,r===void 0)throw new Error(ln.DBI_DOES_NOT_EXIST);let n;try{let s=new sA(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[dD]=r,e.dbis[t]=n,n}a(ls,"openDBI");function pJ(e,t){Ph(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Ko.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(pJ,"statDBI");async function mJ(e,t){try{let r=Bn.join(e,t+c_);return(await Fs.stat(r)).size}catch{throw new Error(ln.INVALID_ENVIRONMENT)}}a(mJ,"environmentDataSize");function SJ(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(SJ,"dropDBI");function TJ(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)hD(e,i,i!==t,i===t),n=!0;else throw o}}n&&aJ()}a(TJ,"initializeDBIs");pD.exports={openDBI:ls,openEnvironment:_D,createEnvironment:dJ,listDBIs:ED,listDBIDefinitions:EJ,createDBI:hD,dropDBI:SJ,statDBI:pJ,deleteEnvironment:fJ,initializeDBIs:TJ,TransactionCursor:rA,environmentDataSize:mJ,copyEnvironment:_J,closeEnvironment:fD}});var SD=N((RAe,mD)=>{"use strict";var aA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};mD.exports=aA});var gD=N((bAe,TD)=>{"use strict";var cA=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}};TD.exports=cA});var RD=N((NAe,AD)=>{"use strict";var lA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};AD.exports=lA});var ic=N((DAe,OD)=>{"use strict";var gJ=ht(),AJ=SD(),RJ=gD(),yJ=RD(),mi=cn(),l_=Dn().LMDB_ERRORS_ENUM,bJ=Ht(),Qi=M(),OJ=te(),NJ=require("uuid"),wAe=require("lmdb"),{handleHDBError:IJ,hdb_errors:wJ}=_e(),{OVERFLOW_MARKER:CAe,MAX_SEARCH_KEY_LENGTH:PAe}=bJ,yD=se();yD.initSync();var Dh=yD.get(Qi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uA=Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sc=Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function CJ(e,t,r,n,s=mi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new AJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];bD(u,!0,s);let d=PJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return _A(o,c,n,i,s)}a(CJ,"insertRecords");function PJ(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][Qi.FUNC_VAL],n[o]=c)}let l=mi.getIndexedValues(c),u=e.dbis[o];if(l){Dh&&u.prefetch(l.map(d=>({key:d,value:s})),Lh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Dh&&e.dbis[t].prefetch([s],Lh),e.dbis[t].put(s,n,n[sc])})}a(PJ,"insertRecord");function DJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(DJ,"removeSkippedRecords");function bD(e,t,r){let n=r>0;(n||!Number.isInteger(e[sc]))&&(e[sc]=r||(r=mi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[uA]))&&(e[uA]=r||mi.getNextMonotonicTime()):delete e[uA]}a(bD,"setTimestamps");function dA(e,t,r){r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gJ.initializeDBIs(e,t,r)}a(dA,"initializeTransaction");async function LJ(e,t,r,n,s=mi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new RJ,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=fA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return _A(c,l,n,i,s,o)}a(LJ,"updateRecords");async function MJ(e,t,r,n,s=mi.getNextMonotonicTime()){try{EA(e,t,r,n)}catch(l){throw IJ(l,l.message,wJ.HTTP_STATUS_CODES.BAD_REQUEST)}dA(e,t,r);let i=new yJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;OJ.isEmpty(u[t])?(d=NJ.v4(),u[t]=d):d=u[t];let _=fA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return _A(o,c,n,i,s)}a(MJ,"upsertRecords");async function _A(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||mi.getNextMonotonicTime(),DJ(r,i),n}a(_A,"finalizeWrite");function fA(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(bD(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][Qi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=mi.getIndexedValues(g);if(S){Dh&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=mi.getIndexedValues(T),S){Dh&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);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:fA(e,t,r,n,s,i,o))}a(fA,"updateUpsertRecord");function UJ(e,t,r){if(mi.validateEnv(e),t===void 0)throw new Error(l_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(l_.WRITE_ATTRIBUTES_REQUIRED):new Error(l_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(UJ,"validateBasic");function EA(e,t,r,n){if(UJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(l_.RECORDS_REQUIRED):new Error(l_.RECORDS_MUST_BE_ARRAY)}a(EA,"validateWrite");function Lh(){}a(Lh,"noop");OD.exports={insertRecords:CJ,updateRecords:LJ,upsertRecords:MJ}});var Ji=N((MAe,vJ)=>{vJ.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 Ti=N((UAe,wD)=>{"use strict";var ID=te(),ND=M(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),Yo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number(),Si.array()).required(),HJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()),xJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()).required();function kJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yo.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(kJ,"checkValidTable");function FJ(e,t){return ID.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(FJ,"validateSchemaExists");function GJ(e,t){let r=t.state.ancestors[0].schema;return ID.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(GJ,"validateTableExists");function qJ(e,t){return e.toLowerCase()===ND.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${ND.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(qJ,"validateSchemaName");wD.exports={common_validators:Yo,schema_regex:Bl,hdb_schema_table:BJ,validateSchemaExists:FJ,validateTableExists:GJ,validateSchemaName:qJ,checkValidTable:kJ,hdb_database:HJ,hdb_table:xJ}});var Mh=N((BAe,CD)=>{var{common_validators:gi}=Ti(),d_=Tt(),u_="is required",rr={database:{presence:!1,format:gi.schema_format,length:gi.schema_length},schema:{presence:!1,format:gi.schema_format,length:gi.schema_length},table:{presence:!0,format:gi.schema_format,length:gi.schema_length},attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length},hash_attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length}};function __(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(__,"makeAttributesStrings");function $J(e){return e=__(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a($J,"schema_object");function VJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(VJ,"table_object");function KJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,d_.validateObject(e,rr)}a(KJ,"create_table_object");function YJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence={message:u_},rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(YJ,"attribute_object");function WJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(WJ,"describe_table");function jJ(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(jJ,"validateTableResidence");CD.exports={schema_object:$J,create_table_object:KJ,table_object:VJ,attribute_object:YJ,describe_table:WJ,validateTableResidence:jJ}});var DD=N((xAe,PD)=>{"use strict";var zJ=require("uuid"),hA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||zJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};PD.exports=hA});var Uh=N((FAe,LD)=>{"use strict";var QJ=DD(),pA=class extends QJ{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}};LD.exports=pA});var UD=N((qAe,MD)=>{"use strict";MD.exports=XJ;var JJ="inserted";function XJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===JJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(XJ,"returnObject")});var vh=N((KAe,xD)=>{"use strict";var ZJ=M(),mA=ht(),e3=ic(),{getSystemSchemaPath:t3,getSchemaPath:r3}=gt(),VAe=Ji(),n3=Mh(),s3=Uh(),i3=UD(),{handleHDBError:vD,hdb_errors:HD}=_e(),BD=te(),{HTTP_STATUS_CODES:o3}=HD,a3="inserted";xD.exports=c3;async function c3(e){let t=n3.attribute_object(e);if(t)throw vD(new Error,t.message,HD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&BD.checkGlobalSchemaTable(e.schema,e.table);if(r)throw vD(new Error,r,o3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=BD.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 s3(e.schema,e.table,e.attribute,e.id);try{let i=await mA.openEnvironment(r3(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}`);mA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await mA.openEnvironment(t3(),ZJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await e3.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return i3(a3,c,{records:[s]},l)}catch(i){throw i}}a(c3,"lmdbCreateAttribute")});var TA=N((WAe,FD)=>{var{hdb_table:l3,hdb_database:kD}=Ti(),u3=Tt(),SA=require("joi"),d3={undefined:"undefined",null:"null"},_3=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||d3[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"),f3=SA.object({database:kD,schema:kD,table:l3,records:SA.array().items(SA.object().custom(_3)).required()});FD.exports=function(e){return u3.validateBySchema(e,f3)}});var f_=N((QAe,qD)=>{"use strict";var Xi=te(),GD=W(),zAe=TA(),{getDatabases:E3}=(De(),oe(lt)),{ClientError:oc}=_e();qD.exports=h3;function h3(e){if(Xi.isEmpty(e))throw new oc("invalid update parameters defined.");if(Xi.isEmptyOrZeroLength(e.schema))throw new oc("invalid schema specified.");if(Xi.isEmptyOrZeroLength(e.table))throw new oc("invalid table specified.");if(!Array.isArray(e.records))throw new oc("records must be an array");let t=E3()[e.schema]?.[e.table];if(Xi.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&&Xi.isEmptyOrZeroLength(o[r]))throw GD.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(!Xi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw GD.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`);!Xi.isEmpty(o[r])&&o[r]!==""&&n.has(Xi.autoCast(o[r]))&&(o.skip=!0),n.add(Xi.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(h3,"insertUpdateValidate")});var VD=N((XAe,$D)=>{"use strict";var gA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};$D.exports=gA});var WD=N((eRe,YD)=>{"use strict";var AA=ht(),p3=W(),KD=Dn().LMDB_ERRORS_ENUM;YD.exports=m3;async function m3(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 AA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==KD.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await AA.closeEnvironment(global.lmdb_map[n]),await AA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==KD.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){p3.error(t)}}a(m3,"cleanLMDBMap")});var Zi=N((rRe,JD)=>{"use strict";var E_=require("crypto"),S3=se(),{CONFIG_PARAMS:T3}=M(),zD="aes-256-cbc",g3=32,A3=16,RA=64,QD=32,R3=RA+QD,jD=new Map;JD.exports={encrypt:y3,decrypt:b3,createNatsTableStreamName:O3};function y3(e){let t=E_.randomBytes(g3),r=E_.randomBytes(A3),n=E_.createCipheriv(zD,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(y3,"encrypt");function b3(e){let t=e.substr(0,RA),r=e.substr(RA,QD),n=e.substr(R3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=E_.createDecipheriv(zD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(b3,"decrypt");function O3(e,t){let r=S3.get(T3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=jD.get(r);return n||(n=E_.createHash("md5").update(r).digest("hex"),jD.set(r,n)),n}a(O3,"createNatsTableStreamName")});var eo=N((iRe,eL)=>{"use strict";var sRe=Vr(),h_=W(),XD=Mh(),N3=Zi(),Bh=te(),{handleHDBError:Hh,hdb_errors:I3}=_e(),{HDB_ERROR_MSGS:xh,HTTP_STATUS_CODES:yA}=I3,ZD=se();ZD.initSync();var{getDatabases:bA}=(De(),oe(lt)),w3=require("fs-extra"),C3=M();eL.exports={describeAll:P3,describeTable:kh,describeSchema:D3};async function P3(e={}){try{let t=Bh.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=bA(),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 kh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await kh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){h_.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 h_.error("Got an error in describeAll"),h_.error(t),Hh(new Error,xh.DESCRIBE_ALL_ERR)}}a(P3,"describeAll");async function kh(e,t){Bh.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=XD.describe_table(e);if(i)throw i;let c=bA()[r];if(!c)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let l=c[n];if(!l)throw Hh(new Error,xh.TABLE_NOT_FOUND(e.schema,e.table),yA.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 w3.stat(l.primaryStore.env.path)).size}catch(f){h_.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")),ZD.get(C3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=N3.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){h_.warn(`unable to stat table dbi due to ${f}`)}return E}a(kh,"descTable");async function D3(e){Bh.transformReq(e);let t=XD.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=bA()[n];if(!i)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Bh.isEmpty(l)||l.describe){let u=await kh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(D3,"describeSchema")});var us=N((lRe,iL)=>{var L3=Ji(),{callbackify:rL,promisify:M3}=require("util"),{getDatabases:nL}=(De(),oe(lt));iL.exports={setSchemaDataToGlobal:tL,getTableSchema:U3,getSystemSchema:v3,setSchemaDataToGlobalAsync:M3(tL)};var sL=eo(),aRe=rL(sL.describeAll),cRe=rL(sL.describeTable);function tL(e){global.hdb_schema=nL(),e&&e()}a(tL,"setSchemaDataToGlobal");function U3(e,t,r){let n=nL()[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(U3,"getTableSchema");function v3(){return L3}a(v3,"getSystemSchema")});var un=N((dRe,lL)=>{"use strict";var Gh=TA(),Cr=te(),B3=require("util"),qh=Hn(),H3=us(),oL=W(),{handleHDBError:ac,hdb_errors:x3}=_e(),{HTTP_STATUS_CODES:cc}=x3,k3=B3.promisify(H3.getTableSchema),F3="updated",aL="inserted",cL="upserted";lL.exports={insert:q3,update:$3,upsert:V3,validation:G3,flush:K3};async function G3(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 k3(e.schema,e.table),r=Gh(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 oL.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 oL.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(G3,"validation");async function q3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gh(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 qh.createRecords(e);return Fh(aL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(q3,"insertData");async function $3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gh(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 qh.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Fh(F3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Fh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a($3,"updateData");async function V3(e){if(e.operation!=="upsert")throw ac(new Error,"invalid operation, must be upsert",cc.INTERNAL_SERVER_ERROR);let t=Gh(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 qh.upsertRecords(e);return Fh(cL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(V3,"upsertData");function Fh(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===aL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===cL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Fh,"returnObject");function K3(e){return Cr.transformReq(e),qh.flush(e.schema,e.table)}a(K3,"flush")});var NA=N((fRe,_L)=>{var Y3=Tt(),OA=require("joi"),{hdb_table:W3,hdb_database:uL}=Ti(),dL={schema:uL,database:uL,table:W3},j3={date:OA.date().iso().required()},z3={timestamp:OA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};_L.exports=function(e,t){let r=t==="timestamp"?{...dL,...z3}:{...dL,...j3},n=OA.object(r);return Y3.validateBySchema(e,n)}});var hL=N((ERe,EL)=>{var Q3=Tt(),IA=require("joi"),{hdb_table:J3,hdb_database:fL}=Ti(),X3=IA.object({schema:fL,database:fL,table:J3,hash_values:IA.array().required(),ids:IA.array()});EL.exports=function(e){return Q3.validateBySchema(e,X3)}});var DA=N((hRe,pL)=>{"use strict";var wA=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}},CA=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}},PA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};pL.exports={InsertObject:wA,NoSQLSeachObject:CA,DeleteResponseObject:PA}});var dc=N((mRe,AL)=>{"use strict";var SL=NA(),Z3=hL(),lc=te(),mL=require("moment"),TL=W(),{promisify:eX,callbackify:tX}=require("util"),uc=M(),rX=us(),LA=eX(rX.getTableSchema),MA=Hn(),{DeleteResponseObject:nX}=DA(),{handleHDBError:Wo,hdb_errors:sX}=_e(),{HDB_ERROR_MSGS:$h,HTTP_STATUS_CODES:jo}=sX,iX="records successfully deleted",oX=tX(gL);AL.exports={delete:oX,deleteRecord:gL,deleteFilesBefore:aX,deleteAuditLogsBefore:cX};async function aX(e){let t=SL(e,"date");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),!mL(e.date,mL.ISO_8601).isValid())throw Wo(new Error,$h.INVALID_DATE,jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_DATE,!0);let n=lc.checkSchemaTableExist(e.schema,e.table);if(n)throw Wo(new Error,n,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,n,!0);let s=await MA.deleteRecordsBefore(e);if(await LA(e.schema,e.table),TL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(aX,"deleteFilesBefore");async function cX(e){let t=SL(e,"timestamp");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),isNaN(e.timestamp))throw Wo(new Error,$h.INVALID_VALUE("Timestamp"),jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_VALUE("Timestamp"),!0);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);let n=await MA.deleteAuditLogsBefore(e);return await LA(e.schema,e.table),TL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(cX,"deleteAuditLogsBefore");async function gL(e){e.ids&&(e.hash_values=e.ids);let t=Z3(e);if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);lc.transformReq(e);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);try{await LA(e.schema,e.table);let n=await MA.deleteRecords(e);return lc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${iX}`),n}catch(n){if(n.message===uc.SEARCH_NOT_FOUND_MESSAGE){let s=new nX;return s.message=uc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(gL,"deleteRecord")});var Vh=N((TRe,bL)=>{var lX=require("crypto"),RL=9;function uX(e){let t=_X(RL),r=yL(e+t);return t+r}a(uX,"createHash");function dX(e,t){let r=e?.substr(0,RL),n=r+yL(t+r);return e===n}a(dX,"validateHash");function _X(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(_X,"generateSalt");function yL(e){return lX.createHash("md5").update(e).digest("hex")}a(yL,"md5");bL.exports={hash:uX,validate:dX}});var NL=N((ARe,OL)=>{var UA=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 fX(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,UA.validateObject(e,Kr)}a(fX,"addUserValidation");function EX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(EX,"alterUserValidation");function hX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(hX,"dropUserValidation");OL.exports={addUserValidation:fX,alterUserValidation:EX,dropUserValidation:hX}});var Ct=N((bRe,wL)=>{"use strict";var{platform:yRe}=require("os"),pX="nats-server.zip",vA="nats-server",mX=process.platform==="win32"?`${vA}.exe`:vA,SX=/^[^\s.,*>]+$/,IL="__request__",TX=a(e=>`${e}.${IL}`,"REQUEST_SUBJECT"),gX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},AX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},RX={HUB:"hub.pid",LEAF:"leaf.pid"},yX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},bX={SUCCESS:"success",ERROR:"error"},OX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},NX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},IX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},wX={debug:"-D",trace:"-DVV"};wL.exports={NATS_SERVER_ZIP:pX,NATS_SERVER_NAME:vA,NATS_BINARY_NAME:mX,PID_FILES:RX,NATS_CONFIG_FILES:AX,SERVER_SUFFIX:yX,NATS_TERM_CONSTRAINTS_RX:SX,REQUEST_SUFFIX:IL,UPDATE_REMOTE_RESPONSE_STATUSES:bX,CLUSTER_STATUS_STATUSES:OX,REQUEST_SUBJECT:TX,SUBJECT_PREFIXES:NX,MSG_HEADERS:gX,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:wX,LOG_LEVEL_HIERARCHY:IX}});var PL=N((NRe,CL)=>{"use strict";var Kh=M(),Yh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},BA=class extends Yh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};CL.exports={BaseLicense:Yh,ExtendedLicense:BA}});var _c=N((wRe,HL)=>{"use strict";var kl=require("fs-extra"),LL=Vh(),ML=require("crypto"),CX=require("moment"),PX=require("uuid").v4,Yr=W(),xA=require("path"),DX=te(),zo=M(),{totalmem:DL}=require("os"),LX=PL().ExtendedLicense,xl="invalid license key format",MX="061183",UX="mofi25",vX="aes-256-cbc",BX=16,HX=32,UL=se(),{resolvePath:vL}=wt();UL.initSync();var HA;HL.exports={validateLicense:BL,generateFingerPrint:kX,licenseSearch:GA,getLicense:qX,checkMemoryLimit:$X};function kA(){return xA.join(UL.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(kA,"getLicenseDirPath");function xX(){let e=kA();return vL(xA.join(e,zo.LICENSE_FILE_NAME))}a(xX,"getLicenseFilePath");function FA(){let e=kA();return vL(xA.join(e,zo.REG_KEY_FILE_NAME))}a(FA,"getFingerPrintFilePath");async function kX(){let e=FA();try{return await kl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(kX,"generateFingerPrint");async function FX(){let e=PX(),t=LL.hash(e),r=FA();try{await kl.mkdirp(kA()),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(FX,"writeFingerprint");function BL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=FA(),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(UX),c=o[1];c=Buffer.concat([Buffer.from(c)],BX);let l=Buffer.concat([Buffer.from(i)],HX),u=ML.createDecipheriv(vX,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=GX(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<CX().valueOf()&&(r.valid_date=!1),LL.validate(o[1],`${MX}${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(BL,"validateLicense");function GX(e,t){try{let r=ML.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(GX,"checkOldLicense");function GA(){let e=new LX,t=[];try{t=kl.readFileSync(xX(),"utf-8").split(zo.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(DX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=BL(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=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return HA=e,e}a(GA,"licenseSearch");async function qX(){return HA||await GA(),HA}a(qX,"getLicense");function $X(){let e=GA().ram_allocation,t=process.constrainedMemory?.()||DL();if(t=Math.round(Math.min(t,DL())/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($X,"checkMemoryLimit")});var dn=N((MRe,ZL)=>{"use strict";var GL="username is required",qL="nothing to update, must supply active, role or password to update",$L="password cannot be an empty string",VL="If role is specified, it cannot be empty.",KL="active must be true or false";ZL.exports={addUser:XX,alterUser:ZX,dropUser:tZ,getSuperUser:iZ,userInfo:rZ,listUsers:jh,listUsersExternal:nZ,setUsersToGlobal:Gl,findAndValidateUser:JL,getClusterUser:oZ,USERNAME_REQUIRED:GL,ALTERUSER_NOTHING_TO_UPDATE:qL,EMPTY_PASSWORD:$L,EMPTY_ROLE:VL,ACTIVE_BOOLEAN:KL};var YL=un(),VX=dc(),VA=Vh(),WL=NL(),jL=Vr(),KA=to(),xn=te(),zL=require("validate.js"),Ke=W(),{promisify:KX}=require("util"),YA=Zi(),xL=M(),kL=Ct(),YX=wt(),PRe=se(),DRe=_c(),WX=Ji(),{table:LRe}=(De(),oe(lt)),{handleHDBError:Ai,hdb_errors:jX}=_e(),{HTTP_STATUS_CODES:Ri,AUTHENTICATION_ERROR_MSGS:qA,HDB_ERROR_MSGS:Fl}=jX,{UserEventMsg:WA}=qs(),$A=require("lodash"),{server:jA}=(qr(),oe(Ja)),zX=W();jA.getUser=(e,t)=>JL(e,t,t!=null);var QL={username:!0,active:!0,role:!0,password:!0},FL=new Map,Wh=jL.searchByValue,QX=jL.searchByHash,JX=KX(VX.delete);async function XX(e){let t=zL.cleanAttributes(e,QL),r=WL.addUserValidation(t);if(r)throw Ai(new Error,r.message,Ri.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 Wh(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 Ai(new Error,Fl.ROLE_NAME_NOT_FOUND(t.role),Ri.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,Fl.DUP_ROLES_FOUND(t.role),Ri.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await YL.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 Ai(new Error,Fl.USER_ALREADY_EXISTS(t.username),Ri.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],KA.signalUserChange(new WA(process.pid)),`${c.username} successfully added`}a(XX,"addUser");async function ZX(e){let t=zL.cleanAttributes(e,QL);if(xn.isEmptyOrZeroLength(t.username))throw new Error(GL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(qL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error($L);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(KL);let r=eZ(t.username);if(!xn.isEmpty(t.password)&&!xn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password)),t.role==="")throw new Error(VL);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 Wh(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),Ai(new Error,c,Ri.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,Ri.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 YL.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 KA.signalUserChange(new WA(process.pid)),s}a(ZX,"alterUser");function eZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eZ,"isClusterUser");async function tZ(e){try{let t=WL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(xn.isEmpty(global.hdb_users.get(e.username)))throw Ai(new Error,Fl.USER_NOT_EXIST(e.username),Ri.NOT_FOUND,void 0,void 0,!0);let n;try{n=await JX(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 KA.signalUserChange(new WA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tZ,"dropUser");async function rZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=$A.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await QX(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(rZ,"userInfo");async function nZ(){let e;try{e=await jh()}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(nZ,"listUsersExternal");async function jh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Wh(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]=$A.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 Wh(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=$A.cloneDeep(o),o.role=r[o.role],sZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),xn.errorizeMessage(e)}return null}a(jh,"listUsers");function sZ(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(WX)){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(sZ,"appendSystemTablesToRole");async function Gl(){try{let e=await jh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Gl,"setUsersToGlobal");async function JL(e,t,r=!0){global.hdb_users||await Gl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ai(new Error,qA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,qA.USER_INACTIVE,Ri.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(FL.get(t)===n.password)return s;if(VA.validate(n.password,t))FL.set(t,n.password);else throw Ai(new Error,qA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}return s}a(JL,"findAndValidateUser");async function iZ(){global.hdb_users||await Gl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(iZ,"getSuperUser");async function oZ(){let e=await jh(),t=YX.getConfigFromFile(xL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!xn.isEmpty(r)&&r?.role?.role===xL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=YA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+kL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+kL.SERVER_SUFFIX.ADMIN,r}a(oZ,"getClusterUser");var XL=[];jA.invalidateUser=function(e){for(let t of XL)try{t(e)}catch(r){zX.error("Error invalidating user",r)}};jA.onInvalidatedUser=function(e){XL.push(e)}});var m_=N((HRe,nM)=>{"use strict";var fc=W(),kn=M(),aZ=WD(),vRe=us(),BRe=eo(),cZ=dn(),{validateEvent:eM}=qs(),p_=Hn(),lZ=require("process"),{resetDatabases:uZ}=(De(),oe(lt)),dZ={[kn.ITC_EVENT_TYPES.SCHEMA]:_Z,[kn.ITC_EVENT_TYPES.USER]:rM};async function _Z(e){let t=eM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await aZ(e.message),await fZ(e.message)}a(_Z,"schemaHandler");async function fZ(e){try{p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=uZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a(fZ,"syncSchemaMetadata");var tM=[];async function rM(e){try{try{p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=eM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${lZ.pid} received user event:`,e),await cZ.setUsersToGlobal();for(let r of tM)r()}catch(t){fc.error(t)}}a(rM,"userHandler");rM.addListener=function(e){tM.push(e)};nM.exports=dZ});var qs=N(($Re,iM)=>{"use strict";var kRe=W(),zA=te(),EZ=M(),{ITC_ERRORS:S_}=Dn(),{parentPort:FRe,threadId:hZ,isMainThread:pZ,workerData:GRe}=require("worker_threads"),{onMessageFromWorkers:mZ,broadcast:qRe,broadcastWithAcknowledgement:SZ}=dt();iM.exports={sendItcEvent:TZ,validateEvent:sM,SchemaEventMsg:gZ,UserEventMsg:AZ};var zh;mZ(async(e,t)=>{zh=zh||m_(),sM(e),zh[e.type]&&await zh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TZ(e){return!pZ&&e.message&&(e.message.originator=hZ),SZ(e)}a(TZ,"sendItcEvent");function sM(e){if(typeof e!="object")return S_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||zA.isEmpty(e.type))return S_.MISSING_TYPE;if(!e.hasOwnProperty("message")||zA.isEmpty(e.message))return S_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||zA.isEmpty(e.message.originator))return S_.MISSING_ORIGIN;if(EZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return S_.INVALID_EVENT(e.type)}a(sM,"validateEvent");function gZ(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(gZ,"SchemaEventMsg");function AZ(e){this.originator=e}a(AZ,"UserEventMsg")});var to=N((YRe,lM)=>{"use strict";var oM=M(),KRe=te(),Qh=W(),aM=VD(),ql,{sendItcEvent:cM}=qs();function RZ(e){try{Qh.info("signalSchemaChange called with message:",e),ql=ql||m_();let t=new aM(oM.ITC_EVENT_TYPES.SCHEMA,e);return ql.schema(t),cM(t)}catch(t){Qh.error(t)}}a(RZ,"signalSchemaChange");function yZ(e){try{Qh.trace("signalUserChange called with message:",e),ql=ql||m_();let t=new aM(oM.ITC_EVENT_TYPES.USER,e);return ql.user(t),cM(t)}catch(t){Qh.error(t)}}a(yZ,"signalUserChange");lM.exports={signalSchemaChange:RZ,signalUserChange:yZ}});var Jh=N((jRe,dM)=>{"use strict";var uM=te(),bZ=M(),OZ=W(),NZ=vh(),IZ=Uh(),wZ=to(),{SchemaEventMsg:CZ}=qs(),PZ="already exists in";dM.exports=DZ;async function DZ(e,t,r){if(uM.isEmptyOrZeroLength(r))return r;let n=[];uM.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 LZ(e,t.schema,t.name,i)})),s}a(DZ,"lmdbCheckForNewAttributes");async function LZ(e,t,r,n){let s=new IZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await MZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(PZ))OZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(LZ,"createNewAttribute");async function MZ(e){let t;return t=await NZ(e),wZ.signalSchemaChange(new CZ(process.pid,bZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(MZ,"createAttribute")});var $l=N((QRe,_M)=>{"use strict";var QA=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}};_M.exports=QA});var EM=N((XRe,fM)=>{"use strict";var UZ=$l(),vZ=M().OPERATIONS_ENUM,JA=class extends UZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(vZ.INSERT,r,n,s,i),this.records=t}};fM.exports=JA});var pM=N((eye,hM)=>{"use strict";var BZ=$l(),HZ=M().OPERATIONS_ENUM,XA=class extends BZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};hM.exports=XA});var SM=N((rye,mM)=>{"use strict";var xZ=$l(),kZ=M().OPERATIONS_ENUM,ZA=class extends xZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(kZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};mM.exports=ZA});var gM=N((sye,TM)=>{"use strict";var FZ=$l(),GZ=M().OPERATIONS_ENUM,eR=class extends FZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(GZ.DELETE,n,s,t,i),this.original_records=r}};TM.exports=eR});var T_=N((aye,bM)=>{"use strict";var oye=require("path"),AM=ht(),qZ=EM(),$Z=pM(),VZ=SM(),KZ=gM(),Vl=Ht(),RM=te(),{CONFIG_PARAMS:YZ}=M(),yM=se();yM.initSync();var Xh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:WZ}=gt();bM.exports=jZ;async function jZ(e,t){if(yM.get(YZ.LOGGING_AUDITLOG)===!1)return;let r=WZ(e.schema,e.table),n=await AM.openEnvironment(r,e.table,!0),s=zZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){AM.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),RM.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(jZ,"writeTransaction");function zZ(e,t){let r=RM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Xh.INSERT)return new qZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPDATE)return new $Z(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPSERT)return new VZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.DELETE)return new KZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(zZ,"createTransactionObject")});var tR=N((uye,OM)=>{"use strict";var QZ=f_(),lye=Qd(),g_=M(),JZ=Jd(),XZ=ic().insertRecords,ZZ=ht(),e5=W(),t5=Jh(),{getSchemaPath:r5}=gt(),n5=T_();OM.exports=s5;async function s5(e){try{let{schema_table:t,attributes:r}=QZ(e);JZ(e,r,t.hash_attribute),e.schema!==g_.SYSTEM_SCHEMA_NAME&&(r.includes(g_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(g_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(g_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(g_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t5(e.hdb_auth_header,t,r),s=r5(e.schema,e.table),i=await ZZ.openEnvironment(s,e.table),o=await XZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n5(e,o)}catch(c){e5.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(s5,"lmdbCreateRecords")});var wM=N((_ye,IM)=>{"use strict";var NM=M(),i5=tR(),o5=Qd(),a5=require("fs-extra"),{getSchemaPath:c5}=gt();IM.exports=l5;async function l5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o5(NM.SYSTEM_SCHEMA_NAME,NM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i5(r),await a5.mkdirp(c5(e.schema))}a(l5,"lmdbCreateSchema")});var PM=N((Eye,CM)=>{"use strict";var rR=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}};CM.exports=rR});var UM=N((Tye,MM)=>{"use strict";var DM=ht(),nR=cn(),sR=Dn().LMDB_ERRORS_ENUM,u5=Ht(),LM=W(),pye=te(),d5=require("lmdb"),_5=PM(),f5=M(),{OVERFLOW_MARKER:mye,MAX_SEARCH_KEY_LENGTH:Sye}=u5,E5=f5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function h5(e,t,r,n){if(nR.validateEnv(e),t===void 0)throw new Error(sR.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sR.IDS_REQUIRED):new Error(sR.IDS_MUST_BE_ITERABLE);try{let s=DM.listDBIs(e);DM.initializeDBIs(e,t,s);let i=new _5,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[E5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,d5.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=nR.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{LM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){LM.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=nR.getNextMonotonicTime(),i}catch(s){throw s}}a(h5,"deleteRecords");MM.exports={deleteRecords:h5}});var A_=N((Aye,BM)=>{"use strict";var Kl=te(),p5=UM(),m5=ht(),{getSchemaPath:S5}=gt(),T5=T_(),g5=W();BM.exports=A5;async function A5(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 vM([],[]);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=S5(e.schema,e.table),i=await m5.openEnvironment(s,e.table),o=await p5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T5(e,o)}catch(c){g5.error(`unable to write transaction due to ${c.message}`)}return vM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A5,"lmdbDeleteRecords");function vM(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(vM,"createDeleteResponse")});var oR=N((bye,HM)=>{"use strict";var R5=M(),yye=cn();function iR(e,t){let r=Object.create(null);if(t.length===1&&R5.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(iR,"parseRow");function y5(e,t,r,n){let s=iR(r,e);n.push(s)}a(y5,"searchAll");function b5(e,t,r,n){let s=iR(r,e);n[t]=s}a(b5,"searchAllToMap");function O5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(O5,"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 N5(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(N5,"endsWith");function I5(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(I5,"contains");function w5(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(w5,"greaterThanCompare");function C5(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(C5,"greaterThanEqualCompare");function P5(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(P5,"lessThanCompare");function D5(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(D5,"lessThanEqualCompare");HM.exports={parseRow:iR,searchAll:y5,searchAllToMap:b5,iterateDBI:O5,endsWith:N5,contains:I5,greaterThanCompare:w5,greaterThanEqualCompare:C5,lessThanCompare:P5,lessThanEqualCompare:D5,pushResults:Ec}});var Yl=N((Cye,VM)=>{"use strict";var Qo=ht(),Nye=W(),Fn=cn(),Zh=Ht(),zt=Dn().LMDB_ERRORS_ENUM,Iye=te(),L5=M(),ep=oR(),{parseRow:M5}=ep,wye=require("lmdb"),{OVERFLOW_MARKER:xM,MAX_SEARCH_KEY_LENGTH:U5}=Zh;function kM(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(kM,"iterateFullIndex");function R_(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(R_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[Zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.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 FM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(xM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[Zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(FM,"getOverflowCheck");function v5(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)=>(tp(r),r=y_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>M5(u.value,r))))}a(v5,"searchAll");function B5(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);tp(r),r=y_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of kM(e,t,t,n,s,i))o.set(c,ep.parseRow(l,r));return o}a(B5,"searchAllToMap");function H5(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=kM(e,void 0,t,r,n,s),c=o.transaction,l=FM(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(H5,"iterateDBI");function x5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(x5,"countAll");function k5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(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(k5,"equals");function F5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(F5,"count");function G5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(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(G5,"startsWith");function q5(e,t,r,n,s=!1,i=void 0,o=void 0){return GM(e,t,r,n,s,i,o,!0)}a(q5,"endsWith");function GM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=FM(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(xM)?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[Zh.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(GM,"contains");function $5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),R_(e,t,r,n,l,s,i,o,!0,!1)}a($5,"greaterThan");function V5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),R_(e,t,r,n,l,s,i,o,!1,!1)}a(V5,"greaterThanEqual");function K5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),R_(e,t,r,l,n,s,i,o,!1,!0)}a(K5,"lessThan");function Y5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),R_(e,t,r,l,n,s,i,o,!1,!1)}a(Y5,"lessThanEqual");function W5(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 R_(e,t,r,n,s,i,o,c)}a(W5,"between");function j5(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(tp(r),r=y_(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=ep.parseRow(c,r)),o}a(j5,"searchByHash");function z5(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(z5,"checkHashExists");function Q5(e,t,r,n,s=[]){return $M(e,t,r,n,s),qM(e,t,r,n,s).map(i=>i[1])}a(Q5,"batchSearchByHash");function J5(e,t,r,n,s=[]){$M(e,t,r,n,s);let i=new Map;for(let[o,c]of qM(e,t,r,n,s))i.set(o,c);return i}a(J5,"batchSearchByHashToMap");function qM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=y_(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,ep.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(qM,"batchHashSearch");function $M(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(tp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a($M,"initializeBatchSearchByHash");function tp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(tp,"validateFetchAttributes");function Jo(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>U5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function y_(e,t){return t.length===1&&L5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(y_,"setGetWholeRowAttributes");VM.exports={searchAll:v5,searchAllToMap:B5,count:F5,countAll:x5,equals:k5,startsWith:G5,endsWith:q5,contains:GM,searchByHash:j5,setGetWholeRowAttributes:y_,batchSearchByHash:Q5,batchSearchByHashToMap:J5,checkHashExists:z5,iterateDBI:H5,greaterThan:$5,greaterThanEqual:V5,lessThan:K5,lessThanEqual:Y5,between:W5}});var Wl=N((Dye,zM)=>{var KM=require("lodash"),YM=Tt(),xe=require("joi"),X5=te(),{hdb_schema_table:b_,checkValidTable:WM,hdb_table:jM,hdb_database:rp}=Ti(),{handleHDBError:Z5,hdb_errors:e6}=_e(),{getDatabases:t6}=(De(),oe(lt)),{HTTP_STATUS_CODES:r6}=e6,n6=xe.object({database:rp,schema:rp,table:jM,search_attribute:b_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(b_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),s6=xe.object({database:rp,schema:rp,table:jM,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(b_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(b_,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(b_,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()});zM.exports=function(e,t){let r=null;switch(t){case"value":r=YM.validateBySchema(e,n6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(WM("database",e.schema)),i(WM("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=YM.validateBySchema(e,s6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=X5.checkGlobalSchemaTable(e.schema,e.table);if(s)return Z5(new Error,s,r6.NOT_FOUND);let o=t6()[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=KM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!KM.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 aR=N((Mye,QM)=>{"use strict";var i6=ht(),o6=Wl(),{getSchemaPath:a6}=gt();QM.exports=c6;function c6(e){let t=o6(e,"hashes");if(t)throw t;let r=a6(e.schema,e.table);return i6.openEnvironment(r,e.table)}a(c6,"initialize")});var cR=N((vye,JM)=>{"use strict";var l6=Yl(),u6=aR();JM.exports=d6;async function d6(e){let t=await u6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return l6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d6,"lmdbGetDataByHash")});var jl=N((Hye,XM)=>{"use strict";var lR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};XM.exports=lR});var eU=N((Fye,ZM)=>{"use strict";var kye=jl(),_6=Yl(),f6=aR();ZM.exports=E6;async function E6(e){let t=await f6(e),r=global.hdb_schema[e.schema][e.table];return _6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(E6,"lmdbSearchByHash")});var $s=N((qye,tU)=>{"use strict";var uR=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}};tU.exports=uR});var np=N((Vye,aU)=>{"use strict";var Wr=Yl(),h6=ht(),p6=te(),ke=Ht(),pc=M(),m6=Ji(),rU=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:S6}=gt(),ro=pc.SEARCH_WILDCARDS;async function T6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=m6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=oU(e,n.hash_attribute,r,t);return sU(e,s,n.hash_attribute,r)}a(T6,"prepSearch");async function sU(e,t,r,n){let s=S6(e.schema,e.table),i=await h6.openEnvironment(s,e.table),o=iU(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(g6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?nU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?nU(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(sU,"executeSearch");function iU(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(iU,"searchByType");function nU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(nU,"createMapFromIterable");function g6(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(g6,"checkToFetchMore");function oU(e,t,r,n){if(p6.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),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[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(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(rU.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(rU.UNKNOWN_SEARCH_TYPE)}}a(oU,"createSearchTypeFromSearchObject");aU.exports={executeSearch:sU,createSearchTypeFromSearchObject:oU,prepSearch:T6,searchByType:iU}});var lU=N((Wye,cU)=>{"use strict";var Yye=$s(),A6=Wl(),R6=te(),y6=M(),b6=np();cU.exports=O6;function O6(e,t){if(!R6.isEmpty(t)&&y6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A6(e,"value");if(n)throw n;return b6.prepSearch(e,t,!0)}a(O6,"lmdbGetDataByValue")});var O_=N((Qye,uU)=>{"use strict";var zye=$s(),N6=Wl(),I6=te(),w6=M(),C6=np();uU.exports=P6;async function P6(e,t){if(!I6.isEmpty(t)&&w6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N6(e,"value");if(n)throw n;return C6.prepSearch(e,t,!1)}a(P6,"lmdbSearchByValue")});var _U=N((Zye,dU)=>{"use strict";var Xye=Ht(),dR=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}},_R=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},fR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};dU.exports={SearchByConditionsObject:dR,SearchCondition:_R,SortAttribute:fR}});var mU=N((nbe,pU)=>{"use strict";var tbe=_U().SearchByConditionsObject,D6=$s(),L6=Wl(),ER=Yl(),sp=Ht(),{Resource:rbe}=(Vs(),oe(hR)),hU=np(),M6=oR(),U6=require("lodash"),{getSchemaPath:v6}=gt(),fU=ht(),{handleHDBError:B6,hdb_errors:H6}=_e(),{HTTP_STATUS_CODES:x6}=H6,k6=1e8;pU.exports=F6;async function F6(e){let t=L6(e,"conditions");if(t)throw B6(t,t.message,x6.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=v6(e.schema,e.table),n=await fU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)fU.openDBI(n,u.search_attribute);let i=U6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===sp.SEARCH_TYPES.EQUALS?u.estimated_count=ER.count(n,u.search_attribute,u.search_value):d===sp.SEARCH_TYPES.CONTAINS||d===sp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=k6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await EU(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(hU.filterByType),_=d.length,E=ER.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=>M6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await EU(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=ER.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F6,"lmdbSearchByConditions");async function EU(e,t,r,n){let s=new D6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===sp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,hU.searchByType(e,s,i,n).map(o=>o.value)}a(EU,"executeConditionSearch")});var N_=N((ibe,SU)=>{"use strict";var G6=M().OPERATIONS_ENUM,pR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=G6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};SU.exports=pR});var mR=N((abe,NU)=>{"use strict";var RU=$s(),yU=N_(),bU=O_(),OU=A_(),_n=M(),TU=te(),gU=ht(),{getTransactionAuditStorePath:q6,getSchemaPath:$6}=gt(),AU=W();NU.exports=V6;async function V6(e){try{if(TU.isEmpty(global.hdb_schema[e.schema])||TU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K6(e),await Y6(e);let t=$6(e.schema,e.table);try{await gU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")AU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=q6(e.schema,e.table);await gU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")AU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V6,"lmdbDropTable");async function K6(e){let t=new RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await bU(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 yU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await OU(s)}a(K6,"deleteAttributesFromSystem");async function Y6(e){let t=new RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await bU(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 yU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await OU(s)}catch(i){throw i}}a(Y6,"dropTableFromSystem")});var wU=N((lbe,IU)=>{"use strict";var W6=require("fs-extra"),j6=$s(),z6=jl(),Q6=N_(),J6=mR(),X6=A_(),Z6=cR(),e8=O_(),no=M(),{getSchemaPath:t8}=gt(),{handleHDBError:r8,hdb_errors:n8}=_e(),{HDB_ERROR_MSGS:s8,HTTP_STATUS_CODES:i8}=n8;IU.exports=o8;async function o8(e){let t;try{t=await a8(e.schema);let r=new j6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await e8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await J6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Q6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await X6(s);let i=t8(t);await W6.remove(i)}catch(r){throw r}}a(o8,"lmdbDropSchema");async function a8(e){let t=new z6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Z6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw r8(new Error,s8.SCHEMA_NOT_FOUND(e),i8.NOT_FOUND,void 0,void 0,!0);return n}a(a8,"validateDropSchema")});var I_=N((dbe,CU)=>{"use strict";var SR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};CU.exports=SR});var gR=N((Ebe,PU)=>{"use strict";var c8=require("fs-extra"),ip=ht(),{getTransactionAuditStorePath:l8}=gt(),TR=Ht(),fbe=I_();PU.exports=u8;async function u8(e){let t;try{let r=l8(e.schema,e.table);await c8.mkdirp(r),t=await ip.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{ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ip.createDBI(t,TR.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(u8,"createTransactionsAuditEnvironment")});var MU=N((mbe,LU)=>{"use strict";var AR=M(),DU=ht(),d8=ic(),{getSystemSchemaPath:_8,getSchemaPath:f8}=gt(),pbe=Ji(),E8=vh(),RR=Uh(),h8=W(),p8=gR();LU.exports=m8;async function m8(e,t){let r=f8(t.schema,t.table),n=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new RR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await DU.createEnvironment(r,t.table),e!==void 0){let o=await DU.openEnvironment(_8(),AR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await d8.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 yR(n),await yR(s),await yR(i)}await p8(t)}catch(o){throw o}}a(m8,"lmdbCreateTable");async function yR(e){try{await E8(e)}catch(t){h8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yR,"createAttribute")});var vU=N((Tbe,UU)=>{"use strict";var S8=f_(),T8=Jd(),g8=Jh(),w_=M(),A8=ic().updateRecords,R8=ht(),{getSchemaPath:y8}=gt(),b8=T_(),O8=W();UU.exports=N8;async function N8(e){try{let{schema_table:t,attributes:r}=S8(e);T8(e,r,t.hash_attribute),e.schema!==w_.SYSTEM_SCHEMA_NAME&&(r.includes(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await g8(e.hdb_auth_header,t,r),s=y8(e.schema,e.table),i=await R8.openEnvironment(s,e.table),o=await A8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await b8(e,o)}catch(c){O8.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(N8,"lmdbUpdateRecords")});var HU=N((Abe,BU)=>{"use strict";var I8=M().OPERATIONS_ENUM,bR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=I8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};BU.exports=bR});var kU=N((bbe,xU)=>{"use strict";var ybe=HU(),w8=f_(),C8=Jd(),P8=Jh(),C_=M(),D8=ic().upsertRecords,L8=ht(),{getSchemaPath:M8}=gt(),U8=T_(),v8=W(),{handleHDBError:B8,hdb_errors:H8}=_e();xU.exports=x8;async function x8(e){let t;try{t=w8(e)}catch(l){throw B8(l,l.message,H8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;C8(e,n,r.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(n.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await P8(e.hdb_auth_header,r,n),i=M8(e.schema,e.table),o=await L8.openEnvironment(i,e.table),c=await D8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await U8(e,c)}catch(l){v8.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(x8,"lmdbUpsertRecords")});var GU=N((Nbe,FU)=>{"use strict";var OR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};FU.exports=OR});var $U=N((wbe,qU)=>{"use strict";var NR=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}};qU.exports=NR});var YU=N((Dbe,KU)=>{"use strict";var IR=ht(),{getTransactionAuditStorePath:k8}=gt(),Pbe=GU(),P_=Ht(),F8=te(),VU=$U(),G8=require("util").promisify,q8=G8(setTimeout),$8=1e4,V8=100;KU.exports=K8;async function K8(e){let t=k8(e.schema,e.table),r=await IR.openEnvironment(t,e.table,!0),n=IR.listDBIs(r);IR.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new VU;do s=await Y8(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 q8(V8);while(s.transactions_deleted>0);return i}a(K8,"deleteAuditLogsBefore");async function Y8(e,t){let r=new VU;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];F8.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>$8)break}return await s,r}catch(n){throw n}}a(Y8,"deleteTransactions")});var jU=N((Mbe,WU)=>{"use strict";var wR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};WU.exports=wR});var QU=N((Bbe,zU)=>{"use strict";var W8=$s(),j8=N_(),vbe=jU(),yi=M(),z8=te(),CR=ht(),Q8=Ji(),J8=O_(),X8=A_(),{getSchemaPath:Z8}=gt();zU.exports=e9;async function e9(e,t=!0){let r;e.schema===yi.SYSTEM_SCHEMA_NAME?r=Q8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await r9(e),s=Z8(e.schema,e.table),i=await CR.openEnvironment(s,e.table);return t===!0&&await t9(e,i,r.hash_attribute),CR.dropDBI(i,e.attribute),n}a(e9,"lmdbDropAttribute");async function t9(e,t,r){let n=CR.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(t9,"removeAttributeFromAllObjects");async function r9(e){let t=new W8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await J8(t)).filter(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(z8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new j8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return X8(i)}a(r9,"dropAttributeFromSystem")});var rv=N((kbe,tv)=>{"use strict";var PR=ht(),zl=Ht(),xbe=cn(),DR=M(),JU=te(),{getTransactionAuditStorePath:n9}=gt(),s9=Yl(),op=$l(),i9=W();tv.exports=o9;async function o9(e){let t=n9(e.schema,e.table),r=await PR.openEnvironment(t,e.table,!0),n=PR.listDBIs(r);PR.initializeDBIs(r,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case DR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return XU(r,e.search_values);case DR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,c9(r,e.search_values,s);case DR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return a9(r,e.search_values);default:return XU(r)}}a(o9,"readAuditLog");function XU(e,t=[0,Date.now()]){JU.isEmpty(t[0])&&(t[0]=0),JU.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 op,s))}a(XU,"searchTransactionsByTimestamp");function a9(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,ev(e,i))}return Object.fromEntries(r)}a(a9,"searchTransactionsByUsername");function c9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=s9.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=ev(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);ZU(l,"records",r,d,o),ZU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(c9,"searchTransactionsByHashValues");function ZU(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 op(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new op(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(ZU,"loopRecords");function ev(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 op,i);r.push(o)}}catch(i){i9.warn(i)}return r}catch(n){throw n}}a(ev,"batchSearchTransactions")});var sv=N(($be,nv)=>{"use strict";var{getSchemaPath:Gbe}=gt(),qbe=ht(),{database:l9}=(De(),oe(lt));nv.exports={writeTransaction:u9};async function u9(e,t,r){return l9({database:e,table:t}).transaction(r)}a(u9,"writeTransaction")});var cv=N((Kbe,av)=>{"use strict";var{getSchemaPath:iv}=gt(),ov=ht();av.exports={flush:d9,resetReadTxn:_9};async function d9(e,t){return(await ov.openEnvironment(iv(e,t),t.toString())).flushed}a(d9,"flush");async function _9(e,t){try{(await ov.openEnvironment(iv(e,t),t.toString())).resetReadTxn()}catch{}}a(_9,"resetReadTxn")});var _v=N((Wbe,dv)=>{"use strict";var{Readable:f9}=require("stream"),{getDatabases:E9}=(De(),oe(lt)),{readSync:h9,openSync:p9,createReadStream:lv}=require("fs"),{open:m9}=require("lmdb"),uv=o_(),S9=a_(),{AUDIT_STORE_OPTIONS:T9}=(zi(),oe(fv)),{INTERNAL_DBIS_NAME:g9,AUDIT_STORE_NAME:A9}=Ht();dv.exports=y9;var LR=32768,R9=100;async function y9(e){let t=e.database||e.schema||"data",r=E9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=m9({noSync:!0,maxDbs:S9.MAX_DBS}),E,f=_.openDB(g9,new uv(!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++%R9===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 uv(!U,U);await m(S,H)}e.include_audit&&await m(A9,{...T9}),await E;let g=lv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=p9(o.path);return o.transaction(()=>{let u=Buffer.alloc(LR);h9(c,u,0,LR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=lv(null,{fd:c,start:LR}),E=new f9.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(y9,"getBackup")});var pv=N((zbe,hv)=>{"use strict";var b9=W(),{handleHDBError:O9}=_e(),N9=JP(),I9=vh(),w9=tR(),C9=wM(),P9=A_(),D9=cR(),L9=eU(),M9=lU(),U9=O_(),v9=mU(),B9=wU(),H9=MU(),x9=vU(),k9=kU(),F9=YU(),G9=mR(),q9=QU(),$9=rv(),V9=sv(),Ev=cv(),K9=_v(),MR=class extends N9{static{a(this,"LMDBBridge")}async searchByConditions(t){return v9(t)}async getDataByHash(t){return await D9(t)}async searchByHash(t){return await L9(t)}async getDataByValue(t,r){return await M9(t,r)}async searchByValue(t){return await U9(t)}async createSchema(t){return await C9(t)}async dropSchema(t){return await B9(t)}async createTable(t,r){return await H9(t,r)}async dropTable(t){return await G9(t)}async createAttribute(t){return await I9(t)}async createRecords(t){return await w9(t)}async updateRecords(t){return await x9(t)}async upsertRecords(t){try{return await k9(t)}catch(r){throw O9(r,null,null,b9.ERR,r)}}async deleteRecords(t){return await P9(t)}async dropAttribute(t){return await q9(t)}async deleteAuditLogsBefore(t){return await F9(t)}async readAuditLog(t){return await $9(t)}writeTransaction(t,r,n){return V9.writeTransaction(t,r,n)}flush(t,r){return Ev.flush(t,r)}resetReadTxn(t,r){return Ev.resetReadTxn(t,r)}getBackup(t){return K9(t)}};hv.exports=MR});function bv(e){vR=e}function z9(){j9=setInterval(function(){for(let e of UR)if(e.stale){let t=e[Fe]?.url;gv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},W9).unref()}var BR,Tv,gv,Av,Rv,yv,mv,UR,Y9,D_,Sv,vR,mc,ap,W9,j9,cp=Ie(()=>{BR=L(cn()),Tv=L(_e()),gv=L(W());Vs();Av=L(se()),Rv=L(M()),yv=L(te()),mv=100,UR=new Set,Y9=(0,yv.convertToMS)(Av.get(Rv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(bv,"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),UR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(UR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(D_&&!this.overloadChecked&&performance.now()-Sv>Y9)throw new Tv.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,BR.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)<mv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return D_||(D_=s,Sv=performance.now(),D_.then(()=>{D_=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];vR&&f&&i.push(vR(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)+mv/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=[]}},ap=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,BR.getNextMonotonicTime)())}getReadTxn(){}},W9=3e4;a(z9,"startMonitoringTxns");z9()});function Pt(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 Ov,Sc=Ie(()=>{Ov=L(fi());Vs();cp();a(Pt,"transaction");(0,Ov._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.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 Mv={};je(Mv,{ResourceBridge:()=>kR});function FR({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 Iv(e,t){let r=bi(e),n=FR(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;Pt(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&&up(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 bi(e){let t=e.database||e.schema||J9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,Q9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wv(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*Cv(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 Pv,lp,Ks,Dv,Ys,HR,xR,Lv,Q9,J9,X9,Z9,Nv,kR,Uv=Ie(()=>{"use strict";Pv=L(pv()),lp=L(Wl()),Ks=L(_e());De();Dv=L(f_()),Ys=L(M()),HR=L(to()),xR=L(qs()),Lv=L(te());Sc();dp();({HDB_ERROR_MSGS:Q9}=Ks.hdb_errors),J9="data",X9=1e4,Z9=10,kR=class extends Pv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Nv=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,lp.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=bi(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:FR(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 bi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=bi(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){bi(t).dropTable()}createSchema(t){return Ql({database:t.schema,table:null}),HR.signalSchemaChange(new xR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await GR(t.schema),HR.signalSchemaChange(new xR.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,Nv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Dv.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),Pt(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=up(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),Pt(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 wv(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,Lv.async_set_timeout)(Z9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%X9===0&&await u();return l.length>0&&await u(),s?wv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,lp.default)(t,"hashes");if(r)throw r;return Iv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Iv(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,lp.default)(t,"value");if(n)throw n;let s=bi(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:FR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=bi(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){bi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return bi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=bi(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 Cv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Cv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(FR,"getSelect");a(Iv,"getRecords");a(bi,"getTable");a(wv,"createDeleteResponse");a(Cv,"groupRecordsInHistory")});var Hn=N((uOe,vv)=>{"use strict";var{ResourceBridge:e7}=(Uv(),oe(Mv)),t7=se();t7.initSync();var _p;function r7(){return _p||(_p=new e7,_p)}a(r7,"getBridge");vv.exports=r7()});var kv=N((_Oe,xv)=>{"use strict";var Bv=require("lodash"),L_=require("mathjs"),n7=require("jsonata"),Hv=te();xv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Bv.uniqWith(e,Bv.isEqual):e,"distinct_array"),searchJSON:s7,mad:M_.bind(null,L_.mad),mean:M_.bind(null,L_.mean),mode:M_.bind(null,L_.mode),prod:M_.bind(null,L_.prod),median:M_.bind(null,L_.median)};function M_(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(M_,"aggregateFunction");function s7(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(Hv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Hv.isEmpty(this.__ala__.res[r])){let n=n7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s7,"searchJSON")});var Gv=N((EOe,Fv)=>{"use strict";var nr=require("moment"),qR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;Fv.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(qR),"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(qR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(qR),"offset_utc")}});var Kv=N((pOe,Vv)=>{"use strict";var i7=require("@turf/area"),o7=require("@turf/length"),a7=require("@turf/circle"),c7=require("@turf/difference"),l7=require("@turf/distance"),u7=require("@turf/boolean-contains"),d7=require("@turf/boolean-equal"),_7=require("@turf/boolean-disjoint"),f7=require("@turf/helpers"),qv=M(),$e=te(),so=W();Vv.exports={geoArea:E7,geoLength:h7,geoCircle:p7,geoDifference:m7,geoDistance:$v,geoNear:S7,geoContains:T7,geoEqual:g7,geoCrosses:A7,geoConvert:R7};function E7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return i7.default(e)}catch(t){return so.trace(t,e),NaN}}a(E7,"geoArea");function h7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return o7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(h7,"geoLength");function p7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return a7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(p7,"geoCircle");function m7(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 c7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(m7,"geoDifference");function $v(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 l7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a($v,"geoDistance");function S7(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 $v(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(S7,"geoNear");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 so.trace(r,e,t),!1}}a(T7,"geoContains");function g7(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 d7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(g7,"geoEqual");function A7(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!_7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(A7,"geoCrosses");function R7(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(qv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),f7[t](e,r)}a(R7,"geoConvert")});var fp=N((SOe,Yv)=>{var Tc=kv(),Gn=Gv(),Oi=Kv();Yv.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=Oi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Oi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Oi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Oi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Oi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Oi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Oi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Oi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Oi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Oi.geoNear}});var Qv=N((TOe,zv)=>{"use strict";var U_=require("lodash"),fn=require("alasql");fn.options.cache=!1;var y7=fp(),Wv=require("clone"),Ep=require("recursive-iterator"),Ue=W(),et=te(),Jl=Hn(),b7=M(),{hdb_errors:O7}=_e(),{getDatabases:jv}=(De(),oe(lt)),N7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";y7(fn);var $R=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 Ep(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(Wv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=U_.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=jv()[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 Ep(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 fn.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 fn.yy.LogicValue({value:i}):n instanceof fn.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new fn.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 Ep(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(b7.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&&U_.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 fn.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(Wv(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(N7)>-1&&this.tables.forEach(s=>{let i={columnid:jv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=U_.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 fn.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 fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new fn.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 fn.yy.FuncValue:new fn.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 fn.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=U_.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 Ep(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=U_.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 fn.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(O7.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)}};zv.exports=$R});var Vr=N((AOe,Jv)=>{"use strict";var I7=zP();Jv.exports={searchByConditions:C7,searchByHash:P7,searchByValue:D7,search:L7};var VR=Hn(),{transformReq:KR}=te(),w7=Qv();async function C7(e){return KR(e),VR.searchByConditions(e)}a(C7,"searchByConditions");async function P7(e){KR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of VR.searchByHash(e))r&&t.push(r);return t}a(P7,"searchByHash");async function D7(e){KR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of VR.searchByValue(e))t.push(r);return t}a(D7,"searchByValue");function L7(e,t){try{let r=new I7(e);r.validate(),new w7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(L7,"search")});var hp=N((yOe,Xv)=>{"use strict";var M7=Hn();Xv.exports={writeTransaction:U7};function U7(e,t,r){return M7.writeTransaction(e,t,r)}a(U7,"writeTransaction")});var r0=N((NOe,t0)=>{"use strict";var v7=Vr(),B7=us(),Zv=W(),H7=un(),OOe=hp(),x7=require("clone"),WR=require("alasql"),k7=fp(),e0=require("util"),F7=e0.promisify(B7.getTableSchema),G7=e0.promisify(v7.search),q7=M(),YR=te();k7(WR);t0.exports={update:V7};var $7="There was a problem performing this update. Please check the logs and try again.";async function V7({statement:e,hdb_user:t}){let r=await F7(e.table.databaseid,e.table.tableid),n=K7(e.columns);YR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=x7(s),c=YR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=WR.parse(l).statements[0],d=await G7(u),_=Y7(n,d);return W7(o,_,t)}a(V7,"update");function K7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=WR.compile(`SELECT ${r.expression.toString()} AS [${q7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Zv.error(t),new Error($7)}}a(K7,"createUpdateRecord");function Y7(e,t){return YR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Y7,"buildUpdateRecords");async function W7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Zv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W7,"updateRecords")});var s0=N((POe,n0)=>{var j7=require("alasql"),z7=Vr(),Q7=W(),J7=Hn(),zR=require("util"),jR=te(),X7=M(),Z7=us(),wOe=hp(),COe=un(),eee="record",tee="successfully deleted",ree=zR.callbackify(oee),nee=zR.promisify(z7.search),see=zR.promisify(Z7.getTableSchema);n0.exports={convertDelete:ree};function iee(e){return`${e.deleted_hashes.length} ${eee}${e.deleted_hashes.length===1?"":"s"} ${tee}`}a(iee,"generateReturnMessage");async function oee({statement:e,hdb_user:t}){let r=await see(e.table.databaseid,e.table.tableid);jR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=jR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j7.parse(o).statements[0],l={operation:X7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await nee(c);let u=await J7.deleteRecords(l);return jR.isEmptyOrZeroLength(u.message)&&(u.message=iee(u)),delete u.txn_time,u}catch(u){throw Q7.error(u),u.hdb_code?u.message:u}}a(oee,"convertDelete")});var l0=N((LOe,c0)=>{"use strict";var aee=eo(),{hdb_errors:i0}=_e(),{getDatabases:o0}=(De(),oe(lt));c0.exports={checkSchemaExists:a0,checkSchemaTableExists:cee,schema_describe:aee};async function a0(e){if(!o0()[e])return i0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(a0,"checkSchemaExists");async function cee(e,t){let r=await a0(e);if(r)return r;if(!o0()[e][t])return i0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cee,"checkSchemaTableExists")});var Xl=N((UOe,lee)=>{lee.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 k_={};je(k_,{addAnalyticsListener:()=>x_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>uee});function uee(e){S0=e}function mr(e,t,r,n,s){if(!S0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sp.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},Sp.set(i,o)}pp||dee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function x_(e){A0.push(e)}function dee(){pp=performance.now(),setTimeout(async()=>{let e=performance.now()-pp;pp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of Sp){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 R0){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 y0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of A0)s(t);Sp=new Map,gc.parentPort?gc.parentPort.postMessage({type:g0,report:r}):N0({report:r})},T0).unref()}async function _ee(e,t=6e4){let r=XR(),n=b0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,v_.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,v_.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 y0()}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 R0){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,mp.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,mp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-u0,active:h-d0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}u0=f,d0=h}async function _0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function XR(){return f0||(f0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function b0(){return E0||(E0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function hee(){O0=!0;let e=(0,H_.get)(JR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await _ee(T0,e),await _0(XR(),fee),await _0(b0(),Eee)},Math.min(e/2,2147483647)).unref()}function N0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(h0+=n.mean*n.count);r.totalBytesProcessed=h0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(p0.get(t))}),p0.set(t,t.performance.eventLoopUtilization())),r.id=(0,mp.getNextMonotonicTime)(),XR().primaryStore.put(r.id,r),O0||hee(),pee&&(I0=See(r))}async function See(e){if(await I0,!Xo){let r=(0,B_.dirname)((0,v_.getLogFilePath)());try{Xo=await(0,QR.open)((0,B_.join)(r,"analytics.log"),"r+")}catch{Xo=await(0,QR.open)((0,B_.join)(r,"analytics.log"),"w+")}}let t=(await Xo.stat()).size;if(t>mee){let r=Buffer.alloc(t);await Xo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xo.write(r,{position:0}),await Xo.truncate(r.length),t=r.length}await Xo.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 pr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}s4(n,r),Ng(n);let s=n.toJSON();if(z2.config=s,jt=Dl(s),jt.logging_rotation_rotate)for(let i in jC)jt[i]&&pr.error(`Config ${jC[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);pr.trace(J2)}}a(uh,"initConfig");function s4(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Mn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Mn.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&&(pr.trace("Updating config file with missing config params"),$r.writeFileSync(t,String(e)))}a(s4,"checkForUpdatedConfig");function Ng(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 Pl.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 Pl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=V2(r,t);if(n.error)throw Pl.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(Ng,"validateConfig");function i4(e,t){jt===void 0&&(jt={});let r=ks[e.toLowerCase()];if(r===void 0){pr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(i4,"updateConfigObject");function eP(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&uh();let o=ZC(ks.hdb_root),c=Mn.join(o,on.HDB_CONFIG_FILE),l=$o(c),u;if(r===void 0&&e.toLowerCase()===Ln.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=Og(E,t);l.setIn([...f],h)}else for(let E in r){let f=ks[E.toLowerCase()];if(f===Ln.HTTP_SECUREPORT&&r[E]===jt[Ln.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===Ln.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[Ln.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===Ln.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=Og(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){pr.error(g)}}}u&&XC(l,u),Ng(l);let d=l.getIn(["rootPath"]),_=Mn.join(d,on.HDB_CONFIG_FILE);n===!0&&o4(c,d),$r.writeFileSync(_,String(l)),s&&(jt=Dl(l.toJSON())),pr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eP,"updateConfigValue");function o4(e,t){try{let r=Mn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${on.HDB_CONFIG_FILE}.bak`);$r.copySync(e,r),pr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){pr.error(X2),pr.error(r)}}a(o4,"backupConfigFile");var a4=["databases"];function Dl(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}),lh=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])&&!a4.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;!Ln[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(Dl,"flattenConfig");function Og(e,t){if(e===Ln.CLUSTERING_NODENAME||e===Ln.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(K2(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||hr.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 hr.autoCast(t)}a(Og,"castConfigValue");function c4(){let e=hr.getPropsFilePath(),t=Xa(e);return $o(t).toJSON()}a(c4,"getConfiguration");async function l4(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return eP(void 0,void 0,s,!0),t4}catch(i){throw typeof i=="string"||i instanceof String?W2(i,i,j2.BAD_REQUEST,void 0,void 0,!0):i}}a(l4,"setConfiguration");function Ig(){let e=hr.getPropsFilePath();try{$r.accessSync(e,$r.constants.F_OK|$r.constants.R_OK)}catch(n){if(!hr.noBootFile())throw pr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Xa(e);return $o(t).toJSON()}a(Ig,"readConfigFile");function $o(e){return zC.parseDocument($r.readFileSync(e,"utf8"),{simpleKeys:!0})}a($o,"parseYamlDoc");function u4(){let e=Ig(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=hr.isEmptyOrZeroLength(t)?[]:t;let r=WC(t);if(r)throw Pl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=hr.isEmptyOrZeroLength(n)?[]:n;let s=WC(n);if(s)throw Pl.CONFIG_VALIDATION(s.message);if(!hr.isEmptyOrZeroLength(n)&&!hr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!hr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Pl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(u4,"getClusteringRoutes");function tP(e){let t=QC(e);jt={};for(let r in ks){let n=t.get(r.toUpperCase());if(hr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=ks[r].toLowerCase();s===Ln.LOGGING_ROOT?jt[s]=Mn.dirname(n):jt[s]=n}return jt}a(tP,"initOldConfig");function d4(e){let t=Ig();return Y2.get(t,e.replaceAll("_","."))}a(d4,"getConfigFromFile");async function _4(e,t){let r=$o(Xa());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await $r.writeFile(Xa(),String(r))}a(_4,"addConfig");function f4(e){let t=Xa(hr.getPropsFilePath()),r=$o(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Mn.join(n,on.HDB_CONFIG_FILE);$r.writeFileSync(s,String(r))}a(f4,"deleteConfigFromFile");function E4(){return lh||(uh(),lh)}a(E4,"getConfigObj");function h4(){return jt||uh(),jt}a(h4,"getFlatConfigObj")});var se=N((aP,cP)=>{"use strict";var wg=require("fs-extra"),Za=require("path"),nP=require("os"),p4=require("properties-reader"),$d=W(),qd=te(),Pe=M(),dh=wt(),m4="Error initializing environment manager",_h="BOOT_PROPS_FILE_PATH",sP=!1,S4={[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ji={};Object.assign(aP,cP.exports={BOOT_PROPS_FILE_PATH:_h,getHdbBasePath:T4,setHdbBasePath:g4,get:iP,initSync:R4,setProperty:Qe,initTestEnvironment:b4,setCloneVar:y4});function T4(){return ji[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(T4,"getHdbBasePath");function g4(e){ji[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(g4,"setHdbBasePath");function iP(e){let t=dh.getConfigValue(e);return t===void 0?ji[e]:t}a(iP,"get");function Qe(e,t){S4[e]&&(ji[e]=t),dh.updateConfigObject(e,t)}a(Qe,"setProperty");function A4(){let e;try{e=qd.getPropsFilePath(),wg.accessSync(e,wg.constants.F_OK|wg.constants.R_OK),sP=!0;let t=p4(e);return ji[Pe.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Pe.HDB_SETTINGS_NAMES.INSTALL_USER),ji[Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ji[_h]=e,!0}catch{return $d.trace(`Environment manager found no properties file at ${e}`),!1}}a(A4,"doesPropFileExist");function R4(e=!1){try{((sP||A4()||qd.noBootFile())&&!oP||e)&&(dh.initConfig(e),ji[Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=dh.getConfigValue(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){$d.error(m4),$d.error(t),console.error(t),process.exit(1)}}a(R4,"initSync");var oP=!1;function y4(e){oP=e}a(y4,"setCloneVar");function b4(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");ji[_h]=Za.join(l,"hdb_boot_properties.file"),Qe(Pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Za.join(l,"settings.test")),Qe(Pe.HDB_SETTINGS_NAMES.INSTALL_USER,nP.userInfo()?nP.userInfo().username:void 0),Qe(Pe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Qe(Pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Za.join(l,"envDir","log")),Qe(Pe.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Qe(Pe.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Qe(Pe.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Qe(Pe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Za.join(l,"envDir")),Qe(Pe.CONFIG_PARAMS.STORAGE_PATH,Za.join(l,"envDir")),s&&(Qe(Pe.CONFIG_PARAMS.HTTP_SECUREPORT,iP(Pe.CONFIG_PARAMS.HTTP_PORT)),Qe(Pe.CONFIG_PARAMS.HTTP_PORT,null)),Qe(Pe.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Qe(Pe.CONFIG_PARAMS.HTTP_PORT,9926),Qe(Pe.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Qe(Pe.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Qe(Pe.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,qd.isEmpty(i)?!1:i),Qe(Pe.CONFIG_PARAMS.HTTP_CORS,qd.isEmpty(i)?!1:i),Qe(Pe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Qe(Pe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Qe(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Qe(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Qe(Pe.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Za.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Qe(Pe.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,qd.isEmpty(c)?!1:c),o&&(Qe("CORS_ACCESSLIST",o),Qe(Pe.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Qe(Pe.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Qe(Pe.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Qe(Pe.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Qe(Pe.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Qe(Pe.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Qe(Pe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${_h}. Please check your boot props and settings files`;$d.fatal(r),$d.error(t)}}a(b4,"initTestEnvironment")});var gt=N((Vge,hP)=>{"use strict";var jd=M(),O4=te(),an=se(),zd=require("path"),N4=require("minimist"),lP=require("fs-extra"),uP=require("lodash");an.initSync();var{CONFIG_PARAMS:Vo,DATABASES_PARAM_CONFIG:Vd,SYSTEM_SCHEMA_NAME:fh}=jd,Kd,Yd,Wd;function dP(){if(Kd!==void 0)return Kd;if(an.getHdbBasePath()!==void 0)return Kd=an.get(Vo.STORAGE_PATH)||zd.join(an.getHdbBasePath(),jd.DATABASES_DIR_NAME),Kd}a(dP,"getBaseSchemaPath");function _P(){if(Yd!==void 0)return Yd;if(an.getHdbBasePath()!==void 0)return Yd=EP(fh),Yd}a(_P,"getSystemSchemaPath");function fP(){if(Wd!==void 0)return Wd;if(an.getHdbBasePath()!==void 0)return Wd=an.get(jd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||zd.join(an.getHdbBasePath(),jd.TRANSACTIONS_DIR_NAME),Wd}a(fP,"getTransactionAuditStoreBasePath");function I4(e,t){let r=an.get(Vo.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||zd.join(fP(),e.toString())}a(I4,"getTransactionAuditStorePath");function EP(e,t){e=e.toString(),t=t&&t.toString();let r=an.get(jd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||zd.join(dP(),e)}a(EP,"getSchemaPath");function w4(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,N4(process.argv));let n=r[Vo.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!O4.isObject(n))throw o;i=n}for(let o of i){let c=o[fh];if(!c)continue;let l=an.get(Vo.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Vd.PATH];if(u)return uP.set(l,[fh,Vd.TABLES,t,Vd.PATH],u),an.setProperty(Vo.DATABASES,l),u;let d=c?.[Vd.PATH];if(d)return uP.set(l,[fh,Vd.PATH],d),an.setProperty(Vo.DATABASES,l),d}}let s=r[Vo.STORAGE_PATH.toUpperCase()];if(s){if(!lP.pathExistsSync(s))throw new Error(s+" does not exist");let i=zd.join(s,e);return lP.mkdirsSync(i),an.setProperty(Vo.STORAGE_PATH,s),i}return _P()}a(w4,"initSystemSchemaPaths");function C4(){Kd=void 0,Yd=void 0,Wd=void 0}a(C4,"resetPaths");hP.exports={getBaseSchemaPath:dP,getSystemSchemaPath:_P,getTransactionAuditStorePath:I4,getTransactionAuditStoreBasePath:fP,getSchemaPath:EP,initSystemSchemaPaths:w4,resetPaths:C4}});var cn=N((jge,gP)=>{"use strict";var P4=Dn().LMDB_ERRORS_ENUM,Yge=require("lmdb"),D4=Ht(),Wge=require("buffer").Buffer,{OVERFLOW_MARKER:pP,MAX_SEARCH_KEY_LENGTH:Eh}=D4,mP=["number","string","symbol","boolean","bigint"];function L4(e){if(e=e?.primaryStore||e,!e)throw new Error(P4.ENV_REQUIRED)}a(L4,"validateEnv");function M4(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(M4,"stringifyData");function U4(e){return e instanceof Date?e.valueOf():e}a(U4,"convertKeyValueToWrite");function v4(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(mP.includes(typeof e))return e.length>Eh?[e.slice(0,Eh)+pP]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(mP.includes(typeof i))i.length>Eh?r.push(i.slice(0,Eh)+pP):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(v4,"getIndexedValues");var hh=0,SP=0;function TP(){SP=Date.now()-performance.now()}a(TP,"adjustStartTime");TP();var B4=6e4;setInterval(TP,B4).unref();function H4(){let e=performance.now()+SP;return e>hh?(hh=e,e):(hh+=488e-6,hh)}a(H4,"getNextMonotonicTime");gP.exports={validateEnv:L4,stringifyData:M4,convertKeyValueToWrite:U4,getNextMonotonicTime:H4,getIndexedValues:v4}});var Qd=N((Qge,AP)=>{"use strict";var x4=M().OPERATIONS_ENUM,Cg=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=x4.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};AP.exports=Cg});var Jd=N((Zge,OP)=>{"use strict";var Xge=Qd(),ph=M(),Pg=te(),RP=W(),k4=require("uuid"),{handleHDBError:mh,hdb_errors:F4}=_e(),{HDB_ERROR_MSGS:Sh,HTTP_STATUS_CODES:Th}=F4;OP.exports=yP;function yP(e,t,r){for(let s=0;s<t.length;s++)bP(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];G4(i,r,e.operation)}}a(yP,"processRows");yP.validateAttribute=bP;function bP(e){if(Buffer.byteLength(String(e))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mh(new Error,Sh.ATTR_NAME_LENGTH_ERR(e),Th.BAD_REQUEST,void 0,void 0,!0);if(Pg.isEmptyOrZeroLength(e)||Pg.isEmpty(e.trim()))throw mh(new Error,Sh.ATTR_NAME_NULLISH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(bP,"validateAttribute");function G4(e,t,r){if(!e.hasOwnProperty(t)||Pg.isEmptyOrZeroLength(e[t])){if(r===ph.OPERATIONS_ENUM.INSERT||r===ph.OPERATIONS_ENUM.UPSERT){e[t]=k4.v4();return}throw RP.error("Update transaction aborted due to record with no hash value:",e),mh(new Error,Sh.RECORD_MISSING_HASH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ph.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw RP.error(e),mh(new Error,Sh.HASH_VAL_LENGTH_ERR,Th.BAD_REQUEST,void 0,void 0,!0)}a(G4,"validateHash")});var NP,Un,Dg,Ll=Ie(()=>{NP=require("events"),Un=class extends NP.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Dg;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)}},Dg=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 Ug={};je(Ug,{loadGQLSchema:()=>V4,start:()=>Mg,startOnMainThread:()=>$4});function Mg({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):q4.includes(g.type)||(0,wP.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,Lg.dirname)(n),g.tableClass):i.set((0,Lg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new IP.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 Lg,IP,wP,q4,$4,V4,CP=Ie(()=>{Lg=require("path"),IP=require("node:vm");De();wP=L(dt()),q4=["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(Mg,"start");$4=Mg,V4=Mg({ensureTable:Et}).handleFile});var BP={};je(BP,{parse:()=>Bg,streamAsJSON:()=>Xd,stringify:()=>ec});function Xd(e){return new vg({value:e})}function PP(e){return console.error(e),JSON.stringify(e.toString())}function DP(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===UP)return vP(e);if(t.resolution)return t.resolution.then(()=>ec(e));throw t}}function vP(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+=vP(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 Bg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),W4.test(e)?K4.parse(e):JSON.parse(e)):null}var LP,MP,K4,Y4,UP,vg,W4,Hg=Ie(()=>{LP=require("stream"),MP=L(require("json-bigint-fixes")),K4=(0,MP.default)({useNativeBigInt:!0}),Y4=1e4,UP={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw UP};a(Xd,"streamAsJSON");vg=class extends LP.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),PP)}catch(s){yield PP(s)}else yield ec(t)}else yield ec(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);DP(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>Y4?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 DP(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(PP,"handleError");a(DP,"when");a(ec,"stringify");a(vP,"jsStringify");W4=/[[,:]\s*-?\d{16,}/;a(Bg,"parse")});var zP=N((aAe,jP)=>{"use strict";var xg=require("recursive-iterator"),j4=require("alasql"),kg=require("clone"),HP=te(),{handleHDBError:xP,hdb_errors:z4}=_e(),{HDB_ERROR_MSGS:kP,HTTP_STATUS_CODES:FP}=z4,{getDatabases:Q4}=(De(),oe(lt)),J4=["DISTINCT_ARRAY"],GP=Symbol("validateTables"),Fg=Symbol("validateTable"),oAe=Symbol("getAllColumns"),qP=Symbol("validateAllColumns"),gh=Symbol("findColumn"),$P=Symbol("validateOrderBy"),Zd=Symbol("validateSegment"),Gg=Symbol("validateColumn"),VP=Symbol("setColumnsForTable"),KP=Symbol("checkColumnsForAsterisk"),YP=Symbol("validateGroupBy"),WP=Symbol("hasColumns"),qg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[GP](),this[KP](),this[qP]()}[GP](){if(this[WP]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Fg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Fg](t.table)})}}[WP](){let t=!1,r=new xg(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Fg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Q4();if(!r[t.databaseid])throw xP(new Error,kP.SCHEMA_NOT_FOUND(t.databaseid),FP.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw xP(new Error,kP.TABLE_NOT_FOUND(t.databaseid,t.tableid),FP.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=kg(s);i.table=kg(t),this.attributes.push(i)})}[gh](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)}[KP](){let t=new xg(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[VP](r.tableid)}[VP](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new j4.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[qP](){this[Zd](this.statement.columns,!1),this[Zd](this.statement.joins,!1),this[Zd](this.statement.where,!1),this[YP](this.statement.group,!1),this[Zd](this.statement.order,!0)}[Zd](t,r){if(!t)return;let n=new xg(t),s=[];for(let{node:i,path:o}of n)!HP.isEmpty(i)&&!HP.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$P](i):s.push(this[Gg](i)));return s}[YP](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&J4.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=kg(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[gh](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[gh](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`}[$P](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[Gg](t)}[Gg](t){let r=this[gh](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]}};jP.exports=qg});var JP=N((lAe,QP)=>{"use strict";var $g=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")}};QP.exports=$g});var ZP=N((dAe,XP)=>{"use strict";var Vg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};XP.exports=Vg});var nD={};je(nD,{HAS_EXPIRATION:()=>yh,HAS_RESIDENCY_ID:()=>Xg,HAS_STRUCTURE_UPDATE:()=>bh,LAST_TIMESTAMP_PLACEHOLDER:()=>n_,LOCAL_TIMESTAMP:()=>X4,METADATA:()=>e_,NO_TIMESTAMP:()=>Yg,PENDING_LOCAL_TIME:()=>Zg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Jg,RecordEncoder:()=>Qg,TIMESTAMP_ASSIGN_LAST:()=>eJ,TIMESTAMP_ASSIGN_NEW:()=>tD,TIMESTAMP_ASSIGN_PREVIOUS:()=>rD,TIMESTAMP_PLACEHOLDER:()=>Ah,TIMESTAMP_RECORD_PREVIOUS:()=>Wg,getUpdateRecord:()=>eA,handleLocalTimeForGets:()=>Oh});function rJ(){return r_[0]=r_[0]^64,Z4.getFloat64(0)}function Oh(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?.[e_];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?.[e_]>=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[e_];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 eA(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Ml=i?.localTime?Wg|rD:Yg:Ml=l?i?.localTime?Wg|16384:tD|16384:Yg;let f=u?.expiresAt;if(f>=0&&(c|=yh),t_=c,jg=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&&(zg=S,t_|=Xg,m|=rc),g!==S&&(m|=nc,g||(g=0)),c&yh&&(m|=i_),u?.originatingOperation&&(m|=s_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(Rh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=bh,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,Rh,m,S,g,f),{ifVersion:T}),y}}r.put(n_,Ul(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Rh,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 eD,Kg,Ah,n_,Jg,X4,e_,r_,Z4,Yg,tD,eJ,rD,Wg,yh,Xg,Zg,bh,tJ,Rh,Ml,t_,jg,zg,Qg,tc,vl=Ie(()=>{eD=require("msgpackr");zi();Kg=L(W()),Ah=new Uint8Array([1,1,1,1,4,64,0,0]),n_=new Uint8Array([1,1,1,1,1,0,0,0]),Jg=new Uint8Array([1,1,1,1,3,64,0,0]),X4=Symbol("local-timestamp"),e_=Symbol("metadata"),r_=new Uint8Array(8),Z4=new DataView(r_.buffer,0,8),Yg=0,tD=0,eJ=1,rD=3,Wg=4,yh=16,Xg=32,Zg=1,bh=256,Ml=0,t_=-1,jg=-1,zg=0,Qg=class extends eD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Ml||t_>=0){let o=0,c=Ml;c&&(o+=8,Ml=0);let l=t_,u=jg,d=zg;l>=0&&(o+=2,t_=-1,u>=0&&(o+=8,jg=-1),d&&(o+=4,zg=0));let _=tJ=r.call(this,s,i|2048|o);Rh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(Ah[4]=c,Ah[5]=c>>8,_.set(Ah,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(r_,0,c),c+=8;else for(let E=0;E<8;E++)r_[E]=t[c++];l=rJ(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&yh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Xg&&(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:_,[e_]: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(rJ,"getTimestamp");a(Oh,"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?(Kg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Kg.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(eA,"getUpdateRecord")});var o_=N((pAe,iD)=>{"use strict";var sD=se(),nJ=M(),{RecordEncoder:sJ}=(vl(),oe(nD)),hAe=require("fs");sD.initSync();var iJ=sD.get(nJ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,tA=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=iJ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:sJ})}};iD.exports=tA});var a_=N((SAe,oD)=>{"use strict";var vn=se(),cs=M();vn.initSync();var Nh=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=vn.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||vn.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||vn.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",vn.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=vn.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=vn.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),vn.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=vn.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=vn.get(cs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};oD.exports=Nh;Nh.MAX_DBS=1e4});var ht=N((gAe,pD)=>{"use strict";var nA=require("lmdb"),Fs=require("fs-extra"),Bn=require("path"),Ih=cn(),lD=W(),ln=Dn().LMDB_ERRORS_ENUM,wh=ZP(),sA=o_(),uD=a_(),Ko=Ht(),aD=M(),{table:oJ,resetDatabases:aJ}=(De(),oe(lt)),cD=se(),Gs=Ko.INTERNAL_DBIS_NAME,dD=Ko.DBI_DEFINITION_NAME,cJ="data.mdb",lJ="lock.mdb",c_=".mdb",uJ="-lock",rA=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Ko.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ko.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new nA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ch(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(Ch,"pathEnvNameValidation");async function iA(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=Bn.join(e,t+c_);return await Fs.access(n,Fs.constants.R_OK|Fs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Fs.access(Bn.join(e,t,cJ),Fs.constants.R_OK|Fs.constants.F_OK),Bn.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(iA,"validateEnvironmentPath");function Ph(e,t){if(Ih.validateEnv(e),t===void 0)throw new Error(ln.DBI_NAME_REQUIRED)}a(Ph,"validateEnvDBIName");async function dJ(e,t,r=!1,n=!1){Ch(e,t);let s=Bn.basename(e);t=t.toString();let i=cD.get(aD.CONFIG_PARAMS.DATABASES);i||cD.setProperty(aD.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await iA(e,t,n),_D(e,t,r)}catch(o){if(o.message===ln.INVALID_ENVIRONMENT){let c=Bn.join(e,t);await Fs.mkdirp(n?c:e);let l=new uD(n?c:c+c_,!1),u=nA.open(l);u.dbis=Object.create(null);let d=new sA(!1);u.openDB(Gs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=oA(e,t,r);return u[Ko.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(dJ,"createEnvironment");async function _J(e,t,r,n=!0){Ch(e,t),t=t.toString();let s=Bn.join(e,t);return oJ({table:t,database:Bn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(_J,"copyEnvironment");async function _D(e,t,r=!1){Ch(e,t),t=t.toString();let n=oA(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 iA(e,t),i=Bn.join(e,t+c_),o=s!=i,c=new uD(s,o),l=nA.open(c);l.dbis=Object.create(null);let u=ED(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Ko.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(_D,"openEnvironment");async function fJ(e,t,r=!1){Ch(e,t),t=t.toString();let n=Bn.join(e,t+c_),s=await iA(e,t);if(global.lmdb_map!==void 0){let i=oA(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await fD(o),delete global.lmdb_map[i]}}await Fs.remove(s),await Fs.remove(s===n?s+uJ:Bn.join(Bn.dirname(s),lJ))}a(fJ,"deleteEnvironment");async function fD(e){Ih.validateEnv(e);let t=e[Ko.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(fD,"closeEnvironment");function oA(e,t,r=!1){let s=`${Bn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(oA,"getCachedEnvironmentName");function EJ(e){Ih.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 wh,s)}catch{lD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(EJ,"listDBIDefinitions");function ED(e){Ih.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(ED,"listDBIs");function hJ(e,t){let n=ls(e,Gs).getEntry(t),s=new wh;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{lD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(hJ,"getDBIDefinition");function hD(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 sA(r,n===!0),o=e.openDB(t,i),c=new wh(r===!0,n);return o[dD]=c,ls(e,Gs).putSync(t,c),e.dbis[t]=o,o}throw s}}a(hD,"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=hJ(e,t):r=new wh,r===void 0)throw new Error(ln.DBI_DOES_NOT_EXIST);let n;try{let s=new sA(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[dD]=r,e.dbis[t]=n,n}a(ls,"openDBI");function pJ(e,t){Ph(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Ko.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(pJ,"statDBI");async function mJ(e,t){try{let r=Bn.join(e,t+c_);return(await Fs.stat(r)).size}catch{throw new Error(ln.INVALID_ENVIRONMENT)}}a(mJ,"environmentDataSize");function SJ(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(SJ,"dropDBI");function TJ(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)hD(e,i,i!==t,i===t),n=!0;else throw o}}n&&aJ()}a(TJ,"initializeDBIs");pD.exports={openDBI:ls,openEnvironment:_D,createEnvironment:dJ,listDBIs:ED,listDBIDefinitions:EJ,createDBI:hD,dropDBI:SJ,statDBI:pJ,deleteEnvironment:fJ,initializeDBIs:TJ,TransactionCursor:rA,environmentDataSize:mJ,copyEnvironment:_J,closeEnvironment:fD}});var SD=N((RAe,mD)=>{"use strict";var aA=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};mD.exports=aA});var gD=N((bAe,TD)=>{"use strict";var cA=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}};TD.exports=cA});var RD=N((NAe,AD)=>{"use strict";var lA=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};AD.exports=lA});var ic=N((DAe,OD)=>{"use strict";var gJ=ht(),AJ=SD(),RJ=gD(),yJ=RD(),mi=cn(),l_=Dn().LMDB_ERRORS_ENUM,bJ=Ht(),Qi=M(),OJ=te(),NJ=require("uuid"),wAe=require("lmdb"),{handleHDBError:IJ,hdb_errors:wJ}=_e(),{OVERFLOW_MARKER:CAe,MAX_SEARCH_KEY_LENGTH:PAe}=bJ,yD=se();yD.initSync();var Dh=yD.get(Qi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uA=Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,sc=Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function CJ(e,t,r,n,s=mi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new AJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];bD(u,!0,s);let d=PJ(e,t,r,u),_=u[t];o.push(d),c.push(_)}return _A(o,c,n,i,s)}a(CJ,"insertRecords");function PJ(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][Qi.FUNC_VAL],n[o]=c)}let l=mi.getIndexedValues(c),u=e.dbis[o];if(l){Dh&&u.prefetch(l.map(d=>({key:d,value:s})),Lh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}Dh&&e.dbis[t].prefetch([s],Lh),e.dbis[t].put(s,n,n[sc])})}a(PJ,"insertRecord");function DJ(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(DJ,"removeSkippedRecords");function bD(e,t,r){let n=r>0;(n||!Number.isInteger(e[sc]))&&(e[sc]=r||(r=mi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[uA]))&&(e[uA]=r||mi.getNextMonotonicTime()):delete e[uA]}a(bD,"setTimestamps");function dA(e,t,r){r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gJ.initializeDBIs(e,t,r)}a(dA,"initializeTransaction");async function LJ(e,t,r,n,s=mi.getNextMonotonicTime()){EA(e,t,r,n),dA(e,t,r);let i=new RJ,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=fA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return _A(c,l,n,i,s,o)}a(LJ,"updateRecords");async function MJ(e,t,r,n,s=mi.getNextMonotonicTime()){try{EA(e,t,r,n)}catch(l){throw IJ(l,l.message,wJ.HTTP_STATUS_CODES.BAD_REQUEST)}dA(e,t,r);let i=new yJ,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;OJ.isEmpty(u[t])?(d=NJ.v4(),u[t]=d):d=u[t];let _=fA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return _A(o,c,n,i,s)}a(MJ,"upsertRecords");async function _A(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||mi.getNextMonotonicTime(),DJ(r,i),n}a(_A,"finalizeWrite");function fA(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(bD(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][Qi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=mi.getIndexedValues(g);if(S){Dh&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=mi.getIndexedValues(T),S){Dh&&m.prefetch(S.map(y=>({key:y,value:n})),Lh);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:fA(e,t,r,n,s,i,o))}a(fA,"updateUpsertRecord");function UJ(e,t,r){if(mi.validateEnv(e),t===void 0)throw new Error(l_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(l_.WRITE_ATTRIBUTES_REQUIRED):new Error(l_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(UJ,"validateBasic");function EA(e,t,r,n){if(UJ(e,t,r),!Array.isArray(n))throw n===void 0?new Error(l_.RECORDS_REQUIRED):new Error(l_.RECORDS_MUST_BE_ARRAY)}a(EA,"validateWrite");function Lh(){}a(Lh,"noop");OD.exports={insertRecords:CJ,updateRecords:LJ,upsertRecords:MJ}});var Ji=N((MAe,vJ)=>{vJ.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 Ti=N((UAe,wD)=>{"use strict";var ID=te(),ND=M(),Bl=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Si=require("joi"),Yo={schema_format:{pattern:Bl,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number(),Si.array()).required(),HJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()),xJ=Si.alternatives(Si.string().min(1).max(Yo.schema_length.maximum).pattern(Bl).messages({"string.pattern.base":"{:#label} "+Yo.schema_format.message}),Si.number()).required();function kJ(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Yo.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(kJ,"checkValidTable");function FJ(e,t){return ID.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(FJ,"validateSchemaExists");function GJ(e,t){let r=t.state.ancestors[0].schema;return ID.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(GJ,"validateTableExists");function qJ(e,t){return e.toLowerCase()===ND.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${ND.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(qJ,"validateSchemaName");wD.exports={common_validators:Yo,schema_regex:Bl,hdb_schema_table:BJ,validateSchemaExists:FJ,validateTableExists:GJ,validateSchemaName:qJ,checkValidTable:kJ,hdb_database:HJ,hdb_table:xJ}});var Mh=N((BAe,CD)=>{var{common_validators:gi}=Ti(),d_=Tt(),u_="is required",rr={database:{presence:!1,format:gi.schema_format,length:gi.schema_length},schema:{presence:!1,format:gi.schema_format,length:gi.schema_length},table:{presence:!0,format:gi.schema_format,length:gi.schema_length},attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length},hash_attribute:{presence:!0,format:gi.schema_format,length:gi.schema_length}};function __(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(__,"makeAttributesStrings");function $J(e){return e=__(e),rr.table.presence=!1,rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a($J,"schema_object");function VJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(VJ,"table_object");function KJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,d_.validateObject(e,rr)}a(KJ,"create_table_object");function YJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence={message:u_},rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(YJ,"attribute_object");function WJ(e){return e=__(e),rr.table.presence={message:u_},rr.attribute.presence=!1,rr.hash_attribute.presence=!1,d_.validateObject(e,rr)}a(WJ,"describe_table");function jJ(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(jJ,"validateTableResidence");CD.exports={schema_object:$J,create_table_object:KJ,table_object:VJ,attribute_object:YJ,describe_table:WJ,validateTableResidence:jJ}});var DD=N((xAe,PD)=>{"use strict";var zJ=require("uuid"),hA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||zJ.v4(),this.schema_table=`${this.schema}.${this.table}`}};PD.exports=hA});var Uh=N((FAe,LD)=>{"use strict";var QJ=DD(),pA=class extends QJ{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}};LD.exports=pA});var UD=N((qAe,MD)=>{"use strict";MD.exports=XJ;var JJ="inserted";function XJ(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===JJ?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(XJ,"returnObject")});var vh=N((KAe,xD)=>{"use strict";var ZJ=M(),mA=ht(),e3=ic(),{getSystemSchemaPath:t3,getSchemaPath:r3}=gt(),VAe=Ji(),n3=Mh(),s3=Uh(),i3=UD(),{handleHDBError:vD,hdb_errors:HD}=_e(),BD=te(),{HTTP_STATUS_CODES:o3}=HD,a3="inserted";xD.exports=c3;async function c3(e){let t=n3.attribute_object(e);if(t)throw vD(new Error,t.message,HD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&BD.checkGlobalSchemaTable(e.schema,e.table);if(r)throw vD(new Error,r,o3.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=BD.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 s3(e.schema,e.table,e.attribute,e.id);try{let i=await mA.openEnvironment(r3(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}`);mA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await mA.openEnvironment(t3(),ZJ.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await e3.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return i3(a3,c,{records:[s]},l)}catch(i){throw i}}a(c3,"lmdbCreateAttribute")});var TA=N((WAe,FD)=>{var{hdb_table:l3,hdb_database:kD}=Ti(),u3=Tt(),SA=require("joi"),d3={undefined:"undefined",null:"null"},_3=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||d3[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"),f3=SA.object({database:kD,schema:kD,table:l3,records:SA.array().items(SA.object().custom(_3)).required()});FD.exports=function(e){return u3.validateBySchema(e,f3)}});var f_=N((QAe,qD)=>{"use strict";var Xi=te(),GD=W(),zAe=TA(),{getDatabases:E3}=(De(),oe(lt)),{ClientError:oc}=_e();qD.exports=h3;function h3(e){if(Xi.isEmpty(e))throw new oc("invalid update parameters defined.");if(Xi.isEmptyOrZeroLength(e.schema))throw new oc("invalid schema specified.");if(Xi.isEmptyOrZeroLength(e.table))throw new oc("invalid table specified.");if(!Array.isArray(e.records))throw new oc("records must be an array");let t=E3()[e.schema]?.[e.table];if(Xi.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&&Xi.isEmptyOrZeroLength(o[r]))throw GD.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(!Xi.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw GD.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`);!Xi.isEmpty(o[r])&&o[r]!==""&&n.has(Xi.autoCast(o[r]))&&(o.skip=!0),n.add(Xi.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(h3,"insertUpdateValidate")});var VD=N((XAe,$D)=>{"use strict";var gA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};$D.exports=gA});var WD=N((eRe,YD)=>{"use strict";var AA=ht(),p3=W(),KD=Dn().LMDB_ERRORS_ENUM;YD.exports=m3;async function m3(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 AA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==KD.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await AA.closeEnvironment(global.lmdb_map[n]),await AA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==KD.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){p3.error(t)}}a(m3,"cleanLMDBMap")});var Zi=N((rRe,JD)=>{"use strict";var E_=require("crypto"),S3=se(),{CONFIG_PARAMS:T3}=M(),zD="aes-256-cbc",g3=32,A3=16,RA=64,QD=32,R3=RA+QD,jD=new Map;JD.exports={encrypt:y3,decrypt:b3,createNatsTableStreamName:O3};function y3(e){let t=E_.randomBytes(g3),r=E_.randomBytes(A3),n=E_.createCipheriv(zD,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(y3,"encrypt");function b3(e){let t=e.substr(0,RA),r=e.substr(RA,QD),n=e.substr(R3,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=E_.createDecipheriv(zD,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(b3,"decrypt");function O3(e,t){let r=S3.get(T3.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=jD.get(r);return n||(n=E_.createHash("md5").update(r).digest("hex"),jD.set(r,n)),n}a(O3,"createNatsTableStreamName")});var eo=N((iRe,eL)=>{"use strict";var sRe=Vr(),h_=W(),XD=Mh(),N3=Zi(),Bh=te(),{handleHDBError:Hh,hdb_errors:I3}=_e(),{HDB_ERROR_MSGS:xh,HTTP_STATUS_CODES:yA}=I3,ZD=se();ZD.initSync();var{getDatabases:bA}=(De(),oe(lt)),w3=require("fs-extra"),C3=M();eL.exports={describeAll:P3,describeTable:kh,describeSchema:D3};async function P3(e={}){try{let t=Bh.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=bA(),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 kh({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await kh({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){h_.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 h_.error("Got an error in describeAll"),h_.error(t),Hh(new Error,xh.DESCRIBE_ALL_ERR)}}a(P3,"describeAll");async function kh(e,t){Bh.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=XD.describe_table(e);if(i)throw i;let c=bA()[r];if(!c)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let l=c[n];if(!l)throw Hh(new Error,xh.TABLE_NOT_FOUND(e.schema,e.table),yA.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 w3.stat(l.primaryStore.env.path)).size}catch(f){h_.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")),ZD.get(C3.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=N3.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){h_.warn(`unable to stat table dbi due to ${f}`)}return E}a(kh,"descTable");async function D3(e){Bh.transformReq(e);let t=XD.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=bA()[n];if(!i)throw Hh(new Error,xh.SCHEMA_NOT_FOUND(e.schema),yA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Bh.isEmpty(l)||l.describe){let u=await kh({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(D3,"describeSchema")});var us=N((lRe,iL)=>{var L3=Ji(),{callbackify:rL,promisify:M3}=require("util"),{getDatabases:nL}=(De(),oe(lt));iL.exports={setSchemaDataToGlobal:tL,getTableSchema:U3,getSystemSchema:v3,setSchemaDataToGlobalAsync:M3(tL)};var sL=eo(),aRe=rL(sL.describeAll),cRe=rL(sL.describeTable);function tL(e){global.hdb_schema=nL(),e&&e()}a(tL,"setSchemaDataToGlobal");function U3(e,t,r){let n=nL()[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(U3,"getTableSchema");function v3(){return L3}a(v3,"getSystemSchema")});var un=N((dRe,lL)=>{"use strict";var Gh=TA(),Cr=te(),B3=require("util"),qh=Hn(),H3=us(),oL=W(),{handleHDBError:ac,hdb_errors:x3}=_e(),{HTTP_STATUS_CODES:cc}=x3,k3=B3.promisify(H3.getTableSchema),F3="updated",aL="inserted",cL="upserted";lL.exports={insert:q3,update:$3,upsert:V3,validation:G3,flush:K3};async function G3(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 k3(e.schema,e.table),r=Gh(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 oL.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 oL.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(G3,"validation");async function q3(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gh(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 qh.createRecords(e);return Fh(aL,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(q3,"insertData");async function $3(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gh(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 qh.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Fh(F3,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Fh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a($3,"updateData");async function V3(e){if(e.operation!=="upsert")throw ac(new Error,"invalid operation, must be upsert",cc.INTERNAL_SERVER_ERROR);let t=Gh(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 qh.upsertRecords(e);return Fh(cL,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(V3,"upsertData");function Fh(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===aL?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===cL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Fh,"returnObject");function K3(e){return Cr.transformReq(e),qh.flush(e.schema,e.table)}a(K3,"flush")});var NA=N((fRe,_L)=>{var Y3=Tt(),OA=require("joi"),{hdb_table:W3,hdb_database:uL}=Ti(),dL={schema:uL,database:uL,table:W3},j3={date:OA.date().iso().required()},z3={timestamp:OA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};_L.exports=function(e,t){let r=t==="timestamp"?{...dL,...z3}:{...dL,...j3},n=OA.object(r);return Y3.validateBySchema(e,n)}});var hL=N((ERe,EL)=>{var Q3=Tt(),IA=require("joi"),{hdb_table:J3,hdb_database:fL}=Ti(),X3=IA.object({schema:fL,database:fL,table:J3,hash_values:IA.array().required(),ids:IA.array()});EL.exports=function(e){return Q3.validateBySchema(e,X3)}});var DA=N((hRe,pL)=>{"use strict";var wA=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}},CA=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}},PA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};pL.exports={InsertObject:wA,NoSQLSeachObject:CA,DeleteResponseObject:PA}});var dc=N((mRe,AL)=>{"use strict";var SL=NA(),Z3=hL(),lc=te(),mL=require("moment"),TL=W(),{promisify:eX,callbackify:tX}=require("util"),uc=M(),rX=us(),LA=eX(rX.getTableSchema),MA=Hn(),{DeleteResponseObject:nX}=DA(),{handleHDBError:Wo,hdb_errors:sX}=_e(),{HDB_ERROR_MSGS:$h,HTTP_STATUS_CODES:jo}=sX,iX="records successfully deleted",oX=tX(gL);AL.exports={delete:oX,deleteRecord:gL,deleteFilesBefore:aX,deleteAuditLogsBefore:cX};async function aX(e){let t=SL(e,"date");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),!mL(e.date,mL.ISO_8601).isValid())throw Wo(new Error,$h.INVALID_DATE,jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_DATE,!0);let n=lc.checkSchemaTableExist(e.schema,e.table);if(n)throw Wo(new Error,n,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,n,!0);let s=await MA.deleteRecordsBefore(e);if(await LA(e.schema,e.table),TL.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(aX,"deleteFilesBefore");async function cX(e){let t=SL(e,"timestamp");if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(lc.transformReq(e),isNaN(e.timestamp))throw Wo(new Error,$h.INVALID_VALUE("Timestamp"),jo.BAD_REQUEST,uc.LOG_LEVELS.ERROR,$h.INVALID_VALUE("Timestamp"),!0);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);let n=await MA.deleteAuditLogsBefore(e);return await LA(e.schema,e.table),TL.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(cX,"deleteAuditLogsBefore");async function gL(e){e.ids&&(e.hash_values=e.ids);let t=Z3(e);if(t)throw Wo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);lc.transformReq(e);let r=lc.checkSchemaTableExist(e.schema,e.table);if(r)throw Wo(new Error,r,jo.NOT_FOUND,uc.LOG_LEVELS.ERROR,r,!0);try{await LA(e.schema,e.table);let n=await MA.deleteRecords(e);return lc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${iX}`),n}catch(n){if(n.message===uc.SEARCH_NOT_FOUND_MESSAGE){let s=new nX;return s.message=uc.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(gL,"deleteRecord")});var Vh=N((TRe,bL)=>{var lX=require("crypto"),RL=9;function uX(e){let t=_X(RL),r=yL(e+t);return t+r}a(uX,"createHash");function dX(e,t){let r=e?.substr(0,RL),n=r+yL(t+r);return e===n}a(dX,"validateHash");function _X(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(_X,"generateSalt");function yL(e){return lX.createHash("md5").update(e).digest("hex")}a(yL,"md5");bL.exports={hash:uX,validate:dX}});var NL=N((ARe,OL)=>{var UA=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 fX(e){return Kr.password.presence=!0,Kr.username.presence=!0,Kr.role.presence=!0,Kr.active.presence=!0,UA.validateObject(e,Kr)}a(fX,"addUserValidation");function EX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(EX,"alterUserValidation");function hX(e){return Kr.password.presence=!1,Kr.username.presence=!0,Kr.role.presence=!1,Kr.active.presence=!1,UA.validateObject(e,Kr)}a(hX,"dropUserValidation");OL.exports={addUserValidation:fX,alterUserValidation:EX,dropUserValidation:hX}});var Ct=N((bRe,wL)=>{"use strict";var{platform:yRe}=require("os"),pX="nats-server.zip",vA="nats-server",mX=process.platform==="win32"?`${vA}.exe`:vA,SX=/^[^\s.,*>]+$/,IL="__request__",TX=a(e=>`${e}.${IL}`,"REQUEST_SUBJECT"),gX={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},AX={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},RX={HUB:"hub.pid",LEAF:"leaf.pid"},yX={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},bX={SUCCESS:"success",ERROR:"error"},OX={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},NX={TXN:"txn",MSGID:"msgid"},Hl={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},IX={[Hl.ERR]:1,[Hl.WRN]:2,[Hl.INF]:3,[Hl.DBG]:4,[Hl.TRC]:5},wX={debug:"-D",trace:"-DVV"};wL.exports={NATS_SERVER_ZIP:pX,NATS_SERVER_NAME:vA,NATS_BINARY_NAME:mX,PID_FILES:RX,NATS_CONFIG_FILES:AX,SERVER_SUFFIX:yX,NATS_TERM_CONSTRAINTS_RX:SX,REQUEST_SUFFIX:IL,UPDATE_REMOTE_RESPONSE_STATUSES:bX,CLUSTER_STATUS_STATUSES:OX,REQUEST_SUBJECT:TX,SUBJECT_PREFIXES:NX,MSG_HEADERS:gX,LOG_LEVELS:Hl,LOG_LEVEL_FLAGS:wX,LOG_LEVEL_HIERARCHY:IX}});var PL=N((NRe,CL)=>{"use strict";var Kh=M(),Yh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},BA=class extends Yh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Kh.RAM_ALLOCATION_ENUM.DEFAULT,n=Kh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};CL.exports={BaseLicense:Yh,ExtendedLicense:BA}});var _c=N((wRe,HL)=>{"use strict";var kl=require("fs-extra"),LL=Vh(),ML=require("crypto"),CX=require("moment"),PX=require("uuid").v4,Yr=W(),xA=require("path"),DX=te(),zo=M(),{totalmem:DL}=require("os"),LX=PL().ExtendedLicense,xl="invalid license key format",MX="061183",UX="mofi25",vX="aes-256-cbc",BX=16,HX=32,UL=se(),{resolvePath:vL}=wt();UL.initSync();var HA;HL.exports={validateLicense:BL,generateFingerPrint:kX,licenseSearch:GA,getLicense:qX,checkMemoryLimit:$X};function kA(){return xA.join(UL.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(kA,"getLicenseDirPath");function xX(){let e=kA();return vL(xA.join(e,zo.LICENSE_FILE_NAME))}a(xX,"getLicenseFilePath");function FA(){let e=kA();return vL(xA.join(e,zo.REG_KEY_FILE_NAME))}a(FA,"getFingerPrintFilePath");async function kX(){let e=FA();try{return await kl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await FX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(kX,"generateFingerPrint");async function FX(){let e=PX(),t=LL.hash(e),r=FA();try{await kl.mkdirp(kA()),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(FX,"writeFingerprint");function BL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=FA(),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(UX),c=o[1];c=Buffer.concat([Buffer.from(c)],BX);let l=Buffer.concat([Buffer.from(i)],HX),u=ML.createDecipheriv(vX,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=GX(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<CX().valueOf()&&(r.valid_date=!1),LL.validate(o[1],`${MX}${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(BL,"validateLicense");function GX(e,t){try{let r=ML.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(GX,"checkOldLicense");function GA(){let e=new LX,t=[];try{t=kl.readFileSync(xX(),"utf-8").split(zo.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(DX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=BL(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=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return HA=e,e}a(GA,"licenseSearch");async function qX(){return HA||await GA(),HA}a(qX,"getLicense");function $X(){let e=GA().ram_allocation,t=process.constrainedMemory?.()||DL();if(t=Math.round(Math.min(t,DL())/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($X,"checkMemoryLimit")});var dn=N((MRe,ZL)=>{"use strict";var GL="username is required",qL="nothing to update, must supply active, role or password to update",$L="password cannot be an empty string",VL="If role is specified, it cannot be empty.",KL="active must be true or false";ZL.exports={addUser:XX,alterUser:ZX,dropUser:tZ,getSuperUser:iZ,userInfo:rZ,listUsers:jh,listUsersExternal:nZ,setUsersToGlobal:Gl,findAndValidateUser:JL,getClusterUser:oZ,USERNAME_REQUIRED:GL,ALTERUSER_NOTHING_TO_UPDATE:qL,EMPTY_PASSWORD:$L,EMPTY_ROLE:VL,ACTIVE_BOOLEAN:KL};var YL=un(),VX=dc(),VA=Vh(),WL=NL(),jL=Vr(),KA=to(),xn=te(),zL=require("validate.js"),Ke=W(),{promisify:KX}=require("util"),YA=Zi(),xL=M(),kL=Ct(),YX=wt(),PRe=se(),DRe=_c(),WX=Ji(),{table:LRe}=(De(),oe(lt)),{handleHDBError:Ai,hdb_errors:jX}=_e(),{HTTP_STATUS_CODES:Ri,AUTHENTICATION_ERROR_MSGS:qA,HDB_ERROR_MSGS:Fl}=jX,{UserEventMsg:WA}=qs(),$A=require("lodash"),{server:jA}=(qr(),oe(Ja)),zX=W();jA.getUser=(e,t)=>JL(e,t,t!=null);var QL={username:!0,active:!0,role:!0,password:!0},FL=new Map,Wh=jL.searchByValue,QX=jL.searchByHash,JX=KX(VX.delete);async function XX(e){let t=zL.cleanAttributes(e,QL),r=WL.addUserValidation(t);if(r)throw Ai(new Error,r.message,Ri.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 Wh(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 Ai(new Error,Fl.ROLE_NAME_NOT_FOUND(t.role),Ri.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw Ai(new Error,Fl.DUP_ROLES_FOUND(t.role),Ri.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await YL.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 Ai(new Error,Fl.USER_ALREADY_EXISTS(t.username),Ri.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],KA.signalUserChange(new WA(process.pid)),`${c.username} successfully added`}a(XX,"addUser");async function ZX(e){let t=zL.cleanAttributes(e,QL);if(xn.isEmptyOrZeroLength(t.username))throw new Error(GL);if(xn.isEmptyOrZeroLength(t.password)&&xn.isEmptyOrZeroLength(t.role)&&xn.isEmptyOrZeroLength(t.active))throw new Error(qL);if(!xn.isEmpty(t.password)&&xn.isEmptyOrZeroLength(t.password.trim()))throw new Error($L);if(!xn.isEmpty(t.active)&&!xn.isBoolean(t.active))throw new Error(KL);let r=eZ(t.username);if(!xn.isEmpty(t.password)&&!xn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=YA.encrypt(t.password)),t.password=VA.hash(t.password)),t.role==="")throw new Error(VL);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 Wh(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),Ai(new Error,c,Ri.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),Ai(new Error,c,Ri.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 YL.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 KA.signalUserChange(new WA(process.pid)),s}a(ZX,"alterUser");function eZ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eZ,"isClusterUser");async function tZ(e){try{let t=WL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(xn.isEmpty(global.hdb_users.get(e.username)))throw Ai(new Error,Fl.USER_NOT_EXIST(e.username),Ri.NOT_FOUND,void 0,void 0,!0);let n;try{n=await JX(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 KA.signalUserChange(new WA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tZ,"dropUser");async function rZ(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=$A.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await QX(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(rZ,"userInfo");async function nZ(){let e;try{e=await jh()}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(nZ,"listUsersExternal");async function jh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Wh(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]=$A.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 Wh(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=$A.cloneDeep(o),o.role=r[o.role],sZ(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),xn.errorizeMessage(e)}return null}a(jh,"listUsers");function sZ(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(WX)){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(sZ,"appendSystemTablesToRole");async function Gl(){try{let e=await jh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Gl,"setUsersToGlobal");async function JL(e,t,r=!0){global.hdb_users||await Gl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw Ai(new Error,qA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw Ai(new Error,qA.USER_INACTIVE,Ri.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(FL.get(t)===n.password)return s;if(VA.validate(n.password,t))FL.set(t,n.password);else throw Ai(new Error,qA.GENERIC_AUTH_FAIL,Ri.UNAUTHORIZED,void 0,void 0,!0)}return s}a(JL,"findAndValidateUser");async function iZ(){global.hdb_users||await Gl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(iZ,"getSuperUser");async function oZ(){let e=await jh(),t=YX.getConfigFromFile(xL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!xn.isEmpty(r)&&r?.role?.role===xL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=YA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+kL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+kL.SERVER_SUFFIX.ADMIN,r}a(oZ,"getClusterUser");var XL=[];jA.invalidateUser=function(e){for(let t of XL)try{t(e)}catch(r){zX.error("Error invalidating user",r)}};jA.onInvalidatedUser=function(e){XL.push(e)}});var m_=N((HRe,nM)=>{"use strict";var fc=W(),kn=M(),aZ=WD(),vRe=us(),BRe=eo(),cZ=dn(),{validateEvent:eM}=qs(),p_=Hn(),lZ=require("process"),{resetDatabases:uZ}=(De(),oe(lt)),dZ={[kn.ITC_EVENT_TYPES.SCHEMA]:_Z,[kn.ITC_EVENT_TYPES.USER]:rM};async function _Z(e){let t=eM(e);if(t){fc.error(t);return}fc.trace("ITC schemaHandler received schema event:",e),await aZ(e.message),await fZ(e.message)}a(_Z,"schemaHandler");async function fZ(e){try{p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=uZ();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fc.error(t)}}a(fZ,"syncSchemaMetadata");var tM=[];async function rM(e){try{try{p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),p_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fc.warn(r)}let t=eM(e);if(t){fc.error(t);return}fc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${lZ.pid} received user event:`,e),await cZ.setUsersToGlobal();for(let r of tM)r()}catch(t){fc.error(t)}}a(rM,"userHandler");rM.addListener=function(e){tM.push(e)};nM.exports=dZ});var qs=N(($Re,iM)=>{"use strict";var kRe=W(),zA=te(),EZ=M(),{ITC_ERRORS:S_}=Dn(),{parentPort:FRe,threadId:hZ,isMainThread:pZ,workerData:GRe}=require("worker_threads"),{onMessageFromWorkers:mZ,broadcast:qRe,broadcastWithAcknowledgement:SZ}=dt();iM.exports={sendItcEvent:TZ,validateEvent:sM,SchemaEventMsg:gZ,UserEventMsg:AZ};var zh;mZ(async(e,t)=>{zh=zh||m_(),sM(e),zh[e.type]&&await zh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function TZ(e){return!pZ&&e.message&&(e.message.originator=hZ),SZ(e)}a(TZ,"sendItcEvent");function sM(e){if(typeof e!="object")return S_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||zA.isEmpty(e.type))return S_.MISSING_TYPE;if(!e.hasOwnProperty("message")||zA.isEmpty(e.message))return S_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||zA.isEmpty(e.message.originator))return S_.MISSING_ORIGIN;if(EZ.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return S_.INVALID_EVENT(e.type)}a(sM,"validateEvent");function gZ(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(gZ,"SchemaEventMsg");function AZ(e){this.originator=e}a(AZ,"UserEventMsg")});var to=N((YRe,lM)=>{"use strict";var oM=M(),KRe=te(),Qh=W(),aM=VD(),ql,{sendItcEvent:cM}=qs();function RZ(e){try{Qh.info("signalSchemaChange called with message:",e),ql=ql||m_();let t=new aM(oM.ITC_EVENT_TYPES.SCHEMA,e);return ql.schema(t),cM(t)}catch(t){Qh.error(t)}}a(RZ,"signalSchemaChange");function yZ(e){try{Qh.trace("signalUserChange called with message:",e),ql=ql||m_();let t=new aM(oM.ITC_EVENT_TYPES.USER,e);return ql.user(t),cM(t)}catch(t){Qh.error(t)}}a(yZ,"signalUserChange");lM.exports={signalSchemaChange:RZ,signalUserChange:yZ}});var Jh=N((jRe,dM)=>{"use strict";var uM=te(),bZ=M(),OZ=W(),NZ=vh(),IZ=Uh(),wZ=to(),{SchemaEventMsg:CZ}=qs(),PZ="already exists in";dM.exports=DZ;async function DZ(e,t,r){if(uM.isEmptyOrZeroLength(r))return r;let n=[];uM.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 LZ(e,t.schema,t.name,i)})),s}a(DZ,"lmdbCheckForNewAttributes");async function LZ(e,t,r,n){let s=new IZ(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await MZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(PZ))OZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(LZ,"createNewAttribute");async function MZ(e){let t;return t=await NZ(e),wZ.signalSchemaChange(new CZ(process.pid,bZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(MZ,"createAttribute")});var $l=N((QRe,_M)=>{"use strict";var QA=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}};_M.exports=QA});var EM=N((XRe,fM)=>{"use strict";var UZ=$l(),vZ=M().OPERATIONS_ENUM,JA=class extends UZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(vZ.INSERT,r,n,s,i),this.records=t}};fM.exports=JA});var pM=N((eye,hM)=>{"use strict";var BZ=$l(),HZ=M().OPERATIONS_ENUM,XA=class extends BZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(HZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};hM.exports=XA});var SM=N((rye,mM)=>{"use strict";var xZ=$l(),kZ=M().OPERATIONS_ENUM,ZA=class extends xZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(kZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};mM.exports=ZA});var gM=N((sye,TM)=>{"use strict";var FZ=$l(),GZ=M().OPERATIONS_ENUM,eR=class extends FZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(GZ.DELETE,n,s,t,i),this.original_records=r}};TM.exports=eR});var T_=N((aye,bM)=>{"use strict";var oye=require("path"),AM=ht(),qZ=EM(),$Z=pM(),VZ=SM(),KZ=gM(),Vl=Ht(),RM=te(),{CONFIG_PARAMS:YZ}=M(),yM=se();yM.initSync();var Xh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:WZ}=gt();bM.exports=jZ;async function jZ(e,t){if(yM.get(YZ.LOGGING_AUDITLOG)===!1)return;let r=WZ(e.schema,e.table),n=await AM.openEnvironment(r,e.table,!0),s=zZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){AM.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),RM.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(jZ,"writeTransaction");function zZ(e,t){let r=RM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===Xh.INSERT)return new qZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPDATE)return new $Z(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.UPSERT)return new VZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Xh.DELETE)return new KZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(zZ,"createTransactionObject")});var tR=N((uye,OM)=>{"use strict";var QZ=f_(),lye=Qd(),g_=M(),JZ=Jd(),XZ=ic().insertRecords,ZZ=ht(),e5=W(),t5=Jh(),{getSchemaPath:r5}=gt(),n5=T_();OM.exports=s5;async function s5(e){try{let{schema_table:t,attributes:r}=QZ(e);JZ(e,r,t.hash_attribute),e.schema!==g_.SYSTEM_SCHEMA_NAME&&(r.includes(g_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(g_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(g_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(g_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t5(e.hdb_auth_header,t,r),s=r5(e.schema,e.table),i=await ZZ.openEnvironment(s,e.table),o=await XZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n5(e,o)}catch(c){e5.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(s5,"lmdbCreateRecords")});var wM=N((_ye,IM)=>{"use strict";var NM=M(),i5=tR(),o5=Qd(),a5=require("fs-extra"),{getSchemaPath:c5}=gt();IM.exports=l5;async function l5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new o5(NM.SYSTEM_SCHEMA_NAME,NM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await i5(r),await a5.mkdirp(c5(e.schema))}a(l5,"lmdbCreateSchema")});var PM=N((Eye,CM)=>{"use strict";var rR=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}};CM.exports=rR});var UM=N((Tye,MM)=>{"use strict";var DM=ht(),nR=cn(),sR=Dn().LMDB_ERRORS_ENUM,u5=Ht(),LM=W(),pye=te(),d5=require("lmdb"),_5=PM(),f5=M(),{OVERFLOW_MARKER:mye,MAX_SEARCH_KEY_LENGTH:Sye}=u5,E5=f5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function h5(e,t,r,n){if(nR.validateEnv(e),t===void 0)throw new Error(sR.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sR.IDS_REQUIRED):new Error(sR.IDS_MUST_BE_ITERABLE);try{let s=DM.listDBIs(e);DM.initializeDBIs(e,t,s);let i=new _5,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[E5]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,d5.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=nR.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{LM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){LM.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=nR.getNextMonotonicTime(),i}catch(s){throw s}}a(h5,"deleteRecords");MM.exports={deleteRecords:h5}});var A_=N((Aye,BM)=>{"use strict";var Kl=te(),p5=UM(),m5=ht(),{getSchemaPath:S5}=gt(),T5=T_(),g5=W();BM.exports=A5;async function A5(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 vM([],[]);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=S5(e.schema,e.table),i=await m5.openEnvironment(s,e.table),o=await p5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await T5(e,o)}catch(c){g5.error(`unable to write transaction due to ${c.message}`)}return vM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(A5,"lmdbDeleteRecords");function vM(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(vM,"createDeleteResponse")});var oR=N((bye,HM)=>{"use strict";var R5=M(),yye=cn();function iR(e,t){let r=Object.create(null);if(t.length===1&&R5.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(iR,"parseRow");function y5(e,t,r,n){let s=iR(r,e);n.push(s)}a(y5,"searchAll");function b5(e,t,r,n){let s=iR(r,e);n[t]=s}a(b5,"searchAllToMap");function O5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(O5,"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 N5(e,t,r,n,s,i){t.toString().endsWith(e)&&Ec(t,r,n,s,i)}a(N5,"endsWith");function I5(e,t,r,n,s,i){t.toString().includes(e)&&Ec(t,r,n,s,i)}a(I5,"contains");function w5(e,t,r,n,s,i){t>e&&Ec(t,r,n,s,i)}a(w5,"greaterThanCompare");function C5(e,t,r,n,s,i){t>=e&&Ec(t,r,n,s,i)}a(C5,"greaterThanEqualCompare");function P5(e,t,r,n,s,i){t<e&&Ec(t,r,n,s,i)}a(P5,"lessThanCompare");function D5(e,t,r,n,s,i){t<=e&&Ec(t,r,n,s,i)}a(D5,"lessThanEqualCompare");HM.exports={parseRow:iR,searchAll:y5,searchAllToMap:b5,iterateDBI:O5,endsWith:N5,contains:I5,greaterThanCompare:w5,greaterThanEqualCompare:C5,lessThanCompare:P5,lessThanEqualCompare:D5,pushResults:Ec}});var Yl=N((Cye,VM)=>{"use strict";var Qo=ht(),Nye=W(),Fn=cn(),Zh=Ht(),zt=Dn().LMDB_ERRORS_ENUM,Iye=te(),L5=M(),ep=oR(),{parseRow:M5}=ep,wye=require("lmdb"),{OVERFLOW_MARKER:xM,MAX_SEARCH_KEY_LENGTH:U5}=Zh;function kM(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(kM,"iterateFullIndex");function R_(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(R_,"iterateRangeBetween");function hc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[Zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.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 FM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(xM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[Zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(FM,"getOverflowCheck");function v5(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)=>(tp(r),r=y_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>M5(u.value,r))))}a(v5,"searchAll");function B5(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);tp(r),r=y_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of kM(e,t,t,n,s,i))o.set(c,ep.parseRow(l,r));return o}a(B5,"searchAllToMap");function H5(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=kM(e,void 0,t,r,n,s),c=o.transaction,l=FM(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(H5,"iterateDBI");function x5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(x5,"countAll");function k5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(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(k5,"equals");function F5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(F5,"count");function G5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(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(G5,"startsWith");function q5(e,t,r,n,s=!1,i=void 0,o=void 0){return GM(e,t,r,n,s,i,o,!0)}a(q5,"endsWith");function GM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),hc(e,null,r,(l,u,d,_)=>{let E=FM(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(xM)?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[Zh.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(GM,"contains");function $5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),R_(e,t,r,n,l,s,i,o,!0,!1)}a($5,"greaterThan");function V5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),R_(e,t,r,n,l,s,i,o,!1,!1)}a(V5,"greaterThanEqual");function K5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),R_(e,t,r,l,n,s,i,o,!1,!0)}a(K5,"lessThan");function Y5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),R_(e,t,r,l,n,s,i,o,!1,!1)}a(Y5,"lessThanEqual");function W5(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 R_(e,t,r,n,s,i,o,c)}a(W5,"between");function j5(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(tp(r),r=y_(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=ep.parseRow(c,r)),o}a(j5,"searchByHash");function z5(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(z5,"checkHashExists");function Q5(e,t,r,n,s=[]){return $M(e,t,r,n,s),qM(e,t,r,n,s).map(i=>i[1])}a(Q5,"batchSearchByHash");function J5(e,t,r,n,s=[]){$M(e,t,r,n,s);let i=new Map;for(let[o,c]of qM(e,t,r,n,s))i.set(o,c);return i}a(J5,"batchSearchByHashToMap");function qM(e,t,r,n,s=[]){return hc(e,t,t,(i,o,c)=>{r=y_(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,ep.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(qM,"batchHashSearch");function $M(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(tp(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a($M,"initializeBatchSearchByHash");function tp(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(tp,"validateFetchAttributes");function Jo(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>U5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function y_(e,t){return t.length===1&&L5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(y_,"setGetWholeRowAttributes");VM.exports={searchAll:v5,searchAllToMap:B5,count:F5,countAll:x5,equals:k5,startsWith:G5,endsWith:q5,contains:GM,searchByHash:j5,setGetWholeRowAttributes:y_,batchSearchByHash:Q5,batchSearchByHashToMap:J5,checkHashExists:z5,iterateDBI:H5,greaterThan:$5,greaterThanEqual:V5,lessThan:K5,lessThanEqual:Y5,between:W5}});var Wl=N((Dye,zM)=>{var KM=require("lodash"),YM=Tt(),xe=require("joi"),X5=te(),{hdb_schema_table:b_,checkValidTable:WM,hdb_table:jM,hdb_database:rp}=Ti(),{handleHDBError:Z5,hdb_errors:e6}=_e(),{getDatabases:t6}=(De(),oe(lt)),{HTTP_STATUS_CODES:r6}=e6,n6=xe.object({database:rp,schema:rp,table:jM,search_attribute:b_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(b_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),s6=xe.object({database:rp,schema:rp,table:jM,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(b_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(b_,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(b_,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()});zM.exports=function(e,t){let r=null;switch(t){case"value":r=YM.validateBySchema(e,n6);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(WM("database",e.schema)),i(WM("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=YM.validateBySchema(e,s6);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=X5.checkGlobalSchemaTable(e.schema,e.table);if(s)return Z5(new Error,s,r6.NOT_FOUND);let o=t6()[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=KM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!KM.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 aR=N((Mye,QM)=>{"use strict";var i6=ht(),o6=Wl(),{getSchemaPath:a6}=gt();QM.exports=c6;function c6(e){let t=o6(e,"hashes");if(t)throw t;let r=a6(e.schema,e.table);return i6.openEnvironment(r,e.table)}a(c6,"initialize")});var cR=N((vye,JM)=>{"use strict";var l6=Yl(),u6=aR();JM.exports=d6;async function d6(e){let t=await u6(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return l6.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(d6,"lmdbGetDataByHash")});var jl=N((Hye,XM)=>{"use strict";var lR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};XM.exports=lR});var eU=N((Fye,ZM)=>{"use strict";var kye=jl(),_6=Yl(),f6=aR();ZM.exports=E6;async function E6(e){let t=await f6(e),r=global.hdb_schema[e.schema][e.table];return _6.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(E6,"lmdbSearchByHash")});var $s=N((qye,tU)=>{"use strict";var uR=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}};tU.exports=uR});var np=N((Vye,aU)=>{"use strict";var Wr=Yl(),h6=ht(),p6=te(),ke=Ht(),pc=M(),m6=Ji(),rU=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:S6}=gt(),ro=pc.SEARCH_WILDCARDS;async function T6(e,t,r){let n;e.schema===pc.SYSTEM_SCHEMA_NAME?n=m6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=oU(e,n.hash_attribute,r,t);return sU(e,s,n.hash_attribute,r)}a(T6,"prepSearch");async function sU(e,t,r,n){let s=S6(e.schema,e.table),i=await h6.openEnvironment(s,e.table),o=iU(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(g6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?nU(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?nU(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(sU,"executeSearch");function iU(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(iU,"searchByType");function nU(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(nU,"createMapFromIterable");function g6(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(g6,"checkToFetchMore");function oU(e,t,r,n){if(p6.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),ro.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(ro[0])<0&&s.indexOf(ro[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(ro.indexOf(i)>=0&&ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(ro.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(ro.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(ro[0])||s.includes(ro[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(rU.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(rU.UNKNOWN_SEARCH_TYPE)}}a(oU,"createSearchTypeFromSearchObject");aU.exports={executeSearch:sU,createSearchTypeFromSearchObject:oU,prepSearch:T6,searchByType:iU}});var lU=N((Wye,cU)=>{"use strict";var Yye=$s(),A6=Wl(),R6=te(),y6=M(),b6=np();cU.exports=O6;function O6(e,t){if(!R6.isEmpty(t)&&y6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=A6(e,"value");if(n)throw n;return b6.prepSearch(e,t,!0)}a(O6,"lmdbGetDataByValue")});var O_=N((Qye,uU)=>{"use strict";var zye=$s(),N6=Wl(),I6=te(),w6=M(),C6=np();uU.exports=P6;async function P6(e,t){if(!I6.isEmpty(t)&&w6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=N6(e,"value");if(n)throw n;return C6.prepSearch(e,t,!1)}a(P6,"lmdbSearchByValue")});var _U=N((Zye,dU)=>{"use strict";var Xye=Ht(),dR=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}},_R=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},fR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};dU.exports={SearchByConditionsObject:dR,SearchCondition:_R,SortAttribute:fR}});var mU=N((nbe,pU)=>{"use strict";var tbe=_U().SearchByConditionsObject,D6=$s(),L6=Wl(),ER=Yl(),sp=Ht(),{Resource:rbe}=(Vs(),oe(hR)),hU=np(),M6=oR(),U6=require("lodash"),{getSchemaPath:v6}=gt(),fU=ht(),{handleHDBError:B6,hdb_errors:H6}=_e(),{HTTP_STATUS_CODES:x6}=H6,k6=1e8;pU.exports=F6;async function F6(e){let t=L6(e,"conditions");if(t)throw B6(t,t.message,x6.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=v6(e.schema,e.table),n=await fU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)fU.openDBI(n,u.search_attribute);let i=U6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===sp.SEARCH_TYPES.EQUALS?u.estimated_count=ER.count(n,u.search_attribute,u.search_value):d===sp.SEARCH_TYPES.CONTAINS||d===sp.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=k6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await EU(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(hU.filterByType),_=d.length,E=ER.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=>M6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await EU(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=ER.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(F6,"lmdbSearchByConditions");async function EU(e,t,r,n){let s=new D6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===sp.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,hU.searchByType(e,s,i,n).map(o=>o.value)}a(EU,"executeConditionSearch")});var N_=N((ibe,SU)=>{"use strict";var G6=M().OPERATIONS_ENUM,pR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=G6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};SU.exports=pR});var mR=N((abe,NU)=>{"use strict";var RU=$s(),yU=N_(),bU=O_(),OU=A_(),_n=M(),TU=te(),gU=ht(),{getTransactionAuditStorePath:q6,getSchemaPath:$6}=gt(),AU=W();NU.exports=V6;async function V6(e){try{if(TU.isEmpty(global.hdb_schema[e.schema])||TU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await K6(e),await Y6(e);let t=$6(e.schema,e.table);try{await gU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")AU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=q6(e.schema,e.table);await gU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")AU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(V6,"lmdbDropTable");async function K6(e){let t=new RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await bU(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 yU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await OU(s)}a(K6,"deleteAttributesFromSystem");async function Y6(e){let t=new RU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await bU(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 yU(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await OU(s)}catch(i){throw i}}a(Y6,"dropTableFromSystem")});var wU=N((lbe,IU)=>{"use strict";var W6=require("fs-extra"),j6=$s(),z6=jl(),Q6=N_(),J6=mR(),X6=A_(),Z6=cR(),e8=O_(),no=M(),{getSchemaPath:t8}=gt(),{handleHDBError:r8,hdb_errors:n8}=_e(),{HDB_ERROR_MSGS:s8,HTTP_STATUS_CODES:i8}=n8;IU.exports=o8;async function o8(e){let t;try{t=await a8(e.schema);let r=new j6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await e8(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await J6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new Q6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await X6(s);let i=t8(t);await W6.remove(i)}catch(r){throw r}}a(o8,"lmdbDropSchema");async function a8(e){let t=new z6(no.SYSTEM_SCHEMA_NAME,no.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[no.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await Z6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw r8(new Error,s8.SCHEMA_NOT_FOUND(e),i8.NOT_FOUND,void 0,void 0,!0);return n}a(a8,"validateDropSchema")});var I_=N((dbe,CU)=>{"use strict";var SR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};CU.exports=SR});var gR=N((Ebe,PU)=>{"use strict";var c8=require("fs-extra"),ip=ht(),{getTransactionAuditStorePath:l8}=gt(),TR=Ht(),fbe=I_();PU.exports=u8;async function u8(e){let t;try{let r=l8(e.schema,e.table);await c8.mkdirp(r),t=await ip.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{ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ip.createDBI(t,TR.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ip.createDBI(t,TR.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(u8,"createTransactionsAuditEnvironment")});var MU=N((mbe,LU)=>{"use strict";var AR=M(),DU=ht(),d8=ic(),{getSystemSchemaPath:_8,getSchemaPath:f8}=gt(),pbe=Ji(),E8=vh(),RR=Uh(),h8=W(),p8=gR();LU.exports=m8;async function m8(e,t){let r=f8(t.schema,t.table),n=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new RR(t.schema,t.table,AR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new RR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await DU.createEnvironment(r,t.table),e!==void 0){let o=await DU.openEnvironment(_8(),AR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await d8.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 yR(n),await yR(s),await yR(i)}await p8(t)}catch(o){throw o}}a(m8,"lmdbCreateTable");async function yR(e){try{await E8(e)}catch(t){h8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yR,"createAttribute")});var vU=N((Tbe,UU)=>{"use strict";var S8=f_(),T8=Jd(),g8=Jh(),w_=M(),A8=ic().updateRecords,R8=ht(),{getSchemaPath:y8}=gt(),b8=T_(),O8=W();UU.exports=N8;async function N8(e){try{let{schema_table:t,attributes:r}=S8(e);T8(e,r,t.hash_attribute),e.schema!==w_.SYSTEM_SCHEMA_NAME&&(r.includes(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(w_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await g8(e.hdb_auth_header,t,r),s=y8(e.schema,e.table),i=await R8.openEnvironment(s,e.table),o=await A8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await b8(e,o)}catch(c){O8.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(N8,"lmdbUpdateRecords")});var HU=N((Abe,BU)=>{"use strict";var I8=M().OPERATIONS_ENUM,bR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=I8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};BU.exports=bR});var kU=N((bbe,xU)=>{"use strict";var ybe=HU(),w8=f_(),C8=Jd(),P8=Jh(),C_=M(),D8=ic().upsertRecords,L8=ht(),{getSchemaPath:M8}=gt(),U8=T_(),v8=W(),{handleHDBError:B8,hdb_errors:H8}=_e();xU.exports=x8;async function x8(e){let t;try{t=w8(e)}catch(l){throw B8(l,l.message,H8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;C8(e,n,r.hash_attribute),e.schema!==C_.SYSTEM_SCHEMA_NAME&&(n.includes(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(C_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await P8(e.hdb_auth_header,r,n),i=M8(e.schema,e.table),o=await L8.openEnvironment(i,e.table),c=await D8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await U8(e,c)}catch(l){v8.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(x8,"lmdbUpsertRecords")});var GU=N((Nbe,FU)=>{"use strict";var OR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};FU.exports=OR});var $U=N((wbe,qU)=>{"use strict";var NR=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}};qU.exports=NR});var YU=N((Dbe,KU)=>{"use strict";var IR=ht(),{getTransactionAuditStorePath:k8}=gt(),Pbe=GU(),P_=Ht(),F8=te(),VU=$U(),G8=require("util").promisify,q8=G8(setTimeout),$8=1e4,V8=100;KU.exports=K8;async function K8(e){let t=k8(e.schema,e.table),r=await IR.openEnvironment(t,e.table,!0),n=IR.listDBIs(r);IR.initializeDBIs(r,P_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new VU;do s=await Y8(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 q8(V8);while(s.transactions_deleted>0);return i}a(K8,"deleteAuditLogsBefore");async function Y8(e,t){let r=new VU;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];F8.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>$8)break}return await s,r}catch(n){throw n}}a(Y8,"deleteTransactions")});var jU=N((Mbe,WU)=>{"use strict";var wR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};WU.exports=wR});var QU=N((Bbe,zU)=>{"use strict";var W8=$s(),j8=N_(),vbe=jU(),yi=M(),z8=te(),CR=ht(),Q8=Ji(),J8=O_(),X8=A_(),{getSchemaPath:Z8}=gt();zU.exports=e9;async function e9(e,t=!0){let r;e.schema===yi.SYSTEM_SCHEMA_NAME?r=Q8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await r9(e),s=Z8(e.schema,e.table),i=await CR.openEnvironment(s,e.table);return t===!0&&await t9(e,i,r.hash_attribute),CR.dropDBI(i,e.attribute),n}a(e9,"lmdbDropAttribute");async function t9(e,t,r){let n=CR.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(t9,"removeAttributeFromAllObjects");async function r9(e){let t=new W8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await J8(t)).filter(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(z8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[yi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new j8(yi.SYSTEM_SCHEMA_NAME,yi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return X8(i)}a(r9,"dropAttributeFromSystem")});var rv=N((kbe,tv)=>{"use strict";var PR=ht(),zl=Ht(),xbe=cn(),DR=M(),JU=te(),{getTransactionAuditStorePath:n9}=gt(),s9=Yl(),op=$l(),i9=W();tv.exports=o9;async function o9(e){let t=n9(e.schema,e.table),r=await PR.openEnvironment(t,e.table,!0),n=PR.listDBIs(r);PR.initializeDBIs(r,zl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case DR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return XU(r,e.search_values);case DR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,c9(r,e.search_values,s);case DR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return a9(r,e.search_values);default:return XU(r)}}a(o9,"readAuditLog");function XU(e,t=[0,Date.now()]){JU.isEmpty(t[0])&&(t[0]=0),JU.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 op,s))}a(XU,"searchTransactionsByTimestamp");function a9(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,ev(e,i))}return Object.fromEntries(r)}a(a9,"searchTransactionsByUsername");function c9(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=s9.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=ev(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);ZU(l,"records",r,d,o),ZU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(c9,"searchTransactionsByHashValues");function ZU(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 op(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new op(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(ZU,"loopRecords");function ev(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 op,i);r.push(o)}}catch(i){i9.warn(i)}return r}catch(n){throw n}}a(ev,"batchSearchTransactions")});var sv=N(($be,nv)=>{"use strict";var{getSchemaPath:Gbe}=gt(),qbe=ht(),{database:l9}=(De(),oe(lt));nv.exports={writeTransaction:u9};async function u9(e,t,r){return l9({database:e,table:t}).transaction(r)}a(u9,"writeTransaction")});var cv=N((Kbe,av)=>{"use strict";var{getSchemaPath:iv}=gt(),ov=ht();av.exports={flush:d9,resetReadTxn:_9};async function d9(e,t){return(await ov.openEnvironment(iv(e,t),t.toString())).flushed}a(d9,"flush");async function _9(e,t){try{(await ov.openEnvironment(iv(e,t),t.toString())).resetReadTxn()}catch{}}a(_9,"resetReadTxn")});var _v=N((Wbe,dv)=>{"use strict";var{Readable:f9}=require("stream"),{getDatabases:E9}=(De(),oe(lt)),{readSync:h9,openSync:p9,createReadStream:lv}=require("fs"),{open:m9}=require("lmdb"),uv=o_(),S9=a_(),{AUDIT_STORE_OPTIONS:T9}=(zi(),oe(fv)),{INTERNAL_DBIS_NAME:g9,AUDIT_STORE_NAME:A9}=Ht();dv.exports=y9;var LR=32768,R9=100;async function y9(e){let t=e.database||e.schema||"data",r=E9()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=m9({noSync:!0,maxDbs:S9.MAX_DBS}),E,f=_.openDB(g9,new uv(!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++%R9===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 uv(!U,U);await m(S,H)}e.include_audit&&await m(A9,{...T9}),await E;let g=lv(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=p9(o.path);return o.transaction(()=>{let u=Buffer.alloc(LR);h9(c,u,0,LR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=lv(null,{fd:c,start:LR}),E=new f9.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(y9,"getBackup")});var pv=N((zbe,hv)=>{"use strict";var b9=W(),{handleHDBError:O9}=_e(),N9=JP(),I9=vh(),w9=tR(),C9=wM(),P9=A_(),D9=cR(),L9=eU(),M9=lU(),U9=O_(),v9=mU(),B9=wU(),H9=MU(),x9=vU(),k9=kU(),F9=YU(),G9=mR(),q9=QU(),$9=rv(),V9=sv(),Ev=cv(),K9=_v(),MR=class extends N9{static{a(this,"LMDBBridge")}async searchByConditions(t){return v9(t)}async getDataByHash(t){return await D9(t)}async searchByHash(t){return await L9(t)}async getDataByValue(t,r){return await M9(t,r)}async searchByValue(t){return await U9(t)}async createSchema(t){return await C9(t)}async dropSchema(t){return await B9(t)}async createTable(t,r){return await H9(t,r)}async dropTable(t){return await G9(t)}async createAttribute(t){return await I9(t)}async createRecords(t){return await w9(t)}async updateRecords(t){return await x9(t)}async upsertRecords(t){try{return await k9(t)}catch(r){throw O9(r,null,null,b9.ERR,r)}}async deleteRecords(t){return await P9(t)}async dropAttribute(t){return await q9(t)}async deleteAuditLogsBefore(t){return await F9(t)}async readAuditLog(t){return await $9(t)}writeTransaction(t,r,n){return V9.writeTransaction(t,r,n)}flush(t,r){return Ev.flush(t,r)}resetReadTxn(t,r){return Ev.resetReadTxn(t,r)}getBackup(t){return K9(t)}};hv.exports=MR});function bv(e){vR=e}function z9(){j9=setInterval(function(){for(let e of UR)if(e.stale){let t=e[Fe]?.url;gv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},W9).unref()}var BR,Tv,gv,Av,Rv,yv,mv,UR,Y9,D_,Sv,vR,mc,ap,W9,j9,cp=Ie(()=>{BR=L(cn()),Tv=L(_e()),gv=L(W());Vs();Av=L(se()),Rv=L(M()),yv=L(te()),mv=100,UR=new Set,Y9=(0,yv.convertToMS)(Av.get(Rv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(bv,"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),UR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(UR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(D_&&!this.overloadChecked&&performance.now()-Sv>Y9)throw new Tv.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,BR.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)<mv>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return D_||(D_=s,Sv=performance.now(),D_.then(()=>{D_=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];vR&&f&&i.push(vR(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)+mv/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=[]}},ap=class extends mc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,BR.getNextMonotonicTime)())}getReadTxn(){}},W9=3e4;a(z9,"startMonitoringTxns");z9()});function Pt(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 Ov,Sc=Ie(()=>{Ov=L(fi());Vs();cp();a(Pt,"transaction");(0,Ov._assignPackageExport)("transaction",Pt);Pt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Pt.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 Mv={};je(Mv,{ResourceBridge:()=>kR});function FR({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 Iv(e,t){let r=bi(e),n=FR(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;Pt(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&&up(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 bi(e){let t=e.database||e.schema||J9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,Q9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wv(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*Cv(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 Pv,lp,Ks,Dv,Ys,HR,xR,Lv,Q9,J9,X9,Z9,Nv,kR,Uv=Ie(()=>{"use strict";Pv=L(pv()),lp=L(Wl()),Ks=L(_e());De();Dv=L(f_()),Ys=L(M()),HR=L(to()),xR=L(qs()),Lv=L(te());Sc();dp();({HDB_ERROR_MSGS:Q9}=Ks.hdb_errors),J9="data",X9=1e4,Z9=10,kR=class extends Pv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Nv=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,lp.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=bi(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:FR(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 bi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=bi(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){bi(t).dropTable()}createSchema(t){return Ql({database:t.schema,table:null}),HR.signalSchemaChange(new xR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await GR(t.schema),HR.signalSchemaChange(new xR.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,Nv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,Dv.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),Pt(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=up(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),Pt(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 wv(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,Lv.async_set_timeout)(Z9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%X9===0&&await u();return l.length>0&&await u(),s?wv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,lp.default)(t,"hashes");if(r)throw r;return Iv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Iv(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,lp.default)(t,"value");if(n)throw n;let s=bi(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:FR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=bi(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){bi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return bi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=bi(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 Cv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Cv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(FR,"getSelect");a(Iv,"getRecords");a(bi,"getTable");a(wv,"createDeleteResponse");a(Cv,"groupRecordsInHistory")});var Hn=N((uOe,vv)=>{"use strict";var{ResourceBridge:e7}=(Uv(),oe(Mv)),t7=se();t7.initSync();var _p;function r7(){return _p||(_p=new e7,_p)}a(r7,"getBridge");vv.exports=r7()});var kv=N((_Oe,xv)=>{"use strict";var Bv=require("lodash"),L_=require("mathjs"),n7=require("jsonata"),Hv=te();xv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Bv.uniqWith(e,Bv.isEqual):e,"distinct_array"),searchJSON:s7,mad:M_.bind(null,L_.mad),mean:M_.bind(null,L_.mean),mode:M_.bind(null,L_.mode),prod:M_.bind(null,L_.prod),median:M_.bind(null,L_.median)};function M_(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(M_,"aggregateFunction");function s7(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(Hv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Hv.isEmpty(this.__ala__.res[r])){let n=n7(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(s7,"searchJSON")});var Gv=N((EOe,Fv)=>{"use strict";var nr=require("moment"),qR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;Fv.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(qR),"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(qR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(qR),"offset_utc")}});var Kv=N((pOe,Vv)=>{"use strict";var i7=require("@turf/area"),o7=require("@turf/length"),a7=require("@turf/circle"),c7=require("@turf/difference"),l7=require("@turf/distance"),u7=require("@turf/boolean-contains"),d7=require("@turf/boolean-equal"),_7=require("@turf/boolean-disjoint"),f7=require("@turf/helpers"),qv=M(),$e=te(),so=W();Vv.exports={geoArea:E7,geoLength:h7,geoCircle:p7,geoDifference:m7,geoDistance:$v,geoNear:S7,geoContains:T7,geoEqual:g7,geoCrosses:A7,geoConvert:R7};function E7(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return i7.default(e)}catch(t){return so.trace(t,e),NaN}}a(E7,"geoArea");function h7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return o7.default(e,{units:t||"kilometers"})}catch(r){return so.trace(r,e),NaN}}a(h7,"geoLength");function p7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return a7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a(p7,"geoCircle");function m7(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 c7(e,t)}catch(r){return so.trace(r,e,t),NaN}}a(m7,"geoDifference");function $v(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 l7.default(e,t,{units:r||"kilometers"})}catch(n){return so.trace(n,e,t),NaN}}a($v,"geoDistance");function S7(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 $v(e,t,n)<=r}catch(s){return so.trace(s,e,t),!1}}a(S7,"geoNear");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 so.trace(r,e,t),!1}}a(T7,"geoContains");function g7(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 d7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(g7,"geoEqual");function A7(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!_7.default(e,t)}catch(r){return so.trace(r,e,t),!1}}a(A7,"geoCrosses");function R7(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(qv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),f7[t](e,r)}a(R7,"geoConvert")});var fp=N((SOe,Yv)=>{var Tc=kv(),Gn=Gv(),Oi=Kv();Yv.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=Oi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Oi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Oi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Oi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Oi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Oi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Oi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Oi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Oi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Oi.geoNear}});var Qv=N((TOe,zv)=>{"use strict";var U_=require("lodash"),fn=require("alasql");fn.options.cache=!1;var y7=fp(),Wv=require("clone"),Ep=require("recursive-iterator"),Ue=W(),et=te(),Jl=Hn(),b7=M(),{hdb_errors:O7}=_e(),{getDatabases:jv}=(De(),oe(lt)),N7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";y7(fn);var $R=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 Ep(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(Wv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=U_.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=jv()[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 Ep(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 fn.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 fn.yy.LogicValue({value:i}):n instanceof fn.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new fn.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 Ep(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(b7.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&&U_.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 fn.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(Wv(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(N7)>-1&&this.tables.forEach(s=>{let i={columnid:jv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=U_.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 fn.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 fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new fn.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 fn.yy.FuncValue:new fn.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 fn.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=U_.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 Ep(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=U_.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 fn.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(O7.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)}};zv.exports=$R});var Vr=N((AOe,Jv)=>{"use strict";var I7=zP();Jv.exports={searchByConditions:C7,searchByHash:P7,searchByValue:D7,search:L7};var VR=Hn(),{transformReq:KR}=te(),w7=Qv();async function C7(e){return KR(e),VR.searchByConditions(e)}a(C7,"searchByConditions");async function P7(e){KR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of VR.searchByHash(e))r&&t.push(r);return t}a(P7,"searchByHash");async function D7(e){KR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of VR.searchByValue(e))t.push(r);return t}a(D7,"searchByValue");function L7(e,t){try{let r=new I7(e);r.validate(),new w7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(L7,"search")});var hp=N((yOe,Xv)=>{"use strict";var M7=Hn();Xv.exports={writeTransaction:U7};function U7(e,t,r){return M7.writeTransaction(e,t,r)}a(U7,"writeTransaction")});var r0=N((NOe,t0)=>{"use strict";var v7=Vr(),B7=us(),Zv=W(),H7=un(),OOe=hp(),x7=require("clone"),WR=require("alasql"),k7=fp(),e0=require("util"),F7=e0.promisify(B7.getTableSchema),G7=e0.promisify(v7.search),q7=M(),YR=te();k7(WR);t0.exports={update:V7};var $7="There was a problem performing this update. Please check the logs and try again.";async function V7({statement:e,hdb_user:t}){let r=await F7(e.table.databaseid,e.table.tableid),n=K7(e.columns);YR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=x7(s),c=YR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=WR.parse(l).statements[0],d=await G7(u),_=Y7(n,d);return W7(o,_,t)}a(V7,"update");function K7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=WR.compile(`SELECT ${r.expression.toString()} AS [${q7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Zv.error(t),new Error($7)}}a(K7,"createUpdateRecord");function Y7(e,t){return YR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Y7,"buildUpdateRecords");async function W7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await H7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Zv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(W7,"updateRecords")});var s0=N((POe,n0)=>{var j7=require("alasql"),z7=Vr(),Q7=W(),J7=Hn(),zR=require("util"),jR=te(),X7=M(),Z7=us(),wOe=hp(),COe=un(),eee="record",tee="successfully deleted",ree=zR.callbackify(oee),nee=zR.promisify(z7.search),see=zR.promisify(Z7.getTableSchema);n0.exports={convertDelete:ree};function iee(e){return`${e.deleted_hashes.length} ${eee}${e.deleted_hashes.length===1?"":"s"} ${tee}`}a(iee,"generateReturnMessage");async function oee({statement:e,hdb_user:t}){let r=await see(e.table.databaseid,e.table.tableid);jR.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=jR.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=j7.parse(o).statements[0],l={operation:X7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await nee(c);let u=await J7.deleteRecords(l);return jR.isEmptyOrZeroLength(u.message)&&(u.message=iee(u)),delete u.txn_time,u}catch(u){throw Q7.error(u),u.hdb_code?u.message:u}}a(oee,"convertDelete")});var l0=N((LOe,c0)=>{"use strict";var aee=eo(),{hdb_errors:i0}=_e(),{getDatabases:o0}=(De(),oe(lt));c0.exports={checkSchemaExists:a0,checkSchemaTableExists:cee,schema_describe:aee};async function a0(e){if(!o0()[e])return i0.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(a0,"checkSchemaExists");async function cee(e,t){let r=await a0(e);if(r)return r;if(!o0()[e][t])return i0.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cee,"checkSchemaTableExists")});var Xl=N((UOe,lee)=>{lee.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 k_={};je(k_,{addAnalyticsListener:()=>x_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>uee});function uee(e){S0=e}function mr(e,t,r,n,s){if(!S0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Sp.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},Sp.set(i,o)}pp||dee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function x_(e){A0.push(e)}function dee(){pp=performance.now(),setTimeout(async()=>{let e=performance.now()-pp;pp=0;let t=[],r={time:Date.now(),period:e,threadId:gc.threadId,metrics:t};for(let[s,i]of Sp){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 R0){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 y0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:gc.threadId,byThread:!0,...n});for(let s of A0)s(t);Sp=new Map,gc.parentPort?gc.parentPort.postMessage({type:g0,report:r}):N0({report:r})},T0).unref()}async function _ee(e,t=6e4){let r=XR(),n=b0(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,v_.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,v_.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 y0()}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 R0){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,mp.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,mp.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-u0,active:h-d0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}u0=f,d0=h}async function _0(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function XR(){return f0||(f0=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function b0(){return E0||(E0=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function hee(){O0=!0;let e=(0,H_.get)(JR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await _ee(T0,e),await _0(XR(),fee),await _0(b0(),Eee)},Math.min(e/2,2147483647)).unref()}function N0(e,t){let r=e.report;r.threadId=t?.threadId||gc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(h0+=n.mean*n.count);r.totalBytesProcessed=h0,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(p0.get(t))}),p0.set(t,t.performance.eventLoopUtilization())),r.id=(0,mp.getNextMonotonicTime)(),XR().primaryStore.put(r.id,r),O0||hee(),pee&&(I0=See(r))}async function See(e){if(await I0,!Xo){let r=(0,B_.dirname)((0,v_.getLogFilePath)());try{Xo=await(0,QR.open)((0,B_.join)(r,"analytics.log"),"r+")}catch{Xo=await(0,QR.open)((0,B_.join)(r,"analytics.log"),"w+")}}let t=(await Xo.stat()).size;if(t>mee){let r=Buffer.alloc(t);await Xo.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Xo.write(r,{position:0}),await Xo.truncate(r.length),t=r.length}await Xo.write(JSON.stringify(e)+`
|
|
12
12
|
`,t)}var gc,m0,v_,B_,QR,mp,H_,JR,Sp,S0,pp,T0,g0,A0,R0,u0,d0,y0,fee,Eee,f0,E0,O0,h0,p0,pee,I0,Xo,mee,Ni=Ie(()=>{gc=require("worker_threads"),m0=L(dt());De();v_=L(W()),B_=require("path"),QR=require("fs/promises"),mp=L(cn()),H_=L(se()),JR=L(M());qr();(0,H_.initSync)();Sp=new Map,S0=(0,H_.get)(JR.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(uee,"setAnalyticsEnabled");a(mr,"recordAction");it.recordAnalytics=mr;a(qn,"recordActionBinary");pp=0,T0=1e3,g0="analytics-report",A0=[];a(x_,"addAnalyticsListener");R0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(dee,"sendAnalytics");a(_ee,"aggregation");u0=0,d0=0,y0=a(()=>new Promise(setImmediate),"rest");a(_0,"cleanup");fee=36e5,Eee=31536e6;a(XR,"getRawAnalyticsTable");a(b0,"getAnalyticsTable");(0,m0.setChildListenerByType)(g0,N0);a(hee,"startScheduledTasks");h0=0,p0=new Map,pee=!1;a(N0,"recordAnalytics");mee=1e6;a(See,"logAnalytics")});var ny=N((WOe,k0)=>{"use strict";var{decode:Tee}=require("msgpackr"),{isMainThread:VOe,parentPort:KOe,threadId:YOe}=require("worker_threads"),Ap=sr(),Zl=Ct(),ty=M(),jr=W(),ey=se(),gee=M(),{onMessageByType:Aee}=dt(),D0=Zi(),{recordAction:w0,recordActionBinary:Ree}=(Ni(),oe(k_)),{publishToStream:yee}=Ap,{ConsumerEvents:C0}=require("nats"),bee=Vr(),{promisify:Oee}=require("util"),L0=Oee(setTimeout),Rp=1e4,yp,gp,Nee,Iee,M0,F_=new Map,eu=new Map;k0.exports={initialize:U0,ingestConsumer:ry,setSubscription:wee,setIgnoreOrigin:Dee,getDatabaseSubscriptions:Pee,updateConsumer:v0};async function U0(){Aee(ty.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await v0(n)}),M0=!0,jr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Ap.getNATSReferences();yp=e,gp=e.info.server_name,Nee=t,Iee=r}a(U0,"initialize");async function v0(e){if(e.status==="start"){let{js:t,jsm:r}=await B0(e.node_domain_name);ry(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=F_.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?.(),F_.set(e.stream_name+e.node_domain_name,"close")),eu.get(e.node_domain_name)==="failed"&&eu.set(e.node_domain_name,"close")}}a(v0,"updateConsumer");var bp=new Map;function wee(e,t,r){let n=bp.get(e);n||bp.set(e,n=new Map),n.set(t,r),M0||U0().then(Cee)}a(wee,"setSubscription");async function Cee(){let e=await bee.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 B0(r),!n))break;let{schema:o,table:c}=i,l=D0.createNatsTableStreamName(o,c);ry(l,n,s,r)}}}a(Cee,"accessConsumers");async function B0(e){let t,r,n=1;for(;!r;)try{t=await yp.jetstream({domain:e}),r=await yp.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<Rp?n++*100:Rp;await L0(i)}return{js:t,jsm:r}}a(B0,"connectToRemoteJS");function Pee(){return bp}a(Pee,"getDatabaseSubscriptions");var H0;function Dee(e){H0=e}a(Dee,"setIgnoreOrigin");var x0=100,P0=new Array(x0),Tp=0;async function ry(e,t,r,n){let{connection:s}=await Ap.getNATSReferences();yp=s,gp=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,gp),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 Ap.createConsumer(r,e,gp,new Date(Date.now()).toISOString()));let d=o++*100<Rp?o++*100:Rp;await L0(d)}let c=!1,l;for(;!c;){if(F_.get(e+n)==="close"||eu.get(n)==="close"){F_.delete(e+n),c=!0;continue}l=await i.consume({max_messages:ey.get(ty.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),F_.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===C0.ConsumerDeleted&&(await l.close(),c=!0),d.type===C0.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 P0[Tp],P0[Tp]=Lee(d).catch(_=>{jr.error(_)}),++Tp>=x0&&(Tp=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(ry,"ingestConsumer");async function Lee(e){let t=Tee(e.data);w0(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=ey.get(ty.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&&!H0),Ree(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=bp.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:ZR(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:ZR(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:ZR(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})}ey.get(gee.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&yee(e.subject.split(".").slice(0,-1).join("."),D0.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&w0(I,"replication-latency",e.subject,o,"ingest")}catch(o){jr.error(o)}e.ack()}a(Lee,"messageProcessor");function ZR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ZR,"convertOperation")});var sr=N((eNe,rB)=>{"use strict";var Or=se();Or.initSync();var Mee=require("fs-extra"),Uee=require("semver"),$_=require("path"),{monotonicFactory:vee}=require("ulidx"),G0=vee(),Bee=require("util"),q0=require("child_process"),Hee=Bee.promisify(q0.exec),xee=q0.spawn,Pr=Ct(),Je=M(),Op=te(),js=W(),Np=Zi(),kee=hp(),G_=wt(),{broadcast:Fee,onMessageByType:Gee,getWorkerIndex:qee}=dt(),{isMainThread:$0}=require("worker_threads"),{Encoder:$ee,decode:ay}=require("msgpackr"),V0=new $ee,{isEmpty:bc}=Op,K0=dn(),zOe=48*36e11;$0&&Gee(Je.ITC_EVENT_TYPES.RESTART,()=>{zr=void 0,yc=void 0});var{connect:Vee,StorageType:Kee,RetentionPolicy:Yee,AckPolicy:cy,DeliverPolicy:ly,DiscardPolicy:Wee,NatsConnection:QOe,JetStreamManager:JOe,JetStreamClient:XOe,StringCodec:ZOe,JSONCodec:jee,createInbox:uy,headers:zee,ErrorCode:F0}=require("nats"),{PACKAGE_ROOT:Qee}=M(),Jee=Xl(),{recordAction:Xee}=(Ni(),oe(k_)),Y0=jee(),Zee="clustering",ete=Jee.engines[Pr.NATS_SERVER_NAME],tte=$_.join(Qee,"dependencies"),oy=$_.join(tte,`${process.platform}-${process.arch}`,Pr.NATS_BINARY_NAME),sy,iy,q_,Ac,Rc;rB.exports={runCommand:W0,checkNATSServerInstalled:rte,createConnection:dy,getConnection:V_,getJetStreamManager:K_,getJetStream:z0,getNATSReferences:Ii,getServerList:ste,createLocalStream:_y,listStreams:Q0,deleteLocalStream:ite,getServerConfig:tu,listRemoteStreams:ote,viewStream:ate,viewStreamIterator:cte,publishToStream:lte,request:_te,reloadNATS:fy,reloadNATSHub:fte,reloadNATSLeaf:Ete,extractServerName:dte,requestErrorHandler:hte,createLocalTableStream:eB,createTableStreams:Ste,purgeTableStream:tB,purgeSchemaTableStreams:Tte,getStreamInfo:gte,updateLocalStreams:Rte,closeConnection:nte,getJsmServerName:Ip,addNatsMsgHeader:J0,clearClientCache:j0,updateRemoteConsumer:pte,createConsumer:X0,updateConsumerIterator:mte};async function W0(e,t=void 0){let{stdout:r,stderr:n}=await Hee(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
13
13
|
`,""));return r.replace(`
|
|
14
14
|
`,"")}a(W0,"runCommand");async function rte(){try{await Mee.access(oy)}catch{return!1}let e=await W0(`${oy} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Uee.eq(t,ete)}a(rte,"checkNATSServerInstalled");async function dy(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await K0.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 Vee({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&&j0()}),i}a(dy,"createConnection");function j0(){zr=void 0,Ac=void 0,Rc=void 0,yc=void 0}a(j0,"clearClientCache");async function nte(){zr&&(await zr.drain(),zr=void 0,Ac=void 0,Rc=void 0,yc=void 0)}a(nte,"closeConnection");var zr,yc;async function V_(){return yc||(yc=dy(Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),zr=await yc),zr||yc}a(V_,"getConnection");async function K_(){if(Ac)return Ac;bc(zr)&&await V_();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(K_,"getJetStreamManager");async function z0(){if(Rc)return Rc;bc(zr)&&await V_();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(z0,"getJetStream");async function Ii(){let e=zr||await V_(),t=Ac||await K_(),r=Rc||await z0();return{connection:e,jsm:t,js:r}}a(Ii,"getNATSReferences");async function ste(e){let t=Or.get(Je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await K0.getClusterUser(),s=await dy(t,r,n),i=uy(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=Y0.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 Op.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(ste,"getServerList");async function _y(e,t){let{jsm:r}=await Ii(),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:Kee.File,retention:Yee.Limits,subjects:t,discard:Wee.Old,max_msgs:s,max_bytes:i,max_age:n})}a(_y,"createLocalStream");async function Q0(){let{jsm:e}=await Ii(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(Q0,"listStreams");async function ite(e){let{jsm:t}=await Ii();await t.streams.delete(e)}a(ite,"deleteLocalStream");async function ote(e){let{connection:t}=await Ii(),r=[],n=uy(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(Y0.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(ote,"listRemoteStreams");async function ate(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ii(),i=G0(),o={durable_name:i,ack_policy:cy.Explicit};t&&(o.deliver_policy=ly.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 _=ay(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Pr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(ate,"viewStream");async function*cte(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ii(),i=G0(),o={durable_name:i,ack_policy:cy.Explicit};t&&(o.deliver_policy=ly.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=ay(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(Pr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(cte,"viewStreamIterator");async function lte(e,t,r,n){js.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=J0(n,r);let{js:s}=await Ii(),i=await Ip(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:V0.encode(n);try{js.trace(`publishToStream publishing to subject: ${o}`),Xee(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 Z0(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 _y(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(lte,"publishToStream");function J0(e,t){t===void 0&&(t=zee());let r=Or.get(Je.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Pr.MSG_HEADERS.ORIGIN)&&r&&t.append(Pr.MSG_HEADERS.ORIGIN,r),t}a(J0,"addNatsMsgHeader");function tu(e){e=e.toLowerCase();let t=$_.join(Or.get(Je.CONFIG_PARAMS.ROOTPATH),Zee);if(e===Je.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bc(iy)&&(iy={port:G_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:G_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.HUB,config_file:Pr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:$_.join(t,Pr.PID_FILES.HUB),hdb_nats_path:t}),iy;if(e===Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bc(sy)&&(sy={port:G_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:G_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,config_file:Pr.NATS_CONFIG_FILES.LEAF_SERVER,domain:G_.getConfigFromFile(Je.CONFIG_PARAMS.CLUSTERING_NODENAME)+Pr.SERVER_SUFFIX.LEAF,pid_file_path:$_.join(t,Pr.PID_FILES.LEAF),hdb_nats_path:t}),sy;js.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(tu,"getServerConfig");async function X0(e,t,r,n){try{await e.consumers.add(t,{ack_policy:cy.Explicit,durable_name:r,deliver_policy:ly.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(X0,"createConsumer");async function ute(e,t,r){await e.consumers.delete(t,r)}a(ute,"removeConsumer");function dte(e){return e.split(".")[1]}a(dte,"extractServerName");async function _te(e,t,r=6e4,n=uy()){if(!Op.isObject(t))throw new Error("data param must be an object");let s=V0.encode(t),{connection:i}=await Ii(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return ay(c.data)}a(_te,"request");function fy(e){return new Promise(async(t,r)=>{let n=xee(oy,["--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(fy,"reloadNATS");async function fte(){let{pid_file_path:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fy(e)}a(fte,"reloadNATSHub");async function Ete(){let{pid_file_path:e}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fy(e)}a(Ete,"reloadNATSLeaf");function hte(e,t,r){let n;switch(e.code){case F0.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case F0.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(hte,"requestErrorHandler");async function pte(e,t){let r=t+Pr.SERVER_SUFFIX.LEAF,{connection:n}=await Ii(),{jsm:s}=await bte(r),{schema:i,table:o}=e,c=Np.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await Z0(async()=>{if(e.subscribe===!0)await X0(s,c,n.info.server_name,l);else try{await ute(s,c,n.info.server_name)}catch(u){js.trace(u)}})}a(pte,"updateRemoteConsumer");async function mte(e,t,r,n){let s=Np.createNatsTableStreamName(e,t),i=r+Pr.SERVER_SUFFIX.LEAF,o={type:Je.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!$0&&qee()<Or.get(Je.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=ny();await c(o)}await Fee(o),n==="stop"&&await Op.async_set_timeout(1e3)}a(mte,"updateConsumerIterator");function Z0(e){return kee.writeTransaction(Je.SYSTEM_SCHEMA_NAME,Je.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(Z0,"exclusiveLock");async function eB(e,t){let r=Np.createNatsTableStreamName(e,t),n=await Ip(),s=Ate(e,t,n);await _y(r,[s])}a(eB,"createLocalTableStream");async function Ste(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await eB(n,s)}}a(Ste,"createTableStreams");async function tB(e,t,r=void 0){if(Or.get(Je.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=Np.createNatsTableStreamName(e,t),{domain:s}=tu(Je.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await V_()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")js.warn(n);else throw n}}a(tB,"purgeTableStream");async function Tte(e,t){if(Or.get(Je.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await tB(e,t[r])}a(Tte,"purgeSchemaTableStreams");async function gte(e){return(await K_()).streams.info(e)}a(gte,"getStreamInfo");function Ate(e,t,r){return`${Pr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Ate,"createSubjectName");async function Ip(){if(q_)return q_;if(q_=(await K_())?.nc?.info?.server_name,q_===void 0)throw new Error("Unable to get jetstream manager server name");return q_}a(Ip,"getJsmServerName");async function Rte(){let e=await K_(),t=await Ip(),r=await Q0();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=yte(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(Rte,"updateLocalStreams");function yte(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(yte,"updateStreamLimits");async function bte(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(bte,"connectToRemoteJS")});var Oc=N(Cp=>{var wp=W();for(let e of["trace","debug","info","warn","error","fatal","notify"])wp.logsAtLevel(e)&&(Cp[e]=wp[e]);Cp.loggerWithTag=e=>wp.loggerWithTag(e,!0);Cp.setLogLevel=wp.setLogLevel});function Ey(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:W_(e)??1,nodes:[]})})}i[n]=0,e.putSync(Pp,(0,ru.pack)(r))}return r}function Y_(e){return Ey(e).remoteNameToId}function sB(e,t,r){let n=Ey(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 Dp(e,t){let r=Ey(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 nB.info?.("The remote node name map",e,n,s),s}var nB,ru,Pp,hy=Ie(()=>{nB=L(Oc());ds();ru=require("msgpackr"),Pp=Symbol.for("remote-ids");a(Ey,"getIdMappingRecord");a(Y_,"exportIdMapping");a(sB,"remoteToLocalNodeId");a(Dp,"getIdOfRemoteNode")});var Zo,py=Ie(()=>{Zo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var aB={};je(aB,{Resources:()=>Lp,keyArrayToString:()=>nu,resetResources:()=>Ote,resources:()=>wi});function Ote(){return wi=new Lp}function nu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var iB,oB,Lp,wi,su=Ie(()=>{Sc();py();iB=L(W()),oB=L(_e()),Lp=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 oB.ServerError(`Conflicting paths for ${t}`);iB.default.error(c),i.Resource=new Zo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let 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 Pt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(Ote,"resetResources");a(nu,"keyArrayToString")});function Ty(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=lB,Nte(e.primaryStore,e.auditStore)):(c=cB,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{uB(cB[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 Sy(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function uB(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),dB(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,my.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,my.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 Nte(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=lB[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{uB(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function dB(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function _B(e){return e.nextTransaction||(Ty({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),dB(e)),e.nextTransaction}var my,cB,lB,Sy,gy=Ie(()=>{my=L(W());Ll();su();zi();cB=Object.create(null),lB=Object.create(null);a(Ty,"addSubscription");Sy=class extends Un{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(uB,"notifyFromTransactionData");a(Nte,"listenToCommits");a(dB,"nextTransaction");a(_B,"whenNextTransaction")});var SB={};je(SB,{commits_awaiting_replication:()=>au,getHDBNodeTable:()=>Sr,iterateRoutes:()=>z_,shouldReplicateToNode:()=>j_,subscribeToNodeUpdates:()=>cu});function Sr(){return fB||(fB=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;mB.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 j_(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 Ite(){cu(e=>{ea({},(t,r)=>{let n=e.name,s=EB.get(n);if(s||EB.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*z_(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){hB.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 hB,pB,iu,ou,mB,fB,EB,au,lu=Ie(()=>{De();ds();cp();hB=require("worker_threads"),pB=L(_e()),iu=L(se()),ou=L(M()),mB=L(Oc());server.nodes=[];a(Sr,"getHDBNodeTable");a(cu,"subscribeToNodeUpdates");a(j_,"shouldReplicateToNode");EB=new Map;bv((e,t,r)=>{if(r>server.nodes.length)throw new pB.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);au||(au=new Map,Ite());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(Ite,"startSubscriptionToReplications");a(z_,"iterateRoutes")});var yB={};je(yB,{connectedToNode:()=>Nc,disconnectedFromNode:()=>_u,ensureNode:()=>oo,requestClusterStatus:()=>RB,startOnMainThread:()=>Ry});async function Ry(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){Mp.set(i,W_(l.auditStore));break}}}Ci.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of z_(e))try{let c=!o.subscriptions;if(c){let u=ot();Sr().primaryStore.get(u)===void 0&&await oo(u,{name:u,url:e.url??ta(),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()||ta()&&i?.url===ta();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 io){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){io.get(_).iterator.remove(),io.delete(_);return}}return}if(c)return;if(!i.url){_t.info(`Node ${i.name} is missing url`);return}let l=io.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,io.set(i.url,l)),l.iterator=ea(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}];Mp.has(_)&&(T.push({replicateByDefault:E,name:ot(),start_time:Mp.get(_),end_time:Date.now(),replicates:!0}),Mp.delete(_));let m=j_(i,_),g=Ci.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)},wte);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):vp(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=io.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=io.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=io.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,Ci.onMessageByType)("disconnected-from-node",_u),(0,Ci.onMessageByType)("connected-to-node",Nc),(0,Ci.onMessageByType)("request-cluster-status",RB)}function RB(e,t){let r=[];for(let[n,s]of uu)try{let i=io.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,Ay.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 oo(e,t){let r=Sr();e=e??zs(t.url),t.name=e;try{if(t.ca){let s=new AB.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&&!TB.default.get(gB.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,Ay.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 Ci,Up,_t,Ay,TB,gB,AB,wte,io,_u,Nc,uu,Mp,Q_=Ie(()=>{De();Ci=L(dt());ds();Up=require("worker_threads");lu();_t=L(W()),Ay=require("lodash"),TB=L(se()),gB=L(M()),AB=require("crypto"),wte=200,io=new Map,uu=new Map,Mp=new Map;a(Ry,"startOnMainThread");a(RB,"requestClusterStatus");Up.parentPort&&(_u=a(e=>{Up.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Nc=a(e=>{Up.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ci.onMessageByType)("subscribe-to-node",e=>{du(e)}),(0,Ci.onMessageByType)("unsubscribe-from-node",e=>{vp(e)}));a(oo,"ensureNode")});var Bp=N((wNe,bB)=>{"use strict";var Cte=M().OPERATIONS_ENUM,yy=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Cte.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};bB.exports=yy});var NB=N((PNe,OB)=>{"use strict";var Pte={OPERATION:"operation",REFRESH:"refresh"},by=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Oy=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};OB.exports={JWTTokens:by,TOKEN_TYPE_ENUM:Pte,JWTRSAKeys:Oy}});var fu=N((LNe,PB)=>{"use strict";var X_=require("jsonwebtoken"),Ny=require("fs-extra"),Iy=te(),_s=M(),{handleHDBError:En,hdb_errors:Dte}=_e(),{HTTP_STATUS_CODES:hn,AUTHENTICATION_ERROR_MSGS:pn}=Dte,J_=W(),IB=Vh(),Py=dn(),Lte=un().update,Mte=Bp(),Ute=to(),{UserEventMsg:vte}=qs(),ra=se();ra.initSync();var wy=require("path"),{JWTTokens:Bte,JWTRSAKeys:Hte,TOKEN_TYPE_ENUM:Hp}=NB(),xte=ra.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ra.get(_s.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kte=ra.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ra.get(_s.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",xp="RS256",Cy;PB.exports={createTokens:Fte,validateOperationToken:qte,refreshOperationToken:Gte,validateRefreshToken:CB,getJWTRSAKeys:Z_};async function Fte(e){if(Iy.isEmpty(e)||typeof e!="object")throw En(new Error,pn.INVALID_AUTH_OBJECT,hn.BAD_REQUEST,void 0,void 0,!0);if(Iy.isEmpty(e.username))throw En(new Error,pn.USERNAME_REQUIRED,hn.BAD_REQUEST,void 0,void 0,!0);if(Iy.isEmpty(e.password))throw En(new Error,pn.PASSWORD_REQUIRED,hn.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Py.findAndValidateUser(e.username,e.password),!t)throw En(new Error,pn.INVALID_CREDENTIALS,hn.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw J_.error(E),En(new Error,pn.INVALID_CREDENTIALS,hn.UNAUTHORIZED,void 0,void 0,!0)}let r=await Z_(),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 wB(i,r.private_key,r.passphrase),c=await X_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kte,algorithm:xp,subject:Hp.REFRESH}),l=IB.hash(c),u=new Mte(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await Lte(u)}catch(E){J_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw En(new Error,pn.REFRESH_TOKEN_SAVE_FAILED,hn.INTERNAL_SERVER_ERROR);return Ute.signalUserChange(new vte(process.pid)),new Bte(o,c)}a(Fte,"createTokens");async function wB(e,t,r){return await X_.sign(e,{key:t,passphrase:r},{expiresIn:xte,algorithm:xp,subject:Hp.OPERATION})}a(wB,"signOperationToken");async function Z_(){if(Cy===void 0)try{let e=wy.join(ra.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PASSPHRASE_NAME),t=wy.join(ra.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=wy.join(ra.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_s.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await Ny.readFile(e)).toString(),s=(await Ny.readFile(t)).toString(),i=(await Ny.readFile(r)).toString();Cy=new Hte(i,s,n)}catch(e){throw J_.error(e),En(new Error,pn.NO_ENCRYPTION_KEYS,hn.INTERNAL_SERVER_ERROR)}return Cy}a(Z_,"getJWTRSAKeys");async function Gte(e){if(!e)throw En(new Error,pn.INVALID_BODY,hn.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw En(new Error,pn.REFRESH_TOKEN_REQUIRED,hn.BAD_REQUEST,void 0,void 0,!0);await CB(e.refresh_token);let t=await Z_(),r=await X_.decode(e.refresh_token);return{operation_token:await wB({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Gte,"refreshOperationToken");async function qte(e){try{let t=await Z_(),r=await X_.verify(e,t.public_key,{algorithms:xp,subject:Hp.OPERATION});return await Py.findAndValidateUser(r.username,void 0,!1)}catch(t){throw J_.warn(t),t.name&&t.name==="TokenExpiredError"?En(new Error,pn.TOKEN_EXPIRED,hn.FORBIDDEN):En(new Error,pn.INVALID_TOKEN,hn.UNAUTHORIZED)}}a(qte,"validateOperationToken");async function CB(e){let t;try{let r=await Z_(),n=await X_.verify(e,r.public_key,{algorithms:xp,subject:Hp.REFRESH});t=await Py.findAndValidateUser(n.username,void 0,!1)}catch(r){throw J_.warn(r),r.name&&r.name==="TokenExpiredError"?En(new Error,pn.TOKEN_EXPIRED,hn.FORBIDDEN):En(new Error,pn.INVALID_TOKEN,hn.UNAUTHORIZED)}if(!IB.validate(t.refresh_token,e))throw En(new Error,pn.INVALID_TOKEN,hn.UNAUTHORIZED);return t}a(CB,"validateRefreshToken")});var Xs=N(tH=>{"use strict";var ir=require("path"),{watch:$te}=require("chokidar"),mn=require("fs-extra"),Eu=require("node-forge"),HB=require("net"),{generateKeyPair:Ly,X509Certificate:ao,createPrivateKey:xB}=require("crypto"),Vte=require("util");Ly=Vte.promisify(Ly);var yt=Eu.pki,Qs=require("joi"),{v4:kB}=require("uuid"),{validateBySchema:By}=Tt(),pt=W(),Es=se(),hs=M(),{CONFIG_PARAMS:hu}=hs,Js=Ag(),{ClientError:sa}=_e(),wc=require("node:tls"),{relative:FB,join:Kte}=require("node:path"),{CERT_PREFERENCE_APP:UNe,CERTIFICATE_VALUES:DB}=Js,Yte=ja(),My=wt(),LB=parseInt(process.version.slice(1))<20,{table:Wte,getDatabases:jte,databases:Dy}=(De(),oe(lt)),{getJWTRSAKeys:MB}=fu();Object.assign(tH,{generateKeys:ky,updateConfigCert:jB,createCsr:tre,signCertificate:rre,setCertTable:pu,loadCertificates:KB,reviewSelfSignedCert:Gy,createTLSSelector:JB,listCertificates:ZB,addCertificate:cre,removeCertificate:ure,createNatsCerts:ire,generateCertsKeys:sre,getReplicationCert:tf,getReplicationCertAuth:ere,renewSelfSigned:ore,hostnamesFromCert:eH,getKey:dre});var{urlToNodeName:GB,getThisNodeUrl:zte,getThisNodeName:Fp,clearThisNodeName:Qte}=(ds(),oe(aa)),{readFileSync:Jte,statSync:qB}=require("node:fs"),vNe=se(),{getTicketKeys:Xte,onMessageFromWorkers:Zte}=dt(),na=W(),{isMainThread:$B}=require("worker_threads"),{TLSSocket:VB,createSecureContext:BNe}=require("node:tls"),Hy=3650,ef=["127.0.0.1","localhost","::1"],xy=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Zte(async e=>{e.type===hs.ITC_EVENT_TYPES.RESTART&&(Es.initSync(!0),await Gy())});var Dr;function oa(){return Dr||(Dr=jte().system.hdb_certificate,Dr||(Dr=Wte({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Dr}a(oa,"getCertTable");async function tf(){let e=JB("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(Fp());if(!r)return;let n=new ao(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(tf,"getReplicationCert");async function ere(){oa();let e=(await tf()).options.cert,r=new ao(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(ere,"getReplicationCertAuth");var UB,ia=new Map;function KB(){if(UB)return;UB=!0;let e=[{configKey:hu.TLS},{configKey:hu.OPERATIONSAPI_TLS}];oa();let t=ir.dirname(My.getConfigFilePath()),r;for(let{configKey:n}of e){let s=My.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&FB(Kte(t,"keys"),o);c&&vB(o,l=>{ia.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&$B){let d;vB(u,_=>{if(DB.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=zB(u),h=new ao(f),T;try{T=qy(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 ao(DB.cert)))return;let m=Dr.primaryStore.get(T),g=qB(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=Dr.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(KB,"loadCertificates");function vB(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&$B&&pt.warn(`Reloading ${r}:`,i),n=c,t(zB(i)))}catch(c){pt.error(`Error loading ${r}:`,i,c)}},"loadFile");mn.existsSync(e)?s(e,qB(e)):pt.error(`${r} file not found:`,e),$te(e,{persistent:!1}).on("change",s)}a(vB,"loadAndWatch");function Uy(){let e=zte();if(e==null){let t=ef[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return GB(e)}a(Uy,"getHost");function kp(){let e=Fp();if(e==null){let t=ef[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(kp,"getCommonName");async function tre(){let e=await tf(),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:kp()},...xy];pt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:YB()}];return pt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Eu.pki.certificationRequestToPem(n)}a(tre,"createCsr");function YB(){let e=ef.includes(kp())?ef:[...ef,kp()];return e.includes(Uy())||e.push(Uy()),[{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=>HB.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(YB,"certExtensions");async function rre(e){let t={},r=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;oa();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(ia.has(d.private_key_name)){n=ia.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await mn.exists(ir.join(r,d.private_key_name))){n=mn.readFile(ir.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await vy();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()+Hy),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(rre,"signCertificate");async function nre(e,t){await pu({name:Fp(),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(nre,"createCertificateTable");async function pu(e){let t=new ao(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},oa(),await Dr.patch(e)}a(pu,"setCertTable");async function ky(){let e=await Ly("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(ky,"generateKeys");async function Fy(e,t,r){let n=yt.createCertificate();if(!t){let o=await tf();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()+Hy);let i=[{name:"commonName",value:kp()},...xy];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(YB()),n.sign(e,Eu.md.sha256.create()),yt.certificateToPem(n)}a(Fy,"generateCertificates");async function vy(){let e=await ZB(),t;for(let r of e){if(!r.is_authority)continue;let n=await XB(r.private_key_name);if(r.private_key_name&&n&&new ao(r.certificate).checkPrivateKey(xB(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(vy,"getCertAuthority");async function WB(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()+Hy);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Es.get(hu.REPLICATION_HOSTNAME)??GB(Es.get(hu.REPLICATION_URL))??kB().split("-")[0]}`},...xy];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=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),c=ir.join(o,Js.PRIVATEKEY_PEM_NAME);return r&&await mn.writeFile(c,yt.privateKeyToPem(e)),n}a(WB,"generateCertAuthority");async function sre(){let{private_key:e,public_key:t}=await ky(),r=await WB(e,t),n=await Fy(e,t,r);await nre(n,r),jB()}a(sre,"generateCertsKeys");async function ire(){let e=await Fy(yt.privateKeyFromPem(Js.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Js.CERTIFICATE_VALUES.cert)),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Js.NATS_CERTIFICATE_PEM_NAME);await mn.exists(r)||await mn.writeFile(r,e);let n=ir.join(t,Js.NATS_CA_PEM_NAME);await mn.exists(n)||await mn.writeFile(n,Js.CERTIFICATE_VALUES.cert)}a(ire,"createNatsCerts");async function ore(){oa();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await Gy()}a(ore,"renewSelfSigned");async function Gy(){Qte(),await KB(),oa();let e=await vy();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=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),s,i=FB(n,r);try{s=yt.privateKeyFromPem(await mn.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 ky(),await mn.exists(ir.join(n,Js.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${kB().split("-")[0]}.pem`),await mn.writeFile(ir.join(n,i),yt.privateKeyToPem(s))}let o=await WB(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 tf()){let r=Fp();pt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await vy();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await Fy(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(Gy,"reviewSelfSignedCert");function jB(){let e=Yte(Object.keys(hs.CONFIG_PARAM_MAP),!0),t=ir.join(Es.getHdbBasePath(),hs.LICENSE_KEY_DIR_NAME),r=ir.join(t,Js.PRIVATEKEY_PEM_NAME),n=ir.join(t,Js.NATS_CERTIFICATE_PEM_NAME),s=ir.join(t,Js.NATS_CA_PEM_NAME),i=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),My.updateConfigValue(void 0,void 0,o,!1,!0)}a(jB,"updateConfigCert");function zB(e){return e.startsWith("-----BEGIN")?e:Jte(e,"utf8")}a(zB,"readPEM");var BB=wc.createSecureContext;wc.createSecureContext=function(e){if(!e.cert||!e.key)return BB(e);let t={...e};delete t.key,delete t.cert;let r=BB(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var QB=wc.Server;wc.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),QB.call(this,e,t)};wc.Server.prototype=QB.prototype;var are=VB.prototype._init;VB.prototype._init=function(e,t){are.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 JB(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 Dy.system.hdb_certificate.search([])){let E=_.certificate,f=new ao(E);_.is_authority&&(f.asString=E,Ic.set(f.subject,E))}for await(let _ of Dy.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 XB(_.private_key_name),T=_.certificate,m=new ao(T);if(Ic.has(m.issuer)&&(T+=`
|