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

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 (446) 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/{resources/ResourceInterfaceV2.js → components/Logger.js} +1 -1
  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 +17 -10
  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/ResourceInterface.d.ts +1 -1
  145. package/dist/resources/RocksIndexStore.d.ts +3 -3
  146. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  147. package/dist/resources/Table.d.ts +15 -6
  148. package/dist/resources/Table.js +12 -4
  149. package/dist/resources/Table.js.map +1 -1
  150. package/dist/resources/analytics/read.js +32 -22
  151. package/dist/resources/analytics/read.js.map +1 -1
  152. package/dist/resources/analytics/write.js +3 -6
  153. package/dist/resources/analytics/write.js.map +1 -1
  154. package/dist/resources/auditStore.d.ts +3 -3
  155. package/dist/resources/blob.d.ts +25 -2
  156. package/dist/resources/databases.d.ts +12 -2
  157. package/dist/resources/databases.js +22 -19
  158. package/dist/resources/databases.js.map +1 -1
  159. package/dist/resources/search.js +11 -5
  160. package/dist/resources/search.js.map +1 -1
  161. package/dist/resources/transaction.d.ts +2 -1
  162. package/dist/security/auth.js +1 -1
  163. package/dist/security/auth.js.map +1 -1
  164. package/dist/security/cryptoHash.d.ts +2 -2
  165. package/dist/security/jsLoader.js +265 -73
  166. package/dist/security/jsLoader.js.map +1 -1
  167. package/dist/security/keys.js +11 -12
  168. package/dist/security/keys.js.map +1 -1
  169. package/dist/security/user.js +3 -3
  170. package/dist/security/user.js.map +1 -1
  171. package/dist/server/REST.js +16 -2
  172. package/dist/server/REST.js.map +1 -1
  173. package/dist/server/Server.d.ts +2 -1
  174. package/dist/server/Server.js.map +1 -1
  175. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  176. package/dist/server/fastifyRoutes.js +2 -0
  177. package/dist/server/fastifyRoutes.js.map +1 -1
  178. package/dist/server/http.js +12 -6
  179. package/dist/server/http.js.map +1 -1
  180. package/dist/server/jobs/JobObject.d.ts +3 -3
  181. package/dist/server/loadRootComponents.js +1 -0
  182. package/dist/server/loadRootComponents.js.map +1 -1
  183. package/dist/server/operationsServer.js +3 -1
  184. package/dist/server/operationsServer.js.map +1 -1
  185. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  186. package/dist/server/serverHelpers/Request.d.ts +5 -5
  187. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  188. package/dist/server/threads/manageThreads.d.ts +2 -2
  189. package/dist/server/threads/manageThreads.js +52 -35
  190. package/dist/server/threads/manageThreads.js.map +1 -1
  191. package/dist/server/threads/socketRouter.d.ts +1 -1
  192. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  193. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  194. package/dist/utility/common_utils.d.ts +3 -3
  195. package/dist/utility/environment/systemInformation.d.ts +1 -0
  196. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  197. package/dist/utility/globalSchema.d.ts +1 -1
  198. package/dist/utility/hdbTerms.d.ts +3 -0
  199. package/dist/utility/hdbTerms.js +3 -0
  200. package/dist/utility/hdbTerms.js.map +1 -1
  201. package/dist/utility/installation.d.ts +2 -4
  202. package/dist/utility/installation.js.map +1 -1
  203. package/dist/utility/lmdb/commonUtility.d.ts +2 -1
  204. package/dist/utility/lmdb/commonUtility.js +20 -13
  205. package/dist/utility/lmdb/commonUtility.js.map +1 -1
  206. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  207. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  208. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  209. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  210. package/dist/utility/logging/harper_logger.d.ts +6 -6
  211. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  212. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  213. package/dist/validation/common_validators.d.ts +4 -3
  214. package/dist/validation/configValidator.d.ts +3 -2
  215. package/index.d.ts +56 -0
  216. package/index.js +41 -0
  217. package/json/systemSchema.json +373 -0
  218. package/launchServiceScripts/launchHarperDB.js +3 -0
  219. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  220. package/package.json +35 -16
  221. package/resources/DatabaseTransaction.ts +378 -0
  222. package/resources/ErrorResource.ts +57 -0
  223. package/resources/IterableEventQueue.ts +94 -0
  224. package/resources/LMDBTransaction.ts +349 -0
  225. package/resources/RecordEncoder.ts +702 -0
  226. package/resources/RequestTarget.ts +134 -0
  227. package/resources/Resource.ts +789 -0
  228. package/resources/ResourceInterface.ts +221 -0
  229. package/resources/Resources.ts +162 -0
  230. package/resources/RocksIndexStore.ts +70 -0
  231. package/resources/RocksTransactionLogStore.ts +352 -0
  232. package/resources/Table.ts +4531 -0
  233. package/resources/analytics/hostnames.ts +72 -0
  234. package/resources/analytics/metadata.ts +10 -0
  235. package/resources/analytics/read.ts +252 -0
  236. package/resources/analytics/write.ts +803 -0
  237. package/resources/auditStore.ts +556 -0
  238. package/resources/blob.ts +1268 -0
  239. package/resources/crdt.ts +125 -0
  240. package/resources/dataLoader.ts +527 -0
  241. package/resources/databases.ts +1290 -0
  242. package/resources/graphql.ts +221 -0
  243. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  244. package/resources/indexes/customIndexes.ts +7 -0
  245. package/resources/indexes/vector.ts +38 -0
  246. package/resources/jsResource.ts +86 -0
  247. package/resources/loadEnv.ts +22 -0
  248. package/resources/login.ts +18 -0
  249. package/resources/openApi.ts +409 -0
  250. package/resources/registrationDeprecated.ts +8 -0
  251. package/resources/replayLogs.ts +136 -0
  252. package/resources/roles.ts +98 -0
  253. package/resources/search.ts +1301 -0
  254. package/resources/tracked.ts +584 -0
  255. package/resources/transaction.ts +89 -0
  256. package/resources/transactionBroadcast.ts +258 -0
  257. package/security/auth.ts +376 -0
  258. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  259. package/security/certificateVerification/configValidation.ts +107 -0
  260. package/security/certificateVerification/crlVerification.ts +623 -0
  261. package/security/certificateVerification/index.ts +121 -0
  262. package/security/certificateVerification/ocspVerification.ts +148 -0
  263. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  264. package/security/certificateVerification/types.ts +128 -0
  265. package/security/certificateVerification/verificationConfig.ts +138 -0
  266. package/security/certificateVerification/verificationUtils.ts +447 -0
  267. package/security/cryptoHash.js +42 -0
  268. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  269. package/security/data_objects/PermissionResponseObject.js +115 -0
  270. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  271. package/security/fastifyAuth.js +169 -0
  272. package/security/impersonation.ts +160 -0
  273. package/security/jsLoader.ts +733 -0
  274. package/security/keys.js +948 -0
  275. package/security/permissionsTranslator.js +300 -0
  276. package/security/role.js +218 -0
  277. package/security/tokenAuthentication.ts +228 -0
  278. package/security/user.ts +449 -0
  279. package/server/DurableSubscriptionsSession.ts +503 -0
  280. package/server/REST.ts +407 -0
  281. package/server/Server.ts +89 -0
  282. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  283. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  284. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  285. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  286. package/server/fastifyRoutes.ts +205 -0
  287. package/server/graphqlQuerying.ts +700 -0
  288. package/server/http.ts +640 -0
  289. package/server/itc/serverHandlers.js +161 -0
  290. package/server/itc/utility/ITCEventObject.js +10 -0
  291. package/server/jobs/JobObject.js +24 -0
  292. package/server/jobs/jobProcess.js +69 -0
  293. package/server/jobs/jobRunner.js +162 -0
  294. package/server/jobs/jobs.js +304 -0
  295. package/server/loadRootComponents.js +44 -0
  296. package/server/mqtt.ts +485 -0
  297. package/server/nodeName.ts +75 -0
  298. package/server/operationsServer.ts +313 -0
  299. package/server/serverHelpers/Headers.ts +108 -0
  300. package/server/serverHelpers/JSONStream.ts +269 -0
  301. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  302. package/server/serverHelpers/Request.ts +158 -0
  303. package/server/serverHelpers/contentTypes.ts +637 -0
  304. package/server/serverHelpers/requestTimePlugin.js +57 -0
  305. package/server/serverHelpers/serverHandlers.js +148 -0
  306. package/server/serverHelpers/serverUtilities.ts +473 -0
  307. package/server/serverRegistry.ts +8 -0
  308. package/server/static.ts +187 -0
  309. package/server/status/definitions.ts +37 -0
  310. package/server/status/index.ts +125 -0
  311. package/server/storageReclamation.ts +93 -0
  312. package/server/threads/itc.js +89 -0
  313. package/server/threads/manageThreads.js +596 -0
  314. package/server/threads/socketRouter.ts +360 -0
  315. package/server/threads/threadServer.js +279 -0
  316. package/server/throttle.ts +73 -0
  317. package/sqlTranslator/SelectValidator.js +330 -0
  318. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  319. package/sqlTranslator/deleteTranslator.js +67 -0
  320. package/sqlTranslator/index.js +242 -0
  321. package/sqlTranslator/sql_statement_bucket.js +472 -0
  322. package/static/defaultConfig.yaml +3 -0
  323. package/studio/web/HDBDogOnly.svg +78 -0
  324. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  326. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  327. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  328. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  329. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  330. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  331. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  332. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  333. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  334. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  335. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  336. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  337. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  338. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  339. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  340. package/studio/web/assets/index-C1G-Jo6n.js +37 -0
  341. package/studio/web/assets/index-C1G-Jo6n.js.map +1 -0
  342. package/studio/web/assets/index-D-CahN0-.js +2 -0
  343. package/studio/web/assets/index-D-CahN0-.js.map +1 -0
  344. package/studio/web/assets/index-DxlZI0PX.js +235 -0
  345. package/studio/web/assets/index-DxlZI0PX.js.map +1 -0
  346. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  347. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  348. package/studio/web/assets/index.lazy-BUXDDqq9.js +266 -0
  349. package/studio/web/assets/index.lazy-BUXDDqq9.js.map +1 -0
  350. package/studio/web/assets/profiler-CU93QiSW.js +2 -0
  351. package/studio/web/assets/profiler-CU93QiSW.js.map +1 -0
  352. package/studio/web/assets/react-redux-B8k9Ep7e.js +6 -0
  353. package/studio/web/assets/react-redux-B8k9Ep7e.js.map +1 -0
  354. package/studio/web/assets/startRecording-DFeBXGk6.js +3 -0
  355. package/studio/web/assets/startRecording-DFeBXGk6.js.map +1 -0
  356. package/studio/web/fabric-signup-background.webp +0 -0
  357. package/studio/web/fabric-signup-text.png +0 -0
  358. package/studio/web/favicon_purple.png +0 -0
  359. package/studio/web/github-icon.svg +15 -0
  360. package/studio/web/harper-fabric_black.png +0 -0
  361. package/studio/web/harper-fabric_white.png +0 -0
  362. package/studio/web/harper-studio_white.png +0 -0
  363. package/studio/web/index.html +16 -0
  364. package/studio/web/running.css +148 -0
  365. package/studio/web/running.html +147 -0
  366. package/studio/web/running.js +111 -0
  367. package/upgrade/UpgradeObjects.js +13 -0
  368. package/upgrade/directives/directivesController.js +90 -0
  369. package/upgrade/directivesManager.js +139 -0
  370. package/upgrade/upgradePrompt.js +124 -0
  371. package/upgrade/upgradeUtilities.js +28 -0
  372. package/utility/AWS/AWSConnector.js +29 -0
  373. package/utility/OperationFunctionCaller.js +63 -0
  374. package/utility/assignCmdEnvVariables.js +62 -0
  375. package/utility/common_utils.js +867 -0
  376. package/utility/environment/environmentManager.js +208 -0
  377. package/utility/environment/systemInformation.js +355 -0
  378. package/utility/errors/commonErrors.js +267 -0
  379. package/utility/errors/hdbError.js +146 -0
  380. package/utility/functions/date/dateFunctions.js +65 -0
  381. package/utility/functions/geo.js +355 -0
  382. package/utility/functions/sql/alaSQLExtension.js +104 -0
  383. package/utility/globalSchema.js +35 -0
  384. package/utility/hdbTerms.ts +819 -0
  385. package/utility/install/checkJWTTokensExist.js +62 -0
  386. package/utility/install/harperdb.conf +15 -0
  387. package/utility/install/harperdb.service +14 -0
  388. package/utility/install/installer.js +635 -0
  389. package/utility/installation.ts +30 -0
  390. package/utility/lmdb/DBIDefinition.js +20 -0
  391. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  392. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  393. package/utility/lmdb/OpenDBIObject.js +31 -0
  394. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  395. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  396. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  397. package/utility/lmdb/cleanLMDBMap.js +65 -0
  398. package/utility/lmdb/commonUtility.js +130 -0
  399. package/utility/lmdb/deleteUtility.js +128 -0
  400. package/utility/lmdb/environmentUtility.js +477 -0
  401. package/utility/lmdb/searchCursorFunctions.js +187 -0
  402. package/utility/lmdb/searchUtility.js +918 -0
  403. package/utility/lmdb/terms.js +57 -0
  404. package/utility/lmdb/writeUtility.js +407 -0
  405. package/utility/logging/harper_logger.js +876 -0
  406. package/utility/logging/logRotator.js +157 -0
  407. package/utility/logging/logger.ts +24 -0
  408. package/utility/logging/readLog.js +355 -0
  409. package/utility/logging/transactionLog.js +57 -0
  410. package/utility/mount_hdb.js +59 -0
  411. package/utility/npmUtilities.js +102 -0
  412. package/utility/operationPermissions.ts +112 -0
  413. package/utility/operation_authorization.js +836 -0
  414. package/utility/packageUtils.js +55 -0
  415. package/utility/password.ts +99 -0
  416. package/utility/processManagement/processManagement.js +187 -0
  417. package/utility/processManagement/servicesConfig.js +56 -0
  418. package/utility/scripts/restartHdb.js +24 -0
  419. package/utility/scripts/user_data.sh +13 -0
  420. package/utility/signalling.js +36 -0
  421. package/utility/terms/certificates.js +81 -0
  422. package/utility/when.ts +20 -0
  423. package/validation/bulkDeleteValidator.js +24 -0
  424. package/validation/check_permissions.js +19 -0
  425. package/validation/common_validators.js +95 -0
  426. package/validation/configValidator.js +331 -0
  427. package/validation/deleteValidator.js +15 -0
  428. package/validation/fileLoadValidator.js +153 -0
  429. package/validation/insertValidator.js +40 -0
  430. package/validation/installValidator.js +37 -0
  431. package/validation/readLogValidator.js +64 -0
  432. package/validation/role_validation.js +320 -0
  433. package/validation/schemaMetadataValidator.js +42 -0
  434. package/validation/searchValidator.js +166 -0
  435. package/validation/statusValidator.ts +66 -0
  436. package/validation/transactionLogValidator.js +33 -0
  437. package/validation/user_validation.js +55 -0
  438. package/validation/validationWrapper.js +105 -0
  439. package/dist/resources/ResourceInterfaceV2.d.ts +0 -21
  440. package/dist/resources/ResourceInterfaceV2.js.map +0 -1
  441. package/dist/resources/ResourceV2.d.ts +0 -30
  442. package/dist/resources/ResourceV2.js +0 -27
  443. package/dist/resources/ResourceV2.js.map +0 -1
  444. package/dist/resources/analytics/profile.d.ts +0 -2
  445. package/dist/resources/analytics/profile.js +0 -144
  446. package/dist/resources/analytics/profile.js.map +0 -1
