@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,267 @@
1
+ 'use strict';
2
+
3
+ const hdb_terms = require('../hdbTerms.ts');
4
+ const lmdb_terms = require('../lmdb/terms.js');
5
+
6
+ // A subset of HTTP error codes that we may use in code.
7
+ const HTTP_STATUS_CODES = {
8
+ CONTINUE: 100,
9
+ OK: 200,
10
+ CREATED: 201,
11
+ BAD_REQUEST: 400,
12
+ UNAUTHORIZED: 401,
13
+ FORBIDDEN: 403,
14
+ NOT_FOUND: 404,
15
+ METHOD_NOT_ALLOWED: 405,
16
+ REQUEST_TIMEOUT: 408,
17
+ CONFLICT: 409,
18
+ TOO_MANY_REQUESTS: 429,
19
+ INTERNAL_SERVER_ERROR: 500,
20
+ NOT_IMPLEMENTED: 501,
21
+ BAD_GATEWAY: 502,
22
+ SERVICE_UNAVAILABLE: 503,
23
+ GATEWAY_TIMEOUT: 504,
24
+ HTTP_VERSION_NOT_SUPPORTED: 505,
25
+ INSUFFICIENT_STORAGE: 507,
26
+ NETWORK_AUTHENTICATION_REQUIRED: 511,
27
+ };
28
+
29
+ //Use this method to wrap an error you are sending back to API when also logging that error message - allows us to create
30
+ // one error message to send to the API (with this wrapper) and log without having to define log message separately
31
+ const CHECK_LOGS_WRAPPER = (err) => `${err} Check logs and try again.`;
32
+
33
+ const DEFAULT_ERROR_MSGS = {
34
+ 500: CHECK_LOGS_WRAPPER('There was an error processing your request.'),
35
+ 400: 'Invalid request',
36
+ };
37
+ const DEFAULT_ERROR_RESP = DEFAULT_ERROR_MSGS[HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR];
38
+
39
+ //Add all error messages that are generic and can be used across modules here
40
+ const COMMON_ERROR_MSGS = {
41
+ OP_NOT_SUPPORTED_FOR_FS: (op) =>
42
+ `${op} is not available for this instance because it uses the File System data store.`,
43
+ MISSING_VALUE: (value) => `${value} is missing.`,
44
+ INVALID_VALUE: (value) => `${value} is invalid.`,
45
+ NOT_FOUND: (value) => `${value} not found.`,
46
+ };
47
+
48
+ const CONFIG_ERROR_MSGS = {
49
+ CONFIG_VALIDATION: (msg) => `Harper config file validation error: ${msg}`,
50
+ };
51
+
52
+ const BULK_LOAD_ERROR_MSGS = {
53
+ DEFAULT_BULK_LOAD_ERR: 'There was an error during your bulk load into Harper.',
54
+ DOWNLOAD_FILE_ERR: (file_name) => `There was an error downloading '${file_name}'.`,
55
+ INSERT_JSON_ERR: 'There was an error inserting the downloaded JSON data.',
56
+ INSERT_CSV_ERR: 'There was an error inserting the downloaded CSV data.',
57
+ INVALID_ACTION_PARAM_ERR: (action) => `Bulk load operation failed - ${action} is not a valid 'action' parameter`,
58
+ INVALID_FILE_EXT_ERR: (json) => `Error selecting correct parser - valid file type not found in json - ${json}`,
59
+ MAX_FILE_SIZE_ERR: (file_size, max_size) =>
60
+ `File size is ${file_size} bytes, which exceeded the maximum size allowed of: ${max_size} bytes`,
61
+ PAPA_PARSE_ERR: 'There was an error parsing the downloaded CSV data.',
62
+ S3_DOWNLOAD_ERR: (file_name) => `There was an error downloading '${file_name}' from AWS.`,
63
+ WRITE_TEMP_FILE_ERR: `Error writing temporary file to storage`,
64
+ };
65
+
66
+ //TODO - move this enum to be exported as a part of HDB_ERROR_MSGS
67
+ //NOTE: Any changes made to these errors must also be made to unitTests/commonTestErrors.js otherwise the unit tests will fail
68
+ const LMDB_ERRORS_ENUM = {
69
+ BASE_PATH_REQUIRED: 'base_path is required',
70
+ DESTINATION_PATH_REQUIRED: 'destination_path is required',
71
+ ENV_NAME_REQUIRED: 'env_name is required',
72
+ INVALID_BASE_PATH: 'invalid base_path',
73
+ INVALID_DESTINATION_PATH: 'invalid destination_path',
74
+ INVALID_ENVIRONMENT: 'invalid environment',
75
+ ENV_REQUIRED: 'env is required',
76
+ DBI_NAME_REQUIRED: 'dbi_name is required',
77
+ DBI_DOES_NOT_EXIST: 'dbi does not exist',
78
+ HASH_ATTRIBUTE_REQUIRED: 'hash_attribute is required',
79
+ ID_REQUIRED: 'id is required',
80
+ IDS_REQUIRED: 'ids is required',
81
+ IDS_MUST_BE_ITERABLE: 'ids must be iterable',
82
+ FETCH_ATTRIBUTES_REQUIRED: 'fetch_attributes is required',
83
+ FETCH_ATTRIBUTES_MUST_BE_ARRAY: 'fetch_attributes must be an array',
84
+ ATTRIBUTE_REQUIRED: 'attribute is required',
85
+ SEARCH_VALUE_REQUIRED: 'value is required',
86
+ SEARCH_VALUE_TOO_LARGE: 'value is too long',
87
+ WRITE_ATTRIBUTES_REQUIRED: 'write_attributes is required',
88
+ WRITE_ATTRIBUTES_MUST_BE_ARRAY: 'write_attributes must be an array',
89
+ RECORDS_REQUIRED: 'records is required',
90
+ RECORDS_MUST_BE_ARRAY: 'records must be an array',
91
+ CANNOT_CREATE_INTERNAL_DBIS_NAME: `cannot create a dbi named ${lmdb_terms.INTERNAL_DBIS_NAME}`,
92
+ CANNOT_DROP_INTERNAL_DBIS_NAME: `cannot drop a dbi named ${lmdb_terms.INTERNAL_DBIS_NAME}`,
93
+ START_VALUE_REQUIRED: 'start_value is required',
94
+ END_VALUE_REQUIRED: 'end_value is required',
95
+ CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS: 'cannot compare a string to numeric keys',
96
+ END_VALUE_MUST_BE_GREATER_THAN_START_VALUE: 'end_value must be greater than or equal to start_value',
97
+ UNKNOWN_SEARCH_TYPE: 'unknown search type',
98
+ CANNOT_DROP_TABLE_HASH_ATTRIBUTE: "cannot drop a table's hash attribute",
99
+ };
100
+
101
+ //This ENUM includes error messages for INSERT, UPDATE, and UPSERT related ops
102
+ const WRITE_OPS_ERROR_MSGS = {
103
+ ATTR_NAME_LENGTH_ERR: (attr_name) =>
104
+ `transaction aborted due to attribute name ${attr_name} being too long. Attribute names cannot be longer than ${hdb_terms.INSERT_MAX_CHARACTER_SIZE} bytes.`,
105
+ ATTR_NAME_NULLISH_ERR:
106
+ 'transaction aborted due to record(s) with an attribute name that is null, undefined or empty string',
107
+ HASH_VAL_LENGTH_ERR: `transaction aborted due to record(s) with a hash value that exceeds ${hdb_terms.INSERT_MAX_CHARACTER_SIZE} bytes, check log for more info`,
108
+ INVALID_FORWARD_SLASH_IN_HASH_ERR:
109
+ 'transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info',
110
+ RECORD_MISSING_HASH_ERR: 'transaction aborted due to record(s) with no hash value, check log for more info',
111
+ };
112
+
113
+ const AUTHENTICATION_ERROR_MSGS = {
114
+ GENERIC_AUTH_FAIL: 'Login failed',
115
+ USER_INACTIVE: 'Cannot complete request: User is inactive',
116
+ INVALID_TOKEN: 'invalid token',
117
+ NO_ENCRYPTION_KEYS: 'unable to generate JWT as there are no encryption keys. please contact your administrator',
118
+ INVALID_CREDENTIALS: 'invalid credentials',
119
+ PASSWORD_REQUIRED: 'password is required',
120
+ USERNAME_REQUIRED: 'username is required',
121
+ REFRESH_TOKEN_REQUIRED: 'refresh_token is required',
122
+ INVALID_AUTH_OBJECT: 'invalid auth_object',
123
+ INVALID_BODY: 'invalid body',
124
+ TOKEN_EXPIRED: 'token expired',
125
+ REFRESH_TOKEN_SAVE_FAILED: 'unable to store refresh_token',
126
+ };
127
+
128
+ const OPERATION_AUTH_ERROR_MSGS = {
129
+ DEFAULT_INVALID_REQUEST: 'Invalid request',
130
+ OP_AUTH_PERMS_ERROR: 'This operation is not authorized due to role restrictions and/or invalid database items',
131
+ OP_IS_SU_ONLY: (op) => `Operation '${op}' is restricted to 'super_user' roles`,
132
+ OP_NOT_FOUND: (op) => `Operation '${op}' not found`,
133
+ OP_NOT_IN_OPERATIONS: (op) => `Operation '${op}' is not permitted for this role's operations configuration`,
134
+ OPERATIONS_MUST_BE_ARRAY: "Permission 'operations' must be an array of operation names or group names",
135
+ INVALID_OPERATIONS_OP: (op) =>
136
+ `Invalid operations value '${op}'. Must be a valid operation name or group (e.g. 'read_only').`,
137
+ SYSTEM_TIMESTAMP_PERMS_ERR:
138
+ "Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",
139
+ UNKNOWN_OP_AUTH_ERROR: (op, schema, table) => `There was an error authorizing ${op} op on table '${schema}.${table}'`,
140
+ USER_HAS_NO_PERMS: (user) => `User ${user} has no role or permissions. Please assign the user a valid role.`,
141
+ DROP_SYSTEM:
142
+ "The 'system' database, tables and records are used internally by Harper and cannot be updated or removed.",
143
+ };
144
+
145
+ const ROLE_PERMS_ERROR_MSGS = {
146
+ ATTR_PERM_MISSING: (perm, attr_name) => `${perm.toUpperCase()} attribute permission missing for '${attr_name}'`,
147
+ ATTR_PERM_MISSING_NAME: "Permission object in 'attribute_permission' missing an 'attribute_name'",
148
+ ATTR_PERM_NOT_BOOLEAN: (perm, attr_name) =>
149
+ `${perm.toUpperCase()} attribute permission for '${attr_name}' must be a boolean`,
150
+ ATTR_PERMS_ARRAY_MISSING: "Missing 'attribute_permissions' array",
151
+ ATTR_PERMS_NOT_ARRAY: "Value for 'attribute_permissions' must be an array",
152
+ INVALID_ATTRIBUTE_IN_PERMS: (attr_name) => `Invalid attribute '${attr_name}' in 'attribute_permissions'`,
153
+ INVALID_PERM_KEY: (table_key) => `Invalid table permission key value '${table_key}'`,
154
+ INVALID_ATTR_PERM_KEY: (attr_perm_key) => `Invalid attribute permission key value '${attr_perm_key}'`,
155
+ INVALID_ROLE_JSON_KEYS: (invalid_keys) =>
156
+ `Invalid ${invalid_keys.length > 1 ? 'keys' : 'key'} in JSON body - '${invalid_keys.join("', '")}'`,
157
+ MISMATCHED_TABLE_ATTR_PERMS: (schema_table) =>
158
+ `You have a conflict with TABLE permissions for '${schema_table}' being false and ATTRIBUTE permissions being true`,
159
+ OUTDATED_PERMS_TRANSLATION_ERROR:
160
+ "This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in Harper Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",
161
+ ROLE_ALREADY_EXISTS: (role_name) => `A role with name '${role_name}' already exists`,
162
+ ROLE_NOT_FOUND: 'Role not found',
163
+ ROLE_PERMS_ERROR: 'Errors in the role permissions JSON provided',
164
+ SCHEMA_PERM_ERROR: (schema_name) =>
165
+ `Your role does not have permission to view database metadata for '${schema_name}'`,
166
+ SCHEMA_TABLE_PERM_ERROR: (schema_name, table_name) =>
167
+ `Your role does not have permission to view database.table metadata for '${schema_name}.${table_name}'`,
168
+ SU_ROLE_MISSING_ERROR: "Missing 'super_user' key/value in permission set",
169
+ SU_CU_ROLE_BOOLEAN_ERROR: (role) => `Value for '${role}' permission must be a boolean`,
170
+ STRUCTURE_USER_ROLE_TYPE_ERROR: (role) => `Value for '${role}' permission must be a boolean or Array`,
171
+ SU_CU_ROLE_NO_PERMS_ALLOWED: (role) => `Roles with '${role}' set to true cannot have other permissions set.`,
172
+ TABLE_PERM_MISSING: (perm) => `Missing table ${perm.toUpperCase()} permission`,
173
+ TABLE_PERM_NOT_BOOLEAN: (perm) => `Table ${perm.toUpperCase()} permission must be a boolean`,
174
+ };
175
+
176
+ const SCHEMA_OP_ERROR_MSGS = {
177
+ ATTR_NOT_FOUND: (schema, table, attr) => `Attribute '${attr}' does not exist on '${schema}.${table}'`,
178
+ ATTR_EXISTS_ERR: (schema, table, attr) => `Attribute '${attr}' already exists in ${schema}.${table}'`,
179
+ DESCRIBE_ALL_ERR: 'There was an error during describeAll. Please check the logs and try again.',
180
+ INVALID_TABLE_ERR: (table_result) => `Invalid table ${JSON.stringify(table_result)}`,
181
+ SCHEMA_NOT_FOUND: (schema) => `database '${schema}' does not exist`,
182
+ SCHEMA_EXISTS_ERR: (schema) => `database '${schema}' already exists`,
183
+ TABLE_EXISTS_ERR: (schema, table) => `Table '${table}' already exists in '${schema}'`,
184
+ SCHEMA_REQUIRED_ERR: 'database is required',
185
+ TABLE_NOT_FOUND: (schema, table) => `Table '${schema}.${table}' does not exist`,
186
+ TABLE_REQUIRED_ERR: 'table is required',
187
+ };
188
+
189
+ const SQL_ERROR_MSGS = {
190
+ OUTER_JOIN_TRANSLATION_ERROR: 'There was an error translating the final SQL outer join data.',
191
+ };
192
+
193
+ const USER_ERROR_MSGS = {
194
+ ALTER_USER_DUP_ROLES: (role) =>
195
+ `Update failed. There are duplicates for the '${role}' role which is not allowed. Update your roles and try again.`,
196
+ ALTER_USER_ROLE_NOT_FOUND: (role) => `Update failed. Requested '${role}' role not found.`,
197
+ DUP_ROLES_FOUND: (role) =>
198
+ `Multiple ${role} roles found. Roles must have unique 'role' value. Please update and try again.`,
199
+ ROLE_NAME_NOT_FOUND: (role) => `${role} role not found`,
200
+ USER_ALREADY_EXISTS: (user) => `User ${user} already exists`,
201
+ USER_NOT_EXIST: (user) => `User ${user} does not exist`,
202
+ };
203
+
204
+ const VALIDATION_ERROR_MSGS = {
205
+ INVALID_DATE: 'Invalid date, must be in ISO-8601 format (YYYY-MM-DD).',
206
+ SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE: (attribute) =>
207
+ `invalid sort attribute '${attribute}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,
208
+ };
209
+
210
+ const ITC_ERRORS = {
211
+ INVALID_ITC_DATA_TYPE: 'Invalid ITC event data type, must be an object',
212
+ MISSING_TYPE: "ITC event missing 'type'",
213
+ MISSING_MSG: "ITC event missing 'message'",
214
+ MISSING_ORIGIN: "ITC event message missing 'originator' property",
215
+ INVALID_EVENT: (event) => `ITC server received invalid event type: ${event}`,
216
+ };
217
+
218
+ const CUSTOM_FUNCTIONS_ERROR_MSGS = {
219
+ FUNCTION_STATUS: 'Error getting custom function status, check the log for more details',
220
+ GET_FUNCTIONS: 'Error getting custom functions, check the log for more details',
221
+ GET_FUNCTION: 'Error getting custom function, check the log for more details',
222
+ SET_FUNCTION: 'Error setting custom function, check the log for more details',
223
+ NO_PROJECT: "Project does not exist. Create one using 'add_custom_function_project'",
224
+ PROJECT_EXISTS: 'Project already exists',
225
+ VALIDATION_ERR: 'Error validating request, check the log for more details',
226
+ NO_FILE: 'File does not exist',
227
+ BAD_FILE_NAME: 'File name can only contain alphanumeric, dash and underscore characters',
228
+ BAD_PROJECT_NAME: 'Project name can only contain alphanumeric, dash and underscores characters',
229
+ BAD_PACKAGE: 'Packaged project must be base64-encoded tar file of project directory',
230
+ DROP_FUNCTION: 'Error dropping custom function, check the log for more details',
231
+ ADD_FUNCTION: 'Error adding custom function project, check the log for more details',
232
+ DROP_FUNCTION_PROJECT: 'Error dropping custom function project, check the log for more details',
233
+ BAD_FILE_PATH: 'Filepath must be valid, and contain the name of the tarball you wish to write',
234
+ NOT_ENABLED:
235
+ 'Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.',
236
+ BAD_SSH_KEY_NAME: 'SSH key name can only contain alphanumeric, dash and underscore characters',
237
+ };
238
+
239
+ //into a single export while still allowing us to group them here in a more readable/searchable way
240
+ const HDB_ERROR_MSGS = {
241
+ ...AUTHENTICATION_ERROR_MSGS,
242
+ ...BULK_LOAD_ERROR_MSGS,
243
+ ...COMMON_ERROR_MSGS,
244
+ ...OPERATION_AUTH_ERROR_MSGS,
245
+ ...ROLE_PERMS_ERROR_MSGS,
246
+ ...SCHEMA_OP_ERROR_MSGS,
247
+ ...SQL_ERROR_MSGS,
248
+ ...USER_ERROR_MSGS,
249
+ ...WRITE_OPS_ERROR_MSGS,
250
+ ...VALIDATION_ERROR_MSGS,
251
+ ...ITC_ERRORS,
252
+ ...CUSTOM_FUNCTIONS_ERROR_MSGS,
253
+ ...CONFIG_ERROR_MSGS,
254
+ };
255
+
256
+ // All error messages should be added to the HDB_ERROR_MSGS ENUM for export - this helps to organize all error messages
257
+ module.exports = {
258
+ CHECK_LOGS_WRAPPER,
259
+ HDB_ERROR_MSGS,
260
+ DEFAULT_ERROR_MSGS,
261
+ DEFAULT_ERROR_RESP,
262
+ HTTP_STATUS_CODES,
263
+ LMDB_ERRORS_ENUM,
264
+ AUTHENTICATION_ERROR_MSGS,
265
+ VALIDATION_ERROR_MSGS,
266
+ ITC_ERRORS,
267
+ };
@@ -0,0 +1,146 @@
1
+ 'use strict';
2
+ const hdbErrors = require('./commonErrors.js');
3
+ const hdbTerms = require('../hdbTerms.ts');
4
+
5
+ /**
6
+ * Custom error class used for better error and log handling. Caught errors that evaluate to an instanceof HdbError can
7
+ * be handled differently - e.g. in most cases caught HdbError likely would not need to be logged since that should have
8
+ * already been handled when the custom error was constructed.
9
+ */
10
+ class HdbError extends Error {
11
+ /**
12
+ * @param {Error} errOrig - Error to be translated into HdbError. If manually throwing an error, pass `new Error()` to ensure stack trace is maintained
13
+ * @param {String} [httpMsg] - optional - response message that will be returned via the API
14
+ * @param {Number} [httpCode] - optional - response status code that will be returned via the API
15
+ * @param {String} [logLevel] - optional - log level that will be used for logging of this error
16
+ * @param {String} [logMsg] - optional - log message that, if provided, will be logged at the `logLevel` above
17
+ */
18
+ constructor(errOrig, httpMsg, httpCode, logLevel, logMsg) {
19
+ super();
20
+
21
+ //This line ensures the original stack trace is captured and does not include the 'handle' or 'constructor' methods
22
+ Error.captureStackTrace(this, handleHDBError);
23
+
24
+ this.statusCode = httpCode ? httpCode : hdbErrors.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;
25
+ this.http_resp_msg = httpMsg
26
+ ? httpMsg
27
+ : hdbErrors.DEFAULT_ERROR_MSGS[httpCode]
28
+ ? hdbErrors.DEFAULT_ERROR_MSGS[httpCode]
29
+ : hdbErrors.DEFAULT_ERROR_MSGS[hdbErrors.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR];
30
+ this.message = errOrig.message ? errOrig.message : this.http_resp_msg;
31
+ this.type = errOrig.name;
32
+ if (logLevel) this.logLevel = logLevel;
33
+
34
+ //This ensures that the error stack does not include [object Object] if the error message is not a string
35
+ if (typeof this.message !== 'string') {
36
+ this.stack = errOrig.stack;
37
+ }
38
+
39
+ if (logMsg) {
40
+ const logger = require('../logging/harper_logger.js');
41
+ logger[logLevel](logMsg);
42
+ }
43
+ }
44
+ }
45
+ class ClientError extends Error {
46
+ constructor(message, statusCode) {
47
+ if (message instanceof Error) {
48
+ message.statusCode = statusCode || 400;
49
+ return message;
50
+ }
51
+ super(message);
52
+ this.statusCode = statusCode || 400;
53
+ }
54
+ }
55
+
56
+ class ServerError extends Error {
57
+ constructor(message, statusCode) {
58
+ super(message);
59
+ this.statusCode = statusCode || 500;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * This handler method is used to effectively evaluate caught errors and either translates them into a custom HdbError or,
65
+ * if it is already a HdbError, just returns the error to continue being thrown up the stack
66
+ *
67
+ * See above for params descriptions
68
+ * @param e
69
+ * @param httpMsg
70
+ * @param httpCode
71
+ * @param logLevel
72
+ * @param logMsg
73
+ * @param deleteStack
74
+ * @returns {HdbError|*}
75
+ */
76
+ function handleHDBError(
77
+ e,
78
+ httpMsg,
79
+ httpCode,
80
+ logLevel = hdbTerms.LOG_LEVELS.ERROR,
81
+ logMsg = null,
82
+ deleteStack = false
83
+ ) {
84
+ if (isHDBError(e)) {
85
+ return e;
86
+ }
87
+
88
+ const error = new HdbError(e, httpMsg, httpCode, logLevel, logMsg);
89
+
90
+ // In some situations, such as validation errors, the stack does not need to be thrown/logged.
91
+ if (deleteStack) {
92
+ delete error.stack;
93
+ }
94
+
95
+ return error;
96
+ }
97
+
98
+ /**
99
+ * Represents a general violation of validation/authorization. This should be used in situations where we are performing
100
+ * expected verification, and we do not need to record a stack trace. This extends Error's prototype, but doesn't
101
+ * use the native constructor to avoid stack trace capture which is several times faster.
102
+ * @param {Object} user - user object that caused the access violation
103
+ * @constructor
104
+ */
105
+ function Violation(message) {
106
+ this.message = message;
107
+ }
108
+ Violation.prototype = Object.create(Error.prototype);
109
+ Violation.prototype.constructor = Violation;
110
+ Violation.prototype.toString = function () {
111
+ return `${this.constructor.name}: ${this.message}`;
112
+ };
113
+
114
+ /**
115
+ * Represents an access violation. This is used to return a 403 or 401 response to the client. Uses fast Violation class
116
+ * to avoid stack trace capture.
117
+ * @param {Object} user - user object that caused the access violation
118
+ * @constructor
119
+ */
120
+ class AccessViolation extends Violation {
121
+ constructor(user) {
122
+ if (user) {
123
+ super('Unauthorized access to resource');
124
+ this.statusCode = 403;
125
+ } else {
126
+ super('Must login');
127
+ this.statusCode = 401;
128
+ // TODO: Optionally allow a Location header to redirect to
129
+ }
130
+ }
131
+ }
132
+
133
+ function isHDBError(e) {
134
+ return e.__proto__.constructor.name === HdbError.name;
135
+ }
136
+
137
+ module.exports = {
138
+ isHDBError,
139
+ handleHDBError,
140
+ ClientError,
141
+ ServerError,
142
+ AccessViolation,
143
+ Violation,
144
+ //Including common hdbErrors here so that they can be brought into modules on the same line where the handler method is brought in
145
+ hdbErrors,
146
+ };
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ const moment = require('moment');
4
+ const hdbTimeFormat = 'YYYY-MM-DDTHH:mm:ss.SSSZZ';
5
+
6
+ moment.suppressDeprecationWarnings = true;
7
+
8
+ module.exports = {
9
+ current_date: () => {
10
+ return moment().utc().format('YYYY-MM-DD');
11
+ },
12
+ current_time: () => {
13
+ return moment().utc().format('HH:mm:ss.SSS');
14
+ },
15
+ extract: (date, datePart) => {
16
+ switch (datePart.toLowerCase()) {
17
+ case 'year':
18
+ return moment(date).utc().format('YYYY');
19
+ case 'month':
20
+ return moment(date).utc().format('MM');
21
+ case 'day':
22
+ return moment(date).utc().format('DD');
23
+ case 'hour':
24
+ return moment(date).utc().format('HH');
25
+ case 'minute':
26
+ return moment(date).utc().format('mm');
27
+ case 'second':
28
+ return moment(date).utc().format('ss');
29
+ case 'millisecond':
30
+ return moment(date).utc().format('SSS');
31
+ default:
32
+ break;
33
+ }
34
+ },
35
+ date: (date) => {
36
+ return moment(date).utc().format(hdbTimeFormat);
37
+ },
38
+ date_format: (date, format) => {
39
+ return moment(date).utc().format(format);
40
+ },
41
+ date_add: (date, value, interval) => {
42
+ return moment(date).utc().add(value, interval).valueOf();
43
+ },
44
+ date_sub: (date, value, interval) => {
45
+ return moment(date).utc().subtract(value, interval).valueOf();
46
+ },
47
+ date_diff: (date1, date2, interval) => {
48
+ let firstDate = moment(date1).utc();
49
+ let secondDate = moment(date2).utc();
50
+ if (interval) {
51
+ return firstDate.diff(secondDate, interval, true);
52
+ } else {
53
+ return firstDate.diff(secondDate);
54
+ }
55
+ },
56
+ now: () => {
57
+ return moment().utc().valueOf();
58
+ },
59
+ get_server_time: () => {
60
+ return moment().format(hdbTimeFormat);
61
+ },
62
+ offset_utc: (date, offset) => {
63
+ return moment(date).utc().utcOffset(offset).format(hdbTimeFormat);
64
+ },
65
+ };