@harperfast/harper 5.2.13 → 5.3.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.
- package/agent/mcpTools.ts +1 -1
- package/agent/session.ts +25 -14
- package/bin/cliOperations.ts +58 -9
- package/bin/copyDb.ts +282 -59
- package/bin/deploySetup.ts +16 -5
- package/bin/harper.ts +1 -1
- package/bin/help.ts +4 -1
- package/bin/lite.ts +4 -1
- package/bin/restart.ts +120 -4
- package/bin/run.ts +6 -11
- package/bin/upgrade.js +7 -3
- package/bin/workloadIdentity.ts +119 -0
- package/components/Application.ts +3436 -242
- package/components/ApplicationScope.ts +8 -0
- package/components/EntryHandler.ts +59 -39
- package/components/OptionsWatcher.ts +440 -98
- package/components/RuntimeModuleTracker.ts +38 -7
- package/components/Scope.ts +56 -15
- package/components/awaitRestart.ts +84 -0
- package/components/componentLoader.ts +381 -32
- package/components/componentPreparationLock.ts +16 -5
- package/components/deploymentOperations.ts +4 -1
- package/components/deploymentRecorder.ts +9 -2
- package/components/mcp/adapters/harperHttp.ts +4 -0
- package/components/mcp/listChanged.ts +4 -0
- package/components/mcp/toolRegistry.ts +2 -0
- package/components/mcp/tools/operations.ts +9 -0
- package/components/mcp/tools/schemas/operationDescriptions.ts +2 -2
- package/components/operations.js +537 -113
- package/components/operationsValidation.js +98 -3
- package/components/packageComponent.ts +25 -1
- package/components/requestRestart.ts +11 -0
- package/components/status/ComponentStatusRegistry.ts +59 -0
- package/config/RootConfigWatcher.ts +240 -40
- package/config/configReadRetry.ts +62 -0
- package/config/configUtils.ts +357 -48
- package/config/harperConfigEnvVars.ts +170 -27
- package/config/parseConfigFile.ts +34 -0
- package/config/readConfigFileSync.ts +44 -0
- package/config/watcherArming.ts +59 -0
- package/config-root.schema.json +33 -0
- package/dataLayer/blobBackup.ts +160 -50
- package/dataLayer/delete.ts +6 -1
- package/dataLayer/harperBridge/ResourceBridge.ts +80 -10
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
- package/dataLayer/hdbInfoController.ts +34 -1
- package/dataLayer/insert.ts +44 -1
- package/dataLayer/rocksdbBackup.ts +53 -10
- package/dataLayer/schema.ts +11 -1
- package/dataLayer/schemaDescribe.ts +8 -1
- package/dist/agent/mcpTools.js +1 -1
- package/dist/agent/mcpTools.js.map +1 -1
- package/dist/agent/session.d.ts +22 -0
- package/dist/agent/session.js +26 -15
- package/dist/agent/session.js.map +1 -1
- package/dist/bin/cliOperations.js +61 -9
- package/dist/bin/cliOperations.js.map +1 -1
- package/dist/bin/copyDb.d.ts +12 -1
- package/dist/bin/copyDb.js +248 -60
- package/dist/bin/copyDb.js.map +1 -1
- package/dist/bin/deploySetup.d.ts +2 -0
- package/dist/bin/deploySetup.js +11 -3
- package/dist/bin/deploySetup.js.map +1 -1
- package/dist/bin/harper.js +1 -1
- package/dist/bin/harper.js.map +1 -1
- package/dist/bin/help.js +4 -1
- package/dist/bin/help.js.map +1 -1
- package/dist/bin/lite.js +4 -1
- package/dist/bin/lite.js.map +1 -1
- package/dist/bin/restart.js +91 -6
- package/dist/bin/restart.js.map +1 -1
- package/dist/bin/run.js +4 -10
- package/dist/bin/run.js.map +1 -1
- package/dist/bin/upgrade.js +4 -3
- package/dist/bin/upgrade.js.map +1 -1
- package/dist/bin/workloadIdentity.d.ts +18 -0
- package/dist/bin/workloadIdentity.js +100 -0
- package/dist/bin/workloadIdentity.js.map +1 -0
- package/dist/components/Application.d.ts +235 -17
- package/dist/components/Application.js +3038 -238
- package/dist/components/Application.js.map +1 -1
- package/dist/components/ApplicationScope.d.ts +8 -0
- package/dist/components/ApplicationScope.js +7 -0
- package/dist/components/ApplicationScope.js.map +1 -1
- package/dist/components/EntryHandler.js +26 -10
- package/dist/components/EntryHandler.js.map +1 -1
- package/dist/components/OptionsWatcher.d.ts +4 -0
- package/dist/components/OptionsWatcher.js +440 -99
- package/dist/components/OptionsWatcher.js.map +1 -1
- package/dist/components/RuntimeModuleTracker.js +40 -6
- package/dist/components/RuntimeModuleTracker.js.map +1 -1
- package/dist/components/Scope.js +52 -13
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/awaitRestart.d.ts +33 -0
- package/dist/components/awaitRestart.js +61 -0
- package/dist/components/awaitRestart.js.map +1 -0
- package/dist/components/componentLoader.d.ts +38 -1
- package/dist/components/componentLoader.js +313 -24
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/componentPreparationLock.d.ts +5 -0
- package/dist/components/componentPreparationLock.js +14 -6
- package/dist/components/componentPreparationLock.js.map +1 -1
- package/dist/components/deploymentOperations.js +4 -1
- package/dist/components/deploymentOperations.js.map +1 -1
- package/dist/components/deploymentRecorder.d.ts +4 -2
- package/dist/components/deploymentRecorder.js +1 -0
- package/dist/components/deploymentRecorder.js.map +1 -1
- package/dist/components/mcp/adapters/harperHttp.js +4 -0
- package/dist/components/mcp/adapters/harperHttp.js.map +1 -1
- package/dist/components/mcp/listChanged.js +5 -0
- package/dist/components/mcp/listChanged.js.map +1 -1
- package/dist/components/mcp/toolRegistry.d.ts +1 -0
- package/dist/components/mcp/toolRegistry.js.map +1 -1
- package/dist/components/mcp/tools/operations.d.ts +5 -0
- package/dist/components/mcp/tools/operations.js +9 -0
- package/dist/components/mcp/tools/operations.js.map +1 -1
- package/dist/components/mcp/tools/schemas/operationDescriptions.js +2 -2
- package/dist/components/mcp/tools/schemas/operationDescriptions.js.map +1 -1
- package/dist/components/operations.d.ts +28 -0
- package/dist/components/operations.js +476 -113
- package/dist/components/operations.js.map +1 -1
- package/dist/components/operationsValidation.js +97 -3
- package/dist/components/operationsValidation.js.map +1 -1
- package/dist/components/packageComponent.js +24 -0
- package/dist/components/packageComponent.js.map +1 -1
- package/dist/components/requestRestart.d.ts +1 -0
- package/dist/components/requestRestart.js +7 -0
- package/dist/components/requestRestart.js.map +1 -1
- package/dist/components/status/ComponentStatusRegistry.d.ts +0 -4
- package/dist/components/status/ComponentStatusRegistry.js +63 -0
- package/dist/components/status/ComponentStatusRegistry.js.map +1 -1
- package/dist/config/RootConfigWatcher.d.ts +9 -1
- package/dist/config/RootConfigWatcher.js +228 -37
- package/dist/config/RootConfigWatcher.js.map +1 -1
- package/dist/config/configReadRetry.d.ts +8 -0
- package/dist/config/configReadRetry.js +62 -0
- package/dist/config/configReadRetry.js.map +1 -0
- package/dist/config/configUtils.d.ts +11 -2
- package/dist/config/configUtils.js +304 -47
- package/dist/config/configUtils.js.map +1 -1
- package/dist/config/harperConfigEnvVars.d.ts +16 -0
- package/dist/config/harperConfigEnvVars.js +162 -25
- package/dist/config/harperConfigEnvVars.js.map +1 -1
- package/dist/config/parseConfigFile.d.ts +4 -0
- package/dist/config/parseConfigFile.js +35 -0
- package/dist/config/parseConfigFile.js.map +1 -0
- package/dist/config/readConfigFileSync.d.ts +1 -0
- package/dist/config/readConfigFileSync.js +47 -0
- package/dist/config/readConfigFileSync.js.map +1 -0
- package/dist/config/watcherArming.d.ts +15 -0
- package/dist/config/watcherArming.js +59 -0
- package/dist/config/watcherArming.js.map +1 -0
- package/dist/dataLayer/blobBackup.d.ts +49 -20
- package/dist/dataLayer/blobBackup.js +139 -50
- package/dist/dataLayer/blobBackup.js.map +1 -1
- package/dist/dataLayer/delete.js +1 -1
- package/dist/dataLayer/delete.js.map +1 -1
- package/dist/dataLayer/harperBridge/ResourceBridge.d.ts +14 -1
- package/dist/dataLayer/harperBridge/ResourceBridge.js +72 -12
- package/dist/dataLayer/harperBridge/ResourceBridge.js.map +1 -1
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.d.ts +3 -1
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +3 -1
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js.map +1 -1
- package/dist/dataLayer/hdbInfoController.d.ts +10 -0
- package/dist/dataLayer/hdbInfoController.js +30 -1
- package/dist/dataLayer/hdbInfoController.js.map +1 -1
- package/dist/dataLayer/insert.d.ts +9 -1
- package/dist/dataLayer/insert.js +30 -0
- package/dist/dataLayer/insert.js.map +1 -1
- package/dist/dataLayer/rocksdbBackup.d.ts +2 -2
- package/dist/dataLayer/rocksdbBackup.js +45 -8
- package/dist/dataLayer/rocksdbBackup.js.map +1 -1
- package/dist/dataLayer/schema.js +8 -0
- package/dist/dataLayer/schema.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +8 -1
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/json/systemSchema.json +55 -0
- package/dist/resources/DatabaseTransaction.d.ts +77 -0
- package/dist/resources/DatabaseTransaction.js +586 -54
- package/dist/resources/DatabaseTransaction.js.map +1 -1
- package/dist/resources/LMDBTransaction.d.ts +2 -1
- package/dist/resources/LMDBTransaction.js +43 -6
- package/dist/resources/LMDBTransaction.js.map +1 -1
- package/dist/resources/PrimaryRocksDatabase.d.ts +1 -0
- package/dist/resources/PrimaryRocksDatabase.js +49 -5
- package/dist/resources/PrimaryRocksDatabase.js.map +1 -1
- package/dist/resources/RecordEncoder.d.ts +20 -0
- package/dist/resources/RecordEncoder.js +110 -9
- package/dist/resources/RecordEncoder.js.map +1 -1
- package/dist/resources/RequestTarget.d.ts +2 -0
- package/dist/resources/RequestTarget.js.map +1 -1
- package/dist/resources/Resource.js +117 -24
- package/dist/resources/Resource.js.map +1 -1
- package/dist/resources/ResourceInterface.d.ts +28 -1
- package/dist/resources/ResourceInterface.js.map +1 -1
- package/dist/resources/RocksIndexStore.d.ts +6 -1
- package/dist/resources/RocksIndexStore.js +24 -9
- package/dist/resources/RocksIndexStore.js.map +1 -1
- package/dist/resources/RocksTransactionLogStore.d.ts +24 -1
- package/dist/resources/RocksTransactionLogStore.js +160 -49
- package/dist/resources/RocksTransactionLogStore.js.map +1 -1
- package/dist/resources/Table.d.ts +165 -10
- package/dist/resources/Table.js +1805 -303
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/write.js +10 -3
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/auditStore.d.ts +181 -2
- package/dist/resources/auditStore.js +640 -29
- package/dist/resources/auditStore.js.map +1 -1
- package/dist/resources/blob.d.ts +129 -9
- package/dist/resources/blob.js +992 -114
- package/dist/resources/blob.js.map +1 -1
- package/dist/resources/branchDatabase.d.ts +48 -0
- package/dist/resources/branchDatabase.js +892 -0
- package/dist/resources/branchDatabase.js.map +1 -0
- package/dist/resources/crdt.js +50 -12
- package/dist/resources/crdt.js.map +1 -1
- package/dist/resources/dataLoader.js +3 -4
- package/dist/resources/dataLoader.js.map +1 -1
- package/dist/resources/databases.d.ts +157 -14
- package/dist/resources/databases.js +1462 -325
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/defineTable.d.ts +10 -2
- package/dist/resources/defineTable.js +9 -1
- package/dist/resources/defineTable.js.map +1 -1
- package/dist/resources/derivedIndexRegistry.d.ts +5 -0
- package/dist/resources/derivedIndexRegistry.js +68 -0
- package/dist/resources/derivedIndexRegistry.js.map +1 -0
- package/dist/resources/derivedIndexRuntime.d.ts +215 -0
- package/dist/resources/derivedIndexRuntime.js +2027 -0
- package/dist/resources/derivedIndexRuntime.js.map +1 -0
- package/dist/resources/graphql.d.ts +1 -1
- package/dist/resources/graphql.js +52 -16
- package/dist/resources/graphql.js.map +1 -1
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.d.ts +103 -9
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js +854 -41
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
- package/dist/resources/indexes/hnswDerivedIndex.d.ts +67 -0
- package/dist/resources/indexes/hnswDerivedIndex.js +464 -0
- package/dist/resources/indexes/hnswDerivedIndex.js.map +1 -0
- package/dist/resources/indexes/hnswPlaneBinding.d.ts +65 -0
- package/dist/resources/indexes/hnswPlaneBinding.js +91 -0
- package/dist/resources/indexes/hnswPlaneBinding.js.map +1 -0
- package/dist/resources/longLivedTransactions.d.ts +71 -0
- package/dist/resources/longLivedTransactions.js +358 -0
- package/dist/resources/longLivedTransactions.js.map +1 -0
- package/dist/resources/models/backendRegistry.d.ts +26 -0
- package/dist/resources/models/backendRegistry.js +60 -2
- package/dist/resources/models/backendRegistry.js.map +1 -1
- package/dist/resources/models/bootstrap.d.ts +33 -1
- package/dist/resources/models/bootstrap.js +416 -31
- package/dist/resources/models/bootstrap.js.map +1 -1
- package/dist/resources/nodeIdMapping.d.ts +5 -0
- package/dist/resources/nodeIdMapping.js +49 -0
- package/dist/resources/nodeIdMapping.js.map +1 -1
- package/dist/resources/recordLock.d.ts +123 -0
- package/dist/resources/recordLock.js +315 -0
- package/dist/resources/recordLock.js.map +1 -0
- package/dist/resources/recordLockCoordinator.d.ts +557 -0
- package/dist/resources/recordLockCoordinator.js +2565 -0
- package/dist/resources/recordLockCoordinator.js.map +1 -0
- package/dist/resources/replayLogs.d.ts +14 -1
- package/dist/resources/replayLogs.js +157 -24
- package/dist/resources/replayLogs.js.map +1 -1
- package/dist/resources/replayLogsGuards.d.ts +94 -7
- package/dist/resources/replayLogsGuards.js +111 -7
- package/dist/resources/replayLogsGuards.js.map +1 -1
- package/dist/resources/replicatedApplyFailure.d.ts +16 -0
- package/dist/resources/replicatedApplyFailure.js +63 -0
- package/dist/resources/replicatedApplyFailure.js.map +1 -0
- package/dist/resources/scheduler/scheduler.js +3 -3
- package/dist/resources/scheduler/scheduler.js.map +1 -1
- package/dist/resources/search.d.ts +10 -4
- package/dist/resources/search.js +283 -37
- package/dist/resources/search.js.map +1 -1
- package/dist/resources/tracked.d.ts +5 -1
- package/dist/resources/tracked.js +74 -23
- package/dist/resources/tracked.js.map +1 -1
- package/dist/resources/transactionBroadcast.d.ts +1 -1
- package/dist/resources/transactionBroadcast.js +2 -2
- package/dist/resources/transactionBroadcast.js.map +1 -1
- package/dist/security/auth.js +61 -30
- package/dist/security/auth.js.map +1 -1
- package/dist/security/authn/oidc/claims.d.ts +22 -0
- package/dist/security/authn/oidc/claims.js +71 -0
- package/dist/security/authn/oidc/claims.js.map +1 -0
- package/dist/security/authn/oidc/identityToken.d.ts +27 -0
- package/dist/security/authn/oidc/identityToken.js +111 -0
- package/dist/security/authn/oidc/identityToken.js.map +1 -0
- package/dist/security/authn/oidc/jwks.d.ts +25 -0
- package/dist/security/authn/oidc/jwks.js +261 -0
- package/dist/security/authn/oidc/jwks.js.map +1 -0
- package/dist/security/authn/oidc/providers/generic.d.ts +13 -0
- package/dist/security/authn/oidc/providers/generic.js +34 -0
- package/dist/security/authn/oidc/providers/generic.js.map +1 -0
- package/dist/security/authn/oidc/providers/githubActions.d.ts +11 -0
- package/dist/security/authn/oidc/providers/githubActions.js +129 -0
- package/dist/security/authn/oidc/providers/githubActions.js.map +1 -0
- package/dist/security/authn/oidc/providers/index.d.ts +37 -0
- package/dist/security/authn/oidc/providers/index.js +24 -0
- package/dist/security/authn/oidc/providers/index.js.map +1 -0
- package/dist/security/authn/oidc/tokenExchange.d.ts +12 -0
- package/dist/security/authn/oidc/tokenExchange.js +306 -0
- package/dist/security/authn/oidc/tokenExchange.js.map +1 -0
- package/dist/security/authn/oidc/trustPolicyOperations.d.ts +49 -0
- package/dist/security/authn/oidc/trustPolicyOperations.js +358 -0
- package/dist/security/authn/oidc/trustPolicyOperations.js.map +1 -0
- package/dist/security/authn/oidc/types.d.ts +38 -0
- package/dist/security/authn/oidc/types.js +6 -0
- package/dist/security/authn/oidc/types.js.map +1 -0
- package/dist/security/certificateVerification/index.js +40 -11
- package/dist/security/certificateVerification/index.js.map +1 -1
- package/dist/security/certificateVerification/trustedIssuers.d.ts +24 -0
- package/dist/security/certificateVerification/trustedIssuers.js +79 -0
- package/dist/security/certificateVerification/trustedIssuers.js.map +1 -0
- package/dist/security/certificateVerification/types.d.ts +1 -0
- package/dist/security/credentialProvenance.d.ts +35 -0
- package/dist/security/credentialProvenance.js +51 -0
- package/dist/security/credentialProvenance.js.map +1 -0
- package/dist/security/credentialRejection.d.ts +4 -0
- package/dist/security/credentialRejection.js +24 -0
- package/dist/security/credentialRejection.js.map +1 -0
- package/dist/security/deferredAuthentication.d.ts +36 -0
- package/dist/security/deferredAuthentication.js +70 -0
- package/dist/security/deferredAuthentication.js.map +1 -0
- package/dist/security/impersonation.d.ts +21 -0
- package/dist/security/impersonation.js +108 -9
- package/dist/security/impersonation.js.map +1 -1
- package/dist/security/jsLoader.d.ts +6 -0
- package/dist/security/jsLoader.js +77 -15
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.js +301 -71
- package/dist/security/keys.js.map +1 -1
- package/dist/security/operationScope.d.ts +21 -0
- package/dist/security/operationScope.js +36 -0
- package/dist/security/operationScope.js.map +1 -0
- package/dist/security/permissionsTranslator.js +21 -0
- package/dist/security/permissionsTranslator.js.map +1 -1
- package/dist/security/tokenAuthentication.d.ts +19 -1
- package/dist/security/tokenAuthentication.js +191 -10
- package/dist/security/tokenAuthentication.js.map +1 -1
- package/dist/security/user.js +4 -3
- package/dist/security/user.js.map +1 -1
- package/dist/server/DurableSubscriptionsSession.d.ts +2 -2
- package/dist/server/DurableSubscriptionsSession.js +67 -10
- package/dist/server/DurableSubscriptionsSession.js.map +1 -1
- package/dist/server/REST.js +106 -2
- package/dist/server/REST.js.map +1 -1
- package/dist/server/graphqlQuerying.js +4 -0
- package/dist/server/graphqlQuerying.js.map +1 -1
- package/dist/server/http.d.ts +16 -1
- package/dist/server/http.js +122 -17
- package/dist/server/http.js.map +1 -1
- package/dist/server/itc/serverHandlers.js +8 -1
- package/dist/server/itc/serverHandlers.js.map +1 -1
- package/dist/server/jobs/jobProcess.js +6 -2
- package/dist/server/jobs/jobProcess.js.map +1 -1
- package/dist/server/jobs/jobs.js +4 -1
- package/dist/server/jobs/jobs.js.map +1 -1
- package/dist/server/liveSubscriptionAuth.d.ts +26 -4
- package/dist/server/liveSubscriptionAuth.js +105 -39
- package/dist/server/liveSubscriptionAuth.js.map +1 -1
- package/dist/server/loadRootComponents.js +49 -10
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/mqtt.d.ts +2 -0
- package/dist/server/mqtt.js +165 -30
- package/dist/server/mqtt.js.map +1 -1
- package/dist/server/nodeName.d.ts +2 -0
- package/dist/server/nodeName.js +107 -23
- package/dist/server/nodeName.js.map +1 -1
- package/dist/server/serverHelpers/Headers.d.ts +27 -0
- package/dist/server/serverHelpers/Headers.js +145 -1
- package/dist/server/serverHelpers/Headers.js.map +1 -1
- package/dist/server/serverHelpers/NodeAdapterResponse.d.ts +48 -0
- package/dist/server/serverHelpers/NodeAdapterResponse.js +220 -0
- package/dist/server/serverHelpers/NodeAdapterResponse.js.map +1 -0
- package/dist/server/serverHelpers/Request.d.ts +5 -10
- package/dist/server/serverHelpers/Request.js +38 -136
- package/dist/server/serverHelpers/Request.js.map +1 -1
- package/dist/server/serverHelpers/contentTypes.d.ts +11 -0
- package/dist/server/serverHelpers/contentTypes.js +221 -40
- package/dist/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/server/serverHelpers/deployValidationState.d.ts +3 -0
- package/dist/server/serverHelpers/deployValidationState.js +9 -19
- package/dist/server/serverHelpers/deployValidationState.js.map +1 -1
- package/dist/server/serverHelpers/operationAuthorizationState.d.ts +12 -0
- package/dist/server/serverHelpers/operationAuthorizationState.js +24 -2
- package/dist/server/serverHelpers/operationAuthorizationState.js.map +1 -1
- package/dist/server/serverHelpers/registeredOperations.d.ts +5 -4
- package/dist/server/serverHelpers/registeredOperations.js +74 -21
- package/dist/server/serverHelpers/registeredOperations.js.map +1 -1
- package/dist/server/serverHelpers/requestSanitization.d.ts +11 -0
- package/dist/server/serverHelpers/requestSanitization.js +20 -0
- package/dist/server/serverHelpers/requestSanitization.js.map +1 -0
- package/dist/server/serverHelpers/serverHandlers.js +6 -3
- package/dist/server/serverHelpers/serverHandlers.js.map +1 -1
- package/dist/server/serverHelpers/serverUtilities.d.ts +18 -0
- package/dist/server/serverHelpers/serverUtilities.js +178 -29
- package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/server/serverHelpers/sharedMessageEncoding.d.ts +67 -0
- package/dist/server/serverHelpers/sharedMessageEncoding.js +280 -0
- package/dist/server/serverHelpers/sharedMessageEncoding.js.map +1 -0
- package/dist/server/serverHelpers/uwsServer.js +19 -1
- package/dist/server/serverHelpers/uwsServer.js.map +1 -1
- package/dist/server/static.js +24 -28
- package/dist/server/static.js.map +1 -1
- package/dist/server/storageReclamation.d.ts +5 -0
- package/dist/server/storageReclamation.js +17 -1
- package/dist/server/storageReclamation.js.map +1 -1
- package/dist/server/threads/isolatedApplications.d.ts +47 -0
- package/dist/server/threads/isolatedApplications.js +171 -0
- package/dist/server/threads/isolatedApplications.js.map +1 -0
- package/dist/server/threads/itc.d.ts +7 -2
- package/dist/server/threads/itc.js +5 -1
- package/dist/server/threads/itc.js.map +1 -1
- package/dist/server/threads/logRotationTransport.d.ts +1 -0
- package/dist/server/threads/logRotationTransport.js +33 -0
- package/dist/server/threads/logRotationTransport.js.map +1 -0
- package/dist/server/threads/manageThreads.d.ts +83 -3
- package/dist/server/threads/manageThreads.js +769 -75
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.d.ts +1 -0
- package/dist/server/threads/socketRouter.js +277 -31
- package/dist/server/threads/socketRouter.js.map +1 -1
- package/dist/server/threads/threadHeapMemory.d.ts +2 -0
- package/dist/server/threads/threadHeapMemory.js +31 -0
- package/dist/server/threads/threadHeapMemory.js.map +1 -0
- package/dist/server/threads/threadServer.js +76 -22
- package/dist/server/threads/threadServer.js.map +1 -1
- package/dist/sqlEngine/config.d.ts +1 -3
- package/dist/sqlEngine/config.js +19 -16
- package/dist/sqlEngine/config.js.map +1 -1
- package/dist/sqlTranslator/index.d.ts +1 -1
- package/dist/sqlTranslator/index.js +30 -7
- package/dist/sqlTranslator/index.js.map +1 -1
- package/dist/upgrade/directives/5-3-0.d.ts +7 -0
- package/dist/upgrade/directives/5-3-0.js +148 -0
- package/dist/upgrade/directives/5-3-0.js.map +1 -0
- package/dist/upgrade/directives/directivesController.js +2 -1
- package/dist/upgrade/directives/directivesController.js.map +1 -1
- package/dist/utility/OperationFunctionCaller.js +2 -1
- package/dist/utility/OperationFunctionCaller.js.map +1 -1
- package/dist/utility/common_utils.d.ts +16 -0
- package/dist/utility/common_utils.js +32 -6
- package/dist/utility/common_utils.js.map +1 -1
- package/dist/utility/componentNames.d.ts +8 -0
- package/dist/utility/componentNames.js +12 -1
- package/dist/utility/componentNames.js.map +1 -1
- package/dist/utility/environment/environmentManager.js +3 -6
- package/dist/utility/environment/environmentManager.js.map +1 -1
- package/dist/utility/environment/systemInformation.d.ts +1 -0
- package/dist/utility/environment/systemInformation.js +1 -0
- package/dist/utility/environment/systemInformation.js.map +1 -1
- package/dist/utility/errors/commonErrors.d.ts +2 -0
- package/dist/utility/errors/commonErrors.js +2 -0
- package/dist/utility/errors/commonErrors.js.map +1 -1
- package/dist/utility/errors/hdbError.d.ts +33 -0
- package/dist/utility/errors/hdbError.js +58 -1
- package/dist/utility/errors/hdbError.js.map +1 -1
- package/dist/utility/globalSchema.d.ts +18 -0
- package/dist/utility/hdbTerms.d.ts +18 -0
- package/dist/utility/hdbTerms.js +20 -2
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/logging/harper_logger.d.ts +2 -0
- package/dist/utility/logging/harper_logger.js +286 -30
- package/dist/utility/logging/harper_logger.js.map +1 -1
- package/dist/utility/logging/logGenerationCoordinator.d.ts +35 -0
- package/dist/utility/logging/logGenerationCoordinator.js +184 -0
- package/dist/utility/logging/logGenerationCoordinator.js.map +1 -0
- package/dist/utility/logging/logRotation.d.ts +46 -0
- package/dist/utility/logging/logRotation.js +365 -0
- package/dist/utility/logging/logRotation.js.map +1 -0
- package/dist/utility/logging/logRotator.d.ts +1 -1
- package/dist/utility/logging/logRotator.js +192 -85
- package/dist/utility/logging/logRotator.js.map +1 -1
- package/dist/utility/nodeIdentity.d.ts +9 -0
- package/dist/utility/nodeIdentity.js +58 -0
- package/dist/utility/nodeIdentity.js.map +1 -0
- package/dist/utility/npmUtilities.js +11 -7
- package/dist/utility/npmUtilities.js.map +1 -1
- package/dist/utility/operationPermissions.d.ts +3 -1
- package/dist/utility/operationPermissions.js +16 -1
- package/dist/utility/operationPermissions.js.map +1 -1
- package/dist/utility/operation_authorization.d.ts +10 -7
- package/dist/utility/operation_authorization.js +212 -41
- package/dist/utility/operation_authorization.js.map +1 -1
- package/dist/utility/watchPath.d.ts +29 -0
- package/dist/utility/watchPath.js +68 -0
- package/dist/utility/watchPath.js.map +1 -0
- package/dist/utility/watcherFallback.d.ts +41 -0
- package/dist/utility/watcherFallback.js +153 -0
- package/dist/utility/watcherFallback.js.map +1 -1
- package/dist/validation/configValidator.d.ts +12 -0
- package/dist/validation/configValidator.js +205 -75
- package/dist/validation/configValidator.js.map +1 -1
- package/dist/validation/installValidator.js +12 -0
- package/dist/validation/installValidator.js.map +1 -1
- package/dist/validation/validationWrapper.d.ts +11 -0
- package/dist/validation/validationWrapper.js +16 -3
- package/dist/validation/validationWrapper.js.map +1 -1
- package/index.ts +8 -0
- package/json/systemSchema.json +55 -0
- package/npm-shrinkwrap.json +286 -194
- package/package.json +15 -7
- package/resources/DESIGN.md +219 -52
- package/resources/DatabaseTransaction.ts +657 -52
- package/resources/LMDBTransaction.ts +46 -6
- package/resources/PrimaryRocksDatabase.ts +46 -7
- package/resources/RecordEncoder.ts +124 -9
- package/resources/RequestTarget.ts +2 -0
- package/resources/Resource.ts +114 -22
- package/resources/ResourceInterface.ts +31 -0
- package/resources/RocksIndexStore.ts +30 -9
- package/resources/RocksTransactionLogStore.ts +188 -51
- package/resources/Table.ts +1960 -301
- package/resources/analytics/write.ts +10 -3
- package/resources/auditStore.ts +647 -32
- package/resources/blob.ts +1029 -110
- package/resources/branchDatabase.ts +941 -0
- package/resources/crdt.ts +76 -12
- package/resources/dataLoader.ts +3 -4
- package/resources/databases.ts +1584 -320
- package/resources/defineTable.ts +18 -2
- package/resources/derivedIndexRegistry.ts +56 -0
- package/resources/derivedIndexRuntime.ts +2292 -0
- package/resources/graphql.ts +72 -17
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +911 -48
- package/resources/indexes/hnswDerivedIndex.ts +531 -0
- package/resources/indexes/hnswPlaneBinding.ts +174 -0
- package/resources/longLivedTransactions.ts +360 -0
- package/resources/models/backendRegistry.ts +84 -2
- package/resources/models/bootstrap.ts +473 -28
- package/resources/nodeIdMapping.ts +50 -0
- package/resources/recordLock.ts +419 -0
- package/resources/recordLockCoordinator.ts +3043 -0
- package/resources/replayLogs.ts +152 -26
- package/resources/replayLogsGuards.ts +171 -8
- package/resources/replicatedApplyFailure.ts +77 -0
- package/resources/scheduler/scheduler.ts +4 -4
- package/resources/search.ts +288 -46
- package/resources/tracked.ts +73 -22
- package/resources/transactionBroadcast.ts +3 -3
- package/security/auth.ts +68 -29
- package/security/authn/oidc/claims.ts +72 -0
- package/security/authn/oidc/identityToken.ts +129 -0
- package/security/authn/oidc/jwks.ts +260 -0
- package/security/authn/oidc/providers/generic.ts +40 -0
- package/security/authn/oidc/providers/githubActions.ts +137 -0
- package/security/authn/oidc/providers/index.ts +52 -0
- package/security/authn/oidc/tokenExchange.ts +300 -0
- package/security/authn/oidc/trustPolicyOperations.ts +343 -0
- package/security/authn/oidc/types.ts +41 -0
- package/security/certificateVerification/index.ts +54 -13
- package/security/certificateVerification/trustedIssuers.ts +76 -0
- package/security/certificateVerification/types.ts +1 -0
- package/security/credentialProvenance.ts +47 -0
- package/security/credentialRejection.ts +22 -0
- package/security/deferredAuthentication.ts +71 -0
- package/security/impersonation.ts +117 -12
- package/security/jsLoader.ts +83 -18
- package/security/keys.ts +298 -72
- package/security/operationScope.ts +33 -0
- package/security/permissionsTranslator.js +23 -0
- package/security/tokenAuthentication.ts +233 -12
- package/security/user.ts +4 -3
- package/server/DESIGN.md +194 -16
- package/server/DurableSubscriptionsSession.ts +71 -11
- package/server/REST.ts +115 -4
- package/server/graphqlQuerying.ts +4 -0
- package/server/http.ts +133 -20
- package/server/itc/serverHandlers.js +8 -1
- package/server/jobs/jobProcess.ts +8 -2
- package/server/jobs/jobs.ts +4 -1
- package/server/liveSubscriptionAuth.ts +129 -46
- package/server/loadRootComponents.js +50 -8
- package/server/mqtt.ts +179 -38
- package/server/nodeName.ts +103 -21
- package/server/serverHelpers/Headers.ts +135 -0
- package/server/serverHelpers/NodeAdapterResponse.ts +221 -0
- package/server/serverHelpers/Request.ts +33 -131
- package/server/serverHelpers/contentTypes.ts +217 -36
- package/server/serverHelpers/deployValidationState.ts +24 -13
- package/server/serverHelpers/operationAuthorizationState.ts +34 -3
- package/server/serverHelpers/registeredOperations.ts +79 -22
- package/server/serverHelpers/requestSanitization.ts +15 -0
- package/server/serverHelpers/serverHandlers.js +6 -3
- package/server/serverHelpers/serverUtilities.ts +232 -40
- package/server/serverHelpers/sharedMessageEncoding.ts +307 -0
- package/server/serverHelpers/uwsServer.ts +17 -2
- package/server/static.ts +23 -29
- package/server/storageReclamation.ts +15 -2
- package/server/threads/isolatedApplications.ts +157 -0
- package/server/threads/itc.js +11 -1
- package/server/threads/logRotationTransport.ts +40 -0
- package/server/threads/manageThreads.js +771 -66
- package/server/threads/socketRouter.ts +291 -30
- package/server/threads/threadHeapMemory.ts +26 -0
- package/server/threads/threadServer.js +73 -22
- package/sqlTranslator/index.ts +31 -8
- package/studio/web/assets/{Chat-4RrB5134.js → Chat-D3j-1yY1.js} +1 -1
- package/studio/web/assets/{FloatingChat-omlNMDcJ.js → FloatingChat-BxJGYcfB.js} +3 -3
- package/studio/web/assets/{apiToken-Bke3wvfZ.js → apiToken-CT55oWOe.js} +1 -1
- package/studio/web/assets/{applications-DvFDYJgK.js → applications-D9Ct9_vm.js} +1 -1
- package/studio/web/assets/{cssMode-C1vRa7zh.js → cssMode-DV8H7VwA.js} +1 -1
- package/studio/web/assets/{editor-3XRWEDWX.js → editor-uatc0unt.js} +1 -1
- package/studio/web/assets/{html-CTY5tdMr.js → html-Bm6D6paN.js} +1 -1
- package/studio/web/assets/{htmlMode-CG1vSD9t.js → htmlMode-CEn7tpLG.js} +1 -1
- package/studio/web/assets/{index-Dfpeofdu.js → index-BIXW6Pu4.js} +5 -5
- package/studio/web/assets/{index.lazy-B1VOIv-t.js → index.lazy-UI7L-Vrk.js} +1 -1
- package/studio/web/assets/{javascript-CJeJzGnI.js → javascript-CJ0G3AFZ.js} +1 -1
- package/studio/web/assets/{jsonMode-CYPBwM82.js → jsonMode-DQADAYEa.js} +1 -1
- package/studio/web/assets/{languageServices-IKH4GUHl.js → languageServices-CAQJXWcI.js} +1 -1
- package/studio/web/assets/{lspLanguageFeatures-BC8_gxKG.js → lspLanguageFeatures-CCQ8P5sY.js} +1 -1
- package/studio/web/assets/{notifications-BfKBpYcq.js → notifications-BbxTU6Aw.js} +1 -1
- package/studio/web/assets/{notifications-DFbArTfC.js → notifications-Cvb3P1lB.js} +1 -1
- package/studio/web/assets/{profile-Q4-T6c-S.js → profile-Yyb7gsvL.js} +1 -1
- package/studio/web/assets/{regions-CtkV0xje.js → regions-OgjGHlU5.js} +1 -1
- package/studio/web/assets/{register-1ZZuMsiA.js → register-6qwNEOY3.js} +2 -2
- package/studio/web/assets/{setComponentFile-ZWLcWv5X.js → setComponentFile-BilDMtgB.js} +1 -1
- package/studio/web/assets/{setup-DWprJyJy.js → setup-J6qJ7OIU.js} +2 -2
- package/studio/web/assets/{status--aNm8isn.js → status-0RWGcfyD.js} +1 -1
- package/studio/web/assets/{toggleHighContrast-Cq_lt3XD.js → toggleHighContrast-BIn-vErT.js} +1 -1
- package/studio/web/assets/{tsMode-pjgytARx.js → tsMode-DgUXku4d.js} +1 -1
- package/studio/web/assets/{typescript-Cdg0mqUh.js → typescript-C9orXcsM.js} +1 -1
- package/studio/web/assets/{useEntityRestURL-RZhaY8Rn.js → useEntityRestURL-BEoXXbUB.js} +1 -1
- package/studio/web/assets/{workers-BgoXIqQe.js → workers-JVzSDmgx.js} +1 -1
- package/studio/web/assets/{xml-BwSeDMiP.js → xml-Cq-S8S4X.js} +1 -1
- package/studio/web/assets/{yaml-DotCUG5l.js → yaml-sfoRdh1M.js} +1 -1
- package/studio/web/index.html +1 -1
- package/upgrade/directives/5-3-0.ts +132 -0
- package/upgrade/directives/directivesController.ts +2 -1
- package/utility/OperationFunctionCaller.ts +2 -1
- package/utility/common_utils.ts +30 -5
- package/utility/componentNames.ts +12 -0
- package/utility/environment/environmentManager.ts +3 -7
- package/utility/environment/systemInformation.ts +7 -0
- package/utility/errors/commonErrors.ts +4 -0
- package/utility/errors/hdbError.ts +57 -0
- package/utility/hdbTerms.ts +19 -0
- package/utility/logging/harper_logger.ts +278 -26
- package/utility/logging/logGenerationCoordinator.ts +196 -0
- package/utility/logging/logRotation.ts +367 -0
- package/utility/logging/logRotator.ts +213 -81
- package/utility/nodeIdentity.ts +45 -0
- package/utility/npmUtilities.ts +12 -8
- package/utility/operationPermissions.ts +18 -1
- package/utility/operation_authorization.ts +231 -42
- package/utility/watchPath.ts +63 -0
- package/utility/watcherFallback.ts +148 -0
- package/validation/configValidator.ts +215 -75
- package/validation/installValidator.ts +15 -0
- package/validation/validationWrapper.ts +18 -4
|
@@ -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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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":";;;;;
|
|
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;
|