harper 5.1.20 → 5.2.0-alpha.5
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/operations.ts +13 -16
- package/components/Application.ts +188 -7
- package/components/ApplicationScope.ts +3 -0
- package/components/Scope.ts +12 -0
- package/components/anthropic/index.ts +9 -2
- package/components/bedrock/index.ts +25 -2
- package/components/componentLoader.ts +56 -7
- package/components/componentSecrets.ts +451 -0
- package/components/deploymentRecorder.ts +7 -1
- package/components/mcp/adapters/fastify.ts +3 -0
- package/components/mcp/adapters/harperHttp.ts +3 -0
- package/components/mcp/audit.ts +21 -6
- package/components/mcp/customResourceRegistry.ts +17 -38
- package/components/mcp/listChanged.ts +37 -20
- package/components/mcp/quota.ts +145 -0
- package/components/mcp/rateLimit.ts +152 -14
- package/components/mcp/resources.ts +2 -4
- package/components/mcp/toolRegistry.ts +73 -4
- package/components/mcp/tools/application.ts +77 -8
- package/components/mcp/tools/operations.ts +106 -36
- package/components/mcp/tools/schemas/operationDescriptions.ts +4 -4
- package/components/mcp/tools/schemas/operations.ts +5 -0
- package/components/mcp/transport.ts +55 -4
- package/components/ollama/index.ts +6 -2
- package/components/openai/index.ts +9 -2
- package/components/operations.js +204 -10
- package/components/operationsValidation.js +173 -0
- package/components/secretOperations.ts +498 -0
- package/config/configUtils.ts +25 -1
- package/config-app.schema.json +81 -0
- package/config-root.schema.json +8 -1
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +4 -3
- package/dataLayer/readAuditLog.ts +14 -0
- package/dataLayer/schemaDescribe.ts +1 -0
- package/dist/agent/operations.d.ts +7 -4
- package/dist/agent/operations.js +13 -15
- package/dist/agent/operations.js.map +1 -1
- package/dist/components/Application.d.ts +25 -2
- package/dist/components/Application.js +166 -7
- package/dist/components/Application.js.map +1 -1
- package/dist/components/ApplicationScope.d.ts +2 -0
- package/dist/components/ApplicationScope.js +3 -0
- package/dist/components/ApplicationScope.js.map +1 -1
- package/dist/components/Scope.d.ts +8 -0
- package/dist/components/Scope.js +11 -0
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/anthropic/index.d.ts +4 -1
- package/dist/components/anthropic/index.js +4 -2
- package/dist/components/anthropic/index.js.map +1 -1
- package/dist/components/bedrock/index.d.ts +4 -1
- package/dist/components/bedrock/index.js +22 -2
- package/dist/components/bedrock/index.js.map +1 -1
- package/dist/components/componentLoader.d.ts +2 -0
- package/dist/components/componentLoader.js +52 -10
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/componentSecrets.d.ts +63 -0
- package/dist/components/componentSecrets.js +405 -0
- package/dist/components/componentSecrets.js.map +1 -0
- package/dist/components/deploymentRecorder.d.ts +3 -0
- package/dist/components/deploymentRecorder.js +4 -3
- package/dist/components/deploymentRecorder.js.map +1 -1
- package/dist/components/mcp/adapters/fastify.d.ts +2 -0
- package/dist/components/mcp/adapters/fastify.js +1 -0
- package/dist/components/mcp/adapters/fastify.js.map +1 -1
- package/dist/components/mcp/adapters/harperHttp.d.ts +2 -0
- package/dist/components/mcp/adapters/harperHttp.js +1 -0
- package/dist/components/mcp/adapters/harperHttp.js.map +1 -1
- package/dist/components/mcp/audit.d.ts +2 -2
- package/dist/components/mcp/audit.js +20 -5
- package/dist/components/mcp/audit.js.map +1 -1
- package/dist/components/mcp/customResourceRegistry.d.ts +5 -12
- package/dist/components/mcp/customResourceRegistry.js +15 -30
- package/dist/components/mcp/customResourceRegistry.js.map +1 -1
- package/dist/components/mcp/listChanged.d.ts +7 -2
- package/dist/components/mcp/listChanged.js +28 -0
- package/dist/components/mcp/listChanged.js.map +1 -1
- package/dist/components/mcp/quota.d.ts +31 -0
- package/dist/components/mcp/quota.js +155 -0
- package/dist/components/mcp/quota.js.map +1 -0
- package/dist/components/mcp/rateLimit.d.ts +19 -3
- package/dist/components/mcp/rateLimit.js +129 -13
- package/dist/components/mcp/rateLimit.js.map +1 -1
- package/dist/components/mcp/resources.js.map +1 -1
- package/dist/components/mcp/toolRegistry.d.ts +39 -1
- package/dist/components/mcp/toolRegistry.js +60 -5
- package/dist/components/mcp/toolRegistry.js.map +1 -1
- package/dist/components/mcp/tools/application.d.ts +8 -1
- package/dist/components/mcp/tools/application.js +65 -5
- package/dist/components/mcp/tools/application.js.map +1 -1
- package/dist/components/mcp/tools/operations.d.ts +15 -3
- package/dist/components/mcp/tools/operations.js +99 -38
- package/dist/components/mcp/tools/operations.js.map +1 -1
- package/dist/components/mcp/tools/schemas/operationDescriptions.js +4 -4
- package/dist/components/mcp/tools/schemas/operationDescriptions.js.map +1 -1
- package/dist/components/mcp/tools/schemas/operations.js +4 -0
- package/dist/components/mcp/tools/schemas/operations.js.map +1 -1
- package/dist/components/mcp/transport.d.ts +6 -0
- package/dist/components/mcp/transport.js +47 -3
- package/dist/components/mcp/transport.js.map +1 -1
- package/dist/components/ollama/index.d.ts +4 -1
- package/dist/components/ollama/index.js +4 -2
- package/dist/components/ollama/index.js.map +1 -1
- package/dist/components/openai/index.d.ts +4 -1
- package/dist/components/openai/index.js +4 -2
- package/dist/components/openai/index.js.map +1 -1
- package/dist/components/operations.d.ts +39 -0
- package/dist/components/operations.js +194 -2
- package/dist/components/operations.js.map +1 -1
- package/dist/components/operationsValidation.d.ts +38 -0
- package/dist/components/operationsValidation.js +155 -0
- package/dist/components/operationsValidation.js.map +1 -1
- package/dist/components/secretOperations.d.ts +113 -0
- package/dist/components/secretOperations.js +475 -0
- package/dist/components/secretOperations.js.map +1 -0
- package/dist/config/configUtils.d.ts +4 -1
- package/dist/config/configUtils.js +18 -1
- package/dist/config/configUtils.js.map +1 -1
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +4 -3
- package/dist/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js.map +1 -1
- package/dist/dataLayer/readAuditLog.js +11 -0
- package/dist/dataLayer/readAuditLog.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +2 -0
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/globals.d.ts +1 -1
- package/dist/globals.js +1 -0
- package/dist/globals.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/json/systemSchema.json +38 -0
- package/dist/resources/DatabaseTransaction.d.ts +31 -3
- package/dist/resources/DatabaseTransaction.js +190 -29
- package/dist/resources/DatabaseTransaction.js.map +1 -1
- package/dist/resources/LMDBTransaction.d.ts +1 -1
- package/dist/resources/LMDBTransaction.js +43 -5
- package/dist/resources/LMDBTransaction.js.map +1 -1
- package/dist/resources/PrimaryRocksDatabase.d.ts +51 -0
- package/dist/resources/PrimaryRocksDatabase.js +194 -0
- package/dist/resources/PrimaryRocksDatabase.js.map +1 -0
- package/dist/resources/RecordEncoder.d.ts +1 -0
- package/dist/resources/RecordEncoder.js +81 -75
- package/dist/resources/RecordEncoder.js.map +1 -1
- package/dist/resources/RequestTarget.d.ts +19 -0
- package/dist/resources/RequestTarget.js.map +1 -1
- package/dist/resources/Resource.d.ts +0 -1
- package/dist/resources/Resource.js +103 -16
- package/dist/resources/Resource.js.map +1 -1
- package/dist/resources/ResourceInterface.d.ts +6 -2
- package/dist/resources/ResourceInterface.js.map +1 -1
- package/dist/resources/Resources.js.map +1 -1
- package/dist/resources/Table.d.ts +6 -4
- package/dist/resources/Table.js +247 -24
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/read.js +25 -28
- package/dist/resources/analytics/read.js.map +1 -1
- package/dist/resources/blob.js +165 -22
- package/dist/resources/blob.js.map +1 -1
- package/dist/resources/crdt.d.ts +2 -0
- package/dist/resources/crdt.js +45 -36
- package/dist/resources/crdt.js.map +1 -1
- package/dist/resources/databases.d.ts +1 -0
- package/dist/resources/databases.js +134 -7
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/graphql.js +8 -0
- package/dist/resources/graphql.js.map +1 -1
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.d.ts +35 -5
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js +239 -14
- package/dist/resources/indexes/HierarchicalNavigableSmallWorld.js.map +1 -1
- package/dist/resources/jsResource.js +6 -0
- package/dist/resources/jsResource.js.map +1 -1
- package/dist/resources/loadEnv.js +30 -3
- package/dist/resources/loadEnv.js.map +1 -1
- package/dist/resources/login.js +2 -2
- package/dist/resources/login.js.map +1 -1
- package/dist/resources/models/Models.js +14 -3
- package/dist/resources/models/Models.js.map +1 -1
- package/dist/resources/models/embedHook.js +10 -2
- package/dist/resources/models/embedHook.js.map +1 -1
- package/dist/resources/models/openaiStream.d.ts +56 -0
- package/dist/resources/models/openaiStream.js +94 -0
- package/dist/resources/models/openaiStream.js.map +1 -0
- package/dist/resources/replayLogs.js +4 -3
- package/dist/resources/replayLogs.js.map +1 -1
- package/dist/resources/search.d.ts +1 -1
- package/dist/resources/search.js +104 -11
- package/dist/resources/search.js.map +1 -1
- package/dist/resources/secretDecryptor.d.ts +54 -0
- package/dist/resources/secretDecryptor.js +131 -0
- package/dist/resources/secretDecryptor.js.map +1 -0
- package/dist/resources/tracked.js +15 -5
- package/dist/resources/tracked.js.map +1 -1
- package/dist/security/auth.js +71 -8
- package/dist/security/auth.js.map +1 -1
- package/dist/security/jsLoader.js +11 -0
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/tokenAuthentication.d.ts +9 -1
- package/dist/security/tokenAuthentication.js +31 -1
- package/dist/security/tokenAuthentication.js.map +1 -1
- package/dist/server/DurableSubscriptionsSession.d.ts +1 -1
- package/dist/server/DurableSubscriptionsSession.js +8 -4
- package/dist/server/DurableSubscriptionsSession.js.map +1 -1
- package/dist/server/REST.js +28 -9
- package/dist/server/REST.js.map +1 -1
- package/dist/server/fastifyRoutes.js +11 -1
- package/dist/server/fastifyRoutes.js.map +1 -1
- package/dist/server/graphqlQuerying.js +4 -3
- package/dist/server/graphqlQuerying.js.map +1 -1
- package/dist/server/http.d.ts +40 -2
- package/dist/server/http.js +560 -77
- package/dist/server/http.js.map +1 -1
- package/dist/server/itc/serverHandlers.js +64 -0
- package/dist/server/itc/serverHandlers.js.map +1 -1
- package/dist/server/liveSubscriptionAuth.d.ts +12 -0
- package/dist/server/liveSubscriptionAuth.js +140 -0
- package/dist/server/liveSubscriptionAuth.js.map +1 -0
- package/dist/server/loadRootComponents.js +2 -1
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/middlewareChain.d.ts +44 -1
- package/dist/server/middlewareChain.js +86 -10
- package/dist/server/middlewareChain.js.map +1 -1
- package/dist/server/mqtt.js +2 -1
- package/dist/server/mqtt.js.map +1 -1
- package/dist/server/operationsServer.js +1 -1
- package/dist/server/operationsServer.js.map +1 -1
- package/dist/server/serverHelpers/Headers.d.ts +9 -0
- package/dist/server/serverHelpers/Headers.js +22 -0
- package/dist/server/serverHelpers/Headers.js.map +1 -1
- package/dist/server/serverHelpers/JSONStream.js +3 -3
- package/dist/server/serverHelpers/JSONStream.js.map +1 -1
- package/dist/server/serverHelpers/Request.d.ts +52 -1
- package/dist/server/serverHelpers/Request.js +122 -1
- package/dist/server/serverHelpers/Request.js.map +1 -1
- package/dist/server/serverHelpers/contentTypes.js +3 -8
- package/dist/server/serverHelpers/contentTypes.js.map +1 -1
- package/dist/server/serverHelpers/progressEmitter.d.ts +19 -0
- package/dist/server/serverHelpers/progressEmitter.js +52 -4
- package/dist/server/serverHelpers/progressEmitter.js.map +1 -1
- package/dist/server/serverHelpers/registeredOperations.d.ts +40 -0
- package/dist/server/serverHelpers/registeredOperations.js +286 -0
- package/dist/server/serverHelpers/registeredOperations.js.map +1 -0
- package/dist/server/serverHelpers/serverHandlers.js +11 -5
- package/dist/server/serverHelpers/serverHandlers.js.map +1 -1
- package/dist/server/serverHelpers/serverUtilities.d.ts +1 -0
- package/dist/server/serverHelpers/serverUtilities.js +67 -5
- package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/server/serverHelpers/uwsServer.d.ts +80 -0
- package/dist/server/serverHelpers/uwsServer.js +433 -0
- package/dist/server/serverHelpers/uwsServer.js.map +1 -0
- package/dist/server/static.d.ts +0 -15
- package/dist/server/static.js +161 -2
- package/dist/server/static.js.map +1 -1
- package/dist/server/status/index.d.ts +4 -1
- package/dist/server/status/index.js +64 -4
- package/dist/server/status/index.js.map +1 -1
- package/dist/server/threads/manageThreads.d.ts +10 -0
- package/dist/server/threads/manageThreads.js +107 -4
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.js +5 -1
- package/dist/server/threads/socketRouter.js.map +1 -1
- package/dist/server/threads/threadServer.js +92 -14
- package/dist/server/threads/threadServer.js.map +1 -1
- package/dist/upgrade/directives/5-2-0.d.ts +7 -0
- package/dist/upgrade/directives/5-2-0.js +108 -0
- package/dist/upgrade/directives/5-2-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/common_utils.js +5 -0
- package/dist/utility/common_utils.js.map +1 -1
- package/dist/utility/envFile.d.ts +41 -0
- package/dist/utility/envFile.js +221 -0
- package/dist/utility/envFile.js.map +1 -0
- package/dist/utility/globalSchema.d.ts +9 -0
- package/dist/utility/hdbTerms.d.ts +25 -0
- package/dist/utility/hdbTerms.js +31 -0
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/logging/harper_logger.d.ts +21 -0
- package/dist/utility/logging/harper_logger.js +160 -8
- package/dist/utility/logging/harper_logger.js.map +1 -1
- package/dist/utility/logging/logRotator.js +29 -17
- package/dist/utility/logging/logRotator.js.map +1 -1
- package/dist/utility/logging/readLog.d.ts +1 -1
- package/dist/utility/logging/readLog.js +305 -2
- package/dist/utility/logging/readLog.js.map +1 -1
- package/dist/utility/operationPermissions.d.ts +18 -0
- package/dist/utility/operationPermissions.js +35 -1
- package/dist/utility/operationPermissions.js.map +1 -1
- package/dist/utility/operation_authorization.d.ts +17 -0
- package/dist/utility/operation_authorization.js +38 -0
- package/dist/utility/operation_authorization.js.map +1 -1
- package/dist/utility/secretEnvelope.d.ts +30 -0
- package/dist/utility/secretEnvelope.js +94 -0
- package/dist/utility/secretEnvelope.js.map +1 -0
- package/dist/utility/signalling.d.ts +7 -0
- package/dist/utility/signalling.js +16 -0
- package/dist/utility/signalling.js.map +1 -1
- package/dist/validation/configValidator.js +70 -24
- package/dist/validation/configValidator.js.map +1 -1
- package/index.ts +4 -0
- package/json/systemSchema.json +38 -0
- package/npm-shrinkwrap.json +15066 -9347
- package/package.json +13 -8
- package/resources/DESIGN.md +15 -12
- package/resources/DatabaseTransaction.ts +206 -37
- package/resources/LMDBTransaction.ts +43 -9
- package/resources/PrimaryRocksDatabase.ts +201 -0
- package/resources/RecordEncoder.ts +81 -69
- package/resources/RequestTarget.ts +21 -0
- package/resources/Resource.ts +109 -25
- package/resources/ResourceInterface.ts +6 -2
- package/resources/Resources.ts +1 -3
- package/resources/Table.ts +238 -29
- package/resources/analytics/read.ts +25 -30
- package/resources/blob.ts +159 -23
- package/resources/crdt.ts +37 -31
- package/resources/databases.ts +143 -6
- package/resources/graphql.ts +8 -0
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +251 -17
- package/resources/jsResource.ts +6 -0
- package/resources/loadEnv.ts +34 -3
- package/resources/login.ts +2 -2
- package/resources/models/Models.ts +19 -3
- package/resources/models/embedHook.ts +13 -2
- package/resources/models/openaiStream.ts +133 -0
- package/resources/replayLogs.ts +4 -3
- package/resources/search.ts +113 -11
- package/resources/secretDecryptor.ts +159 -0
- package/resources/tracked.ts +24 -17
- package/security/auth.ts +70 -10
- package/security/jsLoader.ts +12 -0
- package/security/tokenAuthentication.ts +42 -1
- package/server/DESIGN.md +10 -0
- package/server/DurableSubscriptionsSession.ts +8 -4
- package/server/REST.ts +26 -9
- package/server/fastifyRoutes.ts +10 -1
- package/server/graphqlQuerying.ts +4 -3
- package/server/http.ts +563 -77
- package/server/itc/serverHandlers.js +70 -0
- package/server/liveSubscriptionAuth.ts +152 -0
- package/server/loadRootComponents.js +2 -1
- package/server/middlewareChain.ts +107 -17
- package/server/mqtt.ts +2 -1
- package/server/operationsServer.ts +2 -2
- package/server/serverHelpers/Headers.ts +24 -0
- package/server/serverHelpers/JSONStream.ts +3 -3
- package/server/serverHelpers/Request.ts +127 -0
- package/server/serverHelpers/contentTypes.ts +3 -8
- package/server/serverHelpers/progressEmitter.ts +55 -5
- package/server/serverHelpers/registeredOperations.ts +259 -0
- package/server/serverHelpers/serverHandlers.js +11 -5
- package/server/serverHelpers/serverUtilities.ts +88 -5
- package/server/serverHelpers/uwsServer.ts +488 -0
- package/server/static.ts +180 -2
- package/server/status/index.ts +72 -4
- package/server/threads/manageThreads.js +102 -4
- package/server/threads/socketRouter.ts +5 -1
- package/server/threads/threadServer.js +93 -10
- package/studio/web/assets/{Chat-SdD1EZca.js → Chat-Cv_2paZE.js} +2 -2
- package/studio/web/assets/{Chat-SdD1EZca.js.map → Chat-Cv_2paZE.js.map} +1 -1
- package/studio/web/assets/{FloatingChat-GMq6tHK9.js → FloatingChat-CPyPIcVR.js} +4 -4
- package/studio/web/assets/{FloatingChat-GMq6tHK9.js.map → FloatingChat-CPyPIcVR.js.map} +1 -1
- package/studio/web/assets/{applications-B5hhv7uA.js → applications-C0jT2vdZ.js} +2 -2
- package/studio/web/assets/{applications-B5hhv7uA.js.map → applications-C0jT2vdZ.js.map} +1 -1
- package/studio/web/assets/{index-VFcpNWgq.js → index-D_GKOkhn.js} +6 -6
- package/studio/web/assets/index-D_GKOkhn.js.map +1 -0
- package/studio/web/assets/{index.lazy-DgcJojIA.js → index.lazy-CAmCIA65.js} +4 -4
- package/studio/web/assets/{index.lazy-DgcJojIA.js.map → index.lazy-CAmCIA65.js.map} +1 -1
- package/studio/web/assets/{profile-BqN-8vzm.js → profile-CaF-4aZe.js} +2 -2
- package/studio/web/assets/{profile-BqN-8vzm.js.map → profile-CaF-4aZe.js.map} +1 -1
- package/studio/web/assets/{setComponentFile-CHFvFq9u.js → setComponentFile-DLW1DHCt.js} +2 -2
- package/studio/web/assets/{setComponentFile-CHFvFq9u.js.map → setComponentFile-DLW1DHCt.js.map} +1 -1
- package/studio/web/assets/{setup-CQ3vWJSr.js → setup-TGCErIhq.js} +2 -2
- package/studio/web/assets/{setup-CQ3vWJSr.js.map → setup-TGCErIhq.js.map} +1 -1
- package/studio/web/assets/{status-BsW5fjuh.js → status-DG0Maoao.js} +2 -2
- package/studio/web/assets/{status-BsW5fjuh.js.map → status-DG0Maoao.js.map} +1 -1
- package/studio/web/assets/{swagger-ui-react-DITdeB9-.js → swagger-ui-react-8T4SgQ1m.js} +2 -2
- package/studio/web/assets/{swagger-ui-react-DITdeB9-.js.map → swagger-ui-react-8T4SgQ1m.js.map} +1 -1
- package/studio/web/assets/{tsMode-Dyph-OUs.js → tsMode-DJ6Sl24Q.js} +2 -2
- package/studio/web/assets/{tsMode-Dyph-OUs.js.map → tsMode-DJ6Sl24Q.js.map} +1 -1
- package/studio/web/assets/{useEntityRestURL-D0QTUqex.js → useEntityRestURL-JO2mfWTQ.js} +2 -2
- package/studio/web/assets/{useEntityRestURL-D0QTUqex.js.map → useEntityRestURL-JO2mfWTQ.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/upgrade/directives/5-2-0.ts +82 -0
- package/upgrade/directives/directivesController.ts +2 -1
- package/utility/common_utils.ts +5 -0
- package/utility/envFile.ts +218 -0
- package/utility/hdbTerms.ts +31 -0
- package/utility/logging/harper_logger.ts +156 -8
- package/utility/logging/logRotator.ts +24 -14
- package/utility/logging/readLog.ts +323 -2
- package/utility/operationPermissions.ts +35 -1
- package/utility/operation_authorization.ts +74 -1
- package/utility/secretEnvelope.ts +113 -0
- package/utility/signalling.ts +15 -0
- package/validation/configValidator.ts +78 -25
- package/studio/web/assets/index-VFcpNWgq.js.map +0 -1
|
@@ -45,6 +45,7 @@ const events_1 = require("events");
|
|
|
45
45
|
const configUtils_ts_1 = require("../../config/configUtils.js");
|
|
46
46
|
const hdbError_ts_1 = require("../errors/hdbError.js");
|
|
47
47
|
const Server_ts_1 = require("../../server/Server.js");
|
|
48
|
+
const string_decoder_1 = require("string_decoder");
|
|
48
49
|
const DEFAULT_READ_LOG_LIMIT = 1000;
|
|
49
50
|
const ESTIMATED_AVERAGE_ENTRY_SIZE = 200;
|
|
50
51
|
exports.default = readLog;
|
|
@@ -59,8 +60,10 @@ async function readLog(request) {
|
|
|
59
60
|
if (validation) {
|
|
60
61
|
throw (0, hdbError_ts_1.handleHDBError)(validation, validation.message, hdbError_ts_1.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST, undefined, undefined, true);
|
|
61
62
|
}
|
|
62
|
-
//
|
|
63
|
-
|
|
63
|
+
// Start pulling logs from the other nodes now so it can be done in parallel. A live SSE
|
|
64
|
+
// tail (below) is local-only and never fans out, so skip replication on that path — the
|
|
65
|
+
// buffered read still aggregates the cluster for point-in-time queries.
|
|
66
|
+
let whenReplicatedResponse = isStreamingRequest(request) ? undefined : Server_ts_1.server.replication.replicateOperation(request);
|
|
64
67
|
const logPath = (0, configUtils_ts_1.getConfigPath)(hdbTerms.HDB_SETTINGS_NAMES.LOG_PATH_KEY);
|
|
65
68
|
const rawLogName = request.log_name === undefined ? hdbTerms.LOG_NAMES.HDB : request.log_name;
|
|
66
69
|
const logName = path.extname(rawLogName) === '.log' ? rawLogName : `${rawLogName}.log`;
|
|
@@ -80,6 +83,24 @@ async function readLog(request) {
|
|
|
80
83
|
const start = request.start === undefined ? 0 : request.start;
|
|
81
84
|
const max = start + limit;
|
|
82
85
|
const filter = request.filter;
|
|
86
|
+
// SSE mode: the server attached a ProgressEmitter as `request.progress` (see
|
|
87
|
+
// serverHandlers.js) because the client sent `Accept: text/event-stream`. Instead of a
|
|
88
|
+
// one-shot array, stream the recent backlog and then tail new lines live until the client
|
|
89
|
+
// disconnects. Scoped to this node's log file; the buffered path above is what aggregates
|
|
90
|
+
// the cluster for point-in-time reads.
|
|
91
|
+
if (isStreamingRequest(request)) {
|
|
92
|
+
return streamLogTail(request.progress, {
|
|
93
|
+
readLogPath,
|
|
94
|
+
level,
|
|
95
|
+
levelDefined,
|
|
96
|
+
from,
|
|
97
|
+
fromDefined,
|
|
98
|
+
to,
|
|
99
|
+
toDefined,
|
|
100
|
+
limit,
|
|
101
|
+
filter,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
83
104
|
let fileStart = 0;
|
|
84
105
|
if (order === 'desc' && !from && !to) {
|
|
85
106
|
fileStart = Math.max(fs.statSync(readLogPath).size - (max + 5) * ESTIMATED_AVERAGE_ENTRY_SIZE, 0);
|
|
@@ -369,4 +390,286 @@ function insertAscending(value, result) {
|
|
|
369
390
|
}
|
|
370
391
|
result.splice(low, 0, value);
|
|
371
392
|
}
|
|
393
|
+
// The marker that begins every log line — `TIMESTAMP [thread] [level]...: ` — matching the
|
|
394
|
+
// buffered reader's regex so the two paths parse identically.
|
|
395
|
+
const LOG_ENTRY_MARKER = /(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d.]+Z) \[(.+?)]: /g;
|
|
396
|
+
// How often a live tail polls the log file for appended bytes. fs.watchFile is stat-poll
|
|
397
|
+
// based, which is far more robust across platforms and log rotation than fs.watch's rename
|
|
398
|
+
// events; sub-second latency is plenty for a human watching logs.
|
|
399
|
+
const TAIL_POLL_INTERVAL_MS = 250;
|
|
400
|
+
// Cap the live-tail backlog regardless of a caller-supplied `limit`, so an unbounded `limit`
|
|
401
|
+
// can neither seek-read a huge slice into memory nor drive an O(n·limit) eviction on connect.
|
|
402
|
+
// Deeper history is the buffered read_log's job; the tail is about what happens next.
|
|
403
|
+
const MAX_SSE_BACKLOG_ENTRIES = 1000;
|
|
404
|
+
// A transient delta-read failure is retried this many times (with this delay) before the tail
|
|
405
|
+
// gives up and emits a terminal error so the client can fall back to polling.
|
|
406
|
+
const TAIL_READ_MAX_RETRIES = 3;
|
|
407
|
+
const TAIL_READ_RETRY_MS = 250;
|
|
408
|
+
function isStreamingRequest(request) {
|
|
409
|
+
return !!request.progress && typeof request.progress.emit === 'function';
|
|
410
|
+
}
|
|
411
|
+
function makeLogEntry(timestamp, tagsString, message) {
|
|
412
|
+
const tags = tagsString.split('] [');
|
|
413
|
+
const thread = tags[0];
|
|
414
|
+
const level = tags[1];
|
|
415
|
+
tags.splice(0, 2);
|
|
416
|
+
return { timestamp, thread, level, tags, message };
|
|
417
|
+
}
|
|
418
|
+
function matchesLogFilters(entry, params) {
|
|
419
|
+
const { level, levelDefined, from, fromDefined, to, toDefined, filter } = params;
|
|
420
|
+
if (filter !== undefined) {
|
|
421
|
+
const hit = ['timestamp', 'thread', 'level', 'tags', 'message'].some((attr) => {
|
|
422
|
+
const value = entry[attr];
|
|
423
|
+
if (Array.isArray(value))
|
|
424
|
+
return value.some((v) => v.includes(filter));
|
|
425
|
+
return typeof value === 'string' && value.includes(filter);
|
|
426
|
+
});
|
|
427
|
+
if (!hit)
|
|
428
|
+
return false;
|
|
429
|
+
}
|
|
430
|
+
if (levelDefined && entry.level !== level)
|
|
431
|
+
return false;
|
|
432
|
+
if (fromDefined || toDefined) {
|
|
433
|
+
const when = new Date(entry.timestamp);
|
|
434
|
+
if (fromDefined && when < from)
|
|
435
|
+
return false;
|
|
436
|
+
if (toDefined && when > to)
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
// Stateful incremental parser: fed appended chunks over time, it emits an entry only once the
|
|
442
|
+
// next marker delimits its (possibly multi-line) message. It never force-emits a pending
|
|
443
|
+
// entry — the same instance spans the backlog read and the live tail (see streamLogTail), so a
|
|
444
|
+
// line torn across the snapshot boundary stays pending and is completed by the tail's next
|
|
445
|
+
// read rather than emitted truncated with its continuation dropped. `reset()` clears state on
|
|
446
|
+
// log rotation.
|
|
447
|
+
function createIncrementalLogParser(onEntry) {
|
|
448
|
+
let remaining = '';
|
|
449
|
+
let pending;
|
|
450
|
+
// One RegExp per parser instance. Each push runs `exec` to completion (until null), which
|
|
451
|
+
// resets lastIndex to 0; we also reset it explicitly at the top of push for robustness.
|
|
452
|
+
const reader = new RegExp(LOG_ENTRY_MARKER);
|
|
453
|
+
return {
|
|
454
|
+
push(text) {
|
|
455
|
+
const data = remaining + text;
|
|
456
|
+
reader.lastIndex = 0;
|
|
457
|
+
let lastPosition = 0;
|
|
458
|
+
let parsed;
|
|
459
|
+
while ((parsed = reader.exec(data))) {
|
|
460
|
+
if (pending) {
|
|
461
|
+
onEntry(makeLogEntry(pending.timestamp, pending.tagsString, data.slice(lastPosition, parsed.index)));
|
|
462
|
+
}
|
|
463
|
+
const [intro, timestamp, tagsString] = parsed;
|
|
464
|
+
pending = { timestamp, tagsString };
|
|
465
|
+
lastPosition = parsed.index + intro.length;
|
|
466
|
+
}
|
|
467
|
+
remaining = data.slice(lastPosition);
|
|
468
|
+
},
|
|
469
|
+
reset() {
|
|
470
|
+
pending = undefined;
|
|
471
|
+
remaining = '';
|
|
472
|
+
},
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Stream the local log over SSE: replay the recent (bounded) backlog, then tail newly-appended
|
|
477
|
+
* lines until the client disconnects (the emitter's `signal` aborts) — or, if reads fail past
|
|
478
|
+
* retry, emit a terminal `error` so the client falls back to polling instead of watching a
|
|
479
|
+
* silently-stalled "live" stream. Resolves when the tail ends so the SSE wrapper can close.
|
|
480
|
+
*
|
|
481
|
+
* A single parser and decoder span both the backlog read and the live tail with no flush at
|
|
482
|
+
* the seam, so a line (or multi-byte character) torn across the snapshot boundary stays pending
|
|
483
|
+
* and is completed by the tail's next read — never emitted truncated with its continuation
|
|
484
|
+
* dropped. (A consequence: the newest backlog line is delivered once the following line
|
|
485
|
+
* delimits it, matching how the tail delimits every entry.)
|
|
486
|
+
*/
|
|
487
|
+
function streamLogTail(progress, params) {
|
|
488
|
+
const { readLogPath, limit } = params;
|
|
489
|
+
const signal = progress.signal;
|
|
490
|
+
const emit = (entry) => progress.emit('log', entry);
|
|
491
|
+
// The tail never shows more backlog than this, whatever `limit` asks for (see the constant).
|
|
492
|
+
const backlogLimit = Math.min(limit, MAX_SSE_BACKLOG_ENTRIES);
|
|
493
|
+
return new Promise((resolve) => {
|
|
494
|
+
if (signal?.aborted)
|
|
495
|
+
return resolve();
|
|
496
|
+
let offset = 0;
|
|
497
|
+
let pumping = false;
|
|
498
|
+
let pumpQueued = false;
|
|
499
|
+
let watching = false;
|
|
500
|
+
let finished = false;
|
|
501
|
+
let readFailures = 0;
|
|
502
|
+
// While replaying the backlog, matching entries are collected here (capped) rather than
|
|
503
|
+
// emitted; once the boundary is passed `backlogPhase` flips and entries emit live.
|
|
504
|
+
let backlogPhase = true;
|
|
505
|
+
const backlogEntries = [];
|
|
506
|
+
// One decoder + one parser for the whole session (backlog + tail): a multi-byte char (or a
|
|
507
|
+
// line) split across the boundary is held/pending and finished by the next read, not
|
|
508
|
+
// flushed as U+FFFD or truncated. Reset together only on rotation.
|
|
509
|
+
let decoder = new string_decoder_1.StringDecoder('utf8');
|
|
510
|
+
const parser = createIncrementalLogParser((entry) => {
|
|
511
|
+
if (!matchesLogFilters(entry, params))
|
|
512
|
+
return;
|
|
513
|
+
if (backlogPhase) {
|
|
514
|
+
backlogEntries.push(entry);
|
|
515
|
+
if (backlogEntries.length > backlogLimit)
|
|
516
|
+
backlogEntries.shift();
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
emit(entry);
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
function finish() {
|
|
523
|
+
if (finished)
|
|
524
|
+
return;
|
|
525
|
+
finished = true;
|
|
526
|
+
if (watching)
|
|
527
|
+
fs.unwatchFile(readLogPath, onChange);
|
|
528
|
+
resolve();
|
|
529
|
+
}
|
|
530
|
+
// Wait `ms`, or resolve early on disconnect so a retry delay never outlives the connection.
|
|
531
|
+
const abortableDelay = (ms) => new Promise((res) => {
|
|
532
|
+
if (signal?.aborted)
|
|
533
|
+
return res();
|
|
534
|
+
const timer = setTimeout(() => {
|
|
535
|
+
signal?.removeEventListener('abort', onAbort);
|
|
536
|
+
res();
|
|
537
|
+
}, ms);
|
|
538
|
+
timer.unref?.();
|
|
539
|
+
const onAbort = () => {
|
|
540
|
+
clearTimeout(timer);
|
|
541
|
+
res();
|
|
542
|
+
};
|
|
543
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
544
|
+
});
|
|
545
|
+
// Stream [offset, end] inclusive through the session decoder + shared parser, decoding and
|
|
546
|
+
// pushing each fs chunk as it arrives (never materializing the whole delta) and advancing
|
|
547
|
+
// `offset` per chunk, so peak memory is one chunk and a mid-range error simply resumes from
|
|
548
|
+
// where it stopped. Yields to backpressure between chunks. Returns false if the read errored.
|
|
549
|
+
async function drainTo(end) {
|
|
550
|
+
const rs = fs.createReadStream(readLogPath, { start: offset, end });
|
|
551
|
+
try {
|
|
552
|
+
for await (const chunk of rs) {
|
|
553
|
+
if (signal?.aborted) {
|
|
554
|
+
rs.destroy();
|
|
555
|
+
return true;
|
|
556
|
+
}
|
|
557
|
+
parser.push(decoder.write(chunk));
|
|
558
|
+
offset += chunk.length;
|
|
559
|
+
if (progress.paused)
|
|
560
|
+
await progress.whenWritable();
|
|
561
|
+
}
|
|
562
|
+
return true;
|
|
563
|
+
}
|
|
564
|
+
catch (err) {
|
|
565
|
+
harper_logger_ts_1.default.warn(`read_log SSE tail: failed reading ${readLogPath} near offset ${offset}: ${err?.message ?? err}`);
|
|
566
|
+
return false;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
// Single-flight pump: drain all appended bytes into the parser. A change arriving while a
|
|
570
|
+
// pump runs sets `pumpQueued` so the loop runs once more, rather than being missed in the
|
|
571
|
+
// window between "caught up" and clearing `pumping`.
|
|
572
|
+
async function pump() {
|
|
573
|
+
if (pumping) {
|
|
574
|
+
pumpQueued = true;
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
pumping = true;
|
|
578
|
+
try {
|
|
579
|
+
do {
|
|
580
|
+
pumpQueued = false;
|
|
581
|
+
while (!signal?.aborted) {
|
|
582
|
+
let size;
|
|
583
|
+
try {
|
|
584
|
+
size = (await fs.promises.stat(readLogPath)).size;
|
|
585
|
+
}
|
|
586
|
+
catch {
|
|
587
|
+
break;
|
|
588
|
+
}
|
|
589
|
+
if (size < offset) {
|
|
590
|
+
// Truncation or rotation: restart from the new file and reset decode/parse state.
|
|
591
|
+
offset = 0;
|
|
592
|
+
decoder = new string_decoder_1.StringDecoder('utf8');
|
|
593
|
+
parser.reset();
|
|
594
|
+
}
|
|
595
|
+
if (size <= offset)
|
|
596
|
+
break;
|
|
597
|
+
if (progress.paused) {
|
|
598
|
+
await progress.whenWritable();
|
|
599
|
+
continue;
|
|
600
|
+
}
|
|
601
|
+
const ok = await drainTo(size - 1);
|
|
602
|
+
if (signal?.aborted)
|
|
603
|
+
break;
|
|
604
|
+
if (!ok) {
|
|
605
|
+
if (++readFailures > TAIL_READ_MAX_RETRIES) {
|
|
606
|
+
// Don't leave the client staring at a silently-stalled "live" stream: a
|
|
607
|
+
// terminal error is its cue to fall back to polling.
|
|
608
|
+
progress.emit('error', {
|
|
609
|
+
message: `read_log live tail could not read ${readLogPath} after ${TAIL_READ_MAX_RETRIES} retries`,
|
|
610
|
+
code: 'READ_LOG_TAIL_READ_ERROR',
|
|
611
|
+
});
|
|
612
|
+
finish();
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
await abortableDelay(TAIL_READ_RETRY_MS);
|
|
616
|
+
continue; // resume from the advanced offset
|
|
617
|
+
}
|
|
618
|
+
readFailures = 0;
|
|
619
|
+
}
|
|
620
|
+
} while (pumpQueued && !signal?.aborted);
|
|
621
|
+
}
|
|
622
|
+
finally {
|
|
623
|
+
pumping = false;
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
function onChange() {
|
|
627
|
+
void pump();
|
|
628
|
+
}
|
|
629
|
+
const startTail = () => {
|
|
630
|
+
// `offset` is already the backlog boundary, so the tail picks up strictly from there.
|
|
631
|
+
// Without a disconnect signal we can't safely tail forever; degrade to backlog-only so
|
|
632
|
+
// the client polls instead.
|
|
633
|
+
if (!signal || signal.aborted)
|
|
634
|
+
return finish();
|
|
635
|
+
fs.watchFile(readLogPath, { interval: TAIL_POLL_INTERVAL_MS }, onChange);
|
|
636
|
+
watching = true;
|
|
637
|
+
signal.addEventListener('abort', finish, { once: true });
|
|
638
|
+
// Catch anything appended between the backlog snapshot and arming the watcher.
|
|
639
|
+
void pump();
|
|
640
|
+
};
|
|
641
|
+
// Replay the backlog through the shared parser/decoder, then tail from the same boundary.
|
|
642
|
+
(async () => {
|
|
643
|
+
let startSize = 0;
|
|
644
|
+
try {
|
|
645
|
+
startSize = fs.statSync(readLogPath).size;
|
|
646
|
+
}
|
|
647
|
+
catch {
|
|
648
|
+
startSize = 0;
|
|
649
|
+
}
|
|
650
|
+
if (startSize > 0) {
|
|
651
|
+
// Bound the backlog read to roughly the last `backlogLimit` entries so a large log
|
|
652
|
+
// file can't be seek-read into memory all at once (mirrors the buffered path). A
|
|
653
|
+
// partial first line the seek lands in is dropped by the parser, as in that path.
|
|
654
|
+
offset = Math.max(startSize - (backlogLimit + 5) * ESTIMATED_AVERAGE_ENTRY_SIZE, 0);
|
|
655
|
+
await drainTo(startSize - 1); // collects into backlogEntries; read errors are logged, best-effort
|
|
656
|
+
}
|
|
657
|
+
// Hand off to the live tail: flip to emit mode and deliver the collected backlog. The
|
|
658
|
+
// parser's pending entry (the newest, possibly boundary-torn line) is deliberately left
|
|
659
|
+
// pending — the tail finishes it — so nothing is emitted truncated.
|
|
660
|
+
backlogPhase = false;
|
|
661
|
+
for (const entry of backlogEntries) {
|
|
662
|
+
if (signal?.aborted)
|
|
663
|
+
break;
|
|
664
|
+
emit(entry);
|
|
665
|
+
if (progress.paused)
|
|
666
|
+
await progress.whenWritable();
|
|
667
|
+
}
|
|
668
|
+
startTail();
|
|
669
|
+
})().catch((err) => {
|
|
670
|
+
harper_logger_ts_1.default.warn(`read_log SSE tail: backlog replay failed for ${readLogPath}: ${err?.message ?? err}`);
|
|
671
|
+
startTail();
|
|
672
|
+
});
|
|
673
|
+
});
|
|
674
|
+
}
|
|
372
675
|
//# sourceMappingURL=readLog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readLog.js","sourceRoot":"","sources":["../../../utility/logging/readLog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"readLog.js","sourceRoot":"","sources":["../../../utility/logging/readLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,25 @@ export declare const OPERATION_PERMISSION_GROUPS: {
|
|
|
23
23
|
* or admin reads (get_configuration, logs). Add those explicitly when needed.
|
|
24
24
|
*/
|
|
25
25
|
readonly standard_user: readonly ["search", "search_by_conditions", "search_by_hash", "search_by_id", "search_by_value", "sql", "describe_all", "describe_schema", "describe_database", "describe_table", "user_info", "get_job", "get_analytics", "list_metrics", "describe_metric", "insert", "update", "upsert", "delete", "csv_data_load", "csv_file_load", "csv_url_load", "import_from_s3"];
|
|
26
|
+
/**
|
|
27
|
+
* Drive the built-in agent (#626): send prompts, read/list sessions, and approve/cancel
|
|
28
|
+
* runs. Grants a scoped, non-super_user "delegation" role access to the agent without full
|
|
29
|
+
* super_user (all agent ops are super_user by default). Deliberately EXCLUDES set_agent_config
|
|
30
|
+
* — changing the agent's model/approval policy stays an operator (super_user) action.
|
|
31
|
+
*/
|
|
32
|
+
readonly agent: readonly ["agent_prompt", "get_agent_session", "list_agent_sessions", "cancel_agent_run", "approve_agent_action"];
|
|
26
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Mark a dynamically-registered operation name as a valid target for role `operations` grants.
|
|
36
|
+
* Called by registerOperationPermission so a component op declaring a permission can actually be
|
|
37
|
+
* granted (not just enforced). Enum-backed op names are already valid; this covers custom names.
|
|
38
|
+
*/
|
|
39
|
+
export declare function registerGrantableOperation(name: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Remove a dynamically-registered grantable operation name. Mirrors registerGrantableOperation;
|
|
42
|
+
* primarily for tests that register throwaway ops and must not leak them into the global set.
|
|
43
|
+
*/
|
|
44
|
+
export declare function unregisterGrantableOperation(name: string): void;
|
|
27
45
|
/**
|
|
28
46
|
* Validates that every entry in an operations array is a known operation name or group name.
|
|
29
47
|
* Returns the first invalid entry, or null if all entries are valid.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OPERATION_PERMISSION_GROUPS = void 0;
|
|
4
|
+
exports.registerGrantableOperation = registerGrantableOperation;
|
|
5
|
+
exports.unregisterGrantableOperation = unregisterGrantableOperation;
|
|
4
6
|
exports.validateOperations = validateOperations;
|
|
5
7
|
exports.expandOperationsPerms = expandOperationsPerms;
|
|
6
8
|
const hdbTerms_ts_1 = require("./hdbTerms.js");
|
|
@@ -80,16 +82,48 @@ exports.OPERATION_PERMISSION_GROUPS = {
|
|
|
80
82
|
hdbTerms_ts_1.OPERATIONS_ENUM.CSV_URL_LOAD,
|
|
81
83
|
hdbTerms_ts_1.OPERATIONS_ENUM.IMPORT_FROM_S3,
|
|
82
84
|
],
|
|
85
|
+
/**
|
|
86
|
+
* Drive the built-in agent (#626): send prompts, read/list sessions, and approve/cancel
|
|
87
|
+
* runs. Grants a scoped, non-super_user "delegation" role access to the agent without full
|
|
88
|
+
* super_user (all agent ops are super_user by default). Deliberately EXCLUDES set_agent_config
|
|
89
|
+
* — changing the agent's model/approval policy stays an operator (super_user) action.
|
|
90
|
+
*/
|
|
91
|
+
agent: [
|
|
92
|
+
hdbTerms_ts_1.OPERATIONS_ENUM.AGENT_PROMPT,
|
|
93
|
+
hdbTerms_ts_1.OPERATIONS_ENUM.GET_AGENT_SESSION,
|
|
94
|
+
hdbTerms_ts_1.OPERATIONS_ENUM.LIST_AGENT_SESSIONS,
|
|
95
|
+
hdbTerms_ts_1.OPERATIONS_ENUM.CANCEL_AGENT_RUN,
|
|
96
|
+
hdbTerms_ts_1.OPERATIONS_ENUM.APPROVE_AGENT_ACTION,
|
|
97
|
+
],
|
|
83
98
|
};
|
|
84
99
|
const validOps = new Set(Object.values(hdbTerms_ts_1.OPERATIONS_ENUM));
|
|
85
100
|
const validGroups = new Set(Object.keys(exports.OPERATION_PERMISSION_GROUPS));
|
|
101
|
+
// Operations registered dynamically at runtime (server.registerOperation with a declared
|
|
102
|
+
// permission) whose names may fall outside OPERATIONS_ENUM. Tracked so they're grantable in a
|
|
103
|
+
// role's `operations` allowlist (add_role/alter_role/impersonation validate against this set too).
|
|
104
|
+
const dynamicallyRegisteredOps = new Set();
|
|
105
|
+
/**
|
|
106
|
+
* Mark a dynamically-registered operation name as a valid target for role `operations` grants.
|
|
107
|
+
* Called by registerOperationPermission so a component op declaring a permission can actually be
|
|
108
|
+
* granted (not just enforced). Enum-backed op names are already valid; this covers custom names.
|
|
109
|
+
*/
|
|
110
|
+
function registerGrantableOperation(name) {
|
|
111
|
+
dynamicallyRegisteredOps.add(name);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Remove a dynamically-registered grantable operation name. Mirrors registerGrantableOperation;
|
|
115
|
+
* primarily for tests that register throwaway ops and must not leak them into the global set.
|
|
116
|
+
*/
|
|
117
|
+
function unregisterGrantableOperation(name) {
|
|
118
|
+
dynamicallyRegisteredOps.delete(name);
|
|
119
|
+
}
|
|
86
120
|
/**
|
|
87
121
|
* Validates that every entry in an operations array is a known operation name or group name.
|
|
88
122
|
* Returns the first invalid entry, or null if all entries are valid.
|
|
89
123
|
*/
|
|
90
124
|
function validateOperations(operations) {
|
|
91
125
|
for (const op of operations) {
|
|
92
|
-
if (typeof op !== 'string' || (!validOps.has(op) && !validGroups.has(op))) {
|
|
126
|
+
if (typeof op !== 'string' || (!validOps.has(op) && !validGroups.has(op) && !dynamicallyRegisteredOps.has(op))) {
|
|
93
127
|
return String(op);
|
|
94
128
|
}
|
|
95
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operationPermissions.js","sourceRoot":"","sources":["../../utility/operationPermissions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"operationPermissions.js","sourceRoot":"","sources":["../../utility/operationPermissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register an authorization entry for a dynamically-registered operation (via
|
|
3
|
+
* server.registerOperation), so it flows through verifyPerms and the role `operations`
|
|
4
|
+
* allowlist exactly like a built-in op — instead of hand-rolling an inline super_user check.
|
|
5
|
+
* Keyed by the snake_case API operation name (which registerOperation also forces onto the
|
|
6
|
+
* handler's `.name`, the key verifyPerms looks up). SU-only by default.
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerOperationPermission(apiName: string, { requiresSu, perms }?: {
|
|
9
|
+
requiresSu?: boolean;
|
|
10
|
+
perms?: string[];
|
|
11
|
+
}): void;
|
|
12
|
+
/**
|
|
13
|
+
* Remove an authorization entry registered via registerOperationPermission (both the verifyPerms
|
|
14
|
+
* entry and the grantable-op mark). Mirrors registerOperationPermission; primarily for tests that
|
|
15
|
+
* register throwaway ops and must not leak them into the process-global registries.
|
|
16
|
+
*/
|
|
17
|
+
export declare function unregisterOperationPermission(apiName: string): void;
|
|
1
18
|
/**
|
|
2
19
|
* Verifies permissions and restrictions for a SQL operation based on the user's assigned role.
|
|
3
20
|
* @param ast - The SQL statement in Syntax Tree form.
|
|
@@ -36,6 +36,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerOperationPermission = registerOperationPermission;
|
|
40
|
+
exports.unregisterOperationPermission = unregisterOperationPermission;
|
|
39
41
|
exports.verifyPermsAST = verifyPermsAST;
|
|
40
42
|
exports.verifyPerms = verifyPerms;
|
|
41
43
|
exports.hasPermissions = hasPermissions;
|
|
@@ -83,6 +85,7 @@ const PermissionResponseObject_ts_1 = __importDefault(require("../security/data_
|
|
|
83
85
|
const hdbError_ts_1 = require("../utility/errors/hdbError.js");
|
|
84
86
|
const regDeprecated = __importStar(require("../resources/registrationDeprecated.js"));
|
|
85
87
|
const deploymentOperations = __importStar(require("../components/deploymentOperations.js"));
|
|
88
|
+
const secretOperations = __importStar(require("../components/secretOperations.js"));
|
|
86
89
|
const requiredPermissions = new Map();
|
|
87
90
|
const DELETE_PERM = 'delete';
|
|
88
91
|
const INSERT_PERM = 'insert';
|
|
@@ -142,6 +145,28 @@ class permission {
|
|
|
142
145
|
this.api_name = apiName;
|
|
143
146
|
}
|
|
144
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Register an authorization entry for a dynamically-registered operation (via
|
|
150
|
+
* server.registerOperation), so it flows through verifyPerms and the role `operations`
|
|
151
|
+
* allowlist exactly like a built-in op — instead of hand-rolling an inline super_user check.
|
|
152
|
+
* Keyed by the snake_case API operation name (which registerOperation also forces onto the
|
|
153
|
+
* handler's `.name`, the key verifyPerms looks up). SU-only by default.
|
|
154
|
+
*/
|
|
155
|
+
function registerOperationPermission(apiName, { requiresSu = false, perms = [] } = {}) {
|
|
156
|
+
requiredPermissions.set(apiName, new permission(requiresSu, perms, apiName));
|
|
157
|
+
// Also make the op grantable in a role's `operations` allowlist (validateOperations), so a
|
|
158
|
+
// declared permission can be both enforced AND granted — not just enforced.
|
|
159
|
+
(0, operationPermissions_ts_1.registerGrantableOperation)(apiName);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Remove an authorization entry registered via registerOperationPermission (both the verifyPerms
|
|
163
|
+
* entry and the grantable-op mark). Mirrors registerOperationPermission; primarily for tests that
|
|
164
|
+
* register throwaway ops and must not leak them into the process-global registries.
|
|
165
|
+
*/
|
|
166
|
+
function unregisterOperationPermission(apiName) {
|
|
167
|
+
requiredPermissions.delete(apiName);
|
|
168
|
+
(0, operationPermissions_ts_1.unregisterGrantableOperation)(apiName);
|
|
169
|
+
}
|
|
145
170
|
requiredPermissions.set(write.insert.name, new permission(false, [INSERT_PERM], terms.OPERATIONS_ENUM.INSERT));
|
|
146
171
|
requiredPermissions.set(write.update.name, new permission(false, [UPDATE_PERM], terms.OPERATIONS_ENUM.UPDATE));
|
|
147
172
|
requiredPermissions.set(write.upsert.name, new permission(false, [INSERT_PERM, UPDATE_PERM], terms.OPERATIONS_ENUM.UPSERT));
|
|
@@ -197,6 +222,9 @@ requiredPermissions.set(functionsOperations.getCustomFunctions.name, new permiss
|
|
|
197
222
|
requiredPermissions.set(functionsOperations.getComponents.name, new permission(true, [], terms.OPERATIONS_ENUM.GET_COMPONENTS));
|
|
198
223
|
requiredPermissions.set(functionsOperations.getComponentFile.name, new permission(true, [], terms.OPERATIONS_ENUM.GET_COMPONENT_FILE));
|
|
199
224
|
requiredPermissions.set(functionsOperations.setComponentFile.name, new permission(true, []));
|
|
225
|
+
requiredPermissions.set(functionsOperations.getEnvKeys.name, new permission(true, [], terms.OPERATIONS_ENUM.GET_ENV_KEYS));
|
|
226
|
+
requiredPermissions.set(functionsOperations.setEnvValue.name, new permission(true, [], terms.OPERATIONS_ENUM.SET_ENV_VALUE));
|
|
227
|
+
requiredPermissions.set(functionsOperations.deleteEnvValue.name, new permission(true, [], terms.OPERATIONS_ENUM.DELETE_ENV_VALUE));
|
|
200
228
|
requiredPermissions.set(functionsOperations.dropComponent.name, new permission(true, []));
|
|
201
229
|
requiredPermissions.set(functionsOperations.getCustomFunction.name, new permission(true, [], terms.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION));
|
|
202
230
|
requiredPermissions.set(functionsOperations.setCustomFunction.name, new permission(true, []));
|
|
@@ -207,6 +235,14 @@ requiredPermissions.set(functionsOperations.packageComponent.name, new permissio
|
|
|
207
235
|
requiredPermissions.set(functionsOperations.deployComponent.name, new permission(true, []));
|
|
208
236
|
requiredPermissions.set(deploymentOperations.handleListDeployments.name, new permission(true, [], terms.OPERATIONS_ENUM.LIST_DEPLOYMENTS));
|
|
209
237
|
requiredPermissions.set(deploymentOperations.handleGetDeployment.name, new permission(true, [], terms.OPERATIONS_ENUM.GET_DEPLOYMENT));
|
|
238
|
+
// Secrets-store operations. All SU-only; the handlers ALSO enforce super_user directly, so these
|
|
239
|
+
// cannot be delegated through a role's `operations` allowlist (gate-2 bypass below).
|
|
240
|
+
requiredPermissions.set(secretOperations.setSecret.name, new permission(true, [], terms.OPERATIONS_ENUM.SET_SECRET));
|
|
241
|
+
requiredPermissions.set(secretOperations.grantSecret.name, new permission(true, [], terms.OPERATIONS_ENUM.GRANT_SECRET));
|
|
242
|
+
requiredPermissions.set(secretOperations.revokeSecret.name, new permission(true, [], terms.OPERATIONS_ENUM.REVOKE_SECRET));
|
|
243
|
+
requiredPermissions.set(secretOperations.listSecrets.name, new permission(true, [], terms.OPERATIONS_ENUM.LIST_SECRETS));
|
|
244
|
+
requiredPermissions.set(secretOperations.deleteSecret.name, new permission(true, [], terms.OPERATIONS_ENUM.DELETE_SECRET));
|
|
245
|
+
requiredPermissions.set(secretOperations.getSecretsPublicKey.name, new permission(true, [], terms.OPERATIONS_ENUM.GET_SECRETS_PUBLIC_KEY));
|
|
210
246
|
//Below are functions that are currently open to all roles
|
|
211
247
|
requiredPermissions.set(regDeprecated.getRegistrationInfo.name, new permission(false, []));
|
|
212
248
|
requiredPermissions.set(user.userInfo.name, new permission(false, [], terms.OPERATIONS_ENUM.USER_INFO));
|
|
@@ -231,6 +267,8 @@ module.exports = {
|
|
|
231
267
|
verifyPerms,
|
|
232
268
|
verifyPermsAST,
|
|
233
269
|
verifyBulkLoadAttributePerms,
|
|
270
|
+
registerOperationPermission,
|
|
271
|
+
unregisterOperationPermission,
|
|
234
272
|
};
|
|
235
273
|
/**
|
|
236
274
|
* Verifies permissions and restrictions for a SQL operation based on the user's assigned role.
|