@wireio/shared 1.0.18 → 1.0.20
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/lib/cjs/guards/applyTypeGuardExtras.d.ts.map +1 -0
- package/lib/cjs/guards/applyTypeGuardExtras.js +8 -0
- package/lib/cjs/guards/array.d.ts.map +1 -0
- package/lib/cjs/guards/array.js +7 -0
- package/lib/cjs/guards/assert.d.ts.map +1 -0
- package/lib/cjs/guards/assert.js +56 -0
- package/lib/cjs/guards/class.d.ts.map +1 -0
- package/lib/{guards → cjs/guards}/class.js +15 -7
- package/lib/cjs/guards/guard-tools.d.ts.map +1 -0
- package/lib/cjs/guards/guard-tools.js +55 -0
- package/lib/cjs/guards/index.d.ts.map +1 -0
- package/lib/cjs/guards/index.js +24 -0
- package/lib/cjs/guards/primitive.d.ts.map +1 -0
- package/lib/cjs/guards/primitive.js +65 -0
- package/lib/cjs/guards/types.d.ts.map +1 -0
- package/lib/cjs/guards/types.js +3 -0
- package/lib/cjs/helpers/Deferred.d.ts.map +1 -0
- package/lib/cjs/helpers/Deferred.js +115 -0
- package/lib/cjs/helpers/index.d.ts.map +1 -0
- package/lib/cjs/helpers/index.js +18 -0
- package/lib/cjs/index.d.ts.map +1 -0
- package/lib/cjs/index.js +20 -0
- package/lib/cjs/logging/Appender.d.ts.map +1 -0
- package/lib/cjs/logging/Appender.js +3 -0
- package/lib/cjs/logging/Formatter.d.ts.map +1 -0
- package/lib/cjs/logging/Formatter.js +3 -0
- package/lib/cjs/logging/InternalLogger.d.ts.map +1 -0
- package/lib/cjs/logging/InternalLogger.js +27 -0
- package/lib/cjs/logging/Level.d.ts.map +1 -0
- package/lib/cjs/logging/Level.js +16 -0
- package/lib/cjs/logging/LogRecord.d.ts.map +1 -0
- package/lib/cjs/logging/LogRecord.js +3 -0
- package/lib/cjs/logging/Logger.d.ts.map +1 -0
- package/lib/cjs/logging/Logger.js +190 -0
- package/lib/cjs/logging/LoggingManager.d.ts.map +1 -0
- package/lib/cjs/logging/LoggingManager.js +253 -0
- package/lib/cjs/logging/appenders/ConsoleAppender.d.ts.map +1 -0
- package/lib/cjs/logging/appenders/ConsoleAppender.js +78 -0
- package/lib/cjs/logging/appenders/FileAppender.d.ts.map +1 -0
- package/lib/cjs/logging/appenders/FileAppender.js +254 -0
- package/lib/cjs/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts.map +1 -0
- package/lib/cjs/logging/appenders/aws-firehose/AWSFirehoseAppender.js +145 -0
- package/lib/cjs/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts.map +1 -0
- package/lib/cjs/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js +105 -0
- package/lib/cjs/logging/appenders/index.d.ts.map +1 -0
- package/lib/cjs/logging/appenders/index.js +20 -0
- package/lib/cjs/logging/appenders/push/PushLogRecordsAppender.d.ts.map +1 -0
- package/lib/cjs/logging/appenders/push/PushLogRecordsAppender.js +294 -0
- package/lib/cjs/logging/appenders/push/index.d.ts.map +1 -0
- package/lib/cjs/logging/appenders/push/index.js +18 -0
- package/lib/cjs/logging/context/LogContext.d.ts.map +1 -0
- package/lib/cjs/logging/context/LogContext.js +62 -0
- package/lib/cjs/logging/context/LogContextContainer.d.ts.map +1 -0
- package/lib/cjs/logging/context/LogContextContainer.js +28 -0
- package/lib/cjs/logging/context/LogContextProvider.d.ts.map +1 -0
- package/lib/cjs/logging/context/LogContextProvider.js +21 -0
- package/lib/cjs/logging/context/index.d.ts.map +1 -0
- package/lib/cjs/logging/context/index.js +20 -0
- package/lib/cjs/logging/context/providers/node/NodeContextProvider.d.ts.map +1 -0
- package/lib/cjs/logging/context/providers/node/NodeContextProvider.js +33 -0
- package/lib/cjs/logging/context/providers/node/index.d.ts.map +1 -0
- package/lib/cjs/logging/context/providers/node/index.js +4 -0
- package/lib/cjs/logging/examples/example-debug-appender.d.ts.map +1 -0
- package/lib/cjs/logging/examples/example-debug-appender.js +16 -0
- package/lib/cjs/logging/examples/example-file-appender.d.ts.map +1 -0
- package/lib/cjs/logging/examples/example-file-appender.js +18 -0
- package/lib/cjs/logging/getLogger.d.ts.map +1 -0
- package/lib/cjs/logging/getLogger.js +8 -0
- package/lib/cjs/logging/index-node.d.ts.map +1 -0
- package/lib/cjs/logging/index-node.js +19 -0
- package/lib/cjs/logging/index.d.ts.map +1 -0
- package/lib/cjs/logging/index.js +27 -0
- package/lib/cjs/logging/util.d.ts.map +1 -0
- package/lib/cjs/logging/util.js +9 -0
- package/lib/esm/guards/applyTypeGuardExtras.d.ts +3 -0
- package/lib/esm/guards/applyTypeGuardExtras.d.ts.map +1 -0
- package/lib/esm/guards/applyTypeGuardExtras.js +5 -0
- package/lib/esm/guards/array.d.ts +2 -0
- package/lib/esm/guards/array.d.ts.map +1 -0
- package/lib/esm/guards/array.js +4 -0
- package/lib/esm/guards/assert.d.ts +19 -0
- package/lib/esm/guards/assert.d.ts.map +1 -0
- package/lib/esm/guards/assert.js +50 -0
- package/lib/esm/guards/class.d.ts +27 -0
- package/lib/esm/guards/class.d.ts.map +1 -0
- package/lib/esm/guards/class.js +34 -0
- package/lib/esm/guards/guard-tools.d.ts +20 -0
- package/lib/esm/guards/guard-tools.d.ts.map +1 -0
- package/lib/esm/guards/guard-tools.js +50 -0
- package/lib/esm/guards/index.d.ts +8 -0
- package/lib/esm/guards/index.d.ts.map +1 -0
- package/lib/esm/guards/index.js +8 -0
- package/lib/esm/guards/primitive.d.ts +26 -0
- package/lib/esm/guards/primitive.d.ts.map +1 -0
- package/lib/esm/guards/primitive.js +47 -0
- package/lib/esm/guards/types.d.ts +10 -0
- package/lib/esm/guards/types.d.ts.map +1 -0
- package/lib/esm/guards/types.js +2 -0
- package/lib/esm/helpers/Deferred.d.ts +31 -0
- package/lib/esm/helpers/Deferred.d.ts.map +1 -0
- package/lib/esm/helpers/Deferred.js +111 -0
- package/lib/esm/helpers/index.d.ts +2 -0
- package/lib/esm/helpers/index.d.ts.map +1 -0
- package/lib/esm/helpers/index.js +2 -0
- package/lib/esm/index.d.ts +4 -0
- package/lib/esm/index.d.ts.map +1 -0
- package/lib/esm/index.js +4 -0
- package/lib/esm/logging/Appender.d.ts +5 -0
- package/lib/esm/logging/Appender.d.ts.map +1 -0
- package/lib/esm/logging/Appender.js +2 -0
- package/lib/esm/logging/Formatter.d.ts +3 -0
- package/lib/esm/logging/Formatter.d.ts.map +1 -0
- package/lib/esm/logging/Formatter.js +2 -0
- package/lib/esm/logging/InternalLogger.d.ts +5 -0
- package/lib/esm/logging/InternalLogger.d.ts.map +1 -0
- package/lib/esm/logging/InternalLogger.js +23 -0
- package/lib/esm/logging/Level.d.ts +14 -0
- package/lib/esm/logging/Level.d.ts.map +1 -0
- package/lib/esm/logging/Level.js +13 -0
- package/lib/esm/logging/LogRecord.d.ts +19 -0
- package/lib/esm/logging/LogRecord.d.ts.map +1 -0
- package/lib/esm/logging/LogRecord.js +2 -0
- package/lib/esm/logging/Logger.d.ts +81 -0
- package/lib/esm/logging/Logger.d.ts.map +1 -0
- package/lib/esm/logging/Logger.js +184 -0
- package/lib/esm/logging/LoggingManager.d.ts +131 -0
- package/lib/esm/logging/LoggingManager.d.ts.map +1 -0
- package/lib/esm/logging/LoggingManager.js +248 -0
- package/lib/esm/logging/appenders/ConsoleAppender.d.ts +55 -0
- package/lib/esm/logging/appenders/ConsoleAppender.d.ts.map +1 -0
- package/lib/esm/logging/appenders/ConsoleAppender.js +72 -0
- package/lib/esm/logging/appenders/FileAppender.d.ts +65 -0
- package/lib/esm/logging/appenders/FileAppender.d.ts.map +1 -0
- package/lib/esm/logging/appenders/FileAppender.js +214 -0
- package/lib/esm/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts +28 -0
- package/lib/esm/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts.map +1 -0
- package/lib/esm/logging/appenders/aws-firehose/AWSFirehoseAppender.js +138 -0
- package/lib/esm/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts +29 -0
- package/lib/esm/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts.map +1 -0
- package/lib/esm/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js +98 -0
- package/lib/esm/logging/appenders/index.d.ts +4 -0
- package/lib/esm/logging/appenders/index.d.ts.map +1 -0
- package/lib/esm/logging/appenders/index.js +4 -0
- package/lib/esm/logging/appenders/push/PushLogRecordsAppender.d.ts +76 -0
- package/lib/esm/logging/appenders/push/PushLogRecordsAppender.d.ts.map +1 -0
- package/lib/esm/logging/appenders/push/PushLogRecordsAppender.js +286 -0
- package/lib/esm/logging/appenders/push/index.d.ts +2 -0
- package/lib/esm/logging/appenders/push/index.d.ts.map +1 -0
- package/lib/esm/logging/appenders/push/index.js +2 -0
- package/lib/esm/logging/context/LogContext.d.ts +48 -0
- package/lib/esm/logging/context/LogContext.d.ts.map +1 -0
- package/lib/esm/logging/context/LogContext.js +58 -0
- package/lib/esm/logging/context/LogContextContainer.d.ts +9 -0
- package/lib/esm/logging/context/LogContextContainer.d.ts.map +1 -0
- package/lib/esm/logging/context/LogContextContainer.js +25 -0
- package/lib/esm/logging/context/LogContextProvider.d.ts +24 -0
- package/lib/esm/logging/context/LogContextProvider.d.ts.map +1 -0
- package/lib/esm/logging/context/LogContextProvider.js +18 -0
- package/lib/esm/logging/context/index.d.ts +4 -0
- package/lib/esm/logging/context/index.d.ts.map +1 -0
- package/lib/esm/logging/context/index.js +4 -0
- package/lib/esm/logging/context/providers/node/NodeContextProvider.d.ts +2 -0
- package/lib/esm/logging/context/providers/node/NodeContextProvider.d.ts.map +1 -0
- package/lib/esm/logging/context/providers/node/NodeContextProvider.js +31 -0
- package/lib/esm/logging/context/providers/node/index.d.ts +3 -0
- package/lib/esm/logging/context/providers/node/index.d.ts.map +1 -0
- package/lib/esm/logging/context/providers/node/index.js +2 -0
- package/lib/esm/logging/examples/example-debug-appender.d.ts +2 -0
- package/lib/esm/logging/examples/example-debug-appender.d.ts.map +1 -0
- package/lib/esm/logging/examples/example-debug-appender.js +14 -0
- package/lib/esm/logging/examples/example-file-appender.d.ts +2 -0
- package/lib/esm/logging/examples/example-file-appender.d.ts.map +1 -0
- package/lib/esm/logging/examples/example-file-appender.js +16 -0
- package/lib/esm/logging/getLogger.d.ts +3 -0
- package/lib/esm/logging/getLogger.d.ts.map +1 -0
- package/lib/esm/logging/getLogger.js +5 -0
- package/lib/esm/logging/index-node.d.ts +3 -0
- package/lib/esm/logging/index-node.d.ts.map +1 -0
- package/lib/esm/logging/index-node.js +3 -0
- package/lib/esm/logging/index.d.ts +11 -0
- package/lib/esm/logging/index.d.ts.map +1 -0
- package/lib/esm/logging/index.js +11 -0
- package/lib/esm/logging/util.d.ts +3 -0
- package/lib/esm/logging/util.d.ts.map +1 -0
- package/lib/esm/logging/util.js +6 -0
- package/lib/test-cjs/guards/array.test.d.ts +2 -0
- package/lib/test-cjs/guards/array.test.d.ts.map +1 -0
- package/lib/test-cjs/guards/array.test.js +33 -0
- package/lib/test-cjs/guards/array.test.js.map +1 -0
- package/lib/test-cjs/guards/assert.test.d.ts +2 -0
- package/lib/test-cjs/guards/assert.test.d.ts.map +1 -0
- package/lib/test-cjs/guards/assert.test.js +80 -0
- package/lib/test-cjs/guards/assert.test.js.map +1 -0
- package/lib/test-cjs/guards/class.test.d.ts +2 -0
- package/lib/test-cjs/guards/class.test.d.ts.map +1 -0
- package/lib/test-cjs/guards/class.test.js +78 -0
- package/lib/test-cjs/guards/class.test.js.map +1 -0
- package/lib/test-cjs/guards/guard-tools.test.d.ts +2 -0
- package/lib/test-cjs/guards/guard-tools.test.d.ts.map +1 -0
- package/lib/test-cjs/guards/guard-tools.test.js +68 -0
- package/lib/test-cjs/guards/guard-tools.test.js.map +1 -0
- package/lib/test-cjs/guards/primitive.test.d.ts +2 -0
- package/lib/test-cjs/guards/primitive.test.d.ts.map +1 -0
- package/lib/test-cjs/guards/primitive.test.js +238 -0
- package/lib/test-cjs/guards/primitive.test.js.map +1 -0
- package/lib/test-cjs/helpers/Deferred.test.d.ts +2 -0
- package/lib/test-cjs/helpers/Deferred.test.d.ts.map +1 -0
- package/lib/test-cjs/helpers/Deferred.test.js +196 -0
- package/lib/test-cjs/helpers/Deferred.test.js.map +1 -0
- package/lib/test-cjs/logging/ConsoleAppender.test.d.ts +2 -0
- package/lib/test-cjs/logging/ConsoleAppender.test.d.ts.map +1 -0
- package/lib/test-cjs/logging/ConsoleAppender.test.js +95 -0
- package/lib/test-cjs/logging/ConsoleAppender.test.js.map +1 -0
- package/lib/test-cjs/logging/Level.test.d.ts +2 -0
- package/lib/test-cjs/logging/Level.test.d.ts.map +1 -0
- package/lib/test-cjs/logging/Level.test.js +42 -0
- package/lib/test-cjs/logging/Level.test.js.map +1 -0
- package/lib/test-cjs/logging/Logger.test.d.ts +2 -0
- package/lib/test-cjs/logging/Logger.test.d.ts.map +1 -0
- package/lib/test-cjs/logging/Logger.test.js +121 -0
- package/lib/test-cjs/logging/Logger.test.js.map +1 -0
- package/lib/test-cjs/logging/LoggingManager.test.d.ts +2 -0
- package/lib/test-cjs/logging/LoggingManager.test.d.ts.map +1 -0
- package/lib/test-cjs/logging/LoggingManager.test.js +124 -0
- package/lib/test-cjs/logging/LoggingManager.test.js.map +1 -0
- package/lib/test-cjs/logging/util.test.d.ts +2 -0
- package/lib/test-cjs/logging/util.test.d.ts.map +1 -0
- package/lib/test-cjs/logging/util.test.js +48 -0
- package/lib/test-cjs/logging/util.test.js.map +1 -0
- package/lib/tsconfig.cjs.jest.tsbuildinfo +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -0
- package/lib/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +18 -6
- package/lib/guards/applyTypeGuardExtras.d.ts.map +0 -1
- package/lib/guards/applyTypeGuardExtras.js +0 -5
- package/lib/guards/array.d.ts.map +0 -1
- package/lib/guards/array.js +0 -4
- package/lib/guards/assert.d.ts.map +0 -1
- package/lib/guards/assert.js +0 -50
- package/lib/guards/class.d.ts.map +0 -1
- package/lib/guards/guard-tools.d.ts.map +0 -1
- package/lib/guards/guard-tools.js +0 -50
- package/lib/guards/index.d.ts.map +0 -1
- package/lib/guards/index.js +0 -8
- package/lib/guards/primitive.d.ts.map +0 -1
- package/lib/guards/primitive.js +0 -47
- package/lib/guards/types.d.ts.map +0 -1
- package/lib/guards/types.js +0 -2
- package/lib/helpers/Deferred.d.ts.map +0 -1
- package/lib/helpers/Deferred.js +0 -111
- package/lib/helpers/index.d.ts.map +0 -1
- package/lib/helpers/index.js +0 -2
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -4
- package/lib/logging/Appender.d.ts.map +0 -1
- package/lib/logging/Appender.js +0 -2
- package/lib/logging/Formatter.d.ts.map +0 -1
- package/lib/logging/Formatter.js +0 -2
- package/lib/logging/InternalLogger.d.ts.map +0 -1
- package/lib/logging/InternalLogger.js +0 -23
- package/lib/logging/Level.d.ts.map +0 -1
- package/lib/logging/Level.js +0 -13
- package/lib/logging/LogRecord.d.ts.map +0 -1
- package/lib/logging/LogRecord.js +0 -2
- package/lib/logging/Logger.d.ts.map +0 -1
- package/lib/logging/Logger.js +0 -183
- package/lib/logging/LoggingManager.d.ts.map +0 -1
- package/lib/logging/LoggingManager.js +0 -243
- package/lib/logging/appenders/ConsoleAppender.d.ts.map +0 -1
- package/lib/logging/appenders/ConsoleAppender.js +0 -72
- package/lib/logging/appenders/FileAppender.d.ts.map +0 -1
- package/lib/logging/appenders/FileAppender.js +0 -212
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts.map +0 -1
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.js +0 -138
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts.map +0 -1
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js +0 -98
- package/lib/logging/appenders/index.d.ts.map +0 -1
- package/lib/logging/appenders/index.js +0 -4
- package/lib/logging/appenders/push/PushLogRecordsAppender.d.ts.map +0 -1
- package/lib/logging/appenders/push/PushLogRecordsAppender.js +0 -286
- package/lib/logging/appenders/push/index.d.ts.map +0 -1
- package/lib/logging/appenders/push/index.js +0 -2
- package/lib/logging/context/LogContext.d.ts.map +0 -1
- package/lib/logging/context/LogContext.js +0 -58
- package/lib/logging/context/LogContextContainer.d.ts.map +0 -1
- package/lib/logging/context/LogContextContainer.js +0 -25
- package/lib/logging/context/LogContextProvider.d.ts.map +0 -1
- package/lib/logging/context/LogContextProvider.js +0 -18
- package/lib/logging/context/index.d.ts.map +0 -1
- package/lib/logging/context/index.js +0 -4
- package/lib/logging/context/providers/node/NodeContextProvider.d.ts.map +0 -1
- package/lib/logging/context/providers/node/NodeContextProvider.js +0 -31
- package/lib/logging/context/providers/node/index.d.ts.map +0 -1
- package/lib/logging/context/providers/node/index.js +0 -2
- package/lib/logging/examples/example-debug-appender.d.ts.map +0 -1
- package/lib/logging/examples/example-debug-appender.js +0 -14
- package/lib/logging/examples/example-file-appender.d.ts.map +0 -1
- package/lib/logging/examples/example-file-appender.js +0 -16
- package/lib/logging/getLogger.d.ts.map +0 -1
- package/lib/logging/getLogger.js +0 -5
- package/lib/logging/index-node.d.ts.map +0 -1
- package/lib/logging/index-node.js +0 -3
- package/lib/logging/index.d.ts.map +0 -1
- package/lib/logging/index.js +0 -11
- package/lib/logging/util.d.ts.map +0 -1
- package/lib/logging/util.js +0 -6
- /package/lib/{guards → cjs/guards}/applyTypeGuardExtras.d.ts +0 -0
- /package/lib/{guards → cjs/guards}/array.d.ts +0 -0
- /package/lib/{guards → cjs/guards}/assert.d.ts +0 -0
- /package/lib/{guards → cjs/guards}/class.d.ts +0 -0
- /package/lib/{guards → cjs/guards}/guard-tools.d.ts +0 -0
- /package/lib/{guards → cjs/guards}/index.d.ts +0 -0
- /package/lib/{guards → cjs/guards}/primitive.d.ts +0 -0
- /package/lib/{guards → cjs/guards}/types.d.ts +0 -0
- /package/lib/{helpers → cjs/helpers}/Deferred.d.ts +0 -0
- /package/lib/{helpers → cjs/helpers}/index.d.ts +0 -0
- /package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/lib/{logging → cjs/logging}/Appender.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/Formatter.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/InternalLogger.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/Level.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/LogRecord.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/Logger.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/LoggingManager.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/appenders/ConsoleAppender.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/appenders/FileAppender.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/appenders/aws-firehose/AWSFirehoseAppender.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/appenders/index.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/appenders/push/PushLogRecordsAppender.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/appenders/push/index.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/context/LogContext.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/context/LogContextContainer.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/context/LogContextProvider.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/context/index.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/context/providers/node/NodeContextProvider.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/context/providers/node/index.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/examples/example-debug-appender.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/examples/example-file-appender.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/getLogger.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/index-node.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/index.d.ts +0 -0
- /package/lib/{logging → cjs/logging}/util.d.ts +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { assign, defaults, padStart } from "lodash";
|
|
2
|
+
import * as Path from "path";
|
|
3
|
+
import * as Fs from "fs";
|
|
4
|
+
import { Option, Future } from "@3fv/prelude-ts";
|
|
5
|
+
import { Buffer } from "buffer";
|
|
6
|
+
import Debug from "debug";
|
|
7
|
+
import Bluebird from "bluebird";
|
|
8
|
+
const FsAsync = Fs.promises;
|
|
9
|
+
const debug = Debug("3fv:logger:FileAppender");
|
|
10
|
+
const osTempDir = process.env.TMP ?? process.env.TEMP ?? "/tmp";
|
|
11
|
+
const tempDir = Fs.mkdtempSync(Path.join(osTempDir, "logger-proxy-example")); //
|
|
12
|
+
const getDefaultConfig = () => ({
|
|
13
|
+
filename: Path.join(tempDir, "app.log"),
|
|
14
|
+
prettyPrint: process.env.NODE_ENV !== "production",
|
|
15
|
+
maxSize: -1,
|
|
16
|
+
maxFiles: 5,
|
|
17
|
+
enableRolling: false,
|
|
18
|
+
sync: false
|
|
19
|
+
});
|
|
20
|
+
function applyConfigDefaults(options) {
|
|
21
|
+
return defaults(options, getDefaultConfig());
|
|
22
|
+
}
|
|
23
|
+
export class FileAppender {
|
|
24
|
+
config;
|
|
25
|
+
state = {
|
|
26
|
+
archivedFilenames: [],
|
|
27
|
+
filename: undefined,
|
|
28
|
+
file: undefined,
|
|
29
|
+
ready: false,
|
|
30
|
+
currentSize: 0,
|
|
31
|
+
flushing: false,
|
|
32
|
+
queue: []
|
|
33
|
+
};
|
|
34
|
+
get enableRolling() {
|
|
35
|
+
return this.config.enableRolling;
|
|
36
|
+
}
|
|
37
|
+
isReady() {
|
|
38
|
+
return this.state.ready;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Initialize and setup the appender
|
|
42
|
+
*
|
|
43
|
+
* @returns {FileAppender<Record>}
|
|
44
|
+
*/
|
|
45
|
+
setup() {
|
|
46
|
+
const { state } = this;
|
|
47
|
+
if (!!state.ready) {
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const { filename } = this;
|
|
52
|
+
const file = Fs.openSync(filename, "a");
|
|
53
|
+
assign(state, {
|
|
54
|
+
filename,
|
|
55
|
+
file,
|
|
56
|
+
ready: true
|
|
57
|
+
});
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
assign(state, {
|
|
62
|
+
error: err,
|
|
63
|
+
file: undefined,
|
|
64
|
+
ready: false
|
|
65
|
+
});
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Only exposed for the sake of tests & examples
|
|
71
|
+
* DO NOT USE
|
|
72
|
+
*
|
|
73
|
+
* This should all be async, but i was in a rush :(
|
|
74
|
+
*
|
|
75
|
+
* @returns
|
|
76
|
+
*/
|
|
77
|
+
rollFile() {
|
|
78
|
+
const { state, config } = this;
|
|
79
|
+
let { file, filename, archivedFilenames } = state;
|
|
80
|
+
if (!this.isReady() || !file) {
|
|
81
|
+
debug(`Can not roll file before ready`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (!this.enableRolling) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const fileCount = archivedFilenames.length + 1;
|
|
88
|
+
if (config.maxFiles < 1 || fileCount < config.maxFiles) {
|
|
89
|
+
archivedFilenames.push(filename + "." + padStart(fileCount.toString(10), 4, "0"));
|
|
90
|
+
}
|
|
91
|
+
Fs.fdatasyncSync(file);
|
|
92
|
+
Fs.closeSync(file);
|
|
93
|
+
file = state.file = undefined;
|
|
94
|
+
const filenames = [filename, ...archivedFilenames];
|
|
95
|
+
let dest = filenames.pop();
|
|
96
|
+
while (filenames.length) {
|
|
97
|
+
let src = filenames.pop();
|
|
98
|
+
if (!Fs.existsSync(src)) {
|
|
99
|
+
debug(`src does not exist, skipping ${src}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
debug(`Moving src (${src}) to dest (${dest})`);
|
|
103
|
+
if (Fs.existsSync(dest)) {
|
|
104
|
+
Fs.unlinkSync(dest);
|
|
105
|
+
}
|
|
106
|
+
Fs.renameSync(src, dest);
|
|
107
|
+
// if (src === filename) {
|
|
108
|
+
// Fs.copyFileSync(src, dest)
|
|
109
|
+
// Fs.truncateSync(src, 0)
|
|
110
|
+
// } else {
|
|
111
|
+
// Fs.renameSync(src, dest)
|
|
112
|
+
// }
|
|
113
|
+
}
|
|
114
|
+
dest = src;
|
|
115
|
+
}
|
|
116
|
+
assign(state, {
|
|
117
|
+
currentSize: 0,
|
|
118
|
+
file: Fs.openSync(filename, "a")
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Close the handler
|
|
123
|
+
*
|
|
124
|
+
* @returns {Promise<void>}
|
|
125
|
+
*/
|
|
126
|
+
close() {
|
|
127
|
+
return this.flush()
|
|
128
|
+
.onComplete(() => Option.of(this.state.file).map(Fs.closeSync))
|
|
129
|
+
.toPromise();
|
|
130
|
+
}
|
|
131
|
+
get queue() {
|
|
132
|
+
return this.state.queue;
|
|
133
|
+
}
|
|
134
|
+
get file() {
|
|
135
|
+
return this.state.file;
|
|
136
|
+
}
|
|
137
|
+
get flushing() {
|
|
138
|
+
return this.state.flushing;
|
|
139
|
+
}
|
|
140
|
+
get filename() {
|
|
141
|
+
return (this.state.filename = this.state.filename ?? this.config.filename);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Appends the log queue records to the file
|
|
145
|
+
*/
|
|
146
|
+
flush() {
|
|
147
|
+
const { state } = this;
|
|
148
|
+
return Future.do(async () => {
|
|
149
|
+
state.flushing = true;
|
|
150
|
+
try {
|
|
151
|
+
const { file } = this;
|
|
152
|
+
if (!file) {
|
|
153
|
+
throw Error(`${this.filename} was not opened properly`);
|
|
154
|
+
}
|
|
155
|
+
while (this.queue.length) {
|
|
156
|
+
const buf = this.queue.shift();
|
|
157
|
+
await Bluebird.fromCallback(cb => Fs.appendFile(file, buf, "utf-8", cb));
|
|
158
|
+
state.currentSize += buf.byteLength;
|
|
159
|
+
}
|
|
160
|
+
const { maxSize } = this.config;
|
|
161
|
+
if (maxSize > 0 && state.currentSize >= maxSize) {
|
|
162
|
+
this.rollFile();
|
|
163
|
+
}
|
|
164
|
+
//await Bluebird.fromCallback((cb) => Fs.fdatasync(this.file, cb))
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
console.error(`Failed to append file ${this.filename}`, err);
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
this.state.flushing = false;
|
|
171
|
+
if (this.queue.length) {
|
|
172
|
+
queueMicrotask(() => this.flush());
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Handle log records, transform, push to ES
|
|
179
|
+
*
|
|
180
|
+
* @param record
|
|
181
|
+
*/
|
|
182
|
+
append(record) {
|
|
183
|
+
try {
|
|
184
|
+
const { queue, filename } = this.state;
|
|
185
|
+
const count = queue.length;
|
|
186
|
+
if (count > 999) {
|
|
187
|
+
debug(`Too many log records (${count}) are in the queue without the file (${filename}) opening, skipping %O`, record);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const data = this.config.prettyPrint
|
|
191
|
+
? JSON.stringify(record, null, 2)
|
|
192
|
+
: JSON.stringify(record);
|
|
193
|
+
queue.push(Buffer.from(data + "\n", "utf-8"));
|
|
194
|
+
this.flush();
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
console.warn(`Failed to synchronize `, err);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
*
|
|
202
|
+
* @param {Partial<FileAppenderOptions<Record>>} options
|
|
203
|
+
*/
|
|
204
|
+
constructor(options = {}) {
|
|
205
|
+
this.config = applyConfigDefaults(options);
|
|
206
|
+
assign(this.state, {
|
|
207
|
+
filename: this.config.filename
|
|
208
|
+
});
|
|
209
|
+
this.setup();
|
|
210
|
+
debug(`File appender is ready, logging to ${this.state.filename}`);
|
|
211
|
+
// return this
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZUFwcGVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xvZ2dpbmcvYXBwZW5kZXJzL0ZpbGVBcHBlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDbkQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFHeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQy9CLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFFL0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQTtBQUUzQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtBQUM5QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUE7QUFDL0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUEsQ0FBQyxFQUFFO0FBQy9FLE1BQU0sZ0JBQWdCLEdBQUcsR0FBdUIsRUFBRSxDQUFDLENBQUM7SUFDbEQsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQztJQUN2QyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWTtJQUNsRCxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsUUFBUSxF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QUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQzdDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNkLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksVUFBZ0QsRUFBRTtRQUM1RCxJQUFJLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7U0FDL0IsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1osS0FBSyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDbEUsbUJBQW1CO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2lnbiwgZGVmYXVsdHMsIHBhZFN0YXJ0IH0gZnJvbSBcImxvZGFzaFwiXG5pbXBvcnQgKiBhcyBQYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCAqIGFzIEZzIGZyb20gXCJmc1wiXG5pbXBvcnQgdHlwZSB7IExvZ1JlY29yZCB9IGZyb20gXCIuLi9Mb2dSZWNvcmRcIlxuaW1wb3J0IHR5cGUgeyBBcHBlbmRlciB9IGZyb20gXCIuLi9BcHBlbmRlclwiXG5pbXBvcnQgeyBPcHRpb24sIEZ1dHVyZSB9IGZyb20gXCJAM2Z2L3ByZWx1ZGUtdHNcIlxuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcImJ1ZmZlclwiXG5pbXBvcnQgRGVidWcgZnJvbSBcImRlYnVnXCJcbmltcG9ydCBCbHVlYmlyZCBmcm9tIFwiYmx1ZWJpcmRcIlxuXG5jb25zdCBGc0FzeW5jID0gRnMucHJvbWlzZXNcblxuY29uc3QgZGVidWcgPSBEZWJ1ZyhcIjNmdjpsb2dnZXI6RmlsZUFwcGVuZGVyXCIpXG5jb25zdCBvc1RlbXBEaXIgPSBwcm9jZXNzLmVudi5UTVAgPz8gcHJvY2Vzcy5lbnYuVEVNUCA/PyBcIi90bXBcIlxuY29uc3QgdGVtcERpciA9IEZzLm1rZHRlbXBTeW5jKFBhdGguam9pbihvc1RlbXBEaXIsIFwibG9nZ2VyLXByb3h5LWV4YW1wbGVcIikpIC8vXG5jb25zdCBnZXREZWZhdWx0Q29uZmlnID0gKCk6IEZpbGVBcHBlbmRlckNvbmZpZyA9PiAoe1xuICBmaWxlbmFtZTogUGF0aC5qb2luKHRlbXBEaXIsIFwiYXBwLmxvZ1wiKSxcbiAgcHJldHR5UHJpbnQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIixcbiAgbWF4U2l6ZTogLTEsXG4gIG1heEZpbGVzOiA1LFxuICBlbmFibGVSb2xsaW5nOiBmYWxzZSxcbiAgc3luYzogZmFsc2Vcbn0pXG5cbmZ1bmN0aW9uIGFwcGx5Q29uZmlnRGVmYXVsdHMob3B0aW9uczogRmlsZUFwcGVuZGVyT3B0aW9ucyk6IEZpbGVBcHBlbmRlckNvbmZpZyB7XG4gIHJldHVybiBkZWZhdWx0cyhvcHRpb25zLCBnZXREZWZhdWx0Q29uZmlnKCkpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUFwcGVuZGVyQ29uZmlnPFJlY29yZCBleHRlbmRzIExvZ1JlY29yZCA9IGFueT4ge1xuICBmaWxlbmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZvciByb2xsaW5nXG4gICAqL1xuICBtYXhGaWxlczogbnVtYmVyXG5cbiAgLyoqXG4gICAqIEZvciByb2xsaW5nXG4gICAqL1xuICBtYXhTaXplOiBudW1iZXJcblxuICBlbmFibGVSb2xsaW5nOiBib29sZWFuXG4gIHByZXR0eVByaW50OiBib29sZWFuXG4gIHN5bmM6IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgRmlsZUFwcGVuZGVyT3B0aW9uczxSZWNvcmQgZXh0ZW5kcyBMb2dSZWNvcmQgPSBhbnk+ID0gUGFydGlhbDxcbiAgRmlsZUFwcGVuZGVyQ29uZmlnPFJlY29yZD5cbj5cblxuZXhwb3J0IGNsYXNzIEZpbGVBcHBlbmRlcjxcbiAgUmVjb3JkIGV4dGVuZHMgTG9nUmVjb3JkXG4+IGltcGxlbWVudHMgQXBwZW5kZXI8UmVjb3JkPiB7XG4gIHJlYWRvbmx5IGNvbmZpZzogRmlsZUFwcGVuZGVyQ29uZmlnPFJlY29yZD5cblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlOiB7XG4gICAgZmlsZW5hbWU6IHN0cmluZ1xuICAgIGZpbGU6IG51bWJlclxuICAgIGZsdXNoaW5nOiBib29sZWFuXG4gICAgcXVldWU6IEFycmF5PEJ1ZmZlcj5cbiAgICByZWFkeTogYm9vbGVhblxuICAgIGVycm9yPzogRXJyb3JcbiAgICBjdXJyZW50U2l6ZTogbnVtYmVyXG4gICAgYXJjaGl2ZWRGaWxlbmFtZXM6IHN0cmluZ1tdXG4gIH0gPSB7XG4gICAgYXJjaGl2ZWRGaWxlbmFtZXM6IFtdLFxuICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsXG4gICAgZmlsZTogdW5kZWZpbmVkLFxuICAgIHJlYWR5OiBmYWxzZSxcbiAgICBjdXJyZW50U2l6ZTogMCxcbiAgICBmbHVzaGluZzogZmFsc2UsXG4gICAgcXVldWU6IFtdXG4gIH1cblxuICBnZXQgZW5hYmxlUm9sbGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZW5hYmxlUm9sbGluZ1xuICB9XG5cbiAgaXNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5yZWFkeVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW5kIHNldHVwIHRoZSBhcHBlbmRlclxuICAgKlxuICAgKiBAcmV0dXJucyB7RmlsZUFwcGVuZGVyPFJlY29yZD59XG4gICAqL1xuICBzZXR1cCgpOiBGaWxlQXBwZW5kZXI8UmVjb3JkPiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdGhpc1xuICAgIGlmICghIXN0YXRlLnJlYWR5KSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSB0aGlzXG4gICAgICBjb25zdCBmaWxlID0gRnMub3BlblN5bmMoZmlsZW5hbWUsIFwiYVwiKVxuXG4gICAgICBhc3NpZ24oc3RhdGUsIHtcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHJlYWR5OiB0cnVlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXNzaWduKHN0YXRlLCB7XG4gICAgICAgIGVycm9yOiBlcnIsXG4gICAgICAgIGZpbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVhZHk6IGZhbHNlXG4gICAgICB9KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgZXhwb3NlZCBmb3IgdGhlIHNha2Ugb2YgdGVzdHMgJiBleGFtcGxlc1xuICAgKiBETyBOT1QgVVNFXG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIGFsbCBiZSBhc3luYywgYnV0IGkgd2FzIGluIGEgcnVzaCA6KFxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcm9sbEZpbGUoKSB7XG4gICAgY29uc3QgeyBzdGF0ZSwgY29uZmlnIH0gPSB0aGlzXG4gICAgbGV0IHsgZmlsZSwgZmlsZW5hbWUsIGFyY2hpdmVkRmlsZW5hbWVzIH0gPSBzdGF0ZVxuICAgIGlmICghdGhpcy5pc1JlYWR5KCkgfHwgIWZpbGUpIHtcbiAgICAgIGRlYnVnKGBDYW4gbm90IHJvbGwgZmlsZSBiZWZvcmUgcmVhZHlgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmVuYWJsZVJvbGxpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGZpbGVDb3VudCA9IGFyY2hpdmVkRmlsZW5hbWVzLmxlbmd0aCArIDFcbiAgICBpZiAoY29uZmlnLm1heEZpbGVzIDwgMSB8fCBmaWxlQ291bnQgPCBjb25maWcubWF4RmlsZXMpIHtcbiAgICAgIGFyY2hpdmVkRmlsZW5hbWVzLnB1c2goXG4gICAgICAgIGZpbGVuYW1lICsgXCIuXCIgKyBwYWRTdGFydChmaWxlQ291bnQudG9TdHJpbmcoMTApLCA0LCBcIjBcIilcbiAgICAgIClcbiAgICB9XG4gICAgRnMuZmRhdGFzeW5jU3luYyhmaWxlKVxuICAgIEZzLmNsb3NlU3luYyhmaWxlKVxuICAgIGZpbGUgPSBzdGF0ZS5maWxlID0gdW5kZWZpbmVkXG4gICAgY29uc3QgZmlsZW5hbWVzID0gW2ZpbGVuYW1lLCAuLi5hcmNoaXZlZEZpbGVuYW1lc11cblxuICAgIGxldCBkZXN0OiBzdHJpbmcgPSBmaWxlbmFtZXMucG9wKClcbiAgICB3aGlsZSAoZmlsZW5hbWVzLmxlbmd0aCkge1xuICAgICAgbGV0IHNyYyA9IGZpbGVuYW1lcy5wb3AoKVxuICAgICAgaWYgKCFGcy5leGlzdHNTeW5jKHNyYykpIHtcbiAgICAgICAgZGVidWcoYHNyYyBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcgJHtzcmN9YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKGBNb3Zpbmcgc3JjICgke3NyY30pIHRvIGRlc3QgKCR7ZGVzdH0pYClcbiAgICAgICAgaWYgKEZzLmV4aXN0c1N5bmMoZGVzdCkpIHtcbiAgICAgICAgICBGcy51bmxpbmtTeW5jKGRlc3QpXG4gICAgICAgIH1cbiAgICAgICAgRnMucmVuYW1lU3luYyhzcmMsIGRlc3QpXG4gICAgICAgIC8vIGlmIChzcmMgPT09IGZpbGVuYW1lKSB7XG4gICAgICAgIC8vICAgRnMuY29weUZpbGVTeW5jKHNyYywgZGVzdClcbiAgICAgICAgLy8gICBGcy50cnVuY2F0ZVN5bmMoc3JjLCAwKVxuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgIEZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0KVxuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgICBkZXN0ID0gc3JjXG4gICAgfVxuXG4gICAgYXNzaWduKHN0YXRlLCB7XG4gICAgICBjdXJyZW50U2l6ZTogMCxcbiAgICAgIGZpbGU6IEZzLm9wZW5TeW5jKGZpbGVuYW1lLCBcImFcIilcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBoYW5kbGVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmx1c2goKVxuICAgICAgLm9uQ29tcGxldGUoKCkgPT4gT3B0aW9uLm9mKHRoaXMuc3RhdGUuZmlsZSkubWFwKEZzLmNsb3NlU3luYykpXG4gICAgICAudG9Qcm9taXNlKClcbiAgfVxuXG4gIGdldCBxdWV1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5xdWV1ZVxuICB9XG5cbiAgZ2V0IGZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZmlsZVxuICB9XG5cbiAgZ2V0IGZsdXNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmZsdXNoaW5nXG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0YXRlLmZpbGVuYW1lID0gdGhpcy5zdGF0ZS5maWxlbmFtZSA/PyB0aGlzLmNvbmZpZy5maWxlbmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIHRoZSBsb2cgcXVldWUgcmVjb3JkcyB0byB0aGUgZmlsZVxuICAgKi9cbiAgcHJpdmF0ZSBmbHVzaCgpIHtcbiAgICBjb25zdCB7IHN0YXRlIH0gPSB0aGlzXG4gICAgcmV0dXJuIEZ1dHVyZS5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBzdGF0ZS5mbHVzaGluZyA9IHRydWVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZmlsZSB9ID0gdGhpc1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihgJHt0aGlzLmZpbGVuYW1lfSB3YXMgbm90IG9wZW5lZCBwcm9wZXJseWApXG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMucXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgYnVmOiBCdWZmZXIgPSB0aGlzLnF1ZXVlLnNoaWZ0KClcblxuICAgICAgICAgIGF3YWl0IEJsdWViaXJkLmZyb21DYWxsYmFjayhjYiA9PlxuICAgICAgICAgICAgRnMuYXBwZW5kRmlsZShmaWxlLCBidWYsIFwidXRmLThcIiwgY2IpXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgc3RhdGUuY3VycmVudFNpemUgKz0gYnVmLmJ5dGVMZW5ndGhcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgbWF4U2l6ZSB9ID0gdGhpcy5jb25maWdcbiAgICAgICAgaWYgKG1heFNpemUgPiAwICYmIHN0YXRlLmN1cnJlbnRTaXplID49IG1heFNpemUpIHtcbiAgICAgICAgICB0aGlzLnJvbGxGaWxlKClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vYXdhaXQgQmx1ZWJpcmQuZnJvbUNhbGxiYWNrKChjYikgPT4gRnMuZmRhdGFzeW5jKHRoaXMuZmlsZSwgY2IpKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBhcHBlbmQgZmlsZSAke3RoaXMuZmlsZW5hbWV9YCwgZXJyKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5zdGF0ZS5mbHVzaGluZyA9IGZhbHNlXG4gICAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuZmx1c2goKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGxvZyByZWNvcmRzLCB0cmFuc2Zvcm0sIHB1c2ggdG8gRVNcbiAgICpcbiAgICogQHBhcmFtIHJlY29yZFxuICAgKi9cbiAgYXBwZW5kKHJlY29yZDogUmVjb3JkKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcXVldWUsIGZpbGVuYW1lIH0gPSB0aGlzLnN0YXRlXG4gICAgICBjb25zdCBjb3VudCA9IHF1ZXVlLmxlbmd0aFxuICAgICAgaWYgKGNvdW50ID4gOTk5KSB7XG4gICAgICAgIGRlYnVnKFxuICAgICAgICAgIGBUb28gbWFueSBsb2cgcmVjb3JkcyAoJHtjb3VudH0pIGFyZSBpbiB0aGUgcXVldWUgd2l0aG91dCB0aGUgZmlsZSAoJHtmaWxlbmFtZX0pIG9wZW5pbmcsIHNraXBwaW5nICVPYCxcbiAgICAgICAgICByZWNvcmRcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY29uZmlnLnByZXR0eVByaW50XG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkocmVjb3JkLCBudWxsLCAyKVxuICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHJlY29yZClcbiAgICAgIHF1ZXVlLnB1c2goQnVmZmVyLmZyb20oZGF0YSArIFwiXFxuXCIsIFwidXRmLThcIikpXG4gICAgICB0aGlzLmZsdXNoKClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHN5bmNocm9uaXplIGAsIGVycilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEZpbGVBcHBlbmRlck9wdGlvbnM8UmVjb3JkPj59IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnRpYWw8RmlsZUFwcGVuZGVyT3B0aW9uczxSZWNvcmQ+PiA9IHt9KSB7XG4gICAgdGhpcy5jb25maWcgPSBhcHBseUNvbmZpZ0RlZmF1bHRzKG9wdGlvbnMpXG5cbiAgICBhc3NpZ24odGhpcy5zdGF0ZSwge1xuICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLmZpbGVuYW1lXG4gICAgfSlcblxuICAgIHRoaXMuc2V0dXAoKVxuICAgIGRlYnVnKGBGaWxlIGFwcGVuZGVyIGlzIHJlYWR5LCBsb2dnaW5nIHRvICR7dGhpcy5zdGF0ZS5maWxlbmFtZX1gKVxuICAgIC8vICAgICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import AWSFirehoseCredentialManager from "./AWSFirehoseCredentialManager.js";
|
|
2
|
+
import { LogRecord } from "../../LogRecord.js";
|
|
3
|
+
import { Appender } from "../../Appender.js";
|
|
4
|
+
export declare class AWSFirehoseAppender<Record extends LogRecord = LogRecord> implements Appender<Record> {
|
|
5
|
+
readonly credentialEndpointUrl: string;
|
|
6
|
+
private pendingRecords;
|
|
7
|
+
private flushDeferred;
|
|
8
|
+
private flushIntervalMs;
|
|
9
|
+
readonly credentialManager: AWSFirehoseCredentialManager;
|
|
10
|
+
constructor(credentialEndpointUrl: string);
|
|
11
|
+
append(record: Record): void;
|
|
12
|
+
/**
|
|
13
|
+
* Create the firehose client and return
|
|
14
|
+
*
|
|
15
|
+
* @param {IAWSTemporaryCredentials} credentials
|
|
16
|
+
* @param {boolean} flush
|
|
17
|
+
* @returns {Firehose}
|
|
18
|
+
*/
|
|
19
|
+
private getFirehose;
|
|
20
|
+
/**
|
|
21
|
+
* Flush pending records
|
|
22
|
+
*
|
|
23
|
+
* @returns {Promise<void>}
|
|
24
|
+
*/
|
|
25
|
+
private flush;
|
|
26
|
+
}
|
|
27
|
+
export default AWSFirehoseAppender;
|
|
28
|
+
//# sourceMappingURL=AWSFirehoseAppender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AWSFirehoseAppender.d.ts","sourceRoot":"","sources":["../../../../../src/logging/appenders/aws-firehose/AWSFirehoseAppender.ts"],"names":[],"mappings":"AASA,OAAO,4BAA4B,MAAM,mCAAmC,CAAA;AAK5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAM5C,qBAAa,mBAAmB,CAAC,MAAM,SAAS,SAAS,GAAG,SAAS,CACnE,YAAW,QAAQ,CAAC,MAAM,CAAC;aAQT,qBAAqB,EAAE,MAAM;IAP/C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAQ;IAE/B,SAAgB,iBAAiB,EAAE,4BAA4B,CAAA;gBAG7C,qBAAqB,EAAE,MAAM;IAc/C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAoB5B;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAsBnB;;;;OAIG;YACW,KAAK;CA+EpB;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { FirehoseClient, PutRecordBatchCommand } from "@aws-sdk/client-firehose";
|
|
2
|
+
import { ExpiredTokenException, } from "@aws-sdk/client-sts";
|
|
3
|
+
import AWSFirehoseCredentialManager from "./AWSFirehoseCredentialManager.js";
|
|
4
|
+
import { getInternalLogger } from "../../InternalLogger.js";
|
|
5
|
+
import { pick } from "lodash";
|
|
6
|
+
import { Deferred } from "../../../helpers/index.js";
|
|
7
|
+
const LogQueueMaxRecords = 10000;
|
|
8
|
+
const log = getInternalLogger();
|
|
9
|
+
export class AWSFirehoseAppender {
|
|
10
|
+
credentialEndpointUrl;
|
|
11
|
+
pendingRecords = Array();
|
|
12
|
+
flushDeferred;
|
|
13
|
+
flushIntervalMs = 1000;
|
|
14
|
+
credentialManager;
|
|
15
|
+
constructor(credentialEndpointUrl) {
|
|
16
|
+
this.credentialEndpointUrl = credentialEndpointUrl;
|
|
17
|
+
this.credentialManager = new AWSFirehoseCredentialManager(credentialEndpointUrl);
|
|
18
|
+
this.credentialManager.on("received", () => {
|
|
19
|
+
log.info("Credentials received, initializing firehose client");
|
|
20
|
+
if (!this.pendingRecords.length || !!this.flushDeferred) {
|
|
21
|
+
log.debug("Nothing to flush upon credential receipt OR flush already in progress");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.flush()
|
|
25
|
+
.catch((e) => {
|
|
26
|
+
log.error(`Error flushing logs after credential receipt: ${e.message}`, e);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
append(record) {
|
|
31
|
+
const pendingCount = this.pendingRecords.length + 1, removeCount = LogQueueMaxRecords - pendingCount;
|
|
32
|
+
if (removeCount < 0) {
|
|
33
|
+
this.pendingRecords.splice(0, Math.abs(removeCount));
|
|
34
|
+
}
|
|
35
|
+
this.pendingRecords.push({
|
|
36
|
+
timestamp: Date.now(),
|
|
37
|
+
...record,
|
|
38
|
+
app: record.app?.length > 0 ? record.app : "UNKNOWN",
|
|
39
|
+
env: record.env?.length > 0 ? record.env : "UNKNOWN",
|
|
40
|
+
url: typeof window === "undefined" ? "local://" : window.location.href,
|
|
41
|
+
});
|
|
42
|
+
this.flush();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create the firehose client and return
|
|
46
|
+
*
|
|
47
|
+
* @param {IAWSTemporaryCredentials} credentials
|
|
48
|
+
* @param {boolean} flush
|
|
49
|
+
* @returns {Firehose}
|
|
50
|
+
*/
|
|
51
|
+
getFirehose() {
|
|
52
|
+
const creds = this.credentialManager.getCredentials();
|
|
53
|
+
if (!creds) {
|
|
54
|
+
log.warn("No credentials available for flush");
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const { region, streamName } = creds;
|
|
58
|
+
if (!region || !streamName) {
|
|
59
|
+
throw new Error("Region or stream name not available");
|
|
60
|
+
}
|
|
61
|
+
const client = new FirehoseClient({
|
|
62
|
+
region: creds.region,
|
|
63
|
+
credentials: pick(creds, "accessKeyId", "secretAccessKey", "sessionToken"),
|
|
64
|
+
});
|
|
65
|
+
return client;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Flush pending records
|
|
69
|
+
*
|
|
70
|
+
* @returns {Promise<void>}
|
|
71
|
+
*/
|
|
72
|
+
async flush() {
|
|
73
|
+
if (!!this.flushDeferred) {
|
|
74
|
+
log.debug("Flush already in progress, skipping");
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (!this.pendingRecords.length) {
|
|
78
|
+
log.debug("No pending records to flush");
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const creds = this.credentialManager.getCredentials();
|
|
82
|
+
if (!creds) {
|
|
83
|
+
log.warn("No credentials available for flush");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const { streamName } = creds, client = this.getFirehose();
|
|
87
|
+
if (!client) {
|
|
88
|
+
log.warn("No firehose client available, skipping flush");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const deferred = this.flushDeferred = new Deferred();
|
|
92
|
+
try {
|
|
93
|
+
while (this.pendingRecords.length) {
|
|
94
|
+
const chunkSize = Math.min(this.pendingRecords.length, 10), records = this.pendingRecords.splice(0, chunkSize), recordJsons = records.map(record => JSON.stringify(record));
|
|
95
|
+
if (log.isDebugEnabled())
|
|
96
|
+
log.debug("Records", records);
|
|
97
|
+
const textEncoder = new TextEncoder(), batch = recordJsons.map(jsonStr => ({
|
|
98
|
+
Data: textEncoder.encode(jsonStr)
|
|
99
|
+
}));
|
|
100
|
+
log.info(`Pushing ${records.length} records to firehose`);
|
|
101
|
+
const cmd = new PutRecordBatchCommand({
|
|
102
|
+
DeliveryStreamName: streamName,
|
|
103
|
+
Records: batch,
|
|
104
|
+
});
|
|
105
|
+
const resp = await client.send(cmd);
|
|
106
|
+
const failed = resp.FailedPutCount || 0;
|
|
107
|
+
if (failed) {
|
|
108
|
+
const rr = resp.RequestResponses || [];
|
|
109
|
+
for (let i = 0; i < rr.length; i++) {
|
|
110
|
+
if (rr[i].ErrorCode) {
|
|
111
|
+
log.warn(`Record failed: ${rr[i].ErrorCode} ${rr[i].ErrorMessage}`);
|
|
112
|
+
//this.pendingRecords.unshift(records[i])
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
log.info(`PutRecordBatch failed=${failed}; requeued failed records`);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
log.info(`PutRecordBatch ok count=${records.length}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
log.error("Failed to push logs", err);
|
|
124
|
+
if (err.code === ExpiredTokenException) {
|
|
125
|
+
this.credentialManager.forceUpdateCredentials();
|
|
126
|
+
}
|
|
127
|
+
deferred.reject(err);
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
this.flushDeferred = null;
|
|
131
|
+
// if (this.pendingRecords.length)
|
|
132
|
+
// this.flush()
|
|
133
|
+
}
|
|
134
|
+
return deferred.promise;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export default AWSFirehoseAppender;
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVdTRmlyZWhvc2VBcHBlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9sb2dnaW5nL2FwcGVuZGVycy9hd3MtZmlyZWhvc2UvQVdTRmlyZWhvc2VBcHBlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLDBCQUEwQixDQUFBO0FBQ3JHLE9BQU8sRUFFTCxxQkFBcUIsR0FDdEIsTUFBTSxxQkFBcUIsQ0FBQTtBQUc1QixPQUFPLDRCQUE0QixNQUFNLG1DQUFtQyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBRTNELE9BQU8sRUFBVyxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBSXBELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFBO0FBRWhDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixFQUFFLENBQUE7QUFFL0IsTUFBTSxPQUFPLG1CQUFtQjtJQVNaO0lBUFYsY0FBYyxHQUFHLEtBQUssRUFBYSxDQUFBO0lBQ25DLGFBQWEsQ0FBZ0I7SUFDN0IsZUFBZSxHQUFHLElBQUksQ0FBQztJQUVmLGlCQUFpQixDQUE4QjtJQUUvRCxZQUNrQixxQkFBNkI7UUFBN0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFRO1FBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLDRCQUE0QixDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtZQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUks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QkFBcUIsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtZQUNqRCxDQUFDO1lBQ0QsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtZQUV6QixrQ0FBa0M7WUFDbEMsaUJBQWlCO1FBQ25CLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUE7SUFDekIsQ0FBQztDQUdGO0FBRUQsZUFBZSxtQkFBbUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHR5cGVzY3JpcHQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uLy4uL2d1YXJkcy9wcmltaXRpdmUuanMnXG5pbXBvcnQgeyBGaXJlaG9zZUNsaWVudCwgUHV0UmVjb3JkQmF0Y2hDb21tYW5kLCBQdXRSZWNvcmRCYXRjaElucHV0IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1maXJlaG9zZVwiXG5pbXBvcnQge1xuICBDcmVkZW50aWFscyBhcyBJQVdTVGVtcG9yYXJ5Q3JlZGVudGlhbHMsXG4gIEV4cGlyZWRUb2tlbkV4Y2VwdGlvbixcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zdHNcIlxuaW1wb3J0IHsgTGV2ZWwgfSBmcm9tIFwiLi4vLi4vTGV2ZWwuanNcIlxuXG5pbXBvcnQgQVdTRmlyZWhvc2VDcmVkZW50aWFsTWFuYWdlciBmcm9tIFwiLi9BV1NGaXJlaG9zZUNyZWRlbnRpYWxNYW5hZ2VyLmpzXCJcbmltcG9ydCB7IGdldEludGVybmFsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0ludGVybmFsTG9nZ2VyLmpzXCJcbmltcG9ydCB7IGdldFZhbHVlLCBndWFyZCB9IGZyb20gXCIuLi8uLi8uLi9ndWFyZHMvaW5kZXguanNcIlxuaW1wb3J0IHsgaXNFbXB0eSwgcGljayB9IGZyb20gXCJsb2Rhc2hcIlxuaW1wb3J0IHsgRGVmZXJyZWQgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9pbmRleC5qc1wiXG5pbXBvcnQgeyBMb2dSZWNvcmQgfSBmcm9tIFwiLi4vLi4vTG9nUmVjb3JkLmpzXCJcbmltcG9ydCB7IEFwcGVuZGVyIH0gZnJvbSBcIi4uLy4uL0FwcGVuZGVyLmpzXCJcblxuY29uc3QgTG9nUXVldWVNYXhSZWNvcmRzID0gMTAwMDBcblxuY29uc3QgbG9nID0gZ2V0SW50ZXJuYWxMb2dnZXIoKVxuXG5leHBvcnQgY2xhc3MgQVdTRmlyZWhvc2VBcHBlbmRlcjxSZWNvcmQgZXh0ZW5kcyBMb2dSZWNvcmQgPSBMb2dSZWNvcmQ+XG4gIGltcGxlbWVudHMgQXBwZW5kZXI8UmVjb3JkPiB7XG4gIHByaXZhdGUgcGVuZGluZ1JlY29yZHMgPSBBcnJheTxMb2dSZWNvcmQ+KClcbiAgcHJpdmF0ZSBmbHVzaERlZmVycmVkOiBEZWZlcnJlZDx2b2lkPlxuICBwcml2YXRlIGZsdXNoSW50ZXJ2YWxNcyA9IDEwMDA7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxNYW5hZ2VyOiBBV1NGaXJlaG9zZUNyZWRlbnRpYWxNYW5hZ2VyXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxFbmRwb2ludFVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5jcmVkZW50aWFsTWFuYWdlciA9IG5ldyBBV1NGaXJlaG9zZUNyZWRlbnRpYWxNYW5hZ2VyKGNyZWRlbnRpYWxFbmRwb2ludFVybClcbiAgICB0aGlzLmNyZWRlbnRpYWxNYW5hZ2VyLm9uKFwicmVjZWl2ZWRcIiwgKCkgPT4ge1xuICAgICAgbG9nLmluZm8oXCJDcmVkZW50aWFscyByZWNlaXZlZCwgaW5pdGlhbGl6aW5nIGZpcmVob3NlIGNsaWVudFwiKVxuICAgICAgaWYgKCF0aGlzLnBlbmRpbmdSZWNvcmRzLmxlbmd0aCB8fCAhIXRoaXMuZmx1c2hEZWZlcnJlZCkge1xuICAgICAgICBsb2cuZGVidWcoXCJOb3RoaW5nIHRvIGZsdXNoIHVwb24gY3JlZGVudGlhbCByZWNlaXB0IE9SIGZsdXNoIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLmZsdXNoKClcbiAgICAgICAgLmNhdGNoKChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihgRXJyb3IgZmx1c2hpbmcgbG9ncyBhZnRlciBjcmVkZW50aWFsIHJlY2VpcHQ6ICR7ZS5tZXNzYWdlfWAsIGUpXG4gICAgICAgIH0pXG4gICAgfSlcbiAgfVxuICBhcHBlbmQocmVjb3JkOiBSZWNvcmQpOiB2b2lkIHtcbiAgICBjb25zdFxuICAgICAgcGVuZGluZ0NvdW50ID0gdGhpcy5wZW5kaW5nUmVjb3Jkcy5sZW5ndGggKyAxLFxuICAgICAgcmVtb3ZlQ291bnQgPSBMb2dRdWV1ZU1heFJlY29yZHMgLSBwZW5kaW5nQ291bnRcblxuICAgIGlmIChyZW1vdmVDb3VudCA8IDApIHtcbiAgICAgIHRoaXMucGVuZGluZ1JlY29yZHMuc3BsaWNlKDAsIE1hdGguYWJzKHJlbW92ZUNvdW50KSlcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdSZWNvcmRzLnB1c2goe1xuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgLi4ucmVjb3JkLFxuICAgICAgYXBwOiByZWNvcmQuYXBwPy5sZW5ndGggPiAwID8gcmVjb3JkLmFwcCA6IFwiVU5LTk9XTlwiLFxuICAgICAgZW52OiByZWNvcmQuZW52Py5sZW5ndGggPiAwID8gcmVjb3JkLmVudiA6IFwiVU5LTk9XTlwiLFxuICAgICAgdXJsOiB0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiID8gXCJsb2NhbDovL1wiIDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgfSlcblxuICAgIHRoaXMuZmx1c2goKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgZmlyZWhvc2UgY2xpZW50IGFuZCByZXR1cm5cbiAgICpcbiAgICogQHBhcmFtIHtJQVdTVGVtcG9yYXJ5Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmx1c2hcbiAgICogQHJldHVybnMge0ZpcmVob3NlfVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJlaG9zZSgpOiBGaXJlaG9zZUNsaWVudCB7XG4gICAgY29uc3QgY3JlZHMgPSB0aGlzLmNyZWRlbnRpYWxNYW5hZ2VyLmdldENyZWRlbnRpYWxzKClcblxuICAgIGlmICghY3JlZHMpIHtcbiAgICAgIGxvZy53YXJuKFwiTm8gY3JlZGVudGlhbHMgYXZhaWxhYmxlIGZvciBmbHVzaFwiKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlZ2lvbiwgc3RyZWFtTmFtZSB9ID0gY3JlZHNcblxuICAgIGlmICghcmVnaW9uIHx8ICFzdHJlYW1OYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWdpb24gb3Igc3RyZWFtIG5hbWUgbm90IGF2YWlsYWJsZVwiKVxuICAgIH1cblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBGaXJlaG9zZUNsaWVudCh7XG4gICAgICByZWdpb246IGNyZWRzLnJlZ2lvbixcbiAgICAgIGNyZWRlbnRpYWxzOiBwaWNrKGNyZWRzLCBcImFjY2Vzc0tleUlkXCIsIFwic2VjcmV0QWNjZXNzS2V5XCIsIFwic2Vzc2lvblRva2VuXCIpLFxuICAgIH0pXG5cbiAgICByZXR1cm4gY2xpZW50XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggcGVuZGluZyByZWNvcmRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoISF0aGlzLmZsdXNoRGVmZXJyZWQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhcIkZsdXNoIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHNraXBwaW5nXCIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucGVuZGluZ1JlY29yZHMubGVuZ3RoKSB7XG4gICAgICBsb2cuZGVidWcoXCJObyBwZW5kaW5nIHJlY29yZHMgdG8gZmx1c2hcIilcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBjcmVkcyA9IHRoaXMuY3JlZGVudGlhbE1hbmFnZXIuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZHMpIHtcbiAgICAgIGxvZy53YXJuKFwiTm8gY3JlZGVudGlhbHMgYXZhaWxhYmxlIGZvciBmbHVzaFwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHsgc3RyZWFtTmFtZSB9ID0gY3JlZHMsXG4gICAgICBjbGllbnQgPSB0aGlzLmdldEZpcmVob3NlKClcbiAgICBpZiAoIWNsaWVudCkge1xuICAgICAgbG9nLndhcm4oXCJObyBmaXJlaG9zZSBjbGllbnQgYXZhaWxhYmxlLCBza2lwcGluZyBmbHVzaFwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGVmZXJyZWQgPSB0aGlzLmZsdXNoRGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQ8dm9pZD4oKVxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodGhpcy5wZW5kaW5nUmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICBjaHVua1NpemUgPSBNYXRoLm1pbih0aGlzLnBlbmRpbmdSZWNvcmRzLmxlbmd0aCwgMTApLFxuICAgICAgICAgIHJlY29yZHMgPSB0aGlzLnBlbmRpbmdSZWNvcmRzLnNwbGljZSgwLCBjaHVua1NpemUpLFxuICAgICAgICAgIHJlY29yZEpzb25zID0gcmVjb3Jkcy5tYXAocmVjb3JkID0+IEpTT04uc3RyaW5naWZ5KHJlY29yZCkpXG5cbiAgICAgICAgaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKVxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIlJlY29yZHNcIiwgcmVjb3JkcylcblxuICAgICAgICBjb25zdFxuICAgICAgICAgIHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCksXG4gICAgICAgICAgYmF0Y2g6IFB1dFJlY29yZEJhdGNoSW5wdXRbXCJSZWNvcmRzXCJdID0gcmVjb3JkSnNvbnMubWFwKGpzb25TdHIgPT4gKHtcbiAgICAgICAgICAgIERhdGE6IHRleHRFbmNvZGVyLmVuY29kZShqc29uU3RyKVxuICAgICAgICAgIH0pKVxuXG4gICAgICAgIGxvZy5pbmZvKGBQdXNoaW5nICR7cmVjb3Jkcy5sZW5ndGh9IHJlY29yZHMgdG8gZmlyZWhvc2VgKVxuXG4gICAgICAgIGNvbnN0IGNtZCA9IG5ldyBQdXRSZWNvcmRCYXRjaENvbW1hbmQoe1xuICAgICAgICAgIERlbGl2ZXJ5U3RyZWFtTmFtZTogc3RyZWFtTmFtZSxcbiAgICAgICAgICBSZWNvcmRzOiBiYXRjaCxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnNlbmQoY21kKVxuICAgICAgICBjb25zdCBmYWlsZWQgPSByZXNwLkZhaWxlZFB1dENvdW50IHx8IDBcbiAgICAgICAgaWYgKGZhaWxlZCkge1xuICAgICAgICAgIGNvbnN0IHJyID0gcmVzcC5SZXF1ZXN0UmVzcG9uc2VzIHx8IFtdXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJyW2ldLkVycm9yQ29kZSkge1xuICAgICAgICAgICAgICBsb2cud2FybihgUmVjb3JkIGZhaWxlZDogJHtycltpXS5FcnJvckNvZGV9ICR7cnJbaV0uRXJyb3JNZXNzYWdlfWApXG4gICAgICAgICAgICAgIC8vdGhpcy5wZW5kaW5nUmVjb3Jkcy51bnNoaWZ0KHJlY29yZHNbaV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5pbmZvKGBQdXRSZWNvcmRCYXRjaCBmYWlsZWQ9JHtmYWlsZWR9OyByZXF1ZXVlZCBmYWlsZWQgcmVjb3Jkc2ApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nLmluZm8oYFB1dFJlY29yZEJhdGNoIG9rIGNvdW50PSR7cmVjb3Jkcy5sZW5ndGh9YClcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoXCJGYWlsZWQgdG8gcHVzaCBsb2dzXCIsIGVycilcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gRXhwaXJlZFRva2VuRXhjZXB0aW9uKSB7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbE1hbmFnZXIuZm9yY2VVcGRhdGVDcmVkZW50aWFscygpXG4gICAgICB9XG4gICAgICBkZWZlcnJlZC5yZWplY3QoZXJyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZsdXNoRGVmZXJyZWQgPSBudWxsXG5cbiAgICAgIC8vIGlmICh0aGlzLnBlbmRpbmdSZWNvcmRzLmxlbmd0aClcbiAgICAgIC8vICAgdGhpcy5mbHVzaCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2VcbiAgfVxuXG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQVdTRmlyZWhvc2VBcHBlbmRlclxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import EventEmitter3 from "eventemitter3";
|
|
2
|
+
export interface AWSCredentials {
|
|
3
|
+
accessKeyId: string;
|
|
4
|
+
secretAccessKey: string;
|
|
5
|
+
sessionToken: string;
|
|
6
|
+
streamName: string;
|
|
7
|
+
region: string;
|
|
8
|
+
expiration: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AWSFirehoseCredentialManagerEventMap {
|
|
11
|
+
received: (creds: AWSCredentials) => void;
|
|
12
|
+
expired: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare class AWSFirehoseCredentialManager extends EventEmitter3<AWSFirehoseCredentialManagerEventMap> {
|
|
15
|
+
readonly credentialEndpointUrl: string;
|
|
16
|
+
private refreshTimer;
|
|
17
|
+
private loadDeferred;
|
|
18
|
+
constructor(credentialEndpointUrl: string);
|
|
19
|
+
forceUpdateCredentials(): void;
|
|
20
|
+
getCredentials(): AWSCredentials;
|
|
21
|
+
hasCredentials(): boolean;
|
|
22
|
+
private load;
|
|
23
|
+
scheduleRefresh(credsOrMillis: AWSCredentials | number): void;
|
|
24
|
+
getStreamName(): string;
|
|
25
|
+
getRegion(): string;
|
|
26
|
+
destroy(): void;
|
|
27
|
+
}
|
|
28
|
+
export default AWSFirehoseCredentialManager;
|
|
29
|
+
//# sourceMappingURL=AWSFirehoseCredentialManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AWSFirehoseCredentialManager.d.ts","sourceRoot":"","sources":["../../../../../src/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.ts"],"names":[],"mappings":"AAGA,OAAO,aAAa,MAAM,eAAe,CAAA;AAMzC,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;IACzC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,qBAAa,4BAA6B,SAAQ,aAAa,CAAC,oCAAoC,CAAC;aAMjF,qBAAqB,EAAE,MAAM;IAJ/C,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAAkC;gBAGpC,qBAAqB,EAAE,MAAM;IAK/C,sBAAsB,IAAI,IAAI;IAS9B,cAAc,IAAI,cAAc;IAmBhC,cAAc,IAAI,OAAO;YAIX,IAAI;IAyBlB,eAAe,CAAC,aAAa,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;IA4B7D,aAAa,IAAI,MAAM;IAIvB,SAAS,IAAI,MAAM;IAInB,OAAO,IAAI,IAAI;CAMhB;AAGD,eAAe,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Deferred } from "../../../helpers/index.js";
|
|
2
|
+
import { getInternalLogger } from "../../InternalLogger.js";
|
|
3
|
+
import EventEmitter3 from "eventemitter3";
|
|
4
|
+
const CRED_BUFFER_PADDING_MS = 3 * 60 * 1000; // 3 minutes
|
|
5
|
+
const log = getInternalLogger();
|
|
6
|
+
export class AWSFirehoseCredentialManager extends EventEmitter3 {
|
|
7
|
+
credentialEndpointUrl;
|
|
8
|
+
refreshTimer = null;
|
|
9
|
+
loadDeferred = null;
|
|
10
|
+
constructor(credentialEndpointUrl) {
|
|
11
|
+
super();
|
|
12
|
+
this.credentialEndpointUrl = credentialEndpointUrl;
|
|
13
|
+
}
|
|
14
|
+
forceUpdateCredentials() {
|
|
15
|
+
if (this.loadDeferred && !this.loadDeferred.isSettled()) {
|
|
16
|
+
this.loadDeferred.reject(new Error("force update"));
|
|
17
|
+
}
|
|
18
|
+
this.loadDeferred = null;
|
|
19
|
+
this.scheduleRefresh(1);
|
|
20
|
+
}
|
|
21
|
+
getCredentials() {
|
|
22
|
+
if (this.loadDeferred && this.loadDeferred.isFulfilled()) {
|
|
23
|
+
const creds = this.loadDeferred.getResult(), expMs = Date.parse(creds.expiration);
|
|
24
|
+
if (expMs <= Date.now()) {
|
|
25
|
+
log.info("Credentials expired");
|
|
26
|
+
this.loadDeferred = null;
|
|
27
|
+
this.scheduleRefresh(1);
|
|
28
|
+
this.emit("expired");
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return creds;
|
|
32
|
+
}
|
|
33
|
+
this.scheduleRefresh(1);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
hasCredentials() {
|
|
37
|
+
return this.getCredentials() != null;
|
|
38
|
+
}
|
|
39
|
+
async load() {
|
|
40
|
+
if (this.loadDeferred && !this.loadDeferred.isRejected())
|
|
41
|
+
return this.loadDeferred.promise;
|
|
42
|
+
const deferred = this.loadDeferred = new Deferred();
|
|
43
|
+
try {
|
|
44
|
+
const r = await fetch(this.credentialEndpointUrl, {
|
|
45
|
+
method: "GET",
|
|
46
|
+
credentials: "include",
|
|
47
|
+
});
|
|
48
|
+
if (!r.ok)
|
|
49
|
+
throw new Error(`creds http ${r.status}`);
|
|
50
|
+
const creds = await r.json();
|
|
51
|
+
this.scheduleRefresh(creds);
|
|
52
|
+
log.info(`Got creds, expire=${creds.expiration}, stream=${creds.streamName}, region=${creds.region}`);
|
|
53
|
+
deferred.resolve(creds);
|
|
54
|
+
this.emit("received", creds);
|
|
55
|
+
return deferred.promise;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
deferred.reject(e);
|
|
59
|
+
this.loadDeferred = null;
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
scheduleRefresh(credsOrMillis) {
|
|
64
|
+
if (this.refreshTimer) {
|
|
65
|
+
clearTimeout(this.refreshTimer);
|
|
66
|
+
this.refreshTimer = null;
|
|
67
|
+
}
|
|
68
|
+
if (!credsOrMillis)
|
|
69
|
+
return;
|
|
70
|
+
let refreshInMs;
|
|
71
|
+
if (typeof credsOrMillis === "number") {
|
|
72
|
+
refreshInMs = credsOrMillis;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const creds = credsOrMillis, expMs = Date.parse(creds.expiration);
|
|
76
|
+
refreshInMs = expMs - Date.now() - CRED_BUFFER_PADDING_MS;
|
|
77
|
+
}
|
|
78
|
+
refreshInMs = Math.max(100, refreshInMs);
|
|
79
|
+
this.refreshTimer = setTimeout(() => {
|
|
80
|
+
this.loadDeferred = null;
|
|
81
|
+
this.load().catch((e) => log.error(`refresh failed: ${e.message}`, e));
|
|
82
|
+
}, refreshInMs);
|
|
83
|
+
}
|
|
84
|
+
getStreamName() {
|
|
85
|
+
return this.getCredentials()?.streamName;
|
|
86
|
+
}
|
|
87
|
+
getRegion() {
|
|
88
|
+
return this.getCredentials()?.region;
|
|
89
|
+
}
|
|
90
|
+
destroy() {
|
|
91
|
+
this.scheduleRefresh(null);
|
|
92
|
+
if (!this.loadDeferred.isSettled())
|
|
93
|
+
this.loadDeferred.reject(new Error("destroyed"));
|
|
94
|
+
this.loadDeferred = null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export default AWSFirehoseCredentialManager;
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVdTRmlyZWhvc2VDcmVkZW50aWFsTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9sb2dnaW5nL2FwcGVuZGVycy9hd3MtZmlyZWhvc2UvQVdTRmlyZWhvc2VDcmVkZW50aWFsTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDM0QsT0FBTyxhQUFhLE1BQU0sZUFBZSxDQUFBO0FBRXpDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUEsQ0FBQyxZQUFZO0FBRXpELE1BQU0sR0FBRyxHQUFHLGlCQUFpQixFQUFFLENBQUE7QUFnQi9CLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxhQUFtRDtJQU1qRjtJQUpWLFlBQVksR0FBa0MsSUFBSSxDQUFDO0lBQ25ELFlBQVksR0FBNkIsSUFBSSxDQUFDO0lBRXRELFlBQ2tCLHFCQUE2QjtRQUU3QyxLQUFLLEVBQUUsQ0FBQTtRQUZTLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBUTtJQUcvQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMs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QTtZQUV0QyxXQUFXLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQTtRQUUzRCxDQUFDO1FBRUQsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRXhDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtZQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMvRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxVQUFVLENBQUE7SUFDMUMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLENBQUE7SUFDdEMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRTtZQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO0lBQzFCLENBQUM7Q0FDRjtBQUdELGVBQWUsNEJBQTRCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaXJlaG9zZUNsaWVudCwgUHV0UmVjb3JkQmF0Y2hDb21tYW5kIH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1maXJlaG9zZVwiXG5pbXBvcnQgeyBEZWZlcnJlZCB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL2luZGV4LmpzXCJcbmltcG9ydCB7IGdldEludGVybmFsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0ludGVybmFsTG9nZ2VyLmpzXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIzIGZyb20gXCJldmVudGVtaXR0ZXIzXCJcblxuY29uc3QgQ1JFRF9CVUZGRVJfUEFERElOR19NUyA9IDMgKiA2MCAqIDEwMDAgLy8gMyBtaW51dGVzXG5cbmNvbnN0IGxvZyA9IGdldEludGVybmFsTG9nZ2VyKClcblxuZXhwb3J0IGludGVyZmFjZSBBV1NDcmVkZW50aWFscyB7XG4gIGFjY2Vzc0tleUlkOiBzdHJpbmdcbiAgc2VjcmV0QWNjZXNzS2V5OiBzdHJpbmdcbiAgc2Vzc2lvblRva2VuOiBzdHJpbmdcbiAgc3RyZWFtTmFtZTogc3RyaW5nXG4gIHJlZ2lvbjogc3RyaW5nXG4gIGV4cGlyYXRpb246IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFXU0ZpcmVob3NlQ3JlZGVudGlhbE1hbmFnZXJFdmVudE1hcCB7XG4gIHJlY2VpdmVkOiAoY3JlZHM6IEFXU0NyZWRlbnRpYWxzKSA9PiB2b2lkXG4gIGV4cGlyZWQ6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNsYXNzIEFXU0ZpcmVob3NlQ3JlZGVudGlhbE1hbmFnZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIzPEFXU0ZpcmVob3NlQ3JlZGVudGlhbE1hbmFnZXJFdmVudE1hcD4ge1xuXG4gIHByaXZhdGUgcmVmcmVzaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IG51bGw7XG4gIHByaXZhdGUgbG9hZERlZmVycmVkOiBEZWZlcnJlZDxBV1NDcmVkZW50aWFscz4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjcmVkZW50aWFsRW5kcG9pbnRVcmw6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoKVxuICB9XG5cbiAgZm9yY2VVcGRhdGVDcmVkZW50aWFscygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkRGVmZXJyZWQgJiYgIXRoaXMubG9hZERlZmVycmVkLmlzU2V0dGxlZCgpKSB7XG4gICAgICB0aGlzLmxvYWREZWZlcnJlZC5yZWplY3QobmV3IEVycm9yKFwiZm9yY2UgdXBkYXRlXCIpKVxuICAgIH1cblxuICAgIHRoaXMubG9hZERlZmVycmVkID0gbnVsbFxuICAgIHRoaXMuc2NoZWR1bGVSZWZyZXNoKDEpXG4gIH1cblxuICBnZXRDcmVkZW50aWFscygpOiBBV1NDcmVkZW50aWFscyB7XG4gICAgaWYgKHRoaXMubG9hZERlZmVycmVkICYmIHRoaXMubG9hZERlZmVycmVkLmlzRnVsZmlsbGVkKCkpIHtcbiAgICAgIGNvbnN0IGNyZWRzID0gdGhpcy5sb2FkRGVmZXJyZWQuZ2V0UmVzdWx0KCksXG4gICAgICAgIGV4cE1zID0gRGF0ZS5wYXJzZShjcmVkcy5leHBpcmF0aW9uKVxuXG4gICAgICBpZiAoZXhwTXMgPD0gRGF0ZS5ub3coKSkge1xuICAgICAgICBsb2cuaW5mbyhcIkNyZWRlbnRpYWxzIGV4cGlyZWRcIilcbiAgICAgICAgdGhpcy5sb2FkRGVmZXJyZWQgPSBudWxsXG4gICAgICAgIHRoaXMuc2NoZWR1bGVSZWZyZXNoKDEpXG4gICAgICAgIHRoaXMuZW1pdChcImV4cGlyZWRcIilcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVkc1xuICAgIH1cblxuICAgIHRoaXMuc2NoZWR1bGVSZWZyZXNoKDEpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGhhc0NyZWRlbnRpYWxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENyZWRlbnRpYWxzKCkgIT0gbnVsbFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkKCk6IFByb21pc2U8QVdTQ3JlZGVudGlhbHM+IHtcbiAgICBpZiAodGhpcy5sb2FkRGVmZXJyZWQgJiYgIXRoaXMubG9hZERlZmVycmVkLmlzUmVqZWN0ZWQoKSlcbiAgICAgIHJldHVybiB0aGlzLmxvYWREZWZlcnJlZC5wcm9taXNlXG5cbiAgICBjb25zdCBkZWZlcnJlZCA9IHRoaXMubG9hZERlZmVycmVkID0gbmV3IERlZmVycmVkPEFXU0NyZWRlbnRpYWxzPigpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCh0aGlzLmNyZWRlbnRpYWxFbmRwb2ludFVybCwge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICAgIH0pXG4gICAgICBpZiAoIXIub2spIHRocm93IG5ldyBFcnJvcihgY3JlZHMgaHR0cCAke3Iuc3RhdHVzfWApXG4gICAgICBjb25zdCBjcmVkczogQVdTQ3JlZGVudGlhbHMgPSBhd2FpdCByLmpzb24oKVxuXG5cbiAgICAgIHRoaXMuc2NoZWR1bGVSZWZyZXNoKGNyZWRzKVxuICAgICAgbG9nLmluZm8oYEdvdCBjcmVkcywgZXhwaXJlPSR7Y3JlZHMuZXhwaXJhdGlvbn0sIHN0cmVhbT0ke2NyZWRzLnN0cmVhbU5hbWV9LCByZWdpb249JHtjcmVkcy5yZWdpb259YClcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoY3JlZHMpXG4gICAgICB0aGlzLmVtaXQoXCJyZWNlaXZlZFwiLCBjcmVkcylcbiAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVmZXJyZWQucmVqZWN0KGUpXG4gICAgICB0aGlzLmxvYWREZWZlcnJlZCA9IG51bGxcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cbiAgc2NoZWR1bGVSZWZyZXNoKGNyZWRzT3JNaWxsaXM6IEFXU0NyZWRlbnRpYWxzIHwgbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoVGltZXIpXG4gICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IG51bGxcbiAgICB9XG4gICAgaWYgKCFjcmVkc09yTWlsbGlzKVxuICAgICAgcmV0dXJuXG5cbiAgICBsZXQgcmVmcmVzaEluTXM6IG51bWJlclxuICAgIGlmICh0eXBlb2YgY3JlZHNPck1pbGxpcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgcmVmcmVzaEluTXMgPSBjcmVkc09yTWlsbGlzXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0XG4gICAgICAgIGNyZWRzID0gY3JlZHNPck1pbGxpcyxcbiAgICAgICAgZXhwTXMgPSBEYXRlLnBhcnNlKGNyZWRzLmV4cGlyYXRpb24pXG5cbiAgICAgIHJlZnJlc2hJbk1zID0gZXhwTXMgLSBEYXRlLm5vdygpIC0gQ1JFRF9CVUZGRVJfUEFERElOR19NU1xuXG4gICAgfVxuXG4gICAgcmVmcmVzaEluTXMgPSBNYXRoLm1heCgxMDAsIHJlZnJlc2hJbk1zKVxuXG4gICAgdGhpcy5yZWZyZXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZERlZmVycmVkID0gbnVsbFxuICAgICAgdGhpcy5sb2FkKCkuY2F0Y2goKGU6IEVycm9yKSA9PiBsb2cuZXJyb3IoYHJlZnJlc2ggZmFpbGVkOiAke2UubWVzc2FnZX1gLCBlKSlcbiAgICB9LCByZWZyZXNoSW5NcylcbiAgfVxuXG4gIGdldFN0cmVhbU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDcmVkZW50aWFscygpPy5zdHJlYW1OYW1lXG4gIH1cblxuICBnZXRSZWdpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDcmVkZW50aWFscygpPy5yZWdpb25cbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZVJlZnJlc2gobnVsbClcbiAgICBpZiAoIXRoaXMubG9hZERlZmVycmVkLmlzU2V0dGxlZCgpKVxuICAgICAgdGhpcy5sb2FkRGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihcImRlc3Ryb3llZFwiKSlcbiAgICB0aGlzLmxvYWREZWZlcnJlZCA9IG51bGxcbiAgfVxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IEFXU0ZpcmVob3NlQ3JlZGVudGlhbE1hbmFnZXJcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/logging/appenders/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAA;AACrD,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "./aws-firehose/AWSFirehoseAppender.js";
|
|
2
|
+
export * from "./ConsoleAppender.js";
|
|
3
|
+
export * from "./push/PushLogRecordsAppender.js";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbG9nZ2luZy9hcHBlbmRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1Q0FBdUMsQ0FBQTtBQUNyRCxjQUFjLHNCQUFzQixDQUFBO0FBQ3BDLGNBQWMsa0NBQWtDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hd3MtZmlyZWhvc2UvQVdTRmlyZWhvc2VBcHBlbmRlci5qc1wiXG5leHBvcnQgKiBmcm9tIFwiLi9Db25zb2xlQXBwZW5kZXIuanNcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHVzaC9QdXNoTG9nUmVjb3Jkc0FwcGVuZGVyLmpzXCJcbiJdfQ==
|