@harperfast/harper 5.2.10 → 5.3.0-alpha.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 (554) hide show
  1. package/agent/mcpTools.ts +1 -1
  2. package/agent/session.ts +25 -14
  3. package/bin/cliOperations.ts +46 -9
  4. package/bin/copyDb.ts +282 -59
  5. package/bin/deploySetup.ts +16 -5
  6. package/bin/harper.ts +1 -1
  7. package/bin/help.ts +4 -1
  8. package/bin/lite.ts +4 -1
  9. package/bin/restart.ts +59 -3
  10. package/bin/run.ts +6 -11
  11. package/bin/upgrade.js +7 -3
  12. package/bin/workloadIdentity.ts +119 -0
  13. package/components/Application.ts +2414 -242
  14. package/components/ApplicationScope.ts +8 -0
  15. package/components/EntryHandler.ts +59 -39
  16. package/components/OptionsWatcher.ts +150 -74
  17. package/components/RuntimeModuleTracker.ts +38 -7
  18. package/components/Scope.ts +37 -15
  19. package/components/awaitRestart.ts +84 -0
  20. package/components/componentLoader.ts +340 -30
  21. package/components/componentPreparationLock.ts +16 -5
  22. package/components/mcp/adapters/harperHttp.ts +4 -0
  23. package/components/mcp/listChanged.ts +4 -0
  24. package/components/mcp/toolRegistry.ts +2 -0
  25. package/components/mcp/tools/operations.ts +9 -0
  26. package/components/mcp/tools/schemas/operationDescriptions.ts +2 -2
  27. package/components/operations.js +270 -78
  28. package/components/operationsValidation.js +49 -1
  29. package/components/status/ComponentStatusRegistry.ts +59 -0
  30. package/config/RootConfigWatcher.ts +80 -34
  31. package/config/configUtils.ts +291 -34
  32. package/config/harperConfigEnvVars.ts +170 -27
  33. package/config-root.schema.json +29 -0
  34. package/dataLayer/blobBackup.ts +160 -50
  35. package/dataLayer/delete.ts +6 -1
  36. package/dataLayer/harperBridge/ResourceBridge.ts +52 -8
  37. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
  38. package/dataLayer/hdbInfoController.ts +34 -1
  39. package/dataLayer/insert.ts +44 -1
  40. package/dataLayer/rocksdbBackup.ts +53 -10
  41. package/dataLayer/schema.ts +11 -1
  42. package/dataLayer/schemaDescribe.ts +8 -1
  43. package/dist/agent/mcpTools.js +1 -1
  44. package/dist/agent/mcpTools.js.map +1 -1
  45. package/dist/agent/session.d.ts +22 -0
  46. package/dist/agent/session.js +26 -15
  47. package/dist/agent/session.js.map +1 -1
  48. package/dist/bin/cliOperations.js +48 -9
  49. package/dist/bin/cliOperations.js.map +1 -1
  50. package/dist/bin/copyDb.d.ts +12 -1
  51. package/dist/bin/copyDb.js +248 -60
  52. package/dist/bin/copyDb.js.map +1 -1
  53. package/dist/bin/deploySetup.d.ts +2 -0
  54. package/dist/bin/deploySetup.js +11 -3
  55. package/dist/bin/deploySetup.js.map +1 -1
  56. package/dist/bin/harper.js +1 -1
  57. package/dist/bin/harper.js.map +1 -1
  58. package/dist/bin/help.js +4 -1
  59. package/dist/bin/help.js.map +1 -1
  60. package/dist/bin/lite.js +4 -1
  61. package/dist/bin/lite.js.map +1 -1
  62. package/dist/bin/restart.js +54 -5
  63. package/dist/bin/restart.js.map +1 -1
  64. package/dist/bin/run.js +4 -10
  65. package/dist/bin/run.js.map +1 -1
  66. package/dist/bin/upgrade.js +4 -3
  67. package/dist/bin/upgrade.js.map +1 -1
  68. package/dist/bin/workloadIdentity.d.ts +18 -0
  69. package/dist/bin/workloadIdentity.js +100 -0
  70. package/dist/bin/workloadIdentity.js.map +1 -0
  71. package/dist/components/Application.d.ts +139 -16
  72. package/dist/components/Application.js +2215 -267
  73. package/dist/components/Application.js.map +1 -1
  74. package/dist/components/ApplicationScope.d.ts +8 -0
  75. package/dist/components/ApplicationScope.js +7 -0
  76. package/dist/components/ApplicationScope.js.map +1 -1
  77. package/dist/components/EntryHandler.js +26 -10
  78. package/dist/components/EntryHandler.js.map +1 -1
  79. package/dist/components/OptionsWatcher.d.ts +1 -0
  80. package/dist/components/OptionsWatcher.js +141 -74
  81. package/dist/components/OptionsWatcher.js.map +1 -1
  82. package/dist/components/RuntimeModuleTracker.js +40 -6
  83. package/dist/components/RuntimeModuleTracker.js.map +1 -1
  84. package/dist/components/Scope.js +38 -13
  85. package/dist/components/Scope.js.map +1 -1
  86. package/dist/components/awaitRestart.d.ts +33 -0
  87. package/dist/components/awaitRestart.js +61 -0
  88. package/dist/components/awaitRestart.js.map +1 -0
  89. package/dist/components/componentLoader.d.ts +38 -1
  90. package/dist/components/componentLoader.js +279 -22
  91. package/dist/components/componentLoader.js.map +1 -1
  92. package/dist/components/componentPreparationLock.d.ts +5 -0
  93. package/dist/components/componentPreparationLock.js +14 -6
  94. package/dist/components/componentPreparationLock.js.map +1 -1
  95. package/dist/components/mcp/adapters/harperHttp.js +4 -0
  96. package/dist/components/mcp/adapters/harperHttp.js.map +1 -1
  97. package/dist/components/mcp/listChanged.js +5 -0
  98. package/dist/components/mcp/listChanged.js.map +1 -1
  99. package/dist/components/mcp/toolRegistry.d.ts +1 -0
  100. package/dist/components/mcp/toolRegistry.js.map +1 -1
  101. package/dist/components/mcp/tools/operations.d.ts +5 -0
  102. package/dist/components/mcp/tools/operations.js +9 -0
  103. package/dist/components/mcp/tools/operations.js.map +1 -1
  104. package/dist/components/mcp/tools/schemas/operationDescriptions.js +2 -2
  105. package/dist/components/mcp/tools/schemas/operationDescriptions.js.map +1 -1
  106. package/dist/components/operations.js +231 -77
  107. package/dist/components/operations.js.map +1 -1
  108. package/dist/components/operationsValidation.js +49 -1
  109. package/dist/components/operationsValidation.js.map +1 -1
  110. package/dist/components/status/ComponentStatusRegistry.d.ts +0 -4
  111. package/dist/components/status/ComponentStatusRegistry.js +63 -0
  112. package/dist/components/status/ComponentStatusRegistry.js.map +1 -1
  113. package/dist/config/RootConfigWatcher.d.ts +7 -1
  114. package/dist/config/RootConfigWatcher.js +64 -27
  115. package/dist/config/RootConfigWatcher.js.map +1 -1
  116. package/dist/config/configUtils.d.ts +9 -1
  117. package/dist/config/configUtils.js +254 -33
  118. package/dist/config/configUtils.js.map +1 -1
  119. package/dist/config/harperConfigEnvVars.d.ts +16 -0
  120. package/dist/config/harperConfigEnvVars.js +162 -25
  121. package/dist/config/harperConfigEnvVars.js.map +1 -1
  122. package/dist/dataLayer/blobBackup.d.ts +49 -20
  123. package/dist/dataLayer/blobBackup.js +139 -50
  124. package/dist/dataLayer/blobBackup.js.map +1 -1
  125. package/dist/dataLayer/delete.js +1 -1
  126. package/dist/dataLayer/delete.js.map +1 -1
  127. package/dist/dataLayer/harperBridge/ResourceBridge.d.ts +14 -1
  128. package/dist/dataLayer/harperBridge/ResourceBridge.js +51 -10
  129. package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
  130. package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.d.ts +3 -1
  131. package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
  132. package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js.map +1 -1
  133. package/dist/dataLayer/hdbInfoController.d.ts +10 -0
  134. package/dist/dataLayer/hdbInfoController.js +30 -1
  135. package/dist/dataLayer/hdbInfoController.js.map +1 -1
  136. package/dist/dataLayer/insert.d.ts +9 -1
  137. package/dist/dataLayer/insert.js +30 -0
  138. package/dist/dataLayer/insert.js.map +1 -1
  139. package/dist/dataLayer/rocksdbBackup.d.ts +2 -2
  140. package/dist/dataLayer/rocksdbBackup.js +45 -8
  141. package/dist/dataLayer/rocksdbBackup.js.map +1 -1
  142. package/dist/dataLayer/schema.js +8 -0
  143. package/dist/dataLayer/schema.js.map +1 -1
  144. package/dist/dataLayer/schemaDescribe.js +8 -1
  145. package/dist/dataLayer/schemaDescribe.js.map +1 -1
  146. package/dist/index.d.ts +1 -1
  147. package/dist/index.js.map +1 -1
  148. package/dist/json/systemSchema.json +52 -0
  149. package/dist/resources/DatabaseTransaction.d.ts +55 -3
  150. package/dist/resources/DatabaseTransaction.js +460 -134
  151. package/dist/resources/DatabaseTransaction.js.map +1 -1
  152. package/dist/resources/LMDBTransaction.js +22 -4
  153. package/dist/resources/LMDBTransaction.js.map +1 -1
  154. package/dist/resources/PrimaryRocksDatabase.d.ts +1 -0
  155. package/dist/resources/PrimaryRocksDatabase.js +30 -2
  156. package/dist/resources/PrimaryRocksDatabase.js.map +1 -1
  157. package/dist/resources/RecordEncoder.d.ts +20 -0
  158. package/dist/resources/RecordEncoder.js +94 -9
  159. package/dist/resources/RecordEncoder.js.map +1 -1
  160. package/dist/resources/RequestTarget.d.ts +2 -0
  161. package/dist/resources/RequestTarget.js.map +1 -1
  162. package/dist/resources/Resource.js +20 -11
  163. package/dist/resources/Resource.js.map +1 -1
  164. package/dist/resources/ResourceInterface.d.ts +20 -1
  165. package/dist/resources/ResourceInterface.js.map +1 -1
  166. package/dist/resources/RocksIndexStore.d.ts +6 -1
  167. package/dist/resources/RocksIndexStore.js +24 -10
  168. package/dist/resources/RocksIndexStore.js.map +1 -1
  169. package/dist/resources/RocksTransactionLogStore.d.ts +14 -1
  170. package/dist/resources/RocksTransactionLogStore.js +57 -17
  171. package/dist/resources/RocksTransactionLogStore.js.map +1 -1
  172. package/dist/resources/Table.d.ts +112 -8
  173. package/dist/resources/Table.js +1071 -197
  174. package/dist/resources/Table.js.map +1 -1
  175. package/dist/resources/auditStore.d.ts +11 -2
  176. package/dist/resources/auditStore.js +183 -18
  177. package/dist/resources/auditStore.js.map +1 -1
  178. package/dist/resources/blob.d.ts +129 -9
  179. package/dist/resources/blob.js +992 -114
  180. package/dist/resources/blob.js.map +1 -1
  181. package/dist/resources/branchDatabase.d.ts +48 -0
  182. package/dist/resources/branchDatabase.js +892 -0
  183. package/dist/resources/branchDatabase.js.map +1 -0
  184. package/dist/resources/crdt.js +50 -12
  185. package/dist/resources/crdt.js.map +1 -1
  186. package/dist/resources/databases.d.ts +150 -9
  187. package/dist/resources/databases.js +1247 -525
  188. package/dist/resources/databases.js.map +1 -1
  189. package/dist/resources/defineTable.d.ts +10 -2
  190. package/dist/resources/defineTable.js +9 -1
  191. package/dist/resources/defineTable.js.map +1 -1
  192. package/dist/resources/graphql.d.ts +1 -1
  193. package/dist/resources/graphql.js +50 -15
  194. package/dist/resources/graphql.js.map +1 -1
  195. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.d.ts +1 -0
  196. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js +6 -2
  197. package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
  198. package/dist/resources/longLivedTransactions.d.ts +71 -0
  199. package/dist/resources/longLivedTransactions.js +358 -0
  200. package/dist/resources/longLivedTransactions.js.map +1 -0
  201. package/dist/resources/models/backendRegistry.d.ts +26 -0
  202. package/dist/resources/models/backendRegistry.js +60 -2
  203. package/dist/resources/models/backendRegistry.js.map +1 -1
  204. package/dist/resources/models/bootstrap.d.ts +33 -1
  205. package/dist/resources/models/bootstrap.js +416 -31
  206. package/dist/resources/models/bootstrap.js.map +1 -1
  207. package/dist/resources/recordLock.d.ts +80 -0
  208. package/dist/resources/recordLock.js +184 -0
  209. package/dist/resources/recordLock.js.map +1 -0
  210. package/dist/resources/replayLogs.d.ts +14 -1
  211. package/dist/resources/replayLogs.js +152 -24
  212. package/dist/resources/replayLogs.js.map +1 -1
  213. package/dist/resources/replayLogsGuards.d.ts +94 -7
  214. package/dist/resources/replayLogsGuards.js +111 -7
  215. package/dist/resources/replayLogsGuards.js.map +1 -1
  216. package/dist/resources/search.js +158 -32
  217. package/dist/resources/search.js.map +1 -1
  218. package/dist/resources/transactionBroadcast.d.ts +1 -1
  219. package/dist/resources/transactionBroadcast.js +2 -2
  220. package/dist/resources/transactionBroadcast.js.map +1 -1
  221. package/dist/security/auth.js +61 -30
  222. package/dist/security/auth.js.map +1 -1
  223. package/dist/security/authn/oidc/claims.d.ts +22 -0
  224. package/dist/security/authn/oidc/claims.js +71 -0
  225. package/dist/security/authn/oidc/claims.js.map +1 -0
  226. package/dist/security/authn/oidc/identityToken.d.ts +27 -0
  227. package/dist/security/authn/oidc/identityToken.js +111 -0
  228. package/dist/security/authn/oidc/identityToken.js.map +1 -0
  229. package/dist/security/authn/oidc/jwks.d.ts +25 -0
  230. package/dist/security/authn/oidc/jwks.js +261 -0
  231. package/dist/security/authn/oidc/jwks.js.map +1 -0
  232. package/dist/security/authn/oidc/providers/generic.d.ts +13 -0
  233. package/dist/security/authn/oidc/providers/generic.js +34 -0
  234. package/dist/security/authn/oidc/providers/generic.js.map +1 -0
  235. package/dist/security/authn/oidc/providers/githubActions.d.ts +11 -0
  236. package/dist/security/authn/oidc/providers/githubActions.js +129 -0
  237. package/dist/security/authn/oidc/providers/githubActions.js.map +1 -0
  238. package/dist/security/authn/oidc/providers/index.d.ts +37 -0
  239. package/dist/security/authn/oidc/providers/index.js +24 -0
  240. package/dist/security/authn/oidc/providers/index.js.map +1 -0
  241. package/dist/security/authn/oidc/tokenExchange.d.ts +12 -0
  242. package/dist/security/authn/oidc/tokenExchange.js +306 -0
  243. package/dist/security/authn/oidc/tokenExchange.js.map +1 -0
  244. package/dist/security/authn/oidc/trustPolicyOperations.d.ts +49 -0
  245. package/dist/security/authn/oidc/trustPolicyOperations.js +358 -0
  246. package/dist/security/authn/oidc/trustPolicyOperations.js.map +1 -0
  247. package/dist/security/authn/oidc/types.d.ts +38 -0
  248. package/dist/security/authn/oidc/types.js +6 -0
  249. package/dist/security/authn/oidc/types.js.map +1 -0
  250. package/dist/security/certificateVerification/index.js +40 -11
  251. package/dist/security/certificateVerification/index.js.map +1 -1
  252. package/dist/security/certificateVerification/trustedIssuers.d.ts +24 -0
  253. package/dist/security/certificateVerification/trustedIssuers.js +79 -0
  254. package/dist/security/certificateVerification/trustedIssuers.js.map +1 -0
  255. package/dist/security/certificateVerification/types.d.ts +1 -0
  256. package/dist/security/credentialProvenance.d.ts +35 -0
  257. package/dist/security/credentialProvenance.js +51 -0
  258. package/dist/security/credentialProvenance.js.map +1 -0
  259. package/dist/security/credentialRejection.d.ts +4 -0
  260. package/dist/security/credentialRejection.js +24 -0
  261. package/dist/security/credentialRejection.js.map +1 -0
  262. package/dist/security/deferredAuthentication.d.ts +36 -0
  263. package/dist/security/deferredAuthentication.js +70 -0
  264. package/dist/security/deferredAuthentication.js.map +1 -0
  265. package/dist/security/impersonation.d.ts +21 -0
  266. package/dist/security/impersonation.js +108 -9
  267. package/dist/security/impersonation.js.map +1 -1
  268. package/dist/security/jsLoader.d.ts +6 -0
  269. package/dist/security/jsLoader.js +75 -15
  270. package/dist/security/jsLoader.js.map +1 -1
  271. package/dist/security/keys.js +301 -71
  272. package/dist/security/keys.js.map +1 -1
  273. package/dist/security/operationScope.d.ts +21 -0
  274. package/dist/security/operationScope.js +36 -0
  275. package/dist/security/operationScope.js.map +1 -0
  276. package/dist/security/permissionsTranslator.js +21 -0
  277. package/dist/security/permissionsTranslator.js.map +1 -1
  278. package/dist/security/tokenAuthentication.d.ts +19 -1
  279. package/dist/security/tokenAuthentication.js +191 -10
  280. package/dist/security/tokenAuthentication.js.map +1 -1
  281. package/dist/security/user.js +4 -3
  282. package/dist/security/user.js.map +1 -1
  283. package/dist/server/DurableSubscriptionsSession.d.ts +2 -2
  284. package/dist/server/DurableSubscriptionsSession.js +67 -10
  285. package/dist/server/DurableSubscriptionsSession.js.map +1 -1
  286. package/dist/server/REST.js +73 -0
  287. package/dist/server/REST.js.map +1 -1
  288. package/dist/server/graphqlQuerying.js +4 -0
  289. package/dist/server/graphqlQuerying.js.map +1 -1
  290. package/dist/server/http.d.ts +11 -0
  291. package/dist/server/http.js +88 -15
  292. package/dist/server/http.js.map +1 -1
  293. package/dist/server/itc/serverHandlers.js +8 -1
  294. package/dist/server/itc/serverHandlers.js.map +1 -1
  295. package/dist/server/jobs/jobProcess.js +6 -2
  296. package/dist/server/jobs/jobProcess.js.map +1 -1
  297. package/dist/server/jobs/jobs.js +4 -1
  298. package/dist/server/jobs/jobs.js.map +1 -1
  299. package/dist/server/liveSubscriptionAuth.d.ts +26 -4
  300. package/dist/server/liveSubscriptionAuth.js +105 -39
  301. package/dist/server/liveSubscriptionAuth.js.map +1 -1
  302. package/dist/server/loadRootComponents.js +49 -10
  303. package/dist/server/loadRootComponents.js.map +1 -1
  304. package/dist/server/mqtt.d.ts +2 -0
  305. package/dist/server/mqtt.js +165 -30
  306. package/dist/server/mqtt.js.map +1 -1
  307. package/dist/server/nodeName.d.ts +2 -0
  308. package/dist/server/nodeName.js +107 -23
  309. package/dist/server/nodeName.js.map +1 -1
  310. package/dist/server/serverHelpers/Headers.d.ts +25 -0
  311. package/dist/server/serverHelpers/Headers.js +139 -1
  312. package/dist/server/serverHelpers/Headers.js.map +1 -1
  313. package/dist/server/serverHelpers/contentTypes.d.ts +9 -0
  314. package/dist/server/serverHelpers/contentTypes.js +32 -25
  315. package/dist/server/serverHelpers/contentTypes.js.map +1 -1
  316. package/dist/server/serverHelpers/deployValidationState.d.ts +3 -0
  317. package/dist/server/serverHelpers/deployValidationState.js +9 -19
  318. package/dist/server/serverHelpers/deployValidationState.js.map +1 -1
  319. package/dist/server/serverHelpers/operationAuthorizationState.d.ts +12 -0
  320. package/dist/server/serverHelpers/operationAuthorizationState.js +24 -2
  321. package/dist/server/serverHelpers/operationAuthorizationState.js.map +1 -1
  322. package/dist/server/serverHelpers/registeredOperations.d.ts +5 -4
  323. package/dist/server/serverHelpers/registeredOperations.js +74 -21
  324. package/dist/server/serverHelpers/registeredOperations.js.map +1 -1
  325. package/dist/server/serverHelpers/requestSanitization.d.ts +11 -0
  326. package/dist/server/serverHelpers/requestSanitization.js +20 -0
  327. package/dist/server/serverHelpers/requestSanitization.js.map +1 -0
  328. package/dist/server/serverHelpers/serverHandlers.js +6 -3
  329. package/dist/server/serverHelpers/serverHandlers.js.map +1 -1
  330. package/dist/server/serverHelpers/serverUtilities.d.ts +18 -0
  331. package/dist/server/serverHelpers/serverUtilities.js +90 -20
  332. package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
  333. package/dist/server/serverHelpers/sharedMessageEncoding.d.ts +67 -0
  334. package/dist/server/serverHelpers/sharedMessageEncoding.js +280 -0
  335. package/dist/server/serverHelpers/sharedMessageEncoding.js.map +1 -0
  336. package/dist/server/serverHelpers/uwsServer.js +19 -1
  337. package/dist/server/serverHelpers/uwsServer.js.map +1 -1
  338. package/dist/server/static.js +24 -28
  339. package/dist/server/static.js.map +1 -1
  340. package/dist/server/storageReclamation.d.ts +5 -0
  341. package/dist/server/storageReclamation.js +16 -0
  342. package/dist/server/storageReclamation.js.map +1 -1
  343. package/dist/server/threads/itc.d.ts +7 -2
  344. package/dist/server/threads/itc.js +5 -1
  345. package/dist/server/threads/itc.js.map +1 -1
  346. package/dist/server/threads/manageThreads.d.ts +26 -4
  347. package/dist/server/threads/manageThreads.js +517 -72
  348. package/dist/server/threads/manageThreads.js.map +1 -1
  349. package/dist/server/threads/socketRouter.js +89 -26
  350. package/dist/server/threads/socketRouter.js.map +1 -1
  351. package/dist/server/threads/threadHeapMemory.d.ts +2 -0
  352. package/dist/server/threads/threadHeapMemory.js +31 -0
  353. package/dist/server/threads/threadHeapMemory.js.map +1 -0
  354. package/dist/server/threads/threadServer.js +46 -15
  355. package/dist/server/threads/threadServer.js.map +1 -1
  356. package/dist/sqlEngine/config.d.ts +1 -3
  357. package/dist/sqlEngine/config.js +19 -16
  358. package/dist/sqlEngine/config.js.map +1 -1
  359. package/dist/sqlTranslator/index.d.ts +1 -1
  360. package/dist/sqlTranslator/index.js +30 -7
  361. package/dist/sqlTranslator/index.js.map +1 -1
  362. package/dist/upgrade/directives/5-3-0.d.ts +7 -0
  363. package/dist/upgrade/directives/5-3-0.js +148 -0
  364. package/dist/upgrade/directives/5-3-0.js.map +1 -0
  365. package/dist/upgrade/directives/directivesController.js +2 -1
  366. package/dist/upgrade/directives/directivesController.js.map +1 -1
  367. package/dist/utility/OperationFunctionCaller.js +2 -1
  368. package/dist/utility/OperationFunctionCaller.js.map +1 -1
  369. package/dist/utility/common_utils.d.ts +16 -0
  370. package/dist/utility/common_utils.js +32 -6
  371. package/dist/utility/common_utils.js.map +1 -1
  372. package/dist/utility/componentNames.d.ts +8 -0
  373. package/dist/utility/componentNames.js +12 -1
  374. package/dist/utility/componentNames.js.map +1 -1
  375. package/dist/utility/environment/environmentManager.js +3 -6
  376. package/dist/utility/environment/environmentManager.js.map +1 -1
  377. package/dist/utility/environment/systemInformation.d.ts +1 -0
  378. package/dist/utility/environment/systemInformation.js +1 -0
  379. package/dist/utility/environment/systemInformation.js.map +1 -1
  380. package/dist/utility/errors/commonErrors.d.ts +2 -0
  381. package/dist/utility/errors/commonErrors.js +2 -0
  382. package/dist/utility/errors/commonErrors.js.map +1 -1
  383. package/dist/utility/errors/hdbError.d.ts +17 -0
  384. package/dist/utility/errors/hdbError.js +30 -1
  385. package/dist/utility/errors/hdbError.js.map +1 -1
  386. package/dist/utility/globalSchema.d.ts +18 -0
  387. package/dist/utility/hdbTerms.d.ts +16 -0
  388. package/dist/utility/hdbTerms.js +18 -2
  389. package/dist/utility/hdbTerms.js.map +1 -1
  390. package/dist/utility/logging/harper_logger.d.ts +2 -0
  391. package/dist/utility/logging/harper_logger.js +91 -14
  392. package/dist/utility/logging/harper_logger.js.map +1 -1
  393. package/dist/utility/logging/logRotator.js +76 -49
  394. package/dist/utility/logging/logRotator.js.map +1 -1
  395. package/dist/utility/nodeIdentity.d.ts +9 -0
  396. package/dist/utility/nodeIdentity.js +58 -0
  397. package/dist/utility/nodeIdentity.js.map +1 -0
  398. package/dist/utility/npmUtilities.js +9 -7
  399. package/dist/utility/npmUtilities.js.map +1 -1
  400. package/dist/utility/operationPermissions.d.ts +3 -1
  401. package/dist/utility/operationPermissions.js +16 -1
  402. package/dist/utility/operationPermissions.js.map +1 -1
  403. package/dist/utility/operation_authorization.d.ts +10 -7
  404. package/dist/utility/operation_authorization.js +212 -41
  405. package/dist/utility/operation_authorization.js.map +1 -1
  406. package/dist/utility/watchPath.d.ts +29 -0
  407. package/dist/utility/watchPath.js +68 -0
  408. package/dist/utility/watchPath.js.map +1 -0
  409. package/dist/utility/watcherFallback.d.ts +86 -0
  410. package/dist/utility/watcherFallback.js +278 -1
  411. package/dist/utility/watcherFallback.js.map +1 -1
  412. package/dist/validation/configValidator.d.ts +12 -0
  413. package/dist/validation/configValidator.js +199 -72
  414. package/dist/validation/configValidator.js.map +1 -1
  415. package/dist/validation/installValidator.js +12 -0
  416. package/dist/validation/installValidator.js.map +1 -1
  417. package/dist/validation/validationWrapper.d.ts +11 -0
  418. package/dist/validation/validationWrapper.js +16 -3
  419. package/dist/validation/validationWrapper.js.map +1 -1
  420. package/index.ts +2 -0
  421. package/json/systemSchema.json +52 -0
  422. package/npm-shrinkwrap.json +235 -233
  423. package/package.json +8 -7
  424. package/resources/DESIGN.md +114 -52
  425. package/resources/DatabaseTransaction.ts +522 -130
  426. package/resources/LMDBTransaction.ts +26 -4
  427. package/resources/PrimaryRocksDatabase.ts +29 -3
  428. package/resources/RecordEncoder.ts +103 -8
  429. package/resources/RequestTarget.ts +2 -0
  430. package/resources/Resource.ts +17 -9
  431. package/resources/ResourceInterface.ts +23 -0
  432. package/resources/RocksIndexStore.ts +30 -10
  433. package/resources/RocksTransactionLogStore.ts +78 -21
  434. package/resources/Table.ts +1107 -164
  435. package/resources/auditStore.ts +187 -21
  436. package/resources/blob.ts +1029 -110
  437. package/resources/branchDatabase.ts +941 -0
  438. package/resources/crdt.ts +76 -12
  439. package/resources/databases.ts +1354 -522
  440. package/resources/defineTable.ts +18 -2
  441. package/resources/graphql.ts +70 -16
  442. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +6 -2
  443. package/resources/longLivedTransactions.ts +360 -0
  444. package/resources/models/backendRegistry.ts +84 -2
  445. package/resources/models/bootstrap.ts +473 -28
  446. package/resources/recordLock.ts +253 -0
  447. package/resources/replayLogs.ts +147 -26
  448. package/resources/replayLogsGuards.ts +171 -8
  449. package/resources/search.ts +154 -32
  450. package/resources/transactionBroadcast.ts +3 -3
  451. package/security/auth.ts +68 -29
  452. package/security/authn/oidc/claims.ts +72 -0
  453. package/security/authn/oidc/identityToken.ts +129 -0
  454. package/security/authn/oidc/jwks.ts +260 -0
  455. package/security/authn/oidc/providers/generic.ts +40 -0
  456. package/security/authn/oidc/providers/githubActions.ts +137 -0
  457. package/security/authn/oidc/providers/index.ts +52 -0
  458. package/security/authn/oidc/tokenExchange.ts +300 -0
  459. package/security/authn/oidc/trustPolicyOperations.ts +343 -0
  460. package/security/authn/oidc/types.ts +41 -0
  461. package/security/certificateVerification/index.ts +54 -13
  462. package/security/certificateVerification/trustedIssuers.ts +76 -0
  463. package/security/certificateVerification/types.ts +1 -0
  464. package/security/credentialProvenance.ts +47 -0
  465. package/security/credentialRejection.ts +22 -0
  466. package/security/deferredAuthentication.ts +71 -0
  467. package/security/impersonation.ts +117 -12
  468. package/security/jsLoader.ts +81 -18
  469. package/security/keys.ts +298 -72
  470. package/security/operationScope.ts +33 -0
  471. package/security/permissionsTranslator.js +23 -0
  472. package/security/tokenAuthentication.ts +233 -12
  473. package/security/user.ts +4 -3
  474. package/server/DESIGN.md +183 -16
  475. package/server/DurableSubscriptionsSession.ts +71 -11
  476. package/server/REST.ts +79 -1
  477. package/server/graphqlQuerying.ts +4 -0
  478. package/server/http.ts +99 -18
  479. package/server/itc/serverHandlers.js +8 -1
  480. package/server/jobs/jobProcess.ts +8 -2
  481. package/server/jobs/jobs.ts +4 -1
  482. package/server/liveSubscriptionAuth.ts +129 -46
  483. package/server/loadRootComponents.js +50 -8
  484. package/server/mqtt.ts +179 -38
  485. package/server/nodeName.ts +103 -21
  486. package/server/serverHelpers/Headers.ts +131 -0
  487. package/server/serverHelpers/contentTypes.ts +29 -21
  488. package/server/serverHelpers/deployValidationState.ts +24 -13
  489. package/server/serverHelpers/operationAuthorizationState.ts +34 -3
  490. package/server/serverHelpers/registeredOperations.ts +79 -22
  491. package/server/serverHelpers/requestSanitization.ts +15 -0
  492. package/server/serverHelpers/serverHandlers.js +6 -3
  493. package/server/serverHelpers/serverUtilities.ts +104 -31
  494. package/server/serverHelpers/sharedMessageEncoding.ts +307 -0
  495. package/server/serverHelpers/uwsServer.ts +17 -2
  496. package/server/static.ts +23 -29
  497. package/server/storageReclamation.ts +13 -0
  498. package/server/threads/itc.js +11 -1
  499. package/server/threads/manageThreads.js +526 -63
  500. package/server/threads/socketRouter.ts +81 -26
  501. package/server/threads/threadHeapMemory.ts +26 -0
  502. package/server/threads/threadServer.js +43 -15
  503. package/sqlTranslator/index.ts +31 -8
  504. package/studio/web/assets/{Chat-Br06zdMA.js → Chat-BnCBegQz.js} +1 -1
  505. package/studio/web/assets/{FloatingChat-BWImX5fA.js → FloatingChat-CoDW1ySS.js} +3 -3
  506. package/studio/web/assets/{apiToken-DN0nmDsq.js → apiToken-Bwk5BLXW.js} +1 -1
  507. package/studio/web/assets/{applications-kSxVoyeU.js → applications-DHxGi7JH.js} +1 -1
  508. package/studio/web/assets/{cssMode-C1JeufH5.js → cssMode-s0cWI-_M.js} +1 -1
  509. package/studio/web/assets/{editor-qoo9CrGO.js → editor-DNcRHK54.js} +1 -1
  510. package/studio/web/assets/{html-Dt4IIy04.js → html-Bdssedlg.js} +1 -1
  511. package/studio/web/assets/{htmlMode-DXgKKr4C.js → htmlMode-CoDlJ3fw.js} +1 -1
  512. package/studio/web/assets/{index-6onkYFOG.js → index-D6sxmFLR.js} +5 -5
  513. package/studio/web/assets/{index.lazy-BrCFnpNJ.js → index.lazy-tmU5BS8s.js} +1 -1
  514. package/studio/web/assets/{javascript-DNCQGUBc.js → javascript-B8meVSTH.js} +1 -1
  515. package/studio/web/assets/{jsonMode-CR6HWruP.js → jsonMode-DpIPd35T.js} +1 -1
  516. package/studio/web/assets/{languageServices-BM4fI4rS.js → languageServices-C_5FMJzQ.js} +1 -1
  517. package/studio/web/assets/{lspLanguageFeatures-DSa1ttcD.js → lspLanguageFeatures-BIzNBzPK.js} +1 -1
  518. package/studio/web/assets/{notifications-BHXLnh6x.js → notifications-CQf18QKb.js} +1 -1
  519. package/studio/web/assets/{notifications-CUmtIA6z.js → notifications-CvZivSbh.js} +1 -1
  520. package/studio/web/assets/{profile-8BeFSF3j.js → profile-DdOwtntb.js} +1 -1
  521. package/studio/web/assets/{regions-C8qR0HhD.js → regions-n69fwagr.js} +1 -1
  522. package/studio/web/assets/{register-B4n5i0SD.js → register-PfWTCXWB.js} +2 -2
  523. package/studio/web/assets/{setComponentFile-g0_B0lgX.js → setComponentFile-Bg6O7X0S.js} +1 -1
  524. package/studio/web/assets/{setup-B0CTj_Q5.js → setup-CUx_aUDl.js} +2 -2
  525. package/studio/web/assets/{status-C6Yib7-K.js → status-D7BVKqX9.js} +1 -1
  526. package/studio/web/assets/{toggleHighContrast-Dgta7bVi.js → toggleHighContrast-DBSyXzMr.js} +1 -1
  527. package/studio/web/assets/{tsMode-CH_jHvU-.js → tsMode-BByKCjBS.js} +1 -1
  528. package/studio/web/assets/{typescript-Co9LCXd5.js → typescript-DDLnLpw9.js} +1 -1
  529. package/studio/web/assets/{useEntityRestURL-wKC8NsC_.js → useEntityRestURL-31CHGaHk.js} +1 -1
  530. package/studio/web/assets/{workers-CWeLxCXA.js → workers-pR3jRY9D.js} +1 -1
  531. package/studio/web/assets/{xml-BadC-0Rk.js → xml-2iRnMhQO.js} +1 -1
  532. package/studio/web/assets/{yaml-BiUfxPbC.js → yaml-Bf92gJpd.js} +1 -1
  533. package/studio/web/index.html +1 -1
  534. package/upgrade/directives/5-3-0.ts +132 -0
  535. package/upgrade/directives/directivesController.ts +2 -1
  536. package/utility/OperationFunctionCaller.ts +2 -1
  537. package/utility/common_utils.ts +30 -5
  538. package/utility/componentNames.ts +12 -0
  539. package/utility/environment/environmentManager.ts +3 -7
  540. package/utility/environment/systemInformation.ts +7 -0
  541. package/utility/errors/commonErrors.ts +4 -0
  542. package/utility/errors/hdbError.ts +29 -0
  543. package/utility/hdbTerms.ts +17 -0
  544. package/utility/logging/harper_logger.ts +87 -14
  545. package/utility/logging/logRotator.ts +72 -45
  546. package/utility/nodeIdentity.ts +45 -0
  547. package/utility/npmUtilities.ts +10 -8
  548. package/utility/operationPermissions.ts +18 -1
  549. package/utility/operation_authorization.ts +231 -42
  550. package/utility/watchPath.ts +63 -0
  551. package/utility/watcherFallback.ts +270 -0
  552. package/validation/configValidator.ts +209 -72
  553. package/validation/installValidator.ts +15 -0
  554. package/validation/validationWrapper.ts +18 -4
