@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
|
@@ -13,6 +13,8 @@ import { PACKAGE_ROOT } from '../../utility/packageUtils.js';
|
|
|
13
13
|
import { _assignPackageExport } from '../../globals.js';
|
|
14
14
|
import { Console } from 'console';
|
|
15
15
|
import { inspect, types } from 'node:util';
|
|
16
|
+
import { createRotationGuard, INVALID_MAX_SIZE_MSG, parseMaxSize, resolveRotatedLogDir } from './logRotation.ts';
|
|
17
|
+
import { registerLogSink } from './logGenerationCoordinator.ts';
|
|
16
18
|
|
|
17
19
|
const { isNativeError } = types;
|
|
18
20
|
// store the native write function so we can call it after we write to the log file (and store it on process.stdout
|
|
@@ -47,6 +49,18 @@ const DEFAULT_CONFIG_FILE = join(PACKAGE_ROOT, 'static', hdbTerms.HDB_DEFAULT_CO
|
|
|
47
49
|
|
|
48
50
|
const CLOSE_LOG_FD_TIMEOUT = 10000;
|
|
49
51
|
|
|
52
|
+
// Above the module-scope initLogSettings() call below, which reaches getFileLogger: a const
|
|
53
|
+
// declared after it is still in its temporal dead zone when the file sink first reads one.
|
|
54
|
+
const LOG_TIME_USAGE_THRESHOLD = 100;
|
|
55
|
+
// How long to write straight to stdio after the log file refuses an append.
|
|
56
|
+
const APPEND_RETRY_COOLDOWN = 5000;
|
|
57
|
+
// Ceiling on how often a failing rotation may report itself; the failure repeats every check point.
|
|
58
|
+
const ROTATION_REPORT_INTERVAL = 60000;
|
|
59
|
+
const SET_ROTATION_POLICY = Symbol('setRotationPolicy');
|
|
60
|
+
const GET_ROTATION_POLICY = Symbol('getRotationPolicy');
|
|
61
|
+
const FILE_ROTATION_SOURCE = Symbol('fileRotationSource');
|
|
62
|
+
const SERVICE_NAME = workerData?.name?.replace(/ /g, '-') || 'main';
|
|
63
|
+
|
|
50
64
|
let logConsole;
|
|
51
65
|
let log_to_file;
|
|
52
66
|
let logToStdstreams;
|
|
@@ -100,25 +114,63 @@ let hdbProperties;
|
|
|
100
114
|
|
|
101
115
|
let rootConfig;
|
|
102
116
|
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
// `mainLoggerRef` defaults to the module's private `mainLogger` singleton (the real production
|
|
118
|
+
// behavior) but can be overridden by callers (currently just tests) so the inheritance decision
|
|
119
|
+
// below can be exercised against a throwaway logger without reaching into module-private state.
|
|
120
|
+
export function updateLogger(logger: any, logOptions: any, name?: string, mainLoggerRef: any = mainLogger) {
|
|
121
|
+
// Fall back to the main logger's rotation (like level/path below) so an external/component
|
|
122
|
+
// logger with no rotation block of its own inherits maxSize/interval/etc rather than losing
|
|
123
|
+
// rotation entirely (#1877). Excluded when `logger` IS mainLoggerRef: the fallback would just
|
|
124
|
+
// reassign mainLogger.rotation to itself, making it impossible to ever clear main's rotation.
|
|
125
|
+
const inheritedRotation = logOptions.rotation ?? (logger === mainLoggerRef ? undefined : mainLoggerRef?.rotation);
|
|
126
|
+
const loggerPolicy = logger[GET_ROTATION_POLICY]?.();
|
|
127
|
+
const mainPolicy = mainLoggerRef?.[GET_ROTATION_POLICY]?.();
|
|
128
|
+
const inheritsRotation = logOptions.rotation == null && logger !== mainLoggerRef;
|
|
129
|
+
const rotationSource = inheritsRotation ? mainPolicy?.source : loggerPolicy?.ownSource;
|
|
105
130
|
let path = logOptions.path;
|
|
106
131
|
if (path) {
|
|
107
132
|
if (!logOptions.root) logOptions.root = pathModule.dirname(path);
|
|
108
133
|
} else if (logOptions.root) {
|
|
109
134
|
path = join(logOptions.root, logName);
|
|
110
135
|
} else {
|
|
111
|
-
path =
|
|
136
|
+
path = mainLoggerRef.path;
|
|
112
137
|
if (!logOptions.root) logOptions.root = pathModule.dirname(path);
|
|
113
138
|
}
|
|
139
|
+
if (inheritedRotation && inheritedRotation === mainLoggerRef?.rotation && path !== mainLoggerRef?.path) {
|
|
140
|
+
// This logger has no rotation block of its own and is inheriting main's wholesale — but
|
|
141
|
+
// inheriting `rotation.path` too would point this logger's archives at wherever main
|
|
142
|
+
// archives to. If this logger's file lives on a different filesystem/volume than that
|
|
143
|
+
// directory, the rotator's fs.rename() there fails with EXDEV and the tick error leaks
|
|
144
|
+
// (contained in logRotator.ts) without ever rotating this log. Strip the inherited path so
|
|
145
|
+
// rotation instead defaults beside this logger's own path (logRotator's own <log dir>/rotated
|
|
146
|
+
// fallback); an explicit `rotation.path` in this logger's own config still wins, since that
|
|
147
|
+
// goes through `logOptions.rotation` above, not this fallback. Clone rather than mutate:
|
|
148
|
+
// `inheritedRotation` is the literal object shared by mainLogger.rotation and every other
|
|
149
|
+
// component that inherited it.
|
|
150
|
+
//
|
|
151
|
+
// Only when the paths differ. A logger writing to main's own file shares main's rotation
|
|
152
|
+
// state — file loggers are cached per path — so stripping there discards the operator's
|
|
153
|
+
// configured rotation.path for the main log itself, which no EXDEV risk justifies.
|
|
154
|
+
const { path: _inheritedPath, ...rotationWithoutPath } = inheritedRotation;
|
|
155
|
+
setRotationPolicy(rotationWithoutPath);
|
|
156
|
+
} else {
|
|
157
|
+
setRotationPolicy(inheritedRotation);
|
|
158
|
+
}
|
|
159
|
+
// After the rotation above: assigning `path` goes through the setter that rebuilds this path's
|
|
160
|
+
// file logger, and it reads `logger.rotation` as it stands at that moment.
|
|
114
161
|
if (path) logger.path = path;
|
|
115
162
|
else console.error('No path for logger', logOptions);
|
|
116
|
-
logger.level = LOG_LEVEL_HIERARCHY[logOptions.level] ??
|
|
163
|
+
logger.level = LOG_LEVEL_HIERARCHY[logOptions.level] ?? mainLoggerRef?.level ?? LOG_LEVEL_HIERARCHY.info;
|
|
117
164
|
updateConditional(logger);
|
|
118
165
|
logger.logToStdstreams = logOptions.stdStreams ?? false;
|
|
119
166
|
// if there is a configured tag or if a component is logging to default/main log path, use the component name as the tag
|
|
120
167
|
// to differentiate it
|
|
121
|
-
logger.tag = logOptions.tag ?? ((
|
|
168
|
+
logger.tag = logOptions.tag ?? ((mainLoggerRef.path === logger.path || externalLogger.path === logger.path) && name);
|
|
169
|
+
|
|
170
|
+
function setRotationPolicy(rotation) {
|
|
171
|
+
if (logger[SET_ROTATION_POLICY]) logger[SET_ROTATION_POLICY](rotation, rotationSource, inheritsRotation);
|
|
172
|
+
else logger.rotation = rotation;
|
|
173
|
+
}
|
|
122
174
|
}
|
|
123
175
|
// creates a logger where the methods are only defined if they are within the log level.
|
|
124
176
|
// Using this conditional logger means that every method call must be optional like log.trace?.('message),
|
|
@@ -145,13 +197,25 @@ function resolveLogPath(configPath: string, rootPath: string) {
|
|
|
145
197
|
async function updateLogSettings() {
|
|
146
198
|
if (!rootConfig) {
|
|
147
199
|
// set up the initial watcher
|
|
148
|
-
rootConfig =
|
|
200
|
+
rootConfig = getSharedRootConfigWatcher();
|
|
149
201
|
// wait for it to be ready
|
|
150
202
|
await rootConfig.ready;
|
|
151
203
|
// TODO: Any way to differentiate changes that we can and can't handle?
|
|
152
204
|
rootConfig.on('change', updateLogSettings);
|
|
153
205
|
}
|
|
154
|
-
|
|
206
|
+
applyLogSettings(rootConfig.config);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Separate from the watcher wiring above because the watcher it builds reads a process-wide path,
|
|
210
|
+
// which leaves no way to exercise these settings against a given config.
|
|
211
|
+
function applyLogSettings(rootConfigObject: any) {
|
|
212
|
+
// `ready` settles on every terminal read outcome, including ones that carry no config at all —
|
|
213
|
+
// see DESIGN.md, "Every terminal read outcome settles the barrier". Applying that as settings
|
|
214
|
+
// would not be "the defaults": `updateLogger` reads an absent `rotation` as rotation off and an
|
|
215
|
+
// absent `console` as console off, so an unreadable config would silently disable logging.
|
|
216
|
+
// What `initLogSettings()` established at startup stands until a real config arrives, which
|
|
217
|
+
// is why the watcher settles those outcomes with no config rather than an empty one.
|
|
218
|
+
if (!rootConfigObject || typeof rootConfigObject !== 'object') return;
|
|
155
219
|
const logOptions = rootConfigObject.logging ?? {};
|
|
156
220
|
// Resolve relative paths against rootPath from the same config
|
|
157
221
|
const rootPath = rootConfigObject.rootPath;
|
|
@@ -174,7 +238,9 @@ async function updateLogSettings() {
|
|
|
174
238
|
for (const name in rootConfigObject) {
|
|
175
239
|
// we now scan each component to see if it has logging individual configured
|
|
176
240
|
const component = rootConfigObject[name];
|
|
177
|
-
|
|
241
|
+
// `myComponent:` with nothing under it parses to null, and an async listener's TypeError
|
|
242
|
+
// escapes the watcher's emit guard as an unhandled rejection.
|
|
243
|
+
if (component?.logging) {
|
|
178
244
|
updateLogger(mainLogger.forComponent(name), component.logging, name);
|
|
179
245
|
} else if (mainLogger.hasComponent(name)) {
|
|
180
246
|
const componentLogger = mainLogger.forComponent(name);
|
|
@@ -376,6 +442,8 @@ module.exports = {
|
|
|
376
442
|
// we can start using the RootConfigWatcher
|
|
377
443
|
start: updateLogSettings,
|
|
378
444
|
startOnMainThread: updateLogSettings,
|
|
445
|
+
// Test-only: applies a config without the process-wide watcher `updateLogSettings` builds.
|
|
446
|
+
_applyLogSettingsForTests: applyLogSettings,
|
|
379
447
|
errorToString,
|
|
380
448
|
errorForLog,
|
|
381
449
|
inspectForLog,
|
|
@@ -383,8 +451,20 @@ module.exports = {
|
|
|
383
451
|
disableStdio,
|
|
384
452
|
isStdioBrokenError,
|
|
385
453
|
externalLogger,
|
|
454
|
+
updateLogger,
|
|
386
455
|
};
|
|
387
456
|
|
|
457
|
+
// Writes past the stdio guard installed by installStdioGuard, which would otherwise route the
|
|
458
|
+
// text back into the file logger this is the fallback for, and swallows a broken pipe - there is
|
|
459
|
+
// nowhere left to report it.
|
|
460
|
+
function writeToStdioDirectly(stream, text) {
|
|
461
|
+
try {
|
|
462
|
+
nativeStdWrite.call(stream, text);
|
|
463
|
+
} catch {
|
|
464
|
+
// stdio is gone too
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
388
468
|
// A bare no-op would read as permanent backpressure to a pipe()'d source; this drains and
|
|
389
469
|
// discards instead.
|
|
390
470
|
function noopWrite(_chunk?: any, encoding?: any, callback?: any) {
|
|
@@ -428,6 +508,14 @@ export function logsAtLevel(level: any) {
|
|
|
428
508
|
export function initLogSettings(forceInit = false) {
|
|
429
509
|
try {
|
|
430
510
|
if (hdbProperties === undefined || forceInit) {
|
|
511
|
+
if (forceInit && mainLogger?.[SET_ROTATION_POLICY]) {
|
|
512
|
+
const currentPath = mainLogger.path;
|
|
513
|
+
if (currentPath) {
|
|
514
|
+
const { ownSource } = mainLogger[GET_ROTATION_POLICY]();
|
|
515
|
+
mainLogger[SET_ROTATION_POLICY](undefined, ownSource, false);
|
|
516
|
+
mainLogger.path = currentPath;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
431
519
|
closeLogFile();
|
|
432
520
|
const bootPropsFilePath = getPropsFilePath();
|
|
433
521
|
let properties = assignCMDENVVariables(['ROOTPATH']);
|
|
@@ -510,10 +598,17 @@ export function initLogSettings(forceInit = false) {
|
|
|
510
598
|
|
|
511
599
|
logLevel = logLevel === undefined ? defaultLevel : logLevel;
|
|
512
600
|
|
|
513
|
-
|
|
601
|
+
// createLogger shadows the module-level `logToStdstreams` with this option, so omitting it
|
|
602
|
+
// drops every log written before a config exists rather than routing it to the streams.
|
|
603
|
+
mainLogger = createLogger({ level: logLevel, stdStreams: logToStdstreams });
|
|
514
604
|
// setup the external logger
|
|
515
605
|
externalLogger = mainLogger.forComponent('external');
|
|
516
606
|
externalLogger.tag = null; // don't tag by default
|
|
607
|
+
// The streams are this branch's only sink, so it needs the same EPIPE/EIO listeners the
|
|
608
|
+
// configured path installs below: `harper install | head -1` closes the reader, and the
|
|
609
|
+
// async error would otherwise land on a stream with none and take the install down. The
|
|
610
|
+
// guard's write override is inert here, because `log_to_file` is false.
|
|
611
|
+
stdioLogging();
|
|
517
612
|
return;
|
|
518
613
|
}
|
|
519
614
|
|
|
@@ -601,7 +696,6 @@ export function suppressLogging(callback) {
|
|
|
601
696
|
}
|
|
602
697
|
}
|
|
603
698
|
|
|
604
|
-
const SERVICE_NAME = workerData?.name?.replace(/ /g, '-') || 'main';
|
|
605
699
|
// these are used to store information about the current service and tag so we can prepend them to the log during
|
|
606
700
|
// the writes, without having to pass the information through the Console instance
|
|
607
701
|
let currentLevel = 'info'; // default is info
|
|
@@ -616,7 +710,14 @@ export function createLogger(options: any = {} as any) {
|
|
|
616
710
|
isExternalInstance,
|
|
617
711
|
writeToLog,
|
|
618
712
|
component,
|
|
713
|
+
rotationSource,
|
|
714
|
+
rotationInherited = false,
|
|
619
715
|
}: any = options;
|
|
716
|
+
const ownRotationSource = Symbol('rotationPolicySource');
|
|
717
|
+
let currentRotationSource = rotationSource ?? ownRotationSource;
|
|
718
|
+
let previousRotationSource;
|
|
719
|
+
let currentRotationInherited = rotationInherited;
|
|
720
|
+
let rotationChangeIsAuthoritative = rotation !== undefined;
|
|
620
721
|
if (!logLevel) logLevel = 'info';
|
|
621
722
|
let level = typeof logLevel === 'number' ? logLevel : LOG_LEVEL_HIERARCHY[logLevel];
|
|
622
723
|
let logger;
|
|
@@ -660,7 +761,8 @@ export function createLogger(options: any = {} as any) {
|
|
|
660
761
|
}
|
|
661
762
|
} else if (logToStdstreams) process.stderr.write(log);
|
|
662
763
|
}
|
|
663
|
-
let logToFile = logFilePath && getFileLogger(logFilePath, rotation, isExternalInstance);
|
|
764
|
+
let logToFile = logFilePath && getFileLogger(logFilePath, rotation, isExternalInstance, rotationPolicy());
|
|
765
|
+
rotationPolicyApplied();
|
|
664
766
|
function logPrepend(write) {
|
|
665
767
|
return {
|
|
666
768
|
write(log) {
|
|
@@ -683,6 +785,14 @@ export function createLogger(options: any = {} as any) {
|
|
|
683
785
|
},
|
|
684
786
|
level
|
|
685
787
|
);
|
|
788
|
+
logger[SET_ROTATION_POLICY] = function (newRotation, source = ownRotationSource, inherited = false) {
|
|
789
|
+
previousRotationSource = currentRotationSource;
|
|
790
|
+
currentRotationSource = source ?? ownRotationSource;
|
|
791
|
+
currentRotationInherited = inherited;
|
|
792
|
+
rotationChangeIsAuthoritative = true;
|
|
793
|
+
logger.rotation = newRotation;
|
|
794
|
+
};
|
|
795
|
+
logger[GET_ROTATION_POLICY] = () => ({ ownSource: ownRotationSource, source: currentRotationSource });
|
|
686
796
|
updateConditional(logger);
|
|
687
797
|
logger.path = logFilePath;
|
|
688
798
|
Object.defineProperty(logger, 'path', {
|
|
@@ -691,7 +801,9 @@ export function createLogger(options: any = {} as any) {
|
|
|
691
801
|
},
|
|
692
802
|
set(path) {
|
|
693
803
|
logFilePath = path;
|
|
694
|
-
|
|
804
|
+
if (!logFilePath) return;
|
|
805
|
+
logToFile = getFileLogger(logFilePath, logger.rotation, isExternalInstance, rotationPolicy());
|
|
806
|
+
rotationPolicyApplied();
|
|
695
807
|
if (isExternalInstance) writeToLogFile = logToFile;
|
|
696
808
|
},
|
|
697
809
|
enumerable: true,
|
|
@@ -704,12 +816,15 @@ export function createLogger(options: any = {} as any) {
|
|
|
704
816
|
let componentLogger = components.get(name);
|
|
705
817
|
if (!componentLogger) {
|
|
706
818
|
const protoLogger = isExternal ? externalLogger : logger;
|
|
819
|
+
const protoRotationPolicy = protoLogger[GET_ROTATION_POLICY]?.();
|
|
707
820
|
componentLogger = createLogger({
|
|
708
821
|
path: protoLogger.path,
|
|
709
822
|
level: protoLogger.level,
|
|
710
823
|
stdStreams: protoLogger.logToStdstreams,
|
|
711
824
|
isExternalInstance: isExternal || name === 'external',
|
|
712
825
|
rotation: protoLogger.rotation,
|
|
826
|
+
rotationSource: protoRotationPolicy?.source,
|
|
827
|
+
rotationInherited: true,
|
|
713
828
|
writeToLog,
|
|
714
829
|
component: true,
|
|
715
830
|
});
|
|
@@ -725,32 +840,83 @@ export function createLogger(options: any = {} as any) {
|
|
|
725
840
|
logger.components = components;
|
|
726
841
|
}
|
|
727
842
|
return logger;
|
|
843
|
+
|
|
844
|
+
function rotationPolicy() {
|
|
845
|
+
return {
|
|
846
|
+
source: currentRotationSource,
|
|
847
|
+
previousSource: previousRotationSource,
|
|
848
|
+
inherited: currentRotationInherited,
|
|
849
|
+
authoritative: rotationChangeIsAuthoritative,
|
|
850
|
+
};
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
function rotationPolicyApplied() {
|
|
854
|
+
previousRotationSource = currentRotationSource;
|
|
855
|
+
rotationChangeIsAuthoritative = false;
|
|
856
|
+
}
|
|
728
857
|
}
|
|
729
|
-
const LOG_TIME_USAGE_THRESHOLD = 100;
|
|
730
858
|
/**
|
|
731
859
|
* Get the file logger for the given path. If it doesn't exist, create it.
|
|
732
860
|
* @param path
|
|
733
861
|
* @param isExternalInstance
|
|
734
862
|
* @return {any}
|
|
735
863
|
*/
|
|
736
|
-
function getFileLogger(path, rotation, isExternalInstance) {
|
|
864
|
+
function getFileLogger(path, rotation, isExternalInstance, rotationPolicy) {
|
|
737
865
|
let logger = fileLoggers.get(path);
|
|
738
|
-
let logFD, loggedFDError, logTimer;
|
|
866
|
+
let logFD, loggedFDError, loggedAppendError, logTimer, retryAppendAfter;
|
|
739
867
|
let logBuffer;
|
|
868
|
+
let rotationProblemNotice;
|
|
740
869
|
let logTimeUsage = 0;
|
|
870
|
+
let rotationGuard,
|
|
871
|
+
logFDIdentity,
|
|
872
|
+
nextRotationReport = 0;
|
|
741
873
|
if (!logger) {
|
|
742
874
|
logger = logToFile;
|
|
743
875
|
logger.closeLogFile = closeLogFile;
|
|
876
|
+
// The guard has to be installed through the live closure: later calls for this path get the
|
|
877
|
+
// cached logger back, and their own logFD/logBuffer are dead.
|
|
878
|
+
logger.installRotationGuard = installRotationGuard;
|
|
744
879
|
logger.path = path;
|
|
745
880
|
fileLoggers.set(path, logger);
|
|
881
|
+
// Registered by the sink, not by the size guard: a thread that writes this file but has no
|
|
882
|
+
// guard (no maxSize, or rotation driven only by interval) still holds a descriptor, and an
|
|
883
|
+
// answer from it has to mean "released" rather than only "handler ran".
|
|
884
|
+
registerLogSink(path, { identity: () => logFDIdentity, close: closeLogFile });
|
|
746
885
|
}
|
|
747
|
-
|
|
886
|
+
const currentSource = logger[FILE_ROTATION_SOURCE];
|
|
887
|
+
const sameSource = currentSource === rotationPolicy.source;
|
|
888
|
+
const replacesPreviousSource = currentSource !== undefined && currentSource === rotationPolicy.previousSource;
|
|
889
|
+
const canInstall =
|
|
890
|
+
rotation !== undefined &&
|
|
891
|
+
(!rotationPolicy.inherited || currentSource === undefined || sameSource || replacesPreviousSource);
|
|
892
|
+
const canClear = rotation === undefined && rotationPolicy.authoritative && (sameSource || replacesPreviousSource);
|
|
893
|
+
let reconfigured = false;
|
|
894
|
+
if (canInstall) {
|
|
895
|
+
logger[FILE_ROTATION_SOURCE] = rotationPolicy.source;
|
|
896
|
+
reconfigured = JSON.stringify(rotation) !== JSON.stringify(logger.rotation);
|
|
897
|
+
}
|
|
898
|
+
if (reconfigured) {
|
|
748
899
|
logger.rotation = rotation;
|
|
900
|
+
// Every writing thread, and synchronously: request logging is produced by the HTTP workers, and
|
|
901
|
+
// at the rates that make maxSize matter a deferred guard misses megabytes before it exists.
|
|
902
|
+
logger.installRotationGuard(rotation);
|
|
903
|
+
} else if (canClear) {
|
|
904
|
+
logger.rotation = undefined;
|
|
905
|
+
logger[FILE_ROTATION_SOURCE] = undefined;
|
|
906
|
+
logger.installRotationGuard(undefined);
|
|
907
|
+
reconfigured = true;
|
|
908
|
+
}
|
|
909
|
+
if (isMainThread && reconfigured) {
|
|
749
910
|
setTimeout(() => {
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
911
|
+
// Everything inside the try: a throw from a timer callback is unhandled, and neither
|
|
912
|
+
// require('./logRotator') (which reaches environmentManager's synchronous init) nor a
|
|
913
|
+
// rotator teardown may take the process down over log rotation (#847).
|
|
753
914
|
try {
|
|
915
|
+
const previousRotator = logger.rotator;
|
|
916
|
+
logger.rotator = undefined;
|
|
917
|
+
previousRotator?.end();
|
|
918
|
+
if (!rotation) return;
|
|
919
|
+
const { logRotator } = require('./logRotator');
|
|
754
920
|
logger.rotator = logRotator({
|
|
755
921
|
logger,
|
|
756
922
|
...rotation,
|
|
@@ -761,6 +927,46 @@ function getFileLogger(path, rotation, isExternalInstance) {
|
|
|
761
927
|
}, 100);
|
|
762
928
|
}
|
|
763
929
|
return logger;
|
|
930
|
+
function installRotationGuard(newRotation) {
|
|
931
|
+
rotationGuard = undefined;
|
|
932
|
+
if (!newRotation || newRotation.enabled === false) return;
|
|
933
|
+
const maxBytes = parseMaxSize(newRotation.maxSize);
|
|
934
|
+
if (!maxBytes) {
|
|
935
|
+
if (newRotation.maxSize != null) reportRotationProblem(`logging.rotation.maxSize: ${INVALID_MAX_SIZE_MSG}`);
|
|
936
|
+
return;
|
|
937
|
+
}
|
|
938
|
+
try {
|
|
939
|
+
rotationGuard = createRotationGuard({
|
|
940
|
+
logPath: path,
|
|
941
|
+
maxBytes,
|
|
942
|
+
rotatedLogDir: resolveRotatedLogDir(path, newRotation.path),
|
|
943
|
+
// From the rotation block rather than environmentManager (which logRotator still reads):
|
|
944
|
+
// environmentManager imports this module, so it cannot be reached from the write path.
|
|
945
|
+
compress: newRotation.compress,
|
|
946
|
+
getLogIdentity: () => logFDIdentity,
|
|
947
|
+
closeLogFile,
|
|
948
|
+
report: reportRotationProblem,
|
|
949
|
+
onRotated(archivePath) {
|
|
950
|
+
// Same shape as every other line in the file: written straight to the sink, this
|
|
951
|
+
// bypasses the prefix createLogger's logPrepend adds, and readLog parses by level.
|
|
952
|
+
logToFile(`[${SERVICE_NAME}/${threadId}] [notify]: hdb.log rotated, old log moved to ${archivePath}`);
|
|
953
|
+
},
|
|
954
|
+
});
|
|
955
|
+
} catch (error) {
|
|
956
|
+
reportRotationProblem(`log rotation is disabled for ${path}: ${error}`);
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
function reportRotationProblem(text) {
|
|
960
|
+
// Straight to stdio, never back through this sink: the sink is what rotation is failing on.
|
|
961
|
+
// Rate-limited rather than once-only, so a later, different failure is still reported.
|
|
962
|
+
if (nextRotationReport > performance.now()) return;
|
|
963
|
+
nextRotationReport = performance.now() + ROTATION_REPORT_INTERVAL;
|
|
964
|
+
const message = `Harper log rotation problem — ${text}`;
|
|
965
|
+
// Scripted services discard stdio. Preserve the warning in the active file on the next
|
|
966
|
+
// successful append as well, without recursing through the rotation guard.
|
|
967
|
+
rotationProblemNotice = `${new Date().toISOString()} [${SERVICE_NAME}/${threadId}] [error]: ${message}\n`;
|
|
968
|
+
writeToStdioDirectly(process.stderr, `${message}\n`);
|
|
969
|
+
}
|
|
764
970
|
function logToFile(log) {
|
|
765
971
|
let entry = `${new Date().toISOString()} ${log}${log.endsWith('\n') ? '' : '\n'}`;
|
|
766
972
|
if (logBuffer) {
|
|
@@ -787,16 +993,47 @@ function getFileLogger(path, rotation, isExternalInstance) {
|
|
|
787
993
|
}
|
|
788
994
|
// this is called on a timer, and will write the log buffer to the file
|
|
789
995
|
function logQueuedData(entry?: any) {
|
|
996
|
+
const payload = logBuffer ? logBuffer.join('') : entry;
|
|
997
|
+
// Released before anything can re-enter: the rotation notice is written from inside the append
|
|
998
|
+
// below, and a re-entrant flush still holding this batch would write it twice.
|
|
999
|
+
logBuffer = null;
|
|
1000
|
+
if (payload === undefined) return;
|
|
1001
|
+
// A file that just refused a write will refuse the next one too, and every attempt costs a
|
|
1002
|
+
// failed syscall plus a thrown error on whatever path is logging - which, on a full volume,
|
|
1003
|
+
// is the request path at full rate. Go straight to stdio until the cooldown expires.
|
|
1004
|
+
// Opened after the guard: a guard recovering by rotation closes this descriptor first.
|
|
1005
|
+
const mayAppend = !(retryAppendAfter > performance.now()) && (rotationGuard?.beforeAppend() ?? true);
|
|
790
1006
|
openLogFile(undefined);
|
|
791
|
-
if (logFD) {
|
|
1007
|
+
if (logFD && mayAppend) {
|
|
792
1008
|
let startTime = performance.now();
|
|
793
|
-
|
|
1009
|
+
try {
|
|
1010
|
+
const appendPayload = rotationProblemNotice ? rotationProblemNotice + payload : payload;
|
|
1011
|
+
const appendBuffer = Buffer.from(appendPayload);
|
|
1012
|
+
fs.appendFileSync(logFD, appendBuffer);
|
|
1013
|
+
rotationProblemNotice = undefined;
|
|
1014
|
+
// Both cleared, so a volume that fills again months later reports itself again
|
|
1015
|
+
retryAppendAfter = undefined;
|
|
1016
|
+
loggedAppendError = false;
|
|
1017
|
+
rotationGuard?.recordWrite(appendBuffer.length);
|
|
1018
|
+
} catch (error) {
|
|
1019
|
+
retryAppendAfter = performance.now() + APPEND_RETRY_COOLDOWN;
|
|
1020
|
+
// A log write must never take the process down: on an exhausted volume this throws from
|
|
1021
|
+
// both inline and timer call sites, making every log statement a crash point (#847).
|
|
1022
|
+
// The fallback goes through nativeStdWrite rather than console because
|
|
1023
|
+
// installStdioGuard routes console output back into this same file logger when
|
|
1024
|
+
// logging.file and logging.console are both on, which would recurse until the stack blew.
|
|
1025
|
+
if (!loggedAppendError) {
|
|
1026
|
+
loggedAppendError = true;
|
|
1027
|
+
writeToStdioDirectly(process.stderr, `Harper cannot write to its log file: ${error}\n`);
|
|
1028
|
+
}
|
|
1029
|
+
writeToStdioDirectly(process.stdout, payload);
|
|
1030
|
+
return;
|
|
1031
|
+
}
|
|
794
1032
|
let endTime = performance.now();
|
|
795
1033
|
// determine if we are using more than about two percent of processing time for log writes recently, and if so, we
|
|
796
1034
|
// will start buffering
|
|
797
1035
|
logTimeUsage = Math.max(endTime, logTimeUsage) + (endTime - startTime) * 50;
|
|
798
|
-
} else
|
|
799
|
-
if (logBuffer) logBuffer = null;
|
|
1036
|
+
} else writeToStdioDirectly(process.stdout, payload);
|
|
800
1037
|
}
|
|
801
1038
|
|
|
802
1039
|
function closeLogFile(_unused?: any) {
|
|
@@ -804,6 +1041,7 @@ function getFileLogger(path, rotation, isExternalInstance) {
|
|
|
804
1041
|
fs.closeSync(logFD);
|
|
805
1042
|
} catch {}
|
|
806
1043
|
logFD = null;
|
|
1044
|
+
logFDIdentity = null;
|
|
807
1045
|
if (isExternalInstance) mainLogFd = null;
|
|
808
1046
|
}
|
|
809
1047
|
|
|
@@ -811,12 +1049,25 @@ function getFileLogger(path, rotation, isExternalInstance) {
|
|
|
811
1049
|
if (!logFD) {
|
|
812
1050
|
try {
|
|
813
1051
|
logFD = fs.openSync(path, 'a');
|
|
1052
|
+
// Which generation this descriptor belongs to, recorded once here so the size guard's
|
|
1053
|
+
// checkpoint needs a single pathname stat to tell whether the file has moved under it.
|
|
1054
|
+
try {
|
|
1055
|
+
const opened = fs.fstatSync(logFD);
|
|
1056
|
+
logFDIdentity = { ino: opened.ino, dev: opened.dev };
|
|
1057
|
+
} catch {
|
|
1058
|
+
logFDIdentity = null;
|
|
1059
|
+
}
|
|
814
1060
|
if (isExternalInstance) mainLogFd = logFD;
|
|
815
1061
|
} catch (error) {
|
|
816
1062
|
if (error.code === 'ENOENT' && !isRetry) {
|
|
817
1063
|
// if the directory doesn't exist, create it
|
|
818
|
-
|
|
819
|
-
|
|
1064
|
+
try {
|
|
1065
|
+
fs.mkdirpSync(pathModule.dirname(path));
|
|
1066
|
+
return openLogFile(true);
|
|
1067
|
+
} catch (mkdirError) {
|
|
1068
|
+
// creating the log directory can fail for the same reason the log write can
|
|
1069
|
+
error = mkdirError;
|
|
1070
|
+
}
|
|
820
1071
|
}
|
|
821
1072
|
if (!loggedFDError) {
|
|
822
1073
|
loggedFDError = true;
|
|
@@ -1811,7 +2062,7 @@ export function AuthAuditLog(
|
|
|
1811
2062
|
this.path = path;
|
|
1812
2063
|
}
|
|
1813
2064
|
// we have to load this at the end to avoid circular dependencies problems
|
|
1814
|
-
import {
|
|
2065
|
+
import { getSharedRootConfigWatcher } from '../../config/RootConfigWatcher.ts';
|
|
1815
2066
|
|
|
1816
2067
|
export const getLogFilePath = () => logFilePath;
|
|
1817
2068
|
export const forComponent = (name: string, isExternal?: boolean) => mainLogger.forComponent(name, isExternal);
|
|
@@ -1846,4 +2097,5 @@ export default {
|
|
|
1846
2097
|
errorForLog,
|
|
1847
2098
|
inspectForLog,
|
|
1848
2099
|
isErrorLike,
|
|
2100
|
+
updateLogger,
|
|
1849
2101
|
};
|