@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/bin/BinObjects.js +17 -0
  2. package/bin/cliOperations.js +157 -0
  3. package/bin/copyDb.ts +280 -0
  4. package/bin/harper.js +156 -0
  5. package/bin/install.js +15 -0
  6. package/bin/lite.js +5 -0
  7. package/bin/restart.js +201 -0
  8. package/bin/run.js +409 -0
  9. package/bin/status.js +65 -0
  10. package/bin/stop.js +22 -0
  11. package/bin/upgrade.js +134 -0
  12. package/components/Application.ts +646 -0
  13. package/components/ApplicationScope.ts +49 -0
  14. package/components/Component.ts +53 -0
  15. package/components/ComponentV1.ts +342 -0
  16. package/components/DEFAULT_CONFIG.ts +18 -0
  17. package/components/EntryHandler.ts +227 -0
  18. package/components/Logger.ts +14 -0
  19. package/components/OptionsWatcher.ts +354 -0
  20. package/components/PluginModule.ts +6 -0
  21. package/components/Scope.ts +329 -0
  22. package/components/componentLoader.ts +529 -0
  23. package/components/deriveCommonPatternBase.ts +31 -0
  24. package/components/deriveGlobOptions.ts +44 -0
  25. package/components/deriveURLPath.ts +57 -0
  26. package/components/operations.js +658 -0
  27. package/components/operationsValidation.js +246 -0
  28. package/components/packageComponent.ts +39 -0
  29. package/components/requestRestart.ts +26 -0
  30. package/components/resolveBaseURLPath.ts +38 -0
  31. package/components/status/ComponentStatus.ts +110 -0
  32. package/components/status/ComponentStatusRegistry.ts +251 -0
  33. package/components/status/api.ts +153 -0
  34. package/components/status/crossThread.ts +405 -0
  35. package/components/status/errors.ts +152 -0
  36. package/components/status/index.ts +44 -0
  37. package/components/status/internal.ts +65 -0
  38. package/components/status/registry.ts +12 -0
  39. package/components/status/types.ts +96 -0
  40. package/config/RootConfigWatcher.ts +59 -0
  41. package/config/configHelpers.ts +11 -0
  42. package/config/configUtils.js +967 -0
  43. package/config/harperConfigEnvVars.ts +641 -0
  44. package/dataLayer/CreateAttributeObject.js +25 -0
  45. package/dataLayer/CreateTableObject.js +11 -0
  46. package/dataLayer/DataLayerObjects.js +43 -0
  47. package/dataLayer/DeleteBeforeObject.js +22 -0
  48. package/dataLayer/DeleteObject.js +25 -0
  49. package/dataLayer/DropAttributeObject.js +11 -0
  50. package/dataLayer/GetBackupObject.js +22 -0
  51. package/dataLayer/InsertObject.js +24 -0
  52. package/dataLayer/ReadAuditLogObject.js +24 -0
  53. package/dataLayer/SQLSearch.js +1335 -0
  54. package/dataLayer/SearchByConditionsObject.js +61 -0
  55. package/dataLayer/SearchByHashObject.js +21 -0
  56. package/dataLayer/SearchObject.js +45 -0
  57. package/dataLayer/SqlSearchObject.js +14 -0
  58. package/dataLayer/UpdateObject.js +23 -0
  59. package/dataLayer/UpsertObject.js +23 -0
  60. package/dataLayer/bulkLoad.js +813 -0
  61. package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
  62. package/dataLayer/dataObjects/UpsertObject.js +23 -0
  63. package/dataLayer/delete.js +164 -0
  64. package/dataLayer/export.js +381 -0
  65. package/dataLayer/getBackup.js +40 -0
  66. package/dataLayer/harperBridge/BridgeMethods.js +81 -0
  67. package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
  68. package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
  69. package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
  70. package/dataLayer/harperBridge/harperBridge.js +21 -0
  71. package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
  72. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
  73. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
  74. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
  75. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
  76. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
  77. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
  78. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
  79. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
  80. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
  81. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
  82. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
  83. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
  84. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
  85. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
  86. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
  87. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
  88. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
  89. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
  90. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
  91. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
  92. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
  93. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
  94. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
  95. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
  96. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
  97. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
  98. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
  99. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
  100. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
  101. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
  102. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
  103. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
  104. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
  105. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
  106. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
  107. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
  108. package/dataLayer/hdbInfoController.js +254 -0
  109. package/dataLayer/insert.js +266 -0
  110. package/dataLayer/readAuditLog.js +59 -0
  111. package/dataLayer/schema.js +366 -0
  112. package/dataLayer/schemaDescribe.js +289 -0
  113. package/dataLayer/search.js +60 -0
  114. package/dataLayer/transaction.js +17 -0
  115. package/dataLayer/update.js +124 -0
  116. package/dist/components/Logger.d.ts +12 -0
  117. package/dist/components/Logger.js +3 -0
  118. package/dist/components/Logger.js.map +1 -0
  119. package/dist/components/Scope.d.ts +14 -4
  120. package/dist/components/Scope.js +18 -10
  121. package/dist/components/Scope.js.map +1 -1
  122. package/dist/components/componentLoader.js +16 -9
  123. package/dist/components/componentLoader.js.map +1 -1
  124. package/dist/components/operations.js +2 -2
  125. package/dist/components/operations.js.map +1 -1
  126. package/dist/config/configUtils.d.ts +1 -1
  127. package/dist/config/configUtils.js +1 -1
  128. package/dist/config/configUtils.js.map +1 -1
  129. package/dist/dataLayer/CreateTableObject.d.ts +2 -2
  130. package/dist/dataLayer/CreateTableObject.js +2 -2
  131. package/dist/dataLayer/CreateTableObject.js.map +1 -1
  132. package/dist/dataLayer/delete.d.ts +1 -1
  133. package/dist/dataLayer/schema.js +6 -5
  134. package/dist/dataLayer/schema.js.map +1 -1
  135. package/dist/dataLayer/schemaDescribe.js +1 -1
  136. package/dist/dataLayer/schemaDescribe.js.map +1 -1
  137. package/dist/index.d.ts +1 -1
  138. package/dist/index.js +2 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/resources/DatabaseTransaction.d.ts +1 -1
  141. package/dist/resources/IterableEventQueue.d.ts +1 -1
  142. package/dist/resources/LMDBTransaction.d.ts +5 -1
  143. package/dist/resources/Resource.d.ts +1 -1
  144. package/dist/resources/RocksIndexStore.d.ts +3 -3
  145. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  146. package/dist/resources/Table.d.ts +15 -6
  147. package/dist/resources/Table.js +4 -1
  148. package/dist/resources/Table.js.map +1 -1
  149. package/dist/resources/analytics/read.js +32 -22
  150. package/dist/resources/analytics/read.js.map +1 -1
  151. package/dist/resources/analytics/write.js +3 -6
  152. package/dist/resources/analytics/write.js.map +1 -1
  153. package/dist/resources/auditStore.d.ts +3 -3
  154. package/dist/resources/blob.d.ts +25 -2
  155. package/dist/resources/databases.d.ts +12 -2
  156. package/dist/resources/databases.js +22 -19
  157. package/dist/resources/databases.js.map +1 -1
  158. package/dist/resources/search.js +11 -5
  159. package/dist/resources/search.js.map +1 -1
  160. package/dist/resources/transaction.d.ts +2 -1
  161. package/dist/security/auth.js +1 -1
  162. package/dist/security/auth.js.map +1 -1
  163. package/dist/security/cryptoHash.d.ts +2 -2
  164. package/dist/security/jsLoader.js +243 -66
  165. package/dist/security/jsLoader.js.map +1 -1
  166. package/dist/security/keys.js +4 -5
  167. package/dist/security/keys.js.map +1 -1
  168. package/dist/security/user.js +3 -3
  169. package/dist/security/user.js.map +1 -1
  170. package/dist/server/REST.js +16 -2
  171. package/dist/server/REST.js.map +1 -1
  172. package/dist/server/Server.d.ts +2 -1
  173. package/dist/server/Server.js.map +1 -1
  174. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  175. package/dist/server/fastifyRoutes.js +2 -0
  176. package/dist/server/fastifyRoutes.js.map +1 -1
  177. package/dist/server/http.js +12 -6
  178. package/dist/server/http.js.map +1 -1
  179. package/dist/server/jobs/JobObject.d.ts +3 -3
  180. package/dist/server/loadRootComponents.js +1 -0
  181. package/dist/server/loadRootComponents.js.map +1 -1
  182. package/dist/server/operationsServer.js +3 -1
  183. package/dist/server/operationsServer.js.map +1 -1
  184. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  185. package/dist/server/serverHelpers/Request.d.ts +5 -5
  186. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  187. package/dist/server/threads/manageThreads.d.ts +2 -2
  188. package/dist/server/threads/manageThreads.js +50 -35
  189. package/dist/server/threads/manageThreads.js.map +1 -1
  190. package/dist/server/threads/socketRouter.d.ts +1 -1
  191. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  192. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  193. package/dist/utility/common_utils.d.ts +3 -3
  194. package/dist/utility/environment/systemInformation.d.ts +1 -0
  195. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  196. package/dist/utility/globalSchema.d.ts +1 -1
  197. package/dist/utility/hdbTerms.d.ts +3 -0
  198. package/dist/utility/hdbTerms.js +3 -0
  199. package/dist/utility/hdbTerms.js.map +1 -1
  200. package/dist/utility/installation.d.ts +2 -4
  201. package/dist/utility/installation.js.map +1 -1
  202. package/dist/utility/lmdb/commonUtility.d.ts +1 -0
  203. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  204. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  205. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  206. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  207. package/dist/utility/logging/harper_logger.d.ts +6 -6
  208. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  209. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  210. package/dist/validation/common_validators.d.ts +4 -3
  211. package/dist/validation/configValidator.d.ts +3 -2
  212. package/index.d.ts +56 -0
  213. package/index.js +41 -0
  214. package/json/systemSchema.json +373 -0
  215. package/launchServiceScripts/launchHarperDB.js +3 -0
  216. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  217. package/package.json +21 -3
  218. package/resources/DatabaseTransaction.ts +378 -0
  219. package/resources/ErrorResource.ts +57 -0
  220. package/resources/IterableEventQueue.ts +94 -0
  221. package/resources/LMDBTransaction.ts +349 -0
  222. package/resources/RecordEncoder.ts +702 -0
  223. package/resources/RequestTarget.ts +134 -0
  224. package/resources/Resource.ts +789 -0
  225. package/resources/ResourceInterface.ts +221 -0
  226. package/resources/ResourceInterfaceV2.ts +53 -0
  227. package/resources/ResourceV2.ts +67 -0
  228. package/resources/Resources.ts +162 -0
  229. package/resources/RocksIndexStore.ts +70 -0
  230. package/resources/RocksTransactionLogStore.ts +352 -0
  231. package/resources/Table.ts +4527 -0
  232. package/resources/analytics/hostnames.ts +72 -0
  233. package/resources/analytics/metadata.ts +10 -0
  234. package/resources/analytics/read.ts +252 -0
  235. package/resources/analytics/write.ts +803 -0
  236. package/resources/auditStore.ts +556 -0
  237. package/resources/blob.ts +1268 -0
  238. package/resources/crdt.ts +125 -0
  239. package/resources/dataLoader.ts +527 -0
  240. package/resources/databases.ts +1290 -0
  241. package/resources/graphql.ts +221 -0
  242. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  243. package/resources/indexes/customIndexes.ts +7 -0
  244. package/resources/indexes/vector.ts +38 -0
  245. package/resources/jsResource.ts +86 -0
  246. package/resources/loadEnv.ts +22 -0
  247. package/resources/login.ts +18 -0
  248. package/resources/openApi.ts +409 -0
  249. package/resources/registrationDeprecated.ts +8 -0
  250. package/resources/replayLogs.ts +136 -0
  251. package/resources/roles.ts +98 -0
  252. package/resources/search.ts +1301 -0
  253. package/resources/tracked.ts +584 -0
  254. package/resources/transaction.ts +89 -0
  255. package/resources/transactionBroadcast.ts +258 -0
  256. package/security/auth.ts +376 -0
  257. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  258. package/security/certificateVerification/configValidation.ts +107 -0
  259. package/security/certificateVerification/crlVerification.ts +623 -0
  260. package/security/certificateVerification/index.ts +121 -0
  261. package/security/certificateVerification/ocspVerification.ts +148 -0
  262. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  263. package/security/certificateVerification/types.ts +128 -0
  264. package/security/certificateVerification/verificationConfig.ts +138 -0
  265. package/security/certificateVerification/verificationUtils.ts +447 -0
  266. package/security/cryptoHash.js +42 -0
  267. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  268. package/security/data_objects/PermissionResponseObject.js +115 -0
  269. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  270. package/security/fastifyAuth.js +169 -0
  271. package/security/impersonation.ts +160 -0
  272. package/security/jsLoader.ts +716 -0
  273. package/security/keys.js +948 -0
  274. package/security/permissionsTranslator.js +300 -0
  275. package/security/role.js +218 -0
  276. package/security/tokenAuthentication.ts +228 -0
  277. package/security/user.ts +449 -0
  278. package/server/DurableSubscriptionsSession.ts +503 -0
  279. package/server/REST.ts +407 -0
  280. package/server/Server.ts +89 -0
  281. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  282. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  283. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  284. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  285. package/server/fastifyRoutes.ts +205 -0
  286. package/server/graphqlQuerying.ts +700 -0
  287. package/server/http.ts +640 -0
  288. package/server/itc/serverHandlers.js +161 -0
  289. package/server/itc/utility/ITCEventObject.js +10 -0
  290. package/server/jobs/JobObject.js +24 -0
  291. package/server/jobs/jobProcess.js +69 -0
  292. package/server/jobs/jobRunner.js +162 -0
  293. package/server/jobs/jobs.js +304 -0
  294. package/server/loadRootComponents.js +44 -0
  295. package/server/mqtt.ts +485 -0
  296. package/server/nodeName.ts +75 -0
  297. package/server/operationsServer.ts +313 -0
  298. package/server/serverHelpers/Headers.ts +108 -0
  299. package/server/serverHelpers/JSONStream.ts +269 -0
  300. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  301. package/server/serverHelpers/Request.ts +158 -0
  302. package/server/serverHelpers/contentTypes.ts +637 -0
  303. package/server/serverHelpers/requestTimePlugin.js +57 -0
  304. package/server/serverHelpers/serverHandlers.js +148 -0
  305. package/server/serverHelpers/serverUtilities.ts +473 -0
  306. package/server/serverRegistry.ts +8 -0
  307. package/server/static.ts +187 -0
  308. package/server/status/definitions.ts +37 -0
  309. package/server/status/index.ts +125 -0
  310. package/server/storageReclamation.ts +93 -0
  311. package/server/threads/itc.js +89 -0
  312. package/server/threads/manageThreads.js +594 -0
  313. package/server/threads/socketRouter.ts +360 -0
  314. package/server/threads/threadServer.js +279 -0
  315. package/server/throttle.ts +73 -0
  316. package/sqlTranslator/SelectValidator.js +330 -0
  317. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  318. package/sqlTranslator/deleteTranslator.js +67 -0
  319. package/sqlTranslator/index.js +242 -0
  320. package/sqlTranslator/sql_statement_bucket.js +472 -0
  321. package/static/defaultConfig.yaml +3 -0
  322. package/studio/web/HDBDogOnly.svg +78 -0
  323. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  324. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  326. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  327. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  328. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  329. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  330. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  331. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  332. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  333. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  334. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  335. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  336. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  337. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  338. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  339. package/studio/web/assets/index-BTgXJX9d.js +235 -0
  340. package/studio/web/assets/index-BTgXJX9d.js.map +1 -0
  341. package/studio/web/assets/index-C-GXfcup.js +37 -0
  342. package/studio/web/assets/index-C-GXfcup.js.map +1 -0
  343. package/studio/web/assets/index-PFlNdimM.js +2 -0
  344. package/studio/web/assets/index-PFlNdimM.js.map +1 -0
  345. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  346. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  347. package/studio/web/assets/index.lazy-C3TJZJ4o.js +266 -0
  348. package/studio/web/assets/index.lazy-C3TJZJ4o.js.map +1 -0
  349. package/studio/web/assets/profiler-DotzgiCJ.js +2 -0
  350. package/studio/web/assets/profiler-DotzgiCJ.js.map +1 -0
  351. package/studio/web/assets/react-redux-VxUEx_mU.js +6 -0
  352. package/studio/web/assets/react-redux-VxUEx_mU.js.map +1 -0
  353. package/studio/web/assets/startRecording-B_9J9Csd.js +3 -0
  354. package/studio/web/assets/startRecording-B_9J9Csd.js.map +1 -0
  355. package/studio/web/fabric-signup-background.webp +0 -0
  356. package/studio/web/fabric-signup-text.png +0 -0
  357. package/studio/web/favicon_purple.png +0 -0
  358. package/studio/web/github-icon.svg +15 -0
  359. package/studio/web/harper-fabric_black.png +0 -0
  360. package/studio/web/harper-fabric_white.png +0 -0
  361. package/studio/web/harper-studio_white.png +0 -0
  362. package/studio/web/index.html +16 -0
  363. package/studio/web/running.css +148 -0
  364. package/studio/web/running.html +147 -0
  365. package/studio/web/running.js +111 -0
  366. package/upgrade/UpgradeObjects.js +13 -0
  367. package/upgrade/directives/directivesController.js +90 -0
  368. package/upgrade/directivesManager.js +139 -0
  369. package/upgrade/upgradePrompt.js +124 -0
  370. package/upgrade/upgradeUtilities.js +28 -0
  371. package/utility/AWS/AWSConnector.js +29 -0
  372. package/utility/OperationFunctionCaller.js +63 -0
  373. package/utility/assignCmdEnvVariables.js +62 -0
  374. package/utility/common_utils.js +867 -0
  375. package/utility/environment/environmentManager.js +208 -0
  376. package/utility/environment/systemInformation.js +355 -0
  377. package/utility/errors/commonErrors.js +267 -0
  378. package/utility/errors/hdbError.js +146 -0
  379. package/utility/functions/date/dateFunctions.js +65 -0
  380. package/utility/functions/geo.js +355 -0
  381. package/utility/functions/sql/alaSQLExtension.js +104 -0
  382. package/utility/globalSchema.js +35 -0
  383. package/utility/hdbTerms.ts +819 -0
  384. package/utility/install/checkJWTTokensExist.js +62 -0
  385. package/utility/install/harperdb.conf +15 -0
  386. package/utility/install/harperdb.service +14 -0
  387. package/utility/install/installer.js +635 -0
  388. package/utility/installation.ts +30 -0
  389. package/utility/lmdb/DBIDefinition.js +20 -0
  390. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  391. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  392. package/utility/lmdb/OpenDBIObject.js +31 -0
  393. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  394. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  395. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  396. package/utility/lmdb/cleanLMDBMap.js +65 -0
  397. package/utility/lmdb/commonUtility.js +119 -0
  398. package/utility/lmdb/deleteUtility.js +128 -0
  399. package/utility/lmdb/environmentUtility.js +477 -0
  400. package/utility/lmdb/searchCursorFunctions.js +187 -0
  401. package/utility/lmdb/searchUtility.js +918 -0
  402. package/utility/lmdb/terms.js +57 -0
  403. package/utility/lmdb/writeUtility.js +407 -0
  404. package/utility/logging/harper_logger.js +876 -0
  405. package/utility/logging/logRotator.js +157 -0
  406. package/utility/logging/logger.ts +24 -0
  407. package/utility/logging/readLog.js +355 -0
  408. package/utility/logging/transactionLog.js +57 -0
  409. package/utility/mount_hdb.js +59 -0
  410. package/utility/npmUtilities.js +102 -0
  411. package/utility/operationPermissions.ts +112 -0
  412. package/utility/operation_authorization.js +836 -0
  413. package/utility/packageUtils.js +55 -0
  414. package/utility/password.ts +99 -0
  415. package/utility/processManagement/processManagement.js +187 -0
  416. package/utility/processManagement/servicesConfig.js +56 -0
  417. package/utility/scripts/restartHdb.js +24 -0
  418. package/utility/scripts/user_data.sh +13 -0
  419. package/utility/signalling.js +36 -0
  420. package/utility/terms/certificates.js +81 -0
  421. package/utility/when.ts +20 -0
  422. package/v1.d.ts +39 -0
  423. package/v1.js +41 -0
  424. package/v2.d.ts +39 -0
  425. package/v2.js +41 -0
  426. package/validation/bulkDeleteValidator.js +24 -0
  427. package/validation/check_permissions.js +19 -0
  428. package/validation/common_validators.js +95 -0
  429. package/validation/configValidator.js +331 -0
  430. package/validation/deleteValidator.js +15 -0
  431. package/validation/fileLoadValidator.js +153 -0
  432. package/validation/insertValidator.js +40 -0
  433. package/validation/installValidator.js +37 -0
  434. package/validation/readLogValidator.js +64 -0
  435. package/validation/role_validation.js +320 -0
  436. package/validation/schemaMetadataValidator.js +42 -0
  437. package/validation/searchValidator.js +166 -0
  438. package/validation/statusValidator.ts +66 -0
  439. package/validation/transactionLogValidator.js +33 -0
  440. package/validation/user_validation.js +55 -0
  441. package/validation/validationWrapper.js +105 -0
  442. package/dist/resources/analytics/profile.d.ts +0 -2
  443. package/dist/resources/analytics/profile.js +0 -144
  444. package/dist/resources/analytics/profile.js.map +0 -1
