@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,55 @@
1
+ const { join, dirname } = require('node:path');
2
+ const { existsSync, readFileSync } = require('node:fs');
3
+
4
+ /**
5
+ * A naive find-up implementation to find the root package.json, and
6
+ * subsequently the root directory of the package. In theory we could require
7
+ * package.json directly (`require('../../package.json')`), but that would not
8
+ * give us the root directory of the repo, which is needed for other things.
9
+ * Furthermore, when this is eventually converted to TS, we should consider
10
+ * using `import('../../package.json')` as that will give type-safe access to
11
+ * the package.json file.
12
+ *
13
+ * The purpose of doing this instead of cobbling together a path directly is
14
+ * that in development mode this file will be resolved from its actual path
15
+ * `/utility/packageUtils.js`, but in production, it will be bundled into the
16
+ * built output and the path will be different. Since builds will not
17
+ * automatically transform a path like that (it will only do so for
18
+ * requires/imports), we need to stick to directory traversal to find the
19
+ * package root.
20
+ *
21
+ * This function isn't full-proof and could fail in some edge cases. The max
22
+ * iteration check is in place to prevent infinite loops.
23
+ *
24
+ * If we ever encounter this error, we should improve the function to handle
25
+ * the edge case instead of just increasing the `MAX` value.
26
+ *
27
+ * @returns {string} package.json file path
28
+ */
29
+ function findPackageJson() {
30
+ const MAX = 10;
31
+ let dir = __dirname,
32
+ filePath,
33
+ i = 0;
34
+ while (!existsSync((filePath = join(dir, 'package.json')))) {
35
+ if (dir === (dir = dirname(dir)) || i++ > MAX) throw new Error('Could not find package root');
36
+ }
37
+ return filePath;
38
+ }
39
+
40
+ const packageJsonPath = findPackageJson();
41
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
42
+
43
+ /**
44
+ * The Harper package root directory.
45
+ *
46
+ * Works across dev and prod (built).
47
+ *
48
+ * @type {string}
49
+ */
50
+ const PACKAGE_ROOT = dirname(packageJsonPath);
51
+
52
+ module.exports = {
53
+ packageJson,
54
+ PACKAGE_ROOT,
55
+ };
@@ -0,0 +1,99 @@
1
+ import * as crypto from 'node:crypto';
2
+ import * as argon2 from 'argon2';
3
+ import { get } from './environment/environmentManager.js';
4
+ import { CONFIG_PARAMS } from './hdbTerms.ts';
5
+ const configuredHashFunction = get(CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)?.toLowerCase();
6
+
7
+ const SALT_LENGTH = 16;
8
+ const SALT_LENGTH_MD5 = 9;
9
+ export const HASH_FUNCTION = {
10
+ MD5: 'md5',
11
+ SHA256: 'sha256',
12
+ ARGON2ID: 'argon2id',
13
+ };
14
+
15
+ type HashFunction = (typeof HASH_FUNCTION)[keyof typeof HASH_FUNCTION];
16
+
17
+ /**
18
+ * Generate a secure salt
19
+ * @param len Length of salt (defaults to SALT_LENGTH)
20
+ */
21
+ function generateSalt(len: number = SALT_LENGTH): string {
22
+ const set = '0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ';
23
+ return Array.from(crypto.randomBytes(len))
24
+ .map((x) => set[x % set.length])
25
+ .join('');
26
+ }
27
+
28
+ const hashAlgorithms = {
29
+ [HASH_FUNCTION.MD5]: (password: string, salt = undefined) => {
30
+ salt = salt ?? generateSalt(SALT_LENGTH_MD5);
31
+ const hashed = crypto
32
+ .createHash(HASH_FUNCTION.MD5)
33
+ .update(password + salt)
34
+ .digest('hex');
35
+ return salt + hashed;
36
+ },
37
+
38
+ [HASH_FUNCTION.SHA256]: (password: string, salt = undefined) => {
39
+ salt = salt ?? generateSalt(SALT_LENGTH);
40
+ const hashed = crypto
41
+ .createHash(HASH_FUNCTION.SHA256)
42
+ .update(password + salt)
43
+ .digest('hex');
44
+ return salt + hashed;
45
+ },
46
+
47
+ [HASH_FUNCTION.ARGON2ID]: async (password: string) => {
48
+ const salt = generateSalt(SALT_LENGTH);
49
+ const hashed = await argon2.hash(password, {
50
+ type: argon2.argon2id,
51
+ salt: Buffer.from(salt),
52
+ });
53
+ return salt + hashed;
54
+ },
55
+ };
56
+
57
+ const validateAlgorithms = {
58
+ [HASH_FUNCTION.MD5]: (storedHash: string, password: string) => {
59
+ const salt = storedHash.slice(0, SALT_LENGTH_MD5);
60
+ return storedHash === hashAlgorithms[HASH_FUNCTION.MD5](password, salt);
61
+ },
62
+
63
+ [HASH_FUNCTION.SHA256]: (storedHash: string, password: string) => {
64
+ const salt = storedHash.slice(0, SALT_LENGTH);
65
+ return storedHash === hashAlgorithms[HASH_FUNCTION.SHA256](password, salt);
66
+ },
67
+
68
+ [HASH_FUNCTION.ARGON2ID]: async (storedHash: string, password: string) => {
69
+ return await argon2.verify(storedHash.slice(SALT_LENGTH), password);
70
+ },
71
+ };
72
+
73
+ /**
74
+ * Create a hash for the given password (MD5, SHA-256 or argon2id)
75
+ * @param password Plain text password
76
+ * @param algorithm Hashing algorithm to use (default: SHA-256)
77
+ */
78
+ export function hash(
79
+ password: string,
80
+ algorithm: HashFunction = HASH_FUNCTION[configuredHashFunction?.toUpperCase()] ?? HASH_FUNCTION.SHA256
81
+ ): string | Promise<string> {
82
+ return hashAlgorithms[algorithm](password);
83
+ }
84
+
85
+ /**
86
+ * Validate a password against a stored hash
87
+ * @param storedHash Previously generated hash
88
+ * @param password Plain text password to validate
89
+ * @param algorithm Hashing algorithm to use (default: SHA-256)
90
+ */
91
+ export function validate(
92
+ storedHash: string,
93
+ password: string,
94
+ algorithm: HashFunction = HASH_FUNCTION[configuredHashFunction?.toUpperCase()] ?? HASH_FUNCTION.SHA256
95
+ ): boolean | Promise<boolean> {
96
+ if (!storedHash) return false;
97
+
98
+ return validateAlgorithms[algorithm](storedHash, password);
99
+ }
@@ -0,0 +1,187 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('../hdbTerms.ts');
4
+ const servicesConfig = require('./servicesConfig.js');
5
+ const envMangr = require('../environment/environmentManager.js');
6
+ const hdbLogger = require('../../utility/logging/harper_logger.js');
7
+ const { onMessageFromWorkers } = require('../../server/threads/manageThreads.js');
8
+ const fs = require('fs');
9
+ const path = require('node:path');
10
+ const { setTimeout: delay } = require('node:timers/promises');
11
+ const { execFile, fork } = require('node:child_process');
12
+
13
+ module.exports = {
14
+ start,
15
+ restart,
16
+ kill,
17
+ startService,
18
+ getHdbPid,
19
+ isProcessRunning,
20
+ cleanupChildrenProcesses,
21
+ expectedRestartOfChildren,
22
+ };
23
+
24
+ onMessageFromWorkers((message) => {
25
+ if (message.type === 'restart') envMangr.initSync(true);
26
+ });
27
+
28
+ let childProcesses = [];
29
+ const MAX_RESTARTS = 10;
30
+ let shuttingDown;
31
+ /**
32
+ * Starts a service
33
+ * @param procConfig
34
+ * @returns void
35
+ */
36
+ function start(procConfig, noKill = false) {
37
+ const args = typeof procConfig.args === 'string' ? procConfig.args.split(' ') : procConfig.args;
38
+ procConfig.silent = true;
39
+ procConfig.detached = true;
40
+ procConfig.env = {
41
+ ...procConfig.env,
42
+ HARPER_PARENT_PROCESS_PID: process.pid.toString(),
43
+ };
44
+ const subprocess = procConfig.script
45
+ ? fork(procConfig.script, args, procConfig)
46
+ : execFile(procConfig.binFile, args, procConfig);
47
+ subprocess.name = procConfig.name;
48
+ subprocess.config = procConfig;
49
+ subprocess.on('error', (code, message) => {
50
+ console.error(code, message);
51
+ });
52
+ subprocess.on('exit', async (code) => {
53
+ let index = childProcesses.indexOf(subprocess); // dead, remove it from processes to kill now
54
+ if (index > -1) childProcesses.splice(index, 1);
55
+ if (!shuttingDown && code !== 0) {
56
+ procConfig.restarts = (procConfig.restarts || 0) + 1;
57
+ // restart the child process
58
+ if (procConfig.restarts < MAX_RESTARTS) {
59
+ start(procConfig);
60
+ }
61
+ }
62
+ });
63
+
64
+ subprocess.stdout.on('data', (log) => hdbLogger.info(log.toString()));
65
+ subprocess.stderr.on('data', (log) => hdbLogger.error(log.toString()));
66
+ subprocess.unref();
67
+
68
+ // if we are running in standard mode, then we want to clean up our child processes when we exit
69
+ if (childProcesses.length === 0) {
70
+ if (!noKill) {
71
+ process.on('exit', cleanupChildrenProcesses);
72
+ process.on('SIGINT', cleanupChildrenProcesses);
73
+ process.on('SIGQUIT', cleanupChildrenProcesses);
74
+ process.on('SIGTERM', cleanupChildrenProcesses);
75
+ }
76
+ }
77
+ childProcesses.push(subprocess);
78
+ }
79
+ function cleanupChildrenProcesses(exit = true) {
80
+ if (shuttingDown) return;
81
+ shuttingDown = true;
82
+ if (childProcesses.length === 0) return;
83
+ hdbLogger.info('Killing child processes...');
84
+ childProcesses.map((proc) => proc.kill());
85
+ if (exit) process.exit(0);
86
+ else return delay(2000); // give these processes some time to exit
87
+ }
88
+
89
+ /**
90
+ * restart processes
91
+ * @param serviceName
92
+ * @returns {Promise<unknown>}
93
+ */
94
+ function restart(serviceName) {
95
+ expectedRestartOfChildren();
96
+ for (let childProcess of childProcesses) {
97
+ // kill the child process and let it (auto) restart
98
+ if (childProcess.name === serviceName) {
99
+ childProcess.kill();
100
+ }
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Reset the restart counts for all child processes because we are doing an intentional restart
106
+ */
107
+ function expectedRestartOfChildren() {
108
+ for (let childProcess of childProcesses) {
109
+ if (childProcess.config) childProcess.config.restarts = 0; // reset the restart count
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Checks to see if Harper is currently running, returning the pid if it is
115
+ * @returns {number|undefined}
116
+ */
117
+ function getHdbPid() {
118
+ const harperPath = envMangr.getHdbBasePath();
119
+ if (!harperPath) return;
120
+ const pidFile = path.join(harperPath, hdbTerms.HDB_PID_FILE);
121
+ const hdbPid = readPidFile(pidFile);
122
+ // If the pid file doesn't exist or the pid is the same as the current process, return.
123
+ // In a Docker container, the pid is usually 1, and so if a previous process crashed, there will still
124
+ // be a pid file with 1, even though this process is also 1 (and is running, but is not another harper process).
125
+ if (!hdbPid || hdbPid === process.pid) return;
126
+ if (isProcessRunning(hdbPid)) return hdbPid;
127
+ // return undefined
128
+ }
129
+ function kill() {
130
+ for (let process of childProcesses) {
131
+ process.kill();
132
+ }
133
+ childProcesses = [];
134
+ return;
135
+ }
136
+
137
+ /**
138
+ * start a specific service
139
+ * @param serviceName
140
+ * @returns {Promise<void>}
141
+ */
142
+ async function startService(serviceName, noKill = false) {
143
+ let startConfig;
144
+ serviceName = serviceName.toLowerCase();
145
+ switch (serviceName) {
146
+ case hdbTerms.PROCESS_DESCRIPTORS.HDB.toLowerCase():
147
+ startConfig = servicesConfig.generateMainServerConfig();
148
+ break;
149
+ default:
150
+ throw new Error(`Start service called with unknown service config: ${serviceName}`);
151
+ }
152
+ start(startConfig, noKill);
153
+ }
154
+
155
+ /**
156
+ * Reads the Harper PID file and returns the PID as a number.
157
+ * @param {string} pidFile - The path to the Harper PID file
158
+ * @returns {number|null} - The PID as a number, or null if the file is not found or cannot be read
159
+ */
160
+ function readPidFile(pidFile) {
161
+ try {
162
+ return Number.parseInt(fs.readFileSync(pidFile, 'utf8'), 10);
163
+ } catch {
164
+ return null;
165
+ }
166
+ }
167
+
168
+ /**
169
+ * Checks if a process is running by attempting to send a signal 0 to the process.
170
+ * @param {number} pid - The process ID to check
171
+ * @returns {boolean} - True if the process is running, false otherwise
172
+ */
173
+ function isProcessRunning(pid) {
174
+ try {
175
+ // process.kill with signal 0 tests if process exists
176
+ // throws error if process doesn't exist
177
+ process.kill(pid, 0);
178
+ return true;
179
+ } catch (err) {
180
+ // EPERM means process exists but we don't have permission
181
+ // which still indicates the process is running
182
+ if (err.code === 'EPERM') {
183
+ return true;
184
+ }
185
+ return false;
186
+ }
187
+ }
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('../hdbTerms.ts');
4
+ const path = require('path');
5
+ const { PACKAGE_ROOT } = require('../../utility/packageUtils.js');
6
+ const hdbUtils = require('../common_utils.js');
7
+ const SCRIPTS_DIR = path.join(PACKAGE_ROOT, 'utility/scripts');
8
+ const RESTART_SCRIPT = path.join(SCRIPTS_DIR, hdbTerms.HDB_RESTART_SCRIPT);
9
+
10
+ function generateMainServerConfig() {
11
+ const envVars = {
12
+ [hdbTerms.PROCESS_NAME_ENV_PROP]: hdbTerms.PROCESS_DESCRIPTORS.HDB,
13
+ IS_SCRIPTED_SERVICE: true,
14
+ ...process.env,
15
+ };
16
+ if (hdbUtils.noBootFile()) envVars[hdbTerms.CONFIG_PARAMS.ROOTPATH.toUpperCase()] = hdbUtils.getEnvCliRootPath();
17
+
18
+ return {
19
+ name: hdbTerms.PROCESS_DESCRIPTORS.HDB,
20
+ script: hdbTerms.LAUNCH_SERVICE_SCRIPTS.MAIN,
21
+ exec_mode: 'fork',
22
+ env: envVars,
23
+ execArgv: process.execArgv,
24
+ cwd: PACKAGE_ROOT,
25
+ };
26
+ }
27
+
28
+ function generateRestart() {
29
+ const envVars = { [hdbTerms.PROCESS_NAME_ENV_PROP]: hdbTerms.PROCESS_DESCRIPTORS.RESTART_HDB };
30
+ if (hdbUtils.noBootFile()) envVars[hdbTerms.CONFIG_PARAMS.ROOTPATH.toUpperCase()] = hdbUtils.getEnvCliRootPath();
31
+ const restartConfig = {
32
+ name: hdbTerms.PROCESS_DESCRIPTORS.RESTART_HDB,
33
+ exec_mode: 'fork',
34
+ env: envVars,
35
+ instances: 1,
36
+ autorestart: false,
37
+ cwd: SCRIPTS_DIR,
38
+ };
39
+
40
+ return {
41
+ ...restartConfig,
42
+ script: RESTART_SCRIPT,
43
+ };
44
+ }
45
+
46
+ function generateAllServiceConfigs() {
47
+ return {
48
+ apps: [generateMainServerConfig()],
49
+ };
50
+ }
51
+
52
+ module.exports = {
53
+ generateAllServiceConfigs,
54
+ generateMainServerConfig,
55
+ generateRestart,
56
+ };
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ const pm2Utils = require('../processManagement/processManagement.js');
4
+ const hdbTerms = require('../hdbTerms.ts');
5
+
6
+ /**
7
+ * Gets a list of all the running Harper processes and calls reload on each one.
8
+ * NOTE: Calling reload on the "Harper" service was causing only some of the processes to restart so I went with the
9
+ * loop and call each individual process approach. I also needed to be sure all processes had been reloaded before calling delete.
10
+ */
11
+ (async function () {
12
+ try {
13
+ const hdbProcessMeta = await pm2Utils.describe(hdbTerms.PROCESS_DESCRIPTORS.HDB);
14
+ for (const proc of hdbProcessMeta) {
15
+ await pm2Utils.reload(proc.pm_id);
16
+ }
17
+
18
+ await pm2Utils.deleteProcess(hdbTerms.PROCESS_DESCRIPTORS.RESTART_HDB);
19
+ // Once this script has finished reloading all the Harper processes, delete this process from processManagement.
20
+ } catch (err) {
21
+ console.error(err);
22
+ throw err;
23
+ }
24
+ })();
@@ -0,0 +1,13 @@
1
+ #!/bin/bash
2
+ echo "##### Start of user_data.sh #####"
3
+
4
+ # Create and enable a 2GB swap file
5
+ dd if=/dev/zero of=/swapfile bs=128M count=16
6
+ chmod 600 /swapfile
7
+ mkswap /swapfile
8
+ swapon /swapfile
9
+ echo "/swapfile swap swap defaults 0 0" | tee -a /etc/fstab
10
+
11
+ # Adjust the per-user open file limits
12
+ echo "ubuntu soft nofile 1000000" | tee -a /etc/security/limits.conf
13
+ echo "ubuntu hard nofile 1000000" | tee -a /etc/security/limits.conf
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ const hdbTerms = require('./hdbTerms.ts');
4
+ const hdbLogger = require('../utility/logging/harper_logger.js');
5
+ const ITCEventObject = require('../server/itc/utility/ITCEventObject.js');
6
+ let serverItcHandlers;
7
+ const { sendItcEvent } = require('../server/threads/itc.js');
8
+
9
+ function signalSchemaChange(message) {
10
+ try {
11
+ hdbLogger.debug('signalSchemaChange called with message:', message);
12
+ serverItcHandlers = serverItcHandlers || require('../server/itc/serverHandlers.js');
13
+ const itcEventSchema = new ITCEventObject(hdbTerms.ITC_EVENT_TYPES.SCHEMA, message);
14
+ serverItcHandlers.schema(itcEventSchema);
15
+ return sendItcEvent(itcEventSchema);
16
+ } catch (err) {
17
+ hdbLogger.error(err);
18
+ }
19
+ }
20
+
21
+ function signalUserChange(message) {
22
+ try {
23
+ hdbLogger.trace('signalUserChange called with message:', message);
24
+ serverItcHandlers = serverItcHandlers || require('../server/itc/serverHandlers.js');
25
+ const itcEventUser = new ITCEventObject(hdbTerms.ITC_EVENT_TYPES.USER, message);
26
+ serverItcHandlers.user(itcEventUser);
27
+ return sendItcEvent(itcEventUser);
28
+ } catch (err) {
29
+ hdbLogger.error(err);
30
+ }
31
+ }
32
+
33
+ module.exports = {
34
+ signalSchemaChange,
35
+ signalUserChange,
36
+ };
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+
3
+ const CERTIFICATE_VALUES = {
4
+ 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(
5
+ /\r/g,
6
+ String.fromCharCode(13, 10)
7
+ ),
8
+ 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(
9
+ /\r/g,
10
+ String.fromCharCode(13, 10)
11
+ ),
12
+ };
13
+
14
+ const CERTIFICATE_PEM_NAME = 'certificate.pem';
15
+ const PRIVATEKEY_PEM_NAME = 'privateKey.pem';
16
+ const CA_PEM_NAME = 'caCertificate.pem';
17
+
18
+ const CERT_NAME = {
19
+ 'DEFAULT': 'default',
20
+ 'DEFAULT-CA': 'default-ca',
21
+ 'SERVER': 'server',
22
+ 'CA': 'ca',
23
+ 'OPERATIONS-API': 'operations-api',
24
+ 'OPERATIONS-CA': 'operations-ca',
25
+ };
26
+
27
+ const CERT_CONFIG_NAME_MAP = {
28
+ tls_certificate: CERT_NAME.SERVER,
29
+ tlsCertificateAuthority: CERT_NAME.CA,
30
+ customFunctions_tls_certificate: CERT_NAME.SERVER,
31
+ customFunctionsTlsCertificateAuthority: CERT_NAME.CA,
32
+ operationsApi_tls_certificate: CERT_NAME['OPERATIONS-API'],
33
+ operationsApiTlsCertificateAuthority: CERT_NAME['OPERATIONS-CA'],
34
+ };
35
+
36
+ const CERT_PREFERENCE_APP = {
37
+ [CERT_NAME.SERVER]: 2,
38
+ [CERT_NAME.DEFAULT]: 1,
39
+ };
40
+
41
+ const CERT_PREFERENCE_OPS = {
42
+ [CERT_NAME['OPERATIONS-API']]: 3,
43
+ [CERT_NAME.SERVER]: 2,
44
+ [CERT_NAME.DEFAULT]: 1,
45
+ };
46
+
47
+ const CERT_PREFERENCE_REP = {
48
+ [CERT_NAME['OPERATIONS-API']]: 3,
49
+ [CERT_NAME.SERVER]: 2,
50
+ [CERT_NAME.DEFAULT]: 1,
51
+ };
52
+
53
+ const CA_CERT_PREFERENCE_REP = {
54
+ [CERT_NAME['OPERATIONS-CA']]: 3,
55
+ [CERT_NAME.CA]: 2,
56
+ [CERT_NAME['DEFAULT-CA']]: 1,
57
+ };
58
+
59
+ const CA_CERT_PREFERENCE_OPS = {
60
+ [CERT_NAME['OPERATIONS-CA']]: 3,
61
+ [CERT_NAME.CA]: 2,
62
+ [CERT_NAME['DEFAULT-CA']]: 1,
63
+ };
64
+
65
+ const CA_CERT_PREFERENCE_APP = {
66
+ [CERT_NAME.CA]: 2,
67
+ [CERT_NAME['DEFAULT-CA']]: 1,
68
+ };
69
+
70
+ exports.CERTIFICATE_PEM_NAME = CERTIFICATE_PEM_NAME;
71
+ exports.PRIVATEKEY_PEM_NAME = PRIVATEKEY_PEM_NAME;
72
+ exports.CA_PEM_NAME = CA_PEM_NAME;
73
+ exports.CERT_NAME = CERT_NAME;
74
+ exports.CERT_CONFIG_NAME_MAP = CERT_CONFIG_NAME_MAP;
75
+ exports.CERT_PREFERENCE_APP = CERT_PREFERENCE_APP;
76
+ exports.CERT_PREFERENCE_OPS = CERT_PREFERENCE_OPS;
77
+ exports.CERT_PREFERENCE_REP = CERT_PREFERENCE_REP;
78
+ exports.CA_CERT_PREFERENCE_REP = CA_CERT_PREFERENCE_REP;
79
+ exports.CA_CERT_PREFERENCE_OPS = CA_CERT_PREFERENCE_OPS;
80
+ exports.CA_CERT_PREFERENCE_APP = CA_CERT_PREFERENCE_APP;
81
+ exports.CERTIFICATE_VALUES = CERTIFICATE_VALUES;
@@ -0,0 +1,20 @@
1
+ import type { RequestTarget, RequestTargetOrId } from '../resources/RequestTarget.ts';
2
+
3
+ // wait for a promise or plain object to resolve
4
+ export function when<T, R>(
5
+ value: T | Promise<T>,
6
+ callback: (value: T) => R,
7
+ reject?: (error: any) => void
8
+ ): R | Promise<R | void> {
9
+ if ((value as Promise<T>)?.then) {
10
+ return (value as Promise<T>).then(callback, reject);
11
+ }
12
+ return callback(value as T);
13
+ }
14
+
15
+ export function promiseNormalize<T>(returnValue: T | Promise<T>, target: RequestTargetOrId): T | Promise<T> {
16
+ if (!(returnValue as Promise<T>)?.then && !(target as RequestTarget)?.syncAllowed) {
17
+ return Promise.resolve(returnValue);
18
+ }
19
+ return returnValue;
20
+ }
package/v1.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ export { Resource } from './resources/Resource.ts';
2
+ export type {
3
+ Context,
4
+ Query,
5
+ RequestTargetOrId,
6
+ Session,
7
+ SourceContext,
8
+ SubscriptionRequest,
9
+ } from './resources/ResourceInterface.ts';
10
+ export { ResourceInterface } from './resources/ResourceInterface.ts';
11
+ export type { User } from './security/user.ts';
12
+ export type { RecordObject } from './resources/RecordEncoder.ts';
13
+ export type { IterableEventQueue } from './resources/IterableEventQueue.ts';
14
+ export { RequestTarget } from './resources/RequestTarget.ts';
15
+ export { server } from './server/Server';
16
+ export { tables, databases, type Table } from './resources/databases.ts';
17
+ export type { Attribute } from './resources/Table.ts';
18
+
19
+ import type { Logger } from './components/Logger.ts';
20
+ declare const logger: Logger;
21
+ export { type Logger, logger };
22
+
23
+ export type { Scope } from './components/Scope.ts';
24
+ export type { FilesOption, FilesOptionObject } from './components/deriveGlobOptions.ts';
25
+ export type { FileAndURLPathConfig } from './components/Component.ts';
26
+ export { OptionsWatcher, type Config, type ConfigValue } from './components/OptionsWatcher.ts';
27
+ export {
28
+ EntryHandler,
29
+ type BaseEntry,
30
+ type FileEntry,
31
+ type EntryEvent,
32
+ type AddFileEvent,
33
+ type ChangeFileEvent,
34
+ type UnlinkFileEvent,
35
+ type FileEntryEvent,
36
+ type AddDirectoryEvent,
37
+ type UnlinkDirectoryEvent,
38
+ type DirectoryEntryEvent,
39
+ } from './components/EntryHandler.ts';
package/v1.js ADDED
@@ -0,0 +1,41 @@
1
+ const workerThreads = require('node:worker_threads');
2
+ if (!workerThreads.isMainThread) {
3
+ // Prevents server from starting in worker threads if this was directly imported from a non-server user thread
4
+ if (!workerThreads.workerData) workerThreads.workerData = {};
5
+ workerThreads.workerData.noServerStart = true;
6
+ }
7
+ const { globals } = require('./server/threads/threadServer.js');
8
+
9
+ // exported types are needed for parsing as well
10
+ exports.Attribute = undefined;
11
+ exports.Config = undefined;
12
+ exports.ConfigValue = undefined;
13
+ exports.Context = undefined;
14
+ exports.FileAndURLPathConfig = undefined;
15
+ exports.FilesOption = undefined;
16
+ exports.FilesOptionObject = undefined;
17
+ exports.IterableEventQueue = undefined;
18
+ exports.Logger = undefined;
19
+ exports.Query = undefined;
20
+ exports.RecordObject = undefined;
21
+ exports.RequestTarget = undefined;
22
+ exports.RequestTargetOrId = undefined;
23
+ exports.Resource = undefined;
24
+ exports.ResourceInterface = undefined;
25
+ exports.Scope = undefined;
26
+ exports.Session = undefined;
27
+ exports.SourceContext = undefined;
28
+ exports.SubscriptionRequest = undefined;
29
+ exports.Table = undefined;
30
+ exports.User = undefined;
31
+
32
+ // these are all overwritten by the globals, but need to be here so that Node's static
33
+ // exports parser can analyze them
34
+ exports.tables = {};
35
+ exports.databases = {};
36
+ exports.getUser = undefined;
37
+ exports.server = {};
38
+ exports.contentTypes = null;
39
+ exports.threads = [];
40
+ exports.logger = {};
41
+ Object.assign(exports, globals);