@@ -0,0 +1,115 @@
1
+ 'use strict';
2
+
3
+ const PermissionTableResponseObject = require('./PermissionTableResponseObject.js');
4
+ const PermissionAttributeResponseObject = require('./PermissionAttributeResponseObject.js');
5
+ const { HDB_ERROR_MSGS } = require('../../utility/errors/commonErrors.js');
6
+
7
+ /**
8
+ * This object organizes permission checks into a cohesive response object that will be returned to
9
+ * the user in the case of a failed permissions check.
10
+ */
11
+ class PermissionResponseObject {
12
+ constructor() {
13
+ this.error = HDB_ERROR_MSGS.OP_AUTH_PERMS_ERROR;
14
+ this.unauthorized_access = {};
15
+ this.invalid_schema_items = [];
16
+ }
17
+
18
+ /**
19
+ * This method sets the passed error message to the unauthorizedAccess array and returns the perms response object
20
+ * to be returned to the API - i.e. operation requires SU role so response is sent back immediately with that error message
21
+ * @param errMsg
22
+ * @returns { PermissionResponseObject }
23
+ */
24
+ handleUnauthorizedItem(errMsg) {
25
+ this.invalid_schema_items = [];
26
+ this.unauthorized_access = [errMsg];
27
+ return this;
28
+ }
29
+
30
+ /**
31
+ * This method sets the passed error message to the invalidSchemaItems array and returns the perms response object
32
+ * to be returned to the API - i.e. operation on schema that user does not have access to or doesn't exist so response
33
+ * is sent back immediately with that error message
34
+ * @param errMsg
35
+ * @returns { PermissionResponseObject }
36
+ */
37
+ handleInvalidItem(errMsg) {
38
+ this.invalid_schema_items = [errMsg];
39
+ this.unauthorized_access = [];
40
+ return this;
41
+ }
42
+
43
+ /**
44
+ * This method is used to add an invalid schema item message to the invalidSchemaItems array if there is not an
45
+ * unauthorizedAccess value already tracked for the table - this ensures that we are not providing schema meta-data
46
+ * to the user that they should not have
47
+ * @param item - error string to add to array
48
+ * @param schema - schema that the item is a part of
49
+ * @param table - table that the item is a part of
50
+ */
51
+ addInvalidItem(item, schema, table) {
52
+ if (schema && table) {
53
+ const schemaTable = `${schema}_${table}`;
54
+ if (this.unauthorized_access[schemaTable]) {
55
+ return;
56
+ }
57
+ }
58
+ this.invalid_schema_items.push(item);
59
+ }
60
+
61
+ /**
62
+ * This method is used to add an unauthorized table object to the unauthorizedAccess array
63
+ * @param schema - schema that table is under
64
+ * @param table - table name that user does not have correct perms on
65
+ * @param requiredPerms - permission/s that user does not have on the table to complete the operation
66
+ */
67
+ addUnauthorizedTable(schema, table, requiredTablePerms) {
68
+ const failedTable = new PermissionTableResponseObject(schema, table, requiredTablePerms);
69
+
70
+ const schemaTable = `${schema}_${table}`;
71
+ this.unauthorized_access[schemaTable] = failedTable;
72
+ }
73
+
74
+ /**
75
+ * This method is used to add unauthorized table attribute objects to a new or, if already tracked, an existing table
76
+ * object tracked in the unauthorizedAccess array
77
+ * @param attrKeys - attribute names that are restricted
78
+ * @param schema - schema of table where attr restrictions exist
79
+ * @param table - table where attr restrictions exist
80
+ * @param restrictedAttrs - the perms restrictions for each attr
81
+ */
82
+ addUnauthorizedAttributes(attrKeys, schema, table, restrictedAttrs) {
83
+ const unauthorizedTableAttributes = [];
84
+ attrKeys.forEach((attr) => {
85
+ const attributeObject = new PermissionAttributeResponseObject(attr, restrictedAttrs[attr]);
86
+ unauthorizedTableAttributes.push(attributeObject);
87
+ });
88
+
89
+ const schemaTable = `${schema}_${table}`;
90
+
91
+ if (this.unauthorized_access[schemaTable]) {
92
+ this.unauthorized_access[schemaTable].required_attribute_permissions = unauthorizedTableAttributes;
93
+ } else {
94
+ const failedPermObject = new PermissionTableResponseObject(schema, table, [], unauthorizedTableAttributes);
95
+ this.unauthorized_access[schemaTable] = failedPermObject;
96
+ }
97
+ }
98
+
99
+ /**
100
+ * This method is used to evaluate whether or not there are permissions issues tracked and, if so, returns the response
101
+ * object and, if not, returns a null value meaning the validation step has passed
102
+ *
103
+ * @returns { null| PermissionResponseObject }
104
+ */
105
+ getPermsResponse() {
106
+ const unauthorizedAccessArr = Object.values(this.unauthorized_access);
107
+ if (unauthorizedAccessArr.length > 0 || this.invalid_schema_items.length > 0) {
108
+ this.unauthorized_access = unauthorizedAccessArr;
109
+ return this;
110
+ }
111
+ return null;
112
+ }
113
+ }
114
+
115
+ module.exports = PermissionResponseObject;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ class PermissionTableResponseObject {
4
+ /**
5
+ * Organizes permission checks into a cohesive response object that will be returned to
6
+ * the user in the case of a failed permissions check.
7
+ * @param schema {String}
8
+ * @param table {String}
9
+ * @param requiredTablePerms {Array}
10
+ * @param requiredAttrPerms {Array}
11
+ */
12
+ constructor(schema, table, requiredTablePerms = [], requiredAttrPerms = []) {
13
+ this.schema = schema;
14
+ this.table = table;
15
+ this.required_table_permissions = requiredTablePerms;
16
+ this.required_attribute_permissions = requiredAttrPerms;
17
+ }
18
+ }
19
+
20
+ module.exports = PermissionTableResponseObject;
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ const validation = require('../validation/check_permissions.js');
4
+ const passport = require('passport');
5
+ const LocalStrategy = require('passport-local').Strategy;
6
+ const BasicStrategy = require('passport-http').BasicStrategy;
7
+ const util = require('util');
8
+ const userFunctions = require('./user.ts');
9
+ const cbFindValidateUsers = util.callbackify(userFunctions.findAndValidateUser);
10
+ const hdbTerms = require('../utility/hdbTerms.ts');
11
+ const tokenAuthentication = require('./tokenAuthentication.ts');
12
+ const { AccessViolation } = require('../utility/errors/hdbError');
13
+
14
+ passport.use(
15
+ new LocalStrategy(function (username, password, done) {
16
+ cbFindValidateUsers(username, password, done);
17
+ })
18
+ );
19
+
20
+ passport.use(
21
+ new BasicStrategy(function (username, password, done) {
22
+ cbFindValidateUsers(username, password, done);
23
+ })
24
+ );
25
+
26
+ passport.serializeUser(function (user, done) {
27
+ done(null, user);
28
+ });
29
+
30
+ passport.deserializeUser(function (user, done) {
31
+ done(null, user);
32
+ });
33
+
34
+ function authorize(req, res, next) {
35
+ if (req.raw?.user !== undefined) return next(null, req.raw.user);
36
+ let strategy;
37
+ let token;
38
+ if (req.headers?.authorization) {
39
+ let splitAuthHeader = req.headers.authorization.split(' ');
40
+ strategy = splitAuthHeader[0];
41
+ token = splitAuthHeader[1];
42
+ }
43
+
44
+ function handleResponse(err, user) {
45
+ if (err) {
46
+ return next(err);
47
+ }
48
+ if (!user) {
49
+ return next(new AccessViolation());
50
+ }
51
+ return next(null, user);
52
+ }
53
+
54
+ switch (strategy) {
55
+ case 'Basic':
56
+ passport.authenticate('basic', { session: false }, (err, user) => {
57
+ handleResponse(err, user);
58
+ })(req, res, next);
59
+ break;
60
+ case 'Bearer':
61
+ if (req.body?.operation && req.body.operation === hdbTerms.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN) {
62
+ tokenAuthentication
63
+ .validateRefreshToken(token)
64
+ .then((user) => {
65
+ req.body.refresh_token = token;
66
+ next(null, user);
67
+ })
68
+ .catch((e) => {
69
+ next(e);
70
+ });
71
+ } else {
72
+ tokenAuthentication
73
+ .validateOperationToken(token)
74
+ .then((user) => {
75
+ next(null, user);
76
+ })
77
+ .catch((e) => {
78
+ next(e);
79
+ });
80
+ }
81
+ break;
82
+ default:
83
+ passport.authenticate('local', { session: false }, function (err, user) {
84
+ handleResponse(err, user);
85
+ })(req, res, next);
86
+ break;
87
+ }
88
+ }
89
+
90
+ function checkPermissions(checkPermissionObj, callback) {
91
+ let validationResults = validation(checkPermissionObj);
92
+
93
+ if (validationResults) {
94
+ callback(validationResults);
95
+ return;
96
+ }
97
+
98
+ let authoriziationObj = {
99
+ authorized: true,
100
+ messages: [],
101
+ };
102
+
103
+ let role = checkPermissionObj.user.role;
104
+
105
+ if (!role?.permission) {
106
+ return callback('Invalid role');
107
+ }
108
+ let permission = JSON.parse(role.permission);
109
+
110
+ if (permission.super_user) {
111
+ return callback(null, authoriziationObj);
112
+ }
113
+
114
+ if (!permission[checkPermissionObj.schema]) {
115
+ authoriziationObj.authorized = false;
116
+ authoriziationObj.messages.push(`Not authorized to access ${checkPermissionObj.schema} schema`);
117
+ return callback(null, authoriziationObj);
118
+ }
119
+
120
+ if (!permission[checkPermissionObj.schema].tables[checkPermissionObj.table]) {
121
+ authoriziationObj.authorized = false;
122
+ authoriziationObj.messages.push(`Not authorized to access ${checkPermissionObj.table} table`);
123
+ return callback(null, authoriziationObj);
124
+ }
125
+
126
+ if (!permission[checkPermissionObj.schema].tables[checkPermissionObj.table][checkPermissionObj.operation]) {
127
+ authoriziationObj.authorized = false;
128
+ authoriziationObj.messages.push(
129
+ `Not authorized to access ${checkPermissionObj.operation} on ${checkPermissionObj.table} table`
130
+ );
131
+ return callback(null, authoriziationObj);
132
+ }
133
+
134
+ if (
135
+ permission[checkPermissionObj.schema].tables[checkPermissionObj.table].attribute_permissions &&
136
+ !checkPermissionObj.attributes
137
+ ) {
138
+ authoriziationObj.authorized = false;
139
+ authoriziationObj.messages.push(
140
+ `${checkPermissionObj.schema}.${checkPermissionObj.table} has attribute permissions. Missing attributes to validate`
141
+ );
142
+ return callback(null, authoriziationObj);
143
+ }
144
+
145
+ if (
146
+ permission[checkPermissionObj.schema].tables[checkPermissionObj.table].attribute_permissions &&
147
+ checkPermissionObj.attributes
148
+ ) {
149
+ let restrictedAttrs = permission[checkPermissionObj.schema].tables[checkPermissionObj.table].attribute_permissions;
150
+ for (let rAttr in restrictedAttrs) {
151
+ if (
152
+ checkPermissionObj.attributes.indexOf(restrictedAttrs[rAttr].attribute_name) > -1 &&
153
+ !restrictedAttrs[rAttr][checkPermissionObj.operation]
154
+ ) {
155
+ authoriziationObj.authorized = false;
156
+ authoriziationObj.messages.push(
157
+ `Not authorized to ${checkPermissionObj.operation} ${restrictedAttrs[rAttr].attribute_name} `
158
+ );
159
+ }
160
+ }
161
+ }
162
+
163
+ return callback(null, authoriziationObj);
164
+ }
165
+
166
+ module.exports = {
167
+ authorize,
168
+ checkPermissions,
169
+ };
@@ -0,0 +1,160 @@
1
+ import type { User } from './user.ts';
2
+ import type { ImpersonatePayload } from '../server/operationsServer.ts';
3
+ import { getUsersWithRolesCache } from './user.ts';
4
+ import { validateOperations } from '../utility/operationPermissions.ts';
5
+ import { ClientError } from '../utility/errors/hdbError.js';
6
+ import harperLogger from '../utility/logging/harper_logger.js';
7
+ import { getRoleByName } from './role.js';
8
+
9
+ /**
10
+ * Applies impersonation to a request. The authenticated user must be a super_user.
11
+ * Returns a new User object with downgraded permissions based on the impersonate payload.
12
+ *
13
+ * Mode A (inline role): `impersonate.role` is present — builds a synthetic user with the given permissions.
14
+ * Mode B (existing user): `impersonate.username` is present (no role/role_name) — looks up the user from cache.
15
+ * Mode C (existing role): `impersonate.role_name` is present (no role) — looks up the role by name and builds a synthetic user.
16
+ */
17
+ export async function applyImpersonation(authenticatedUser: User, payload: ImpersonatePayload): Promise<User> {
18
+ // Gate: only super_user can impersonate
19
+ if (!authenticatedUser?.role?.permission?.super_user) {
20
+ throw new ClientError('Only super_user can use impersonation', 403);
21
+ }
22
+
23
+ validatePayload(payload);
24
+
25
+ let impersonatedUser: User;
26
+
27
+ if (payload.role) {
28
+ // Mode A: inline permissions
29
+ impersonatedUser = buildInlineUser(authenticatedUser, payload);
30
+ } else if (payload.role_name) {
31
+ // Mode C: look up existing role by name
32
+ impersonatedUser = await lookupRole(authenticatedUser, payload);
33
+ } else {
34
+ // Mode B: look up existing user by username
35
+ impersonatedUser = await lookupUser(payload.username!);
36
+ }
37
+
38
+ // Enforce downgrade: never allow escalation
39
+ enforceDowngrade(impersonatedUser);
40
+
41
+ // Tag for audit trail
42
+ impersonatedUser._impersonated = true;
43
+ impersonatedUser._impersonatedBy = authenticatedUser.username;
44
+
45
+ harperLogger.info(
46
+ `Impersonation applied: "${authenticatedUser.username}" impersonating as "${impersonatedUser.username}"`
47
+ );
48
+
49
+ return impersonatedUser;
50
+ }
51
+
52
+ function validatePayload(payload: ImpersonatePayload): void {
53
+ if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) {
54
+ throw new ClientError('Invalid impersonate payload: must be an object');
55
+ }
56
+
57
+ const hasRole = payload.role !== undefined;
58
+ const hasUsername = typeof payload.username === 'string' && payload.username.length > 0;
59
+ const hasRoleName = typeof payload.role_name === 'string' && payload.role_name.length > 0;
60
+
61
+ if (!hasRole && !hasUsername && !hasRoleName) {
62
+ throw new ClientError(
63
+ "Invalid impersonate payload: must include 'username', 'role_name', or 'role' with 'permission'"
64
+ );
65
+ }
66
+
67
+ if (hasRole) {
68
+ if (typeof payload.role !== 'object' || payload.role === null) {
69
+ throw new ClientError("Invalid impersonate payload: 'role' must be an object");
70
+ }
71
+ if (typeof payload.role.permission !== 'object' || payload.role.permission === null) {
72
+ throw new ClientError("Invalid impersonate payload: 'role.permission' must be an object");
73
+ }
74
+ validateOperationsField(payload.role.permission);
75
+ }
76
+ }
77
+
78
+ function validateOperationsField(permission: Record<string, unknown>): void {
79
+ const operations = permission.operations;
80
+ if (operations === undefined) return;
81
+
82
+ if (!Array.isArray(operations)) {
83
+ throw new ClientError("Invalid impersonate payload: 'operations' must be an array");
84
+ }
85
+
86
+ const invalidOp = validateOperations(operations);
87
+ if (invalidOp !== null) {
88
+ throw new ClientError(`Invalid impersonate payload: unknown operation '${invalidOp}'`);
89
+ }
90
+ }
91
+
92
+ function buildInlineUser(authenticatedUser: User, payload: ImpersonatePayload): User {
93
+ const username = payload.username || authenticatedUser.username;
94
+
95
+ return {
96
+ username,
97
+ active: true,
98
+ role: {
99
+ permission: { ...payload.role!.permission },
100
+ role: `_impersonated`,
101
+ id: `_impersonated_${username}`,
102
+ __updatedtime__: Date.now(),
103
+ __createdtime__: Date.now(),
104
+ },
105
+ };
106
+ }
107
+
108
+ async function lookupUser(username: string): Promise<User> {
109
+ const cache = await getUsersWithRolesCache();
110
+ const cachedUser = cache.get(username);
111
+
112
+ if (!cachedUser) {
113
+ throw new ClientError(`Impersonation target user '${username}' not found`, 404);
114
+ }
115
+
116
+ if (cachedUser.active === false) {
117
+ throw new ClientError(`Impersonation target user '${username}' is inactive`, 403);
118
+ }
119
+
120
+ // Shallow-clone to avoid mutating cache (same pattern as auth.ts)
121
+ const cloned: User = {
122
+ ...cachedUser,
123
+ role: cachedUser.role
124
+ ? {
125
+ ...cachedUser.role,
126
+ permission: { ...cachedUser.role.permission },
127
+ id: `_impersonated_${username}`,
128
+ }
129
+ : cachedUser.role,
130
+ };
131
+ return cloned;
132
+ }
133
+
134
+ async function lookupRole(authenticatedUser: User, payload: ImpersonatePayload): Promise<User> {
135
+ const role = await getRoleByName(payload.role_name);
136
+
137
+ if (!role) {
138
+ throw new ClientError(`Impersonation target role '${payload.role_name}' not found`, 404);
139
+ }
140
+
141
+ const username = payload.username || authenticatedUser.username;
142
+
143
+ return {
144
+ username,
145
+ active: true,
146
+ role: {
147
+ permission: { ...role.permission },
148
+ role: role.role,
149
+ id: `_impersonated_${username}`,
150
+ __updatedtime__: Date.now(),
151
+ __createdtime__: Date.now(),
152
+ },
153
+ };
154
+ }
155
+
156
+ function enforceDowngrade(user: User): void {
157
+ if (!user.role?.permission) return;
158
+ user.role.permission.super_user = false;
159
+ user.role.permission.cluster_user = false;
160
+ }