@@ -0,0 +1,187 @@
1
+ import { realpathSync, existsSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { Scope } from '../components/Scope';
4
+ import send from 'send';
5
+
6
+ /**
7
+ * The static plugin handles serving static files from the respective application directory.
8
+ * It uses the default `EntryHandler` configured via `files` and `urlPath` to watch for file changes and updates the in-memory map of static files.
9
+ *
10
+ * Additionally, it supports additional options:
11
+ * - `index`: If enabled, it will serve `index.html` files from directories.
12
+ * - `extensions`: An array of file extensions to try when serving files. If a file is not found, it will try appending each extension in order. For example, if set to `['html'], and the request is `/page`, it will try `/page.html` if `/page` is not found.
13
+ * - `fallthrough`: If true, it will fall through to the next handler if the file is not found. If false, it will return a 404 error.
14
+ * - `notFound`: Can be specified as a string to serve a custom 404 page, or an object with `file` and `statusCode` properties to serve a custom file with a specific status code. This is useful for hosting SPAs that use client-side routing. Make sure to set `fallthrough` to `false`!
15
+ *
16
+ * This plugin dynamically updates its behavior based on the current configuration file. Users can make updates and immediately see the changes reflect in the next request.
17
+ *
18
+ * Updates to the `files` or `urlPath` options will clear the in-memory maps and allow them to regenerate based on the new configuration (since the default EntryHandler will regenerate anyways).
19
+ */
20
+ export function handleApplication(scope: Scope) {
21
+ // in-memory map of static files
22
+ // keys are the URL paths, values are the absolute paths to the files
23
+ const staticFiles = new Map<string, string>();
24
+ const indexEntries = new Map<string, string>();
25
+
26
+ // If the `files` or `urlPath` options change, clear the maps and let them regenerate
27
+ scope.options.on('change', (key) => {
28
+ if (key[0] === 'files' || key[0] === 'urlPath') {
29
+ // If the files or urlPath options change, we need to reinitialize the static files map
30
+ staticFiles.clear();
31
+ indexEntries.clear();
32
+ scope.logger.info(`Static files reinitialized due to change in ${key.join('.')}`);
33
+ return;
34
+ }
35
+ });
36
+
37
+ // Handle entry events for the default entry handler based on the `files` and `urlPath` options
38
+ scope.handleEntry((entry) => {
39
+ switch (entry.eventType) {
40
+ // Directories only matter for the `index` files
41
+ case 'addDir':
42
+ case 'unlinkDir':
43
+ // Handle `index.html` for directories for if/when the user enables the `index` option
44
+ const indexPath = join(entry.absolutePath, 'index.html');
45
+ if (existsSync(indexPath)) {
46
+ indexEntries[entry.eventType === 'addDir' ? 'set' : 'delete'](entry.urlPath, indexPath);
47
+ }
48
+ break;
49
+ // Otherwise, user must specify pattern to match individual files
50
+ case 'add':
51
+ // Store the file in memory for serving
52
+ staticFiles.set(entry.urlPath, entry.absolutePath);
53
+ // If the file is an index.html, also store it in the index entries
54
+ if (entry.urlPath.endsWith('index.html')) {
55
+ // Without trailing slash; null -> 301 redirect to trailing slash
56
+ indexEntries.set(dirname(entry.urlPath), null);
57
+ // With trailing slash; serves the index.html file
58
+ indexEntries.set(join(dirname(entry.urlPath), '/'), entry.absolutePath);
59
+ }
60
+ break;
61
+ case 'unlink':
62
+ // Remove the file from memory when it is deleted
63
+ staticFiles.delete(entry.urlPath);
64
+ // If the file is an index.html, remove it from the index entries as well
65
+ if (entry.urlPath.endsWith('index.html')) {
66
+ indexEntries.delete(dirname(entry.urlPath));
67
+ }
68
+ break;
69
+ }
70
+ });
71
+
72
+ scope.server.http(
73
+ (req, next) => {
74
+ // TODO: Not sure if the isWebSocket check is still necessary
75
+ if (req.method !== 'GET' || req.isWebSocket) return next(req);
76
+
77
+ // Default fallthrough to `true`
78
+ const fallthrough = scope.options.get(['fallthrough']) ?? true;
79
+
80
+ if (typeof fallthrough !== 'boolean') {
81
+ throw new Error(`Invalid fallthrough option: ${fallthrough}. Must be a boolean.`);
82
+ }
83
+
84
+ // Attempt to retrieve the requested static file from memory
85
+ let staticFile = staticFiles.get(req.pathname);
86
+
87
+ // If the file is not found, try matching index
88
+ if (!staticFile) {
89
+ const index = scope.options.get(['index']) ?? true;
90
+
91
+ if (typeof index !== 'boolean') {
92
+ throw new Error(`Invalid index option: ${index}. Must be a boolean.`);
93
+ }
94
+
95
+ if (index) {
96
+ // Retrieve index entry
97
+ staticFile = indexEntries.get(req.pathname);
98
+
99
+ // If `null`, redirect to trailing slash
100
+ if (staticFile === null) {
101
+ return {
102
+ status: 301,
103
+ headers: {
104
+ Location: join(req.pathname, '/'),
105
+ },
106
+ };
107
+ }
108
+ }
109
+ }
110
+
111
+ // If the file is still not found, try matching extensions
112
+ if (!staticFile) {
113
+ const extensions = scope.options.get(['extensions']) ?? [];
114
+ if (!Array.isArray(extensions) || extensions.some((ext) => typeof ext !== 'string')) {
115
+ throw new Error(`Invalid extensions option: ${extensions}. Must be an array of strings.`);
116
+ }
117
+
118
+ for (const ext of extensions) {
119
+ staticFile = staticFiles.get(`${req.pathname}.${ext}`);
120
+ // break on first match
121
+ if (staticFile) break;
122
+ }
123
+ }
124
+
125
+ // If an entry matched, serve it
126
+ if (staticFile) {
127
+ // The benefit to using `send` is that it handles a lot of edge cases and headers for us.
128
+ return {
129
+ handlesHeaders: true,
130
+ body: send(req, realpathSync(staticFile)),
131
+ };
132
+ }
133
+
134
+ // If fallthrough is true pass along the request to the next handler
135
+ if (fallthrough) {
136
+ return next(req);
137
+ }
138
+
139
+ // Otherwise, handle not found
140
+
141
+ const notFound = scope.options.get(['notFound']);
142
+
143
+ validateNotFoundOption(notFound);
144
+
145
+ if (!notFound) {
146
+ return {
147
+ status: 404,
148
+ body: 'File not found',
149
+ };
150
+ }
151
+
152
+ const notFoundPath = join(scope.directory, typeof notFound === 'string' ? notFound : notFound.file);
153
+ const statusCode = typeof notFound === 'object' ? notFound.statusCode : 404;
154
+
155
+ if (!existsSync(notFoundPath)) {
156
+ throw new Error(`Not found file does not exist: ${notFoundPath}`);
157
+ }
158
+
159
+ return {
160
+ status: statusCode,
161
+ handlesHeaders: true,
162
+ body: send(req, realpathSync(notFoundPath)),
163
+ };
164
+ },
165
+ { runFirst: true }
166
+ );
167
+ }
168
+
169
+ function validateNotFoundOption(
170
+ notFound: any
171
+ ): asserts notFound is undefined | string | { file: string; statusCode: number } {
172
+ if (notFound === undefined || typeof notFound === 'string') return;
173
+
174
+ if (typeof notFound === 'object' && notFound !== null && !Array.isArray(notFound)) {
175
+ if (!('file' in notFound) || typeof notFound.file !== 'string') {
176
+ throw new Error(`Invalid \`notFound.file\` option: ${notFound.file}. Must be a string.`);
177
+ }
178
+ if (!('statusCode' in notFound) || typeof notFound.statusCode !== 'number') {
179
+ throw new Error(`Invalid \`notFound.statusCode\` option: ${notFound.statusCode}. Must be a number.`);
180
+ }
181
+ return;
182
+ }
183
+
184
+ throw new Error(
185
+ `Invalid notFound option: ${notFound}. Must be a string or an object with file and statusCode properties.`
186
+ );
187
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Single source of truth for Harper status system definitions
3
+ */
4
+
5
+ // Define status configurations with const assertion for literal types
6
+ export const STATUS_DEFINITIONS = {
7
+ primary: {
8
+ allowedValues: null, // Any string is valid
9
+ },
10
+ maintenance: {
11
+ allowedValues: null, // Any string is valid
12
+ },
13
+ availability: {
14
+ allowedValues: ['Available', 'Unavailable'] as const,
15
+ },
16
+ } as const;
17
+
18
+ // Derive types from the definitions
19
+ export type StatusDefinitions = typeof STATUS_DEFINITIONS;
20
+ export type StatusId = keyof StatusDefinitions;
21
+
22
+ // Status value types derived from definitions
23
+ export type StatusValueMap = {
24
+ [K in StatusId]: StatusDefinitions[K]['allowedValues'] extends readonly (infer U)[] ? U : string;
25
+ };
26
+
27
+ // Status record structure
28
+ export interface StatusRecord<T extends StatusId = StatusId> {
29
+ id: T;
30
+ status: StatusValueMap[T];
31
+ __createdtime__?: number;
32
+ __updatedtime__?: number;
33
+ }
34
+
35
+ // Utility constants
36
+ export const STATUS_IDS = Object.keys(STATUS_DEFINITIONS) as StatusId[];
37
+ export const DEFAULT_STATUS_ID: StatusId = 'primary';
@@ -0,0 +1,125 @@
1
+ import { table } from '../../resources/databases.ts';
2
+ import { handleHDBError, hdbErrors } from '../../utility/errors/hdbError.js';
3
+ import { loggerWithTag } from '../../utility/logging/logger.ts';
4
+ import { validateStatus } from '../../validation/statusValidator.ts';
5
+ import { type StatusId, type StatusValueMap, type StatusRecord, DEFAULT_STATUS_ID } from './definitions.ts';
6
+ import { internal as statusInternal, type AggregatedComponentStatus } from '../../components/status/index.ts';
7
+ import { restartNeeded } from '../../components/requestRestart.ts';
8
+
9
+ export { clearStatus as clear, getStatus as get, setStatus as set };
10
+
11
+ // Re-export types for convenience
12
+ export type { StatusId, StatusRecord, StatusValueMap } from './definitions.ts';
13
+
14
+ export { STATUS_IDS, DEFAULT_STATUS_ID } from './definitions.ts';
15
+
16
+ const { HTTP_STATUS_CODES } = hdbErrors;
17
+
18
+ // For direct function calls, we don't need the operation fields
19
+ type StatusRequestBody = {
20
+ id: StatusId;
21
+ };
22
+
23
+ type StatusWriteRequestBody<T extends StatusId = StatusId> = {
24
+ id?: T;
25
+ status: StatusValueMap[T];
26
+ };
27
+
28
+ // Lazy-initialize the Status table to avoid initialization issues during module import
29
+ let _statusTable: ReturnType<typeof table>;
30
+
31
+ function getStatusTable() {
32
+ if (!_statusTable) {
33
+ _statusTable = table({
34
+ database: 'system',
35
+ table: 'hdb_status',
36
+ replicate: false,
37
+ attributes: [
38
+ {
39
+ name: 'id',
40
+ isPrimaryKey: true,
41
+ },
42
+ {
43
+ name: 'status',
44
+ },
45
+ {
46
+ name: '__createdtime__',
47
+ },
48
+ {
49
+ name: '__updatedtime__',
50
+ },
51
+ ],
52
+ });
53
+ }
54
+ return _statusTable;
55
+ }
56
+
57
+ // Export Status as a getter for compatibility with modules that need direct table access
58
+ export const Status = {
59
+ get primaryStore() {
60
+ return getStatusTable().primaryStore;
61
+ },
62
+ };
63
+
64
+ const statusLogger = loggerWithTag('status');
65
+
66
+ function clearStatus({ id }: StatusRequestBody): Promise<boolean> {
67
+ statusLogger.debug?.('clearStatus', id);
68
+ return getStatusTable().delete(id);
69
+ }
70
+
71
+ interface AggregatedComponentStatusWithName extends AggregatedComponentStatus {
72
+ name: string;
73
+ }
74
+
75
+ interface AllStatusSummary {
76
+ systemStatus: Promise<AsyncIterable<StatusRecord>>;
77
+ componentStatus: AggregatedComponentStatusWithName[];
78
+ restartRequired: boolean;
79
+ }
80
+
81
+ async function getAllStatus(): Promise<AllStatusSummary> {
82
+ statusLogger.debug?.('getAllStatus');
83
+ const statusRecords = getStatusTable().search([]);
84
+
85
+ // Get aggregated component statuses from all threads
86
+ const aggregatedStatuses = await statusInternal.query.allThreads();
87
+ const componentStatusArray: AggregatedComponentStatusWithName[] = Array.from(aggregatedStatuses.entries()).map(
88
+ ([name, status]) => ({
89
+ name,
90
+ ...status,
91
+ })
92
+ );
93
+
94
+ // Get restart flag status
95
+ const restartRequired = restartNeeded();
96
+
97
+ return {
98
+ systemStatus: statusRecords as Promise<AsyncIterable<StatusRecord>>,
99
+ componentStatus: componentStatusArray,
100
+ restartRequired,
101
+ };
102
+ }
103
+
104
+ function getStatus({ id }: Partial<StatusRequestBody>): Promise<StatusRecord | AllStatusSummary> {
105
+ if (!id) {
106
+ statusLogger.debug?.('getStatus', 'all');
107
+ return getAllStatus();
108
+ }
109
+
110
+ statusLogger.debug?.('getStatus', id);
111
+ return getStatusTable().get(id) as unknown as Promise<StatusRecord>;
112
+ }
113
+
114
+ function setStatus<T extends StatusId = StatusId>({
115
+ status,
116
+ id = DEFAULT_STATUS_ID as T,
117
+ }: StatusWriteRequestBody<T>): Promise<StatusRecord<T>> {
118
+ const validation = validateStatus({ status, id });
119
+ if (validation) {
120
+ throw handleHDBError(validation, validation.message, HTTP_STATUS_CODES.BAD_REQUEST);
121
+ }
122
+
123
+ statusLogger.debug?.('setStatus', id, status);
124
+ return getStatusTable().put(id, { status }) as Promise<StatusRecord<T>>;
125
+ }
@@ -0,0 +1,93 @@
1
+ import { statfs } from 'node:fs/promises';
2
+ import { getWorkerIndex, getWorkerCount } from '../server/threads/manageThreads.js';
3
+ import { logger } from '../utility/logging/logger.ts';
4
+ import { CONFIG_PARAMS } from '../utility/hdbTerms.ts';
5
+ import envMgr from '../utility/environment/environmentManager.js';
6
+ import { convertToMS } from '../utility/common_utils.js';
7
+ envMgr.initSync();
8
+ const reclamationHandlers = new Map<
9
+ string,
10
+ { priority: number; handler: (priority: number) => Promise<void> | void }[]
11
+ >();
12
+
13
+ const RECLAMATION_THRESHOLD = envMgr.get(CONFIG_PARAMS.STORAGE_RECLAMATION_THRESHOLD) ?? 0.4; // 40% remaining free space is the default
14
+ const RECLAMATION_INTERVAL = convertToMS(envMgr.get(CONFIG_PARAMS.STORAGE_RECLAMATION_INTERVAL)) || 3600000; // 1 hour is the default
15
+ /**
16
+ * Register a handler to be called when storage free space is low and reclamation is needed. The callback is called
17
+ * with the priority of the reclamation, which is the ratio of the threshold to the available space ratio. If space is
18
+ * low, the priority will be greater than 1. If the reclamation is successful, the callback will be called again with
19
+ * a priority of 0.
20
+ * @param path
21
+ * @param handler
22
+ */
23
+ export function onStorageReclamation(
24
+ path: string,
25
+ handler: (priority: number) => Promise<void> | void,
26
+ skipThreadCheck?: boolean
27
+ ) {
28
+ if (skipThreadCheck || getWorkerIndex() === getWorkerCount() - 1) {
29
+ // only run on one thread (last one)
30
+ if (!path) {
31
+ throw new Error('Storage reclamation path cannot be empty');
32
+ }
33
+ if (!reclamationHandlers.has(path)) {
34
+ reclamationHandlers.set(path, []);
35
+ }
36
+ reclamationHandlers.get(path).push({ priority: 0, handler });
37
+ if (!reclamationTimer) reclamationTimer = setTimeout(runReclamationHandlers, RECLAMATION_INTERVAL).unref();
38
+ }
39
+ }
40
+ let reclamationTimer: NodeJS.Timeout;
41
+ const defaultGetAvailableSpaceRatio = async (path: string): Promise<number> => {
42
+ if (statfs) {
43
+ const fsStats = await statfs(path);
44
+ return fsStats.bavail / fsStats.blocks;
45
+ } else {
46
+ return new Promise((resolve) => {
47
+ import('hdd-space').then((hddSpace) => {
48
+ hddSpace.default((space: any) => {
49
+ for (const volume of space.parts) {
50
+ if (path.startsWith(volume.place)) return resolve(volume.free / volume.size);
51
+ }
52
+ return resolve(1);
53
+ });
54
+ });
55
+ });
56
+ }
57
+ };
58
+ let getAvailableSpaceRatio: (path: string) => Promise<number> = defaultGetAvailableSpaceRatio;
59
+
60
+ /**
61
+ * Run the registered reclamation handlers, if any disk drives are below the threshold
62
+ */
63
+ export async function runReclamationHandlers() {
64
+ for (const [path, handlers] of reclamationHandlers) {
65
+ try {
66
+ const availableRatio = await getAvailableSpaceRatio(path);
67
+ const priority = RECLAMATION_THRESHOLD / availableRatio;
68
+ for (const entry of handlers) {
69
+ const { priority: previousPriority, handler } = entry;
70
+ entry.priority = priority;
71
+ if (priority > 1 || previousPriority > 1) {
72
+ const resolution = handler(priority > 1 ? priority : 0);
73
+ if (resolution) {
74
+ // if the handler returns a promise, wait for it, otherwise it is probably not doing anything worth logging
75
+ logger.info?.(`Running storage reclamation handler for ${path} with priority ${priority}`);
76
+ await resolution;
77
+ }
78
+ }
79
+ }
80
+ } catch (e) {
81
+ logger.error?.('Error running storage reclamation handlers', e);
82
+ }
83
+ }
84
+ reclamationTimer = setTimeout(runReclamationHandlers, RECLAMATION_INTERVAL).unref();
85
+ }
86
+
87
+ /**
88
+ * Set the function used to get the available space ratio (for testing and backfill for Node v16)
89
+ * @param newGetter
90
+ */
91
+ export function setAvailableSpaceRatioGetter(newGetter?: (path: string) => Promise<number>) {
92
+ getAvailableSpaceRatio = newGetter ?? defaultGetAvailableSpaceRatio;
93
+ }
@@ -0,0 +1,89 @@
1
+ 'use strict';
2
+
3
+ const hdbUtils = require('../../utility/common_utils.js');
4
+ const hdbTerms = require('../../utility/hdbTerms.ts');
5
+ const { ITC_ERRORS } = require('../../utility/errors/commonErrors.js');
6
+ const { threadId, isMainThread } = require('worker_threads');
7
+ const { onMessageFromWorkers, broadcastWithAcknowledgement } = require('./manageThreads.js');
8
+
9
+ module.exports = {
10
+ sendItcEvent,
11
+ validateEvent,
12
+ SchemaEventMsg,
13
+ UserEventMsg,
14
+ };
15
+ let serverItcHandlers;
16
+ onMessageFromWorkers(async (event, sender) => {
17
+ serverItcHandlers = serverItcHandlers || require('../itc/serverHandlers.js');
18
+ validateEvent(event);
19
+ if (serverItcHandlers[event.type]) {
20
+ await serverItcHandlers[event.type](event);
21
+ }
22
+ if (event.requestId && sender)
23
+ sender.postMessage({
24
+ type: 'ack',
25
+ id: event.requestId,
26
+ });
27
+ });
28
+
29
+ /**
30
+ * Emits an ITC event to the ITC server.
31
+ * @param event
32
+ */
33
+ function sendItcEvent(event) {
34
+ if (!isMainThread && event.message) event.message.originator = threadId;
35
+ return broadcastWithAcknowledgement(event);
36
+ }
37
+
38
+ /**
39
+ * Does some basic validation on an ITC event.
40
+ * @param event
41
+ * @returns {string}
42
+ */
43
+ function validateEvent(event) {
44
+ if (typeof event !== 'object') {
45
+ return ITC_ERRORS.INVALID_ITC_DATA_TYPE;
46
+ }
47
+
48
+ if (!event.hasOwnProperty('type') || hdbUtils.isEmpty(event.type)) {
49
+ return ITC_ERRORS.MISSING_TYPE;
50
+ }
51
+
52
+ if (!event.hasOwnProperty('message') || hdbUtils.isEmpty(event.message)) {
53
+ return ITC_ERRORS.MISSING_MSG;
54
+ }
55
+
56
+ if (!event.message.hasOwnProperty('originator') || hdbUtils.isEmpty(event.message.originator)) {
57
+ return ITC_ERRORS.MISSING_ORIGIN;
58
+ }
59
+
60
+ if (hdbTerms.ITC_EVENT_TYPES[event.type.toUpperCase()] === undefined) {
61
+ return ITC_ERRORS.INVALID_EVENT(event.type);
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Constructor function for the message of schema ITC events
67
+ * @param originator
68
+ * @param operation
69
+ * @param schema
70
+ * @param table
71
+ * @param attribute
72
+ * @constructor
73
+ */
74
+ function SchemaEventMsg(originator, operation, schema, table = undefined, attribute = undefined) {
75
+ this.originator = originator;
76
+ this.operation = operation;
77
+ this.schema = schema;
78
+ this.table = table;
79
+ this.attribute = attribute;
80
+ }
81
+
82
+ /**
83
+ * Constructor function for the message of user ITC events
84
+ * @param originator
85
+ * @constructor
86
+ */
87
+ function UserEventMsg(originator) {
88
+ this.originator = originator;
89
+ }