@@ -12,6 +12,7 @@ export interface PeerCertificate {
12
12
  [key: string]: any;
13
13
  };
14
14
  raw?: Buffer;
15
+ fingerprint256?: string;
15
16
  issuerCertificate?: PeerCertificate;
16
17
  }
17
18
  export interface CertificateVerificationResult {
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Provenance for a credential minted from a workload identity exchange (#2171) rather than from a
3
+ * password.
4
+ *
5
+ * The exchange's whole guarantee is that CI holds nothing durable: a one-hour operation token, no
6
+ * refresh token, nothing on disk to leak. That guarantee is only as strong as the paths that turn
7
+ * one credential into another. `create_authentication_tokens` is such a path and does not look like
8
+ * one: it is in `NO_AUTH_OPERATIONS`, but `serverHandlers.js` special-cases it so a call with no
9
+ * username/password authenticates by Bearer token instead — so an exchanged token is accepted there
10
+ * as if it were a password, honors a caller-supplied `expires_in` verbatim, and returns a 30-day
11
+ * refresh token. That converts a minutes-long leak into a month-long one, which is the exact
12
+ * exposure this feature exists to remove.
13
+ *
14
+ * A scope (operationScope.ts) cannot carry this weight. A trust policy names `operations` only when
15
+ * the operator opts in, so the ordinary exchanged token is UNSCOPED and a scope check finds nothing
16
+ * to deny — the common case would sail through a scope-only guard. Provenance is therefore recorded
17
+ * independently of scope, on every exchanged token.
18
+ *
19
+ * Like the scope, it lives under two names depending on the carrier: the claim `workload_identity`
20
+ * on a JWT payload, and `fromWorkloadIdentity` on an in-memory principal (validateToken lifts the
21
+ * claim across). And like the scope, every path that produces a credential or a principal has to
22
+ * carry it forward — impersonation included, or a workload token launders its provenance by
23
+ * impersonating and then mints freely.
24
+ */
25
+ /** The JWT claim name. Signed with the rest of the payload, so it cannot be stripped in transit. */
26
+ export declare const WORKLOAD_IDENTITY_CLAIM = "workload_identity";
27
+ /** Stamps a token payload as workload-identity provenance. Returns the payload. */
28
+ export declare function markTokenAsWorkloadIdentity<T extends object>(payload: T): T;
29
+ /** Lifts the claim from a verified token onto a user principal. Returns the user. */
30
+ export declare function attachWorkloadIdentityToUser<T extends object>(user: T, claim: unknown): T;
31
+ /**
32
+ * True when this principal authenticated with a workload-identity token. Checked strictly against
33
+ * `true` so a forged string or object on a user record cannot widen it.
34
+ */
35
+ export declare function isWorkloadIdentityPrincipal(user: unknown): boolean;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * Provenance for a credential minted from a workload identity exchange (#2171) rather than from a
4
+ * password.
5
+ *
6
+ * The exchange's whole guarantee is that CI holds nothing durable: a one-hour operation token, no
7
+ * refresh token, nothing on disk to leak. That guarantee is only as strong as the paths that turn
8
+ * one credential into another. `create_authentication_tokens` is such a path and does not look like
9
+ * one: it is in `NO_AUTH_OPERATIONS`, but `serverHandlers.js` special-cases it so a call with no
10
+ * username/password authenticates by Bearer token instead — so an exchanged token is accepted there
11
+ * as if it were a password, honors a caller-supplied `expires_in` verbatim, and returns a 30-day
12
+ * refresh token. That converts a minutes-long leak into a month-long one, which is the exact
13
+ * exposure this feature exists to remove.
14
+ *
15
+ * A scope (operationScope.ts) cannot carry this weight. A trust policy names `operations` only when
16
+ * the operator opts in, so the ordinary exchanged token is UNSCOPED and a scope check finds nothing
17
+ * to deny — the common case would sail through a scope-only guard. Provenance is therefore recorded
18
+ * independently of scope, on every exchanged token.
19
+ *
20
+ * Like the scope, it lives under two names depending on the carrier: the claim `workload_identity`
21
+ * on a JWT payload, and `fromWorkloadIdentity` on an in-memory principal (validateToken lifts the
22
+ * claim across). And like the scope, every path that produces a credential or a principal has to
23
+ * carry it forward — impersonation included, or a workload token launders its provenance by
24
+ * impersonating and then mints freely.
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.WORKLOAD_IDENTITY_CLAIM = void 0;
28
+ exports.markTokenAsWorkloadIdentity = markTokenAsWorkloadIdentity;
29
+ exports.attachWorkloadIdentityToUser = attachWorkloadIdentityToUser;
30
+ exports.isWorkloadIdentityPrincipal = isWorkloadIdentityPrincipal;
31
+ /** The JWT claim name. Signed with the rest of the payload, so it cannot be stripped in transit. */
32
+ exports.WORKLOAD_IDENTITY_CLAIM = 'workload_identity';
33
+ /** Stamps a token payload as workload-identity provenance. Returns the payload. */
34
+ function markTokenAsWorkloadIdentity(payload) {
35
+ payload[exports.WORKLOAD_IDENTITY_CLAIM] = true;
36
+ return payload;
37
+ }
38
+ /** Lifts the claim from a verified token onto a user principal. Returns the user. */
39
+ function attachWorkloadIdentityToUser(user, claim) {
40
+ if (claim === true)
41
+ user.fromWorkloadIdentity = true;
42
+ return user;
43
+ }
44
+ /**
45
+ * True when this principal authenticated with a workload-identity token. Checked strictly against
46
+ * `true` so a forged string or object on a user record cannot widen it.
47
+ */
48
+ function isWorkloadIdentityPrincipal(user) {
49
+ return user?.fromWorkloadIdentity === true;
50
+ }
51
+ //# sourceMappingURL=credentialProvenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialProvenance.js","sourceRoot":"","sources":["../../security/credentialProvenance.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAMH,kEAGC;AAGD,oEAGC;AAMD,kEAEC;AArBD,oGAAoG;AACvF,QAAA,uBAAuB,GAAG,mBAAmB,CAAC;AAE3D,mFAAmF;AACnF,SAAgB,2BAA2B,CAAmB,OAAU;IACtE,OAAe,CAAC,+BAAuB,CAAC,GAAG,IAAI,CAAC;IACjD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,qFAAqF;AACrF,SAAgB,4BAA4B,CAAmB,IAAO,EAAE,KAAc;IACrF,IAAI,KAAK,KAAK,IAAI;QAAG,IAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAC9D,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAgB,2BAA2B,CAAC,IAAa;IACxD,OAAQ,IAAY,EAAE,oBAAoB,KAAK,IAAI,CAAC;AACrD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ClientError } from '../utility/errors/hdbError.ts';
2
+ export declare function markCredentialRejection<E extends object>(error: E): E;
3
+ export declare function credentialRejectionError(message: string, statusCode: number): ClientError;
4
+ export declare function isCredentialRejection(error: unknown): boolean;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markCredentialRejection = markCredentialRejection;
4
+ exports.credentialRejectionError = credentialRejectionError;
5
+ exports.isCredentialRejection = isCredentialRejection;
6
+ const hdbError_ts_1 = require("../utility/errors/hdbError.js");
7
+ // Explicit provenance prevents internal faults with a 4xx status from being deferred as rejected credentials.
8
+ const CREDENTIAL_REJECTION = Symbol('harper.credentialRejection');
9
+ function markCredentialRejection(error) {
10
+ Object.defineProperty(error, CREDENTIAL_REJECTION, {
11
+ value: true,
12
+ enumerable: false,
13
+ configurable: true,
14
+ writable: false,
15
+ });
16
+ return error;
17
+ }
18
+ function credentialRejectionError(message, statusCode) {
19
+ return markCredentialRejection(new hdbError_ts_1.ClientError(message, statusCode));
20
+ }
21
+ function isCredentialRejection(error) {
22
+ return error?.[CREDENTIAL_REJECTION] === true;
23
+ }
24
+ //# sourceMappingURL=credentialRejection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentialRejection.js","sourceRoot":"","sources":["../../security/credentialRejection.ts"],"names":[],"mappings":";;AAKA,0DAQC;AAED,4DAEC;AAED,sDAEC;AArBD,+DAA4D;AAE5D,8GAA8G;AAC9G,MAAM,oBAAoB,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAElE,SAAgB,uBAAuB,CAAmB,KAAQ;IACjE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE;QAClD,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAAe,EAAE,UAAkB;IAC3E,OAAO,uBAAuB,CAAC,IAAI,yBAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAc;IACnD,OAAQ,KAAoD,EAAE,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { Headers } from '../server/serverHelpers/Headers.ts';
2
+ export { isCredentialRejection, markCredentialRejection, credentialRejectionError } from './credentialRejection.ts';
3
+ export type DeferredCredentialRejection = {
4
+ readonly status: number;
5
+ readonly message: string;
6
+ readonly strategy: string;
7
+ };
8
+ /**
9
+ * Records that this request presented a credential Harper rejected, without deciding the request.
10
+ * The caller leaves `request.user` unset and the inbound `Authorization` header untouched.
11
+ *
12
+ * The immutable, non-enumerable descriptor prevents downstream middleware from clearing it and
13
+ * keeps it out of request copies and serialization.
14
+ */
15
+ export declare function deferCredentialRejection(request: any, error: {
16
+ message?: string;
17
+ }, strategy: string): void;
18
+ export declare function getDeferredCredentialRejection(request: any): DeferredCredentialRejection | undefined;
19
+ /**
20
+ * The response an owning layer returns once it has established Harper owns the route: exactly the
21
+ * descriptor `security/auth.ts` returns in-line, so immediate and deferred rejection share a wire
22
+ * contract.
23
+ *
24
+ * Owner-specific error mapping must not run first. REST renders a thrown error as an RFC 9457
25
+ * Problem Details document and GraphQL as `{errors:[…]}` rather than authentication's negotiated
26
+ * `{error: message}` response. `security/auth.ts` likewise leaves a settled rejection's status and
27
+ * challenge headers alone, so it stays byte-identical to the in-line 401 it replaced.
28
+ *
29
+ * Returns `undefined` when nothing was deferred, so a caller can `return settled ?? …` inline.
30
+ */
31
+ export declare function settleDeferredCredentialRejection(request: any): {
32
+ status: number;
33
+ headers: Headers;
34
+ body: string | Buffer;
35
+ } | undefined;
36
+ export declare function assertNoDeferredCredentialRejection(request: any): void;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.credentialRejectionError = exports.markCredentialRejection = exports.isCredentialRejection = void 0;
4
+ exports.deferCredentialRejection = deferCredentialRejection;
5
+ exports.getDeferredCredentialRejection = getDeferredCredentialRejection;
6
+ exports.settleDeferredCredentialRejection = settleDeferredCredentialRejection;
7
+ exports.assertNoDeferredCredentialRejection = assertNoDeferredCredentialRejection;
8
+ const hdbError_ts_1 = require("../utility/errors/hdbError.js");
9
+ const contentTypes_ts_1 = require("../server/serverHelpers/contentTypes.js");
10
+ const Headers_ts_1 = require("../server/serverHelpers/Headers.js");
11
+ var credentialRejection_ts_1 = require("./credentialRejection.js");
12
+ Object.defineProperty(exports, "isCredentialRejection", { enumerable: true, get: function () { return credentialRejection_ts_1.isCredentialRejection; } });
13
+ Object.defineProperty(exports, "markCredentialRejection", { enumerable: true, get: function () { return credentialRejection_ts_1.markCredentialRejection; } });
14
+ Object.defineProperty(exports, "credentialRejectionError", { enumerable: true, get: function () { return credentialRejection_ts_1.credentialRejectionError; } });
15
+ const DEFERRED_CREDENTIAL_REJECTION = Symbol('harper.deferredCredentialRejection');
16
+ const CREDENTIAL_REJECTION_STATUS = 401;
17
+ /**
18
+ * Records that this request presented a credential Harper rejected, without deciding the request.
19
+ * The caller leaves `request.user` unset and the inbound `Authorization` header untouched.
20
+ *
21
+ * The immutable, non-enumerable descriptor prevents downstream middleware from clearing it and
22
+ * keeps it out of request copies and serialization.
23
+ */
24
+ function deferCredentialRejection(request, error, strategy) {
25
+ if (getDeferredCredentialRejection(request))
26
+ return;
27
+ const deferred = Object.freeze({
28
+ status: CREDENTIAL_REJECTION_STATUS,
29
+ message: error?.message ?? 'Unauthorized',
30
+ strategy,
31
+ });
32
+ Object.defineProperty(request, DEFERRED_CREDENTIAL_REJECTION, {
33
+ value: deferred,
34
+ enumerable: false,
35
+ configurable: false,
36
+ writable: false,
37
+ });
38
+ }
39
+ function getDeferredCredentialRejection(request) {
40
+ return request?.[DEFERRED_CREDENTIAL_REJECTION];
41
+ }
42
+ /**
43
+ * The response an owning layer returns once it has established Harper owns the route: exactly the
44
+ * descriptor `security/auth.ts` returns in-line, so immediate and deferred rejection share a wire
45
+ * contract.
46
+ *
47
+ * Owner-specific error mapping must not run first. REST renders a thrown error as an RFC 9457
48
+ * Problem Details document and GraphQL as `{errors:[…]}` rather than authentication's negotiated
49
+ * `{error: message}` response. `security/auth.ts` likewise leaves a settled rejection's status and
50
+ * challenge headers alone, so it stays byte-identical to the in-line 401 it replaced.
51
+ *
52
+ * Returns `undefined` when nothing was deferred, so a caller can `return settled ?? …` inline.
53
+ */
54
+ function settleDeferredCredentialRejection(request) {
55
+ const deferred = getDeferredCredentialRejection(request);
56
+ if (!deferred)
57
+ return undefined;
58
+ const contentType = (request?.headers ? (0, contentTypes_ts_1.findBestSerializer)(request).type : undefined) ?? 'application/json';
59
+ return {
60
+ status: deferred.status,
61
+ headers: new Headers_ts_1.Headers({ 'Content-Type': contentType }),
62
+ body: (0, contentTypes_ts_1.serializeMessage)({ error: deferred.message }, request),
63
+ };
64
+ }
65
+ function assertNoDeferredCredentialRejection(request) {
66
+ const deferred = getDeferredCredentialRejection(request);
67
+ if (deferred)
68
+ throw new hdbError_ts_1.ClientError(deferred.message, deferred.status);
69
+ }
70
+ //# sourceMappingURL=deferredAuthentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferredAuthentication.js","sourceRoot":"","sources":["../../security/deferredAuthentication.ts"],"names":[],"mappings":";;;AAuBA,4DAaC;AAED,wEAEC;AAcD,8EAWC;AAED,kFAGC;AAtED,+DAA4D;AAC5D,6EAA+F;AAC/F,mEAA6D;AAE7D,mEAAoH;AAA3G,+HAAA,qBAAqB,OAAA;AAAE,iIAAA,uBAAuB,OAAA;AAAE,kIAAA,wBAAwB,OAAA;AAEjF,MAAM,6BAA6B,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;AAQnF,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAExC;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,OAAY,EAAE,KAA2B,EAAE,QAAgB;IACnG,IAAI,8BAA8B,CAAC,OAAO,CAAC;QAAE,OAAO;IACpD,MAAM,QAAQ,GAAgC,MAAM,CAAC,MAAM,CAAC;QAC3D,MAAM,EAAE,2BAA2B;QACnC,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,cAAc;QACzC,QAAQ;KACR,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,6BAA6B,EAAE;QAC7D,KAAK,EAAE,QAAQ;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,8BAA8B,CAAC,OAAY;IAC1D,OAAO,OAAO,EAAE,CAAC,6BAA6B,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,iCAAiC,CAChD,OAAY;IAEZ,MAAM,QAAQ,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAA,oCAAkB,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC;IAC5G,OAAO;QACN,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,IAAI,oBAAO,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;QACrD,IAAI,EAAE,IAAA,kCAAgB,EAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,CAAoB;KAC/E,CAAC;AACH,CAAC;AAED,SAAgB,mCAAmC,CAAC,OAAY;IAC/D,MAAM,QAAQ,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,QAAQ;QAAE,MAAM,IAAI,yBAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC"}
@@ -1,5 +1,19 @@
1
1
  import type { User } from './user.ts';
2
2
  import type { ImpersonatePayload } from '../server/operationsServer.ts';
3
+ /**
4
+ * Content-derived identity for synthetic (inline) roles. getRolePermissions memoizes translated
5
+ * permissions by role name, so synthetic roles must never share a constant name: two inline roles
6
+ * with different permissions would alias in that cache and leak permissions across principals.
7
+ * Hashing the (already downgraded) permission content isolates distinct permission sets while
8
+ * letting identical ones share a cache entry. The paired __updatedtime__ of 0 keeps the memo key
9
+ * stable across requests; the content hash in the name is what invalidates on permission change.
10
+ *
11
+ * Object keys are canonicalized before hashing so two structurally-identical permission sets that
12
+ * differ only in key order (e.g. from different client request shapes) map to the same name and
13
+ * share one cache slot — otherwise they would each consume a distinct slot (never an aliasing bug,
14
+ * but it worsens the bounded synthetic-role cache pressure).
15
+ */
16
+ export declare function syntheticRoleName(prefix: string, permission: object): string;
3
17
  /**
4
18
  * Applies impersonation to a request. The authenticated user must be a super_user.
5
19
  * Returns a new User object with downgraded permissions based on the impersonate payload.
@@ -9,3 +23,10 @@ import type { ImpersonatePayload } from '../server/operationsServer.ts';
9
23
  * Mode C (existing role): `impersonate.role_name` is present (no role) — looks up the role by name and builds a synthetic user.
10
24
  */
11
25
  export declare function applyImpersonation(authenticatedUser: User, payload: ImpersonatePayload): Promise<User>;
26
+ /**
27
+ * Builds the synthetic user embedded in a scoped authentication token
28
+ * (create_authentication_tokens with an inline `role` object). Same gate and downgrade rules as
29
+ * impersonation Mode A. `trusted` marks internal dispatch (operation authorization bypassed),
30
+ * where no authenticated minter exists.
31
+ */
32
+ export declare function buildScopedTokenUser(minter: User | undefined, payload: ImpersonatePayload, trusted?: boolean): Promise<User>;
@@ -3,12 +3,46 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.syntheticRoleName = syntheticRoleName;
6
7
  exports.applyImpersonation = applyImpersonation;
8
+ exports.buildScopedTokenUser = buildScopedTokenUser;
9
+ const node_crypto_1 = require("node:crypto");
7
10
  const user_ts_1 = require("./user.js");
8
11
  const operationPermissions_ts_1 = require("../utility/operationPermissions.js");
12
+ const role_validation_ts_1 = require("../validation/role_validation.js");
9
13
  const hdbError_ts_1 = require("../utility/errors/hdbError.js");
10
14
  const harper_logger_ts_1 = __importDefault(require("../utility/logging/harper_logger.js"));
11
15
  const role_ts_1 = require("./role.js");
16
+ const operationScope_ts_1 = require("./operationScope.js");
17
+ const credentialProvenance_ts_1 = require("./credentialProvenance.js");
18
+ /**
19
+ * Content-derived identity for synthetic (inline) roles. getRolePermissions memoizes translated
20
+ * permissions by role name, so synthetic roles must never share a constant name: two inline roles
21
+ * with different permissions would alias in that cache and leak permissions across principals.
22
+ * Hashing the (already downgraded) permission content isolates distinct permission sets while
23
+ * letting identical ones share a cache entry. The paired __updatedtime__ of 0 keeps the memo key
24
+ * stable across requests; the content hash in the name is what invalidates on permission change.
25
+ *
26
+ * Object keys are canonicalized before hashing so two structurally-identical permission sets that
27
+ * differ only in key order (e.g. from different client request shapes) map to the same name and
28
+ * share one cache slot — otherwise they would each consume a distinct slot (never an aliasing bug,
29
+ * but it worsens the bounded synthetic-role cache pressure).
30
+ */
31
+ function syntheticRoleName(prefix, permission) {
32
+ return `${prefix}_${(0, node_crypto_1.createHash)('sha256').update(canonicalJSON(permission)).digest('hex').slice(0, 24)}`;
33
+ }
34
+ // Array order is intentionally preserved: operations is order-insensitive semantically, but
35
+ // canonicalizing it too would be a broader behavior change than this cache-sharing fix needs.
36
+ function canonicalJSON(value) {
37
+ return JSON.stringify(value, (_key, v) => v && typeof v === 'object' && !Array.isArray(v)
38
+ ? Object.keys(v)
39
+ .sort()
40
+ .reduce((acc, k) => {
41
+ acc[k] = v[k];
42
+ return acc;
43
+ }, {})
44
+ : v);
45
+ }
12
46
  /**
13
47
  * Applies impersonation to a request. The authenticated user must be a super_user.
14
48
  * Returns a new User object with downgraded permissions based on the impersonate payload.
@@ -38,42 +72,107 @@ async function applyImpersonation(authenticatedUser, payload) {
38
72
  }
39
73
  // Enforce downgrade: never allow escalation
40
74
  enforceDowngrade(impersonatedUser);
75
+ // A token's operation scope (#2174) constrains the credential regardless of which principal it
76
+ // acts as, so it survives impersonation. enforceDowngrade only bounds the impersonated role's
77
+ // permissions; without carrying the scope, a scoped super_user token would shed it by impersonating.
78
+ (0, operationScope_ts_1.attachScopeToUser)(impersonatedUser, authenticatedUser.tokenOperations);
79
+ // Same reasoning for provenance (#2171), and the omission would be worse: impersonation returns a
80
+ // NEW principal, so dropping the marker here would let a workload token impersonate — even down to
81
+ // a lesser role — and then mint a 30-day credential that createTokens would no longer refuse.
82
+ (0, credentialProvenance_ts_1.attachWorkloadIdentityToUser)(impersonatedUser, authenticatedUser.fromWorkloadIdentity);
83
+ // Re-key the synthetic role by its effective (post-downgrade) content so it can never alias
84
+ // another impersonation's permissions or poison a persisted role's memoized translation —
85
+ // getRolePermissions caches by role name (see syntheticRoleName).
86
+ if (impersonatedUser.role) {
87
+ impersonatedUser.role = {
88
+ ...impersonatedUser.role,
89
+ role: syntheticRoleName('_impersonated', impersonatedUser.role.permission),
90
+ __updatedtime__: 0,
91
+ };
92
+ }
41
93
  // Tag for audit trail
42
94
  impersonatedUser._impersonated = true;
43
95
  impersonatedUser._impersonatedBy = authenticatedUser.username;
44
96
  harper_logger_ts_1.default.info(`Impersonation applied: "${authenticatedUser.username}" impersonating as "${impersonatedUser.username}"`);
45
97
  return impersonatedUser;
46
98
  }
47
- function validatePayload(payload) {
99
+ /**
100
+ * Builds the synthetic user embedded in a scoped authentication token
101
+ * (create_authentication_tokens with an inline `role` object). Same gate and downgrade rules as
102
+ * impersonation Mode A. `trusted` marks internal dispatch (operation authorization bypassed),
103
+ * where no authenticated minter exists.
104
+ */
105
+ async function buildScopedTokenUser(minter, payload, trusted = false) {
106
+ if (!trusted && !minter?.role?.permission?.super_user) {
107
+ throw new hdbError_ts_1.ClientError('Only super_user can create a token with an inline role', 403);
108
+ }
109
+ validatePayload(payload, 'scoped token role');
110
+ if (!payload.role) {
111
+ throw new hdbError_ts_1.ClientError("A scoped token requires 'role' with 'permission'");
112
+ }
113
+ const username = payload.username || (minter?.username && `scoped:${minter.username}`);
114
+ if (!username || typeof username !== 'string') {
115
+ throw new hdbError_ts_1.ClientError("A scoped token requires a 'username'");
116
+ }
117
+ // The attribution name must never collide with a real principal: paths that rehydrate a user
118
+ // by name (e.g. MQTT last-will replay) would resolve the token's bearer to that user's full
119
+ // permissions. This also keeps scoped-token activity distinguishable in audit logs.
120
+ if ((await (0, user_ts_1.getUsersWithRolesCache)())?.has(username)) {
121
+ throw new hdbError_ts_1.ClientError(`'username' must not name an existing user; scoped-token attribution is a label`);
122
+ }
123
+ // Downgrade first so validation and the content hash see the effective permission set.
124
+ const permission = {
125
+ ...payload.role.permission,
126
+ super_user: false,
127
+ cluster_user: false,
128
+ };
129
+ // Full persisted-role validation: a malformed shape must fail at mint (400), not at every use.
130
+ const deepValidation = (0, role_validation_ts_1.addRoleValidation)({ role: 'scoped_token', permission });
131
+ if (deepValidation)
132
+ throw deepValidation;
133
+ const roleName = syntheticRoleName('_scoped_token', permission);
134
+ return {
135
+ username,
136
+ active: true,
137
+ role: {
138
+ permission,
139
+ role: roleName,
140
+ id: roleName,
141
+ __updatedtime__: 0,
142
+ __createdtime__: 0,
143
+ },
144
+ };
145
+ }
146
+ function validatePayload(payload, context = 'impersonate payload') {
48
147
  if (typeof payload !== 'object' || payload === null || Array.isArray(payload)) {
49
- throw new hdbError_ts_1.ClientError('Invalid impersonate payload: must be an object');
148
+ throw new hdbError_ts_1.ClientError(`Invalid ${context}: must be an object`);
50
149
  }
51
150
  const hasRole = payload.role !== undefined;
52
151
  const hasUsername = typeof payload.username === 'string' && payload.username.length > 0;
53
152
  const hasRoleName = typeof payload.role_name === 'string' && payload.role_name.length > 0;
54
153
  if (!hasRole && !hasUsername && !hasRoleName) {
55
- throw new hdbError_ts_1.ClientError("Invalid impersonate payload: must include 'username', 'role_name', or 'role' with 'permission'");
154
+ throw new hdbError_ts_1.ClientError(`Invalid ${context}: must include 'username', 'role_name', or 'role' with 'permission'`);
56
155
  }
57
156
  if (hasRole) {
58
157
  if (typeof payload.role !== 'object' || payload.role === null) {
59
- throw new hdbError_ts_1.ClientError("Invalid impersonate payload: 'role' must be an object");
158
+ throw new hdbError_ts_1.ClientError(`Invalid ${context}: 'role' must be an object`);
60
159
  }
61
160
  if (typeof payload.role.permission !== 'object' || payload.role.permission === null) {
62
- throw new hdbError_ts_1.ClientError("Invalid impersonate payload: 'role.permission' must be an object");
161
+ throw new hdbError_ts_1.ClientError(`Invalid ${context}: 'role.permission' must be an object`);
63
162
  }
64
- validateOperationsField(payload.role.permission);
163
+ validateOperationsField(payload.role.permission, context);
65
164
  }
66
165
  }
67
- function validateOperationsField(permission) {
166
+ function validateOperationsField(permission, context = 'impersonate payload') {
68
167
  const operations = permission.operations;
69
168
  if (operations === undefined)
70
169
  return;
71
170
  if (!Array.isArray(operations)) {
72
- throw new hdbError_ts_1.ClientError("Invalid impersonate payload: 'operations' must be an array");
171
+ throw new hdbError_ts_1.ClientError(`Invalid ${context}: 'operations' must be an array`);
73
172
  }
74
173
  const invalidOp = (0, operationPermissions_ts_1.validateOperations)(operations);
75
174
  if (invalidOp !== null) {
76
- throw new hdbError_ts_1.ClientError(`Invalid impersonate payload: unknown operation '${invalidOp}'`);
175
+ throw new hdbError_ts_1.ClientError(`Invalid ${context}: unknown operation '${invalidOp}'`);
77
176
  }
78
177
  }
79
178
  function buildInlineUser(authenticatedUser, payload) {
@@ -1 +1 @@
1
- {"version":3,"file":"impersonation.js","sourceRoot":"","sources":["../../security/impersonation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impersonation.js","sourceRoot":"","sources":["../../security/impersonation.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,12 @@ import { ApplicationScope } from '../components/ApplicationScope.ts';
6
6
  * @param scope
7
7
  */
8
8
  export declare function scopedImport(filePath: string | URL, scope?: ApplicationScope): Promise<any>;
9
+ /** Everything an application sees differently because of what it declared. Built once, at load. */
10
+ export declare function scopedBindings(scope: ApplicationScope): {
11
+ databases: any;
12
+ tables: any;
13
+ defineTable: any;
14
+ };
9
15
  export declare function getContext(): import("../index.ts").Context;
10
16
  export declare function getUser(): import("./user.ts").User;
11
17
  export declare function getResponse(): any;