@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,121 @@
1
+ /**
2
+ * Certificate verification for mTLS authentication
3
+ *
4
+ * This module provides certificate revocation checking for client certificates
5
+ * in mutual TLS (mTLS) connections. Supports both OCSP (Online Certificate
6
+ * Status Protocol) and CRL (Certificate Revocation List) verification methods
7
+ * with automatic method selection.
8
+ *
9
+ * Features:
10
+ * - OCSP verification with caching
11
+ * - CRL verification with caching
12
+ * - CRL-first with OCSP fallback for optimal performance
13
+ * - Background CRL refresh with exponential backoff
14
+ * - Graceful degradation during network outages
15
+ * - Ed25519/Ed448 certificate support
16
+ *
17
+ * Default behavior:
18
+ * - Certificate verification: disabled (must be explicitly enabled)
19
+ * - Verification approach: CRL-first (with OCSP fallback)
20
+ * - CRL timeout: 10 seconds, cache TTL: 24 hours
21
+ * - OCSP timeout: 5 seconds, cache TTL: 1 hour
22
+ * - Failure mode: fail-closed (rejects connections if verification fails)
23
+ */
24
+
25
+ import { loggerWithTag } from '../../utility/logging/logger.ts';
26
+ import { extractCertificateChain, extractRevocationUrls, bufferToPem } from './verificationUtils.ts';
27
+ import { getCachedCertificateVerificationConfig } from './verificationConfig.ts';
28
+ import { verifyOCSP } from './ocspVerification.ts';
29
+ import { verifyCRL } from './crlVerification.ts';
30
+ import type { PeerCertificate, CertificateVerificationResult } from './types.ts';
31
+
32
+ const logger = loggerWithTag('cert-verification');
33
+
34
+ /**
35
+ * Verify certificate revocation status using OCSP and/or CRL
36
+ * @param peerCertificate - Peer certificate object from TLS connection
37
+ * @param mtlsConfig - The mTLS configuration from the request
38
+ * @returns Promise resolving to verification result
39
+ */
40
+ export async function verifyCertificate(
41
+ peerCertificate: PeerCertificate,
42
+ mtlsConfig?: boolean | Record<string, any> | null
43
+ ): Promise<CertificateVerificationResult> {
44
+ logger.debug?.(`verifyCertificate called for: ${peerCertificate.subject?.CN || 'unknown'}`);
45
+
46
+ // Get the verification configuration from mtlsConfig (cached for performance)
47
+ const config = getCachedCertificateVerificationConfig(mtlsConfig);
48
+
49
+ // If config is false, verification is disabled
50
+ if (config === false) {
51
+ logger.debug?.('Certificate verification disabled');
52
+ return { valid: true, status: 'disabled', method: 'disabled' };
53
+ }
54
+
55
+ // Extract certificate chain
56
+ const certChain = extractCertificateChain(peerCertificate);
57
+ logger.trace?.(`Certificate chain length: ${certChain.length}`);
58
+
59
+ // Check if we have sufficient chain for verification (need certificate and issuer)
60
+ if (certChain.length < 2 || !certChain[0].issuer) {
61
+ logger.debug?.('Certificate chain insufficient for revocation checking - need certificate and issuer');
62
+ return { valid: true, status: 'no-issuer-cert', method: 'disabled' };
63
+ }
64
+
65
+ // Extract certificate revocation URLs in single parse operation
66
+ const certPem = bufferToPem(certChain[0].cert, 'CERTIFICATE');
67
+ const { crlUrls, ocspUrls } = extractRevocationUrls(certPem);
68
+
69
+ logger.debug?.(`Certificate extensions: CRL distribution points=${crlUrls.length}, OCSP URLs=${ocspUrls.length}`);
70
+
71
+ // Try CRL first (can provide definitive results)
72
+ if (crlUrls.length > 0) {
73
+ if (config.crl.enabled) {
74
+ try {
75
+ logger.debug?.('Attempting CRL verification');
76
+ const result = await verifyCRL(certChain[0].cert, certChain[0].issuer, config.crl, crlUrls);
77
+
78
+ // Return on definitive result (good or revoked)
79
+ if (result.status === 'good' || result.status === 'revoked') {
80
+ logger.debug?.(`CRL verification result: ${result.status}`);
81
+ return result;
82
+ }
83
+
84
+ logger.debug?.(`CRL verification inconclusive: ${result.status}, trying OCSP fallback`);
85
+ } catch (error) {
86
+ logger.warn?.(`CRL verification failed: ${error}`);
87
+ }
88
+ } else {
89
+ logger.debug?.('Skipping CRL - disabled in configuration');
90
+ }
91
+ } else {
92
+ logger.debug?.('Skipping CRL - no distribution points in certificate');
93
+ }
94
+
95
+ // Fall back to OCSP if available (real-time status)
96
+ if (ocspUrls.length > 0) {
97
+ if (config.ocsp.enabled) {
98
+ try {
99
+ logger.debug?.('Attempting OCSP verification');
100
+ const result = await verifyOCSP(certChain[0].cert, certChain[0].issuer, config.ocsp, ocspUrls);
101
+
102
+ // Return result (definitive or not)
103
+ logger.debug?.(`OCSP verification result: ${result.status}`);
104
+ return result;
105
+ } catch (error) {
106
+ logger.warn?.(`OCSP verification failed: ${error}`);
107
+ }
108
+ } else {
109
+ logger.debug?.('Skipping OCSP - disabled in configuration');
110
+ }
111
+ } else {
112
+ logger.debug?.('Skipping OCSP - no responder URLs in certificate');
113
+ }
114
+
115
+ // All methods tried or skipped - determine failure handling
116
+ if (config.failureMode === 'fail-closed') {
117
+ return { valid: false, status: 'no-verification-available', method: 'disabled' };
118
+ }
119
+
120
+ return { valid: true, status: 'verification-unavailable-allowed', method: 'disabled' };
121
+ }
@@ -0,0 +1,148 @@
1
+ /**
2
+ * OCSP (Online Certificate Status Protocol) verification
3
+ */
4
+
5
+ // Apply PKI.js Ed25519 patch before importing easy-ocsp
6
+ import './pkijs-ed25519-patch.ts';
7
+ import { getCertStatus } from 'easy-ocsp';
8
+ import { loggerWithTag } from '../../utility/logging/logger.ts';
9
+ import {
10
+ bufferToPem,
11
+ createCacheKey,
12
+ getCertificateCacheTable as getSharedCertificateCacheTable,
13
+ } from './verificationUtils.ts';
14
+ import type {
15
+ CertificateVerificationResult,
16
+ CertificateVerificationContext,
17
+ CertificateCacheEntry,
18
+ OCSPCheckResult,
19
+ OCSPConfig,
20
+ } from './types.ts';
21
+
22
+ const logger = loggerWithTag('ocsp-verification');
23
+
24
+ // Import the shared source
25
+ import { CertificateVerificationSource } from './certificateVerificationSource.ts';
26
+
27
+ // Lazy-load the certificate verification cache table
28
+ let certCacheTable: ReturnType<typeof getSharedCertificateCacheTable>;
29
+ function getCertificateCacheTable() {
30
+ if (!certCacheTable) {
31
+ certCacheTable = getSharedCertificateCacheTable();
32
+ // Configure the caching source using the shared CertificateVerificationSource class
33
+ (certCacheTable as any).sourcedFrom(CertificateVerificationSource);
34
+ }
35
+ return certCacheTable;
36
+ }
37
+
38
+ /**
39
+ * Verify OCSP status of a client certificate
40
+ * @param certPem - Client certificate as Buffer (DER format)
41
+ * @param issuerPem - Issuer (CA) certificate as Buffer (DER format)
42
+ * @param config - OCSP configuration
43
+ * @param ocspUrls - Optional pre-extracted OCSP responder URLs (avoids re-parsing)
44
+ * @returns Promise resolving to verification result
45
+ */
46
+ export async function verifyOCSP(
47
+ certPem: Buffer,
48
+ issuerPem: Buffer,
49
+ config?: OCSPConfig,
50
+ ocspUrls?: string[]
51
+ ): Promise<CertificateVerificationResult> {
52
+ // Check if OCSP verification is disabled
53
+ if (config?.enabled === false) {
54
+ return { valid: true, status: 'disabled', method: 'disabled' };
55
+ }
56
+
57
+ try {
58
+ // Convert DER buffers to PEM strings for certificate parsing libraries
59
+ // PKI.js and easy-ocsp expect PEM format for extension extraction and OCSP requests
60
+ const certPemStr = bufferToPem(certPem, 'CERTIFICATE');
61
+ const issuerPemStr = bufferToPem(issuerPem, 'CERTIFICATE');
62
+
63
+ // Create a cache key that includes all verification parameters
64
+ const cacheKey = createCacheKey(certPemStr, issuerPemStr, 'ocsp');
65
+
66
+ // Get the cache table - Harper will automatically handle
67
+ // concurrent requests and cache stampede prevention
68
+ // Pass certificate data as context - Harper will make it available as requestContext in the source
69
+ const cacheEntry = await (getCertificateCacheTable() as any).get(cacheKey, {
70
+ certPem: certPemStr,
71
+ issuerPem: issuerPemStr,
72
+ ocspUrls,
73
+ config: { ocsp: config ?? {} },
74
+ } as CertificateVerificationContext);
75
+
76
+ if (!cacheEntry) {
77
+ // This should not happen if the source is configured correctly
78
+ // but handle it gracefully
79
+ if (config.failureMode === 'fail-closed') {
80
+ return { valid: false, status: 'error', error: 'Cache fetch failed', method: 'ocsp' };
81
+ }
82
+
83
+ logger.warn?.('OCSP cache fetch failed, allowing connection (fail-open mode)');
84
+ return { valid: true, status: 'error-allowed', method: 'ocsp' };
85
+ }
86
+
87
+ const cached = cacheEntry as unknown as CertificateCacheEntry;
88
+ const wasLoadedFromSource = (cacheEntry as any).wasLoadedFromSource?.();
89
+ logger.trace?.(`OCSP ${wasLoadedFromSource ? 'source fetch' : 'cache hit'} for certificate`);
90
+
91
+ return {
92
+ valid: cached.status === 'good',
93
+ status: cached.status,
94
+ cached: !wasLoadedFromSource,
95
+ method: cached.method || 'ocsp',
96
+ };
97
+ } catch (error) {
98
+ logger.error?.(`OCSP verification error: ${error}`);
99
+
100
+ // Check failure mode
101
+ if (config.failureMode === 'fail-closed') {
102
+ return { valid: false, status: 'error', error: (error as Error).message, method: 'ocsp' };
103
+ }
104
+
105
+ // Fail open - allow connection on OCSP errors
106
+ logger.warn?.('OCSP check failed, allowing connection (fail-open mode)');
107
+ return { valid: true, status: 'error-allowed', method: 'ocsp' };
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Perform the actual OCSP check using easy-ocsp
113
+ * @param certPem - Certificate in PEM format
114
+ * @param issuerPem - Issuer certificate in PEM format
115
+ * @param config - OCSP configuration
116
+ * @param ocspUrls - Optional pre-extracted OCSP responder URLs (avoids re-parsing)
117
+ * @returns OCSP check result
118
+ */
119
+ export async function performOCSPCheck(
120
+ certPem: string,
121
+ issuerPem: string,
122
+ config: any,
123
+ ocspUrls?: string[]
124
+ ): Promise<OCSPCheckResult> {
125
+ try {
126
+ const response = await getCertStatus(certPem, {
127
+ ca: issuerPem,
128
+ timeout: config.timeout,
129
+ ...(ocspUrls?.length && { ocspUrl: ocspUrls[0] }),
130
+ });
131
+
132
+ // Map response status to internal format
133
+ switch (response.status) {
134
+ case 'good':
135
+ return { status: 'good' };
136
+ case 'revoked':
137
+ return { status: 'revoked', reason: response.revocationReason?.toString() || 'unspecified' };
138
+ default:
139
+ return { status: 'unknown', reason: 'unknown-status' };
140
+ }
141
+ } catch (error) {
142
+ const err = error as Error;
143
+
144
+ // Return appropriate error based on type
145
+ const reason = err.name === 'AbortError' ? 'timeout' : 'ocsp-error';
146
+ return { status: 'unknown', reason };
147
+ }
148
+ }
@@ -0,0 +1,188 @@
1
+ /**
2
+ * PKI.js Ed25519/Ed448 Support Patch
3
+ *
4
+ * This module patches PKI.js to add complete Ed25519/Ed448 support for certificate
5
+ * and OCSP response verification. While PKI.js has some Ed25519/Ed448 support,
6
+ * it currently lacks:
7
+ * - getHashAlgorithm() support for Ed25519/Ed448 OIDs
8
+ * - getAlgorithmByOID() recognition of Ed25519/Ed448
9
+ * - Certificate verification using Ed25519/Ed448 signatures
10
+ * - OCSP response signature verification with Ed25519/Ed448
11
+ *
12
+ * This patch must be loaded before any module that uses PKI.js (including easy-ocsp).
13
+ */
14
+
15
+ import * as pkijs from 'pkijs';
16
+ import { webcrypto, X509Certificate } from 'node:crypto';
17
+
18
+ // Ed25519/Ed448 OIDs (these are standardized object identifiers, not IP addresses)
19
+ const ED25519_OID = '1.3.101.112' as const;
20
+ const ED448_OID = '1.3.101.113' as const;
21
+ type EdDSAOID = typeof ED25519_OID | typeof ED448_OID;
22
+
23
+ // Algorithm names as constants
24
+ const ED25519_NAME = 'Ed25519' as const;
25
+ const ED448_NAME = 'Ed448' as const;
26
+ type EdDSAAlgorithmName = typeof ED25519_NAME | typeof ED448_NAME;
27
+
28
+ // Apply patches only once
29
+ let patchesApplied = false;
30
+
31
+ function isEd25519OrEd448(oid: string): oid is EdDSAOID {
32
+ return oid === ED25519_OID || oid === ED448_OID;
33
+ }
34
+
35
+ function isEdDSAAlgorithmName(name: string): name is EdDSAAlgorithmName {
36
+ return name === ED25519_NAME || name === ED448_NAME;
37
+ }
38
+
39
+ function getEdDSAAlgorithmName(oid: string): EdDSAAlgorithmName {
40
+ return oid === ED25519_OID ? ED25519_NAME : ED448_NAME;
41
+ }
42
+
43
+ export function applyEd25519Patch(): void {
44
+ if (patchesApplied) return;
45
+ patchesApplied = true;
46
+
47
+ const CryptoEngine = pkijs.CryptoEngine.prototype;
48
+ const Certificate = pkijs.Certificate.prototype;
49
+
50
+ // Store original methods
51
+ const originals = {
52
+ getHashAlgorithm: CryptoEngine.getHashAlgorithm,
53
+ getAlgorithmByOID: CryptoEngine.getAlgorithmByOID,
54
+ getAlgorithmParameters: CryptoEngine.getAlgorithmParameters,
55
+ verifyWithPublicKey: CryptoEngine.verifyWithPublicKey,
56
+ certificateVerify: Certificate.verify,
57
+ getPublicKey: Certificate.getPublicKey,
58
+ };
59
+
60
+ // Patch getHashAlgorithm - Ed25519/Ed448 don't use separate hashes
61
+ CryptoEngine.getHashAlgorithm = function (
62
+ ...params: Parameters<typeof originals.getHashAlgorithm>
63
+ ): ReturnType<typeof originals.getHashAlgorithm> {
64
+ const [signatureAlgorithm] = params;
65
+ if (isEd25519OrEd448(signatureAlgorithm.algorithmId)) {
66
+ // EdDSA signatures have built-in hash functions per RFC 8032:
67
+ // - Ed25519 uses SHA-512 internally (Section 5.1.6)
68
+ // - Ed448 uses SHAKE256 internally (Section 5.2.6)
69
+ // The hash is not a parameter - it's part of the algorithm definition.
70
+ // Returning a placeholder since PKI.js expects a string, but our patched
71
+ // verification methods bypass any code that would use this value.
72
+ return 'UNUSED-EDDSA-BUILTIN-HASH';
73
+ }
74
+ return originals.getHashAlgorithm.call(this, signatureAlgorithm);
75
+ };
76
+
77
+ // Patch getAlgorithmByOID to recognize Ed25519/Ed448
78
+ CryptoEngine.getAlgorithmByOID = function (
79
+ ...params: Parameters<typeof originals.getAlgorithmByOID>
80
+ ): ReturnType<typeof originals.getAlgorithmByOID> {
81
+ const [oid] = params;
82
+ if (isEd25519OrEd448(oid)) {
83
+ return { name: getEdDSAAlgorithmName(oid) };
84
+ }
85
+ return originals.getAlgorithmByOID.call(this, ...params);
86
+ };
87
+
88
+ // Patch getAlgorithmParameters
89
+ CryptoEngine.getAlgorithmParameters = function (
90
+ ...params: Parameters<typeof originals.getAlgorithmParameters>
91
+ ): ReturnType<typeof originals.getAlgorithmParameters> {
92
+ const [algorithmName, operation] = params;
93
+ if (isEdDSAAlgorithmName(algorithmName)) {
94
+ return {
95
+ algorithm: { name: algorithmName },
96
+ usages: operation === 'sign' ? ['sign'] : ['verify'],
97
+ };
98
+ }
99
+ return originals.getAlgorithmParameters.call(this, ...params);
100
+ };
101
+
102
+ // Patch getPublicKey for Ed25519/Ed448
103
+ Certificate.getPublicKey = async function (
104
+ ...params: Parameters<typeof originals.getPublicKey>
105
+ ): ReturnType<typeof originals.getPublicKey> {
106
+ const [, cryptoEngine = pkijs.getCrypto(true)] = params;
107
+ const algId = this.subjectPublicKeyInfo.algorithm.algorithmId;
108
+ if (isEd25519OrEd448(algId)) {
109
+ const algorithmName = getEdDSAAlgorithmName(algId);
110
+ return cryptoEngine.importKey('spki', this.subjectPublicKeyInfo.toSchema().toBER(false), algorithmName, true, [
111
+ 'verify',
112
+ ]);
113
+ }
114
+ return originals.getPublicKey.call(this, ...params);
115
+ };
116
+
117
+ // Patch Certificate.verify for Ed25519/Ed448
118
+ Certificate.verify = async function (
119
+ ...params: Parameters<typeof originals.certificateVerify>
120
+ ): ReturnType<typeof originals.certificateVerify> {
121
+ const [issuerCertificate] = params;
122
+ if (isEd25519OrEd448(this.signatureAlgorithm.algorithmId)) {
123
+ try {
124
+ // Use Node.js X509Certificate for Ed25519/Ed448 verification
125
+ const certDer = this.toSchema().toBER(false);
126
+ const issuerDer = issuerCertificate.toSchema().toBER(false);
127
+
128
+ const nodeCert = new X509Certificate(Buffer.from(certDer));
129
+ const nodeIssuer = new X509Certificate(Buffer.from(issuerDer));
130
+
131
+ return nodeCert.verify(nodeIssuer.publicKey);
132
+ } catch {
133
+ // Any failure in verification should return false
134
+ return false;
135
+ }
136
+ }
137
+ return originals.certificateVerify.call(this, ...params);
138
+ };
139
+
140
+ // Patch verifyWithPublicKey for OCSP response verification
141
+ if (originals.verifyWithPublicKey) {
142
+ CryptoEngine.verifyWithPublicKey = async function (
143
+ ...params: Parameters<typeof originals.verifyWithPublicKey>
144
+ ): ReturnType<typeof originals.verifyWithPublicKey> {
145
+ const [data, signature, publicKeyInfo] = params;
146
+ const algId = publicKeyInfo.algorithm.algorithmId;
147
+ if (isEd25519OrEd448(algId)) {
148
+ const algorithmName = getEdDSAAlgorithmName(algId);
149
+
150
+ try {
151
+ // Get crypto.subtle from available sources
152
+ const cryptoSubtle =
153
+ (this as any).crypto?.subtle || (this as any).subtle || pkijs.getCrypto(true)?.subtle || webcrypto?.subtle;
154
+
155
+ if (!cryptoSubtle) {
156
+ throw new Error('No crypto.subtle available');
157
+ }
158
+
159
+ // Import the public key
160
+ const publicKey = await cryptoSubtle.importKey(
161
+ 'spki',
162
+ publicKeyInfo.toSchema().toBER(false),
163
+ algorithmName,
164
+ false,
165
+ ['verify']
166
+ );
167
+
168
+ // Handle BIT STRING signature value
169
+ let signatureValue = signature.valueBlock.valueHexView;
170
+ // Check if this is a BIT STRING with unused bits
171
+ if ('unusedBits' in signature.valueBlock && signature.valueBlock.unusedBits > 0) {
172
+ signatureValue = signatureValue.slice(0, signatureValue.length - 1);
173
+ }
174
+
175
+ // Verify the signature
176
+ return await cryptoSubtle.verify(algorithmName, publicKey, signatureValue, data);
177
+ } catch {
178
+ // Any failure in verification should return false
179
+ return false;
180
+ }
181
+ }
182
+ return originals.verifyWithPublicKey.call(this, ...params);
183
+ };
184
+ }
185
+ }
186
+
187
+ // Apply patch on module load
188
+ applyEd25519Patch();
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Shared TypeScript interfaces and types for certificate verification
3
+ */
4
+
5
+ import type { Context } from '../../resources/ResourceInterface.ts';
6
+
7
+ export type CertificateStatus = 'good' | 'revoked' | 'unknown';
8
+
9
+ export type VerificationMethod = 'ocsp' | 'crl';
10
+ export type VerificationResultMethod = VerificationMethod | 'disabled';
11
+
12
+ export type FailureMode = 'fail-open' | 'fail-closed';
13
+
14
+ export interface PeerCertificate {
15
+ subject?: {
16
+ CN?: string;
17
+ [key: string]: any;
18
+ };
19
+ raw?: Buffer;
20
+ issuerCertificate?: PeerCertificate;
21
+ }
22
+
23
+ export interface CertificateVerificationResult {
24
+ valid: boolean;
25
+ status: string;
26
+ cached?: boolean;
27
+ error?: string;
28
+ method?: VerificationResultMethod;
29
+ }
30
+
31
+ export interface CertificateCacheEntry {
32
+ certificate_id: string;
33
+ status: CertificateStatus;
34
+ reason?: string;
35
+ checked_at: number;
36
+ expiresAt: number;
37
+ method: VerificationMethod;
38
+ }
39
+
40
+ export interface CRLCacheEntry {
41
+ distribution_point: string;
42
+ issuer_dn: string;
43
+ crl_blob: Buffer;
44
+ this_update: number;
45
+ next_update: number;
46
+ signature_valid: boolean;
47
+ expiresAt: number;
48
+ }
49
+
50
+ export interface RevokedCertificateEntry {
51
+ composite_id: string; // {issuer_hash}:{serial_number}
52
+ serial_number: string;
53
+ issuer_key_id: string;
54
+ revocation_date: number;
55
+ revocation_reason?: string;
56
+ crl_source: string; // Links to CRLCacheEntry.crl_id
57
+ crl_next_update: number;
58
+ expiresAt: number;
59
+ }
60
+
61
+ export interface CertificateChainEntry {
62
+ cert: Buffer;
63
+ issuer?: Buffer;
64
+ }
65
+
66
+ export interface OCSPCheckResult {
67
+ status: CertificateStatus;
68
+ reason?: string;
69
+ }
70
+
71
+ export interface CRLCheckResult {
72
+ status: CertificateStatus;
73
+ reason?: string;
74
+ source?: string; // CRL distribution point URL
75
+ }
76
+
77
+ // Configuration interfaces
78
+ export interface OCSPConfig {
79
+ enabled?: boolean;
80
+ timeout?: number;
81
+ cacheTtl?: number;
82
+ errorCacheTtl?: number;
83
+ failureMode?: FailureMode;
84
+ }
85
+
86
+ export interface CRLConfig {
87
+ enabled?: boolean;
88
+ timeout?: number;
89
+ cacheTtl?: number;
90
+ failureMode?: FailureMode;
91
+ gracePeriod?: number;
92
+ }
93
+
94
+ export interface CertificateVerificationConfig {
95
+ failureMode?: FailureMode;
96
+ ocsp?: OCSPConfig;
97
+ crl?: CRLConfig;
98
+ }
99
+
100
+ // Context types for certificate verification cache requests
101
+ export interface CertificateVerificationContext extends Context {
102
+ certPem: string;
103
+ issuerPem: string;
104
+ ocspUrls?: string[];
105
+ distributionPoint?: string;
106
+ config?: CertificateVerificationConfig;
107
+ }
108
+
109
+ export interface CRLVerificationContext extends Context {
110
+ distributionPoint: string;
111
+ issuerPem: string;
112
+ config?: CRLConfig;
113
+ }
114
+
115
+ // Default configuration values
116
+ export interface VerificationDefaults {
117
+ timeout: number;
118
+ cacheTtl: number;
119
+ failureMode: FailureMode;
120
+ }
121
+
122
+ export interface OCSPDefaults extends VerificationDefaults {
123
+ errorCacheTtl: number;
124
+ }
125
+
126
+ export interface CRLDefaults extends VerificationDefaults {
127
+ gracePeriod: number;
128
+ }