@beforeyoubid/logger-adapter 1.0.12 → 2.0.0
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/README.md +55 -127
- package/dist/console/logWrapper.d.ts +4 -0
- package/dist/index.d.ts +2 -1
- package/dist/logger/index.d.ts +1 -1
- package/dist/logger/logdnaClient.d.ts +19 -0
- package/dist/logger/logger.d.ts +12 -2
- package/dist/logger/util.d.ts +11 -0
- package/dist/params.d.ts +1 -1
- package/dist/src/__tests__/params.spec.js +84 -0
- package/dist/src/console/__tests__/consoleLogger.spec.js +18 -0
- package/dist/src/console/index.js +44 -0
- package/dist/src/console/logWrapper.js +99 -0
- package/dist/{consts.js → src/consts.js} +1 -1
- package/dist/src/index.js +40 -0
- package/dist/src/logger/__tests__/index.spec.js +24 -0
- package/dist/src/logger/__tests__/logger.spec.js +139 -0
- package/dist/src/logger/__tests__/util.spec.js +81 -0
- package/dist/src/logger/index.js +17 -0
- package/dist/src/logger/logdnaClient.js +47 -0
- package/dist/src/logger/logger.js +61 -0
- package/dist/src/logger/util.js +57 -0
- package/dist/src/params.js +66 -0
- package/dist/src/transports/logdnaWinston.js +267 -0
- package/dist/src/util.js +328 -0
- package/dist/transports/logdnaWinston.d.ts +28 -0
- package/dist/types.d.ts +1 -1
- package/dist/util.d.ts +1 -0
- package/package.json +10 -10
- package/dist/console/index.js +0 -37
- package/dist/console/logger.d.ts +0 -4
- package/dist/console/logger.js +0 -108
- package/dist/index.js +0 -36
- package/dist/logger/index.js +0 -16
- package/dist/logger/logger.js +0 -51
- package/dist/params.js +0 -60
- package/dist/util.js +0 -291
- /package/dist/{types.js → src/types.js} +0 -0
package/README.md
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
# LogDNA Logger Adapter
|
|
1
|
+
# Mezmo (Formerly LogDNA) Logger Adapter
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Notes - LogDNA made a decision not to rename the library to Mezmo just yet. To avoid having two names, we decided to
|
|
4
|
+
keep the variable, class and etc as LogDNA for now.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
This is our BYB logger module that is designed to support multiple two logging scenarios.
|
|
9
|
+
|
|
10
|
+
- Some repos may heavily rely on console.log() or similar to output log on the console. We can utilise this module to
|
|
11
|
+
wrap around the original `console` so all logs can be sent to Mezmo as well. The service need to add
|
|
12
|
+
`consoleLogger.init()` in the handler.
|
|
13
|
+
- A Winston logger - Winston creates a generic logger objec that allows us to perform various operations on the log e.g.
|
|
14
|
+
change the colour of the log line, format message, can customise/add a custom code (using a transport mechanism) to
|
|
15
|
+
send log messages to Mezmo or store in the database if we want.
|
|
7
16
|
|
|
8
17
|
This module is designed to work on a native node runtime and in a Lambda environment. For Lambda, please see the
|
|
9
18
|
[Flush All Messages](#Flush-All-Messages) section below.
|
|
@@ -25,6 +34,24 @@ This module is designed to work on a native node runtime and in a Lambda environ
|
|
|
25
34
|
If you are using `console.log` on the existing code base and not ready to switch to Winston logger just yet, this module
|
|
26
35
|
can also helps you out as well.
|
|
27
36
|
|
|
37
|
+
### Versions
|
|
38
|
+
|
|
39
|
+
- **v1.x.x (first version)**
|
|
40
|
+
- Originally created in 2020 but the `logdna` module is no longer maintained (https://www.npmjs.com/package/logdna).
|
|
41
|
+
We need to move away from it.
|
|
42
|
+
- **v2.x.x**
|
|
43
|
+
- Utilise the latest module actively maintained by Mezmo team (https://www.npmjs.com/package/@logdna/logger)
|
|
44
|
+
- Fix a missing some log line issue occured due to the the fact that `logdna-winston` module creates a separate logdna
|
|
45
|
+
client instance and it doesn't get a chance to fully flush messages before Lambda terminates. We decided to
|
|
46
|
+
customise this module in this project and allow us to utilise a single instance of a LogDNA logger object so that
|
|
47
|
+
`ensureFlushAll()` can flush those messages before we terminate Lambda function. This single LogDNA is shared and
|
|
48
|
+
used by both console log wrapper and LogDNA transport as part of Winston log system.
|
|
49
|
+
- Although it is not a major change, users of this module would like an explicably upgraded version. Just update to
|
|
50
|
+
the most recent v2 version; no API modifications are necessary on the consumer side.
|
|
51
|
+
- Also moved `createLoggerObject()` into this shared module so it's easier to use and prefix message before returning
|
|
52
|
+
the actual logger object. e.g. `createLoggerObject(`[LOG-PREFIX]`);`
|
|
53
|
+
- 
|
|
54
|
+
|
|
28
55
|
## 1) Use Console Logger
|
|
29
56
|
|
|
30
57
|
```
|
|
@@ -55,66 +82,10 @@ by setting `LOGDNA_ENABLED=false` in your env variables.
|
|
|
55
82
|
// Don't need to call consoleLogger.flushAll(), logdna object has default flush interval interval at 250ms
|
|
56
83
|
```
|
|
57
84
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
import { consoleLogger, flushAll } from '@beforeyoubid/logger-adapter';
|
|
62
|
-
consoleLogger.init();
|
|
63
|
-
|
|
64
|
-
// Ensure the we flush all messages before Lambda function gets terminated
|
|
65
|
-
const yourLambdaHandler = async (event, context) => {
|
|
66
|
-
try {
|
|
67
|
-
console.debug('Sample debug log - this message only show up when LOG_LEVEL is set to "debug"')
|
|
68
|
-
|
|
69
|
-
const result = await yourNormalProcess();
|
|
70
|
-
|
|
71
|
-
await flushAll(); // Trigger to flush all messages
|
|
72
|
-
|
|
73
|
-
return result;
|
|
74
|
-
} catch (e) {
|
|
75
|
-
// handle error
|
|
76
|
-
await flushAll(); // Trigger to flush all messages
|
|
77
|
-
|
|
78
|
-
// Throw or send result as usual
|
|
79
|
-
throw e;
|
|
80
|
-
|
|
81
|
-
// Or handle it nicely
|
|
82
|
-
// return unsuccessfulResponse;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Lambda: Use with a Callback Handler
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
import { consoleLogger, flushAll } from '@beforeyoubid/logger-adapter';
|
|
92
|
-
consoleLogger.init();
|
|
93
|
-
|
|
94
|
-
const yourLambdaHandler = (event, context, callback) => {
|
|
95
|
-
try {
|
|
96
|
-
console.debug('Sample debug log - this message only show up when LOG_LEVEL is set to "debug"')
|
|
97
|
-
|
|
98
|
-
const result = yourNormalProcess();
|
|
99
|
-
|
|
100
|
-
callback(null, yourNormalResponseObject);
|
|
101
|
-
|
|
102
|
-
flushAll(); // Trigger to flush all messages
|
|
103
|
-
} catch (e) {
|
|
104
|
-
|
|
105
|
-
// Ensure the we flush all messages before Lambda function gets terminated
|
|
106
|
-
flushAll(); // Trigger to flush all messages
|
|
107
|
-
|
|
108
|
-
// Call a callback with error
|
|
109
|
-
callback(yourErrorObject);
|
|
110
|
-
|
|
111
|
-
// Or return unsuccessful response
|
|
112
|
-
// https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format
|
|
113
|
-
// callback(null, unsuccessfulResponse);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
85
|
+
## Flush All Messages
|
|
116
86
|
|
|
117
|
-
|
|
87
|
+
LogDNA puts messages in the buffer and push out every 250ms. If Lambda is terminated before some of these intervals,
|
|
88
|
+
it's likely that some of message logs are not sent to LogDNA. Use `ensureFlushAll()` to flush messages automatically.
|
|
118
89
|
|
|
119
90
|
### Lambda: Use a handler wrapper for Serverless Express
|
|
120
91
|
|
|
@@ -122,26 +93,17 @@ by setting `LOGDNA_ENABLED=false` in your env variables.
|
|
|
122
93
|
import { consoleLogger, ensureFlushAll } from '@beforeyoubid/logger-adapter';
|
|
123
94
|
consoleLogger.init();
|
|
124
95
|
|
|
125
|
-
export default ensureFlushAll(
|
|
96
|
+
export default ensureFlushAll(yourLambdaHandler);
|
|
126
97
|
|
|
127
98
|
```
|
|
128
99
|
|
|
129
|
-
### Lambda: Use with a Callback Handler
|
|
100
|
+
### Lambda: Use with a Callback Handler
|
|
130
101
|
|
|
131
102
|
```
|
|
132
103
|
import { consoleLogger, ensureFlushAllCallback } from '@beforeyoubid/logger-adapter';
|
|
133
104
|
consoleLogger.init();
|
|
134
105
|
|
|
135
|
-
|
|
136
|
-
const graphqlHandler = server.createHandler({
|
|
137
|
-
cors: {
|
|
138
|
-
origin: '*',
|
|
139
|
-
allowedHeaders: ['x-api-token', 'Authorization'],
|
|
140
|
-
methods: ['GET', 'POST'],
|
|
141
|
-
},
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
export default ensureFlushAllCallback(graphqlHandler);
|
|
106
|
+
export default ensureFlushAllCallback(yourLambdaHandlerCallback);
|
|
145
107
|
|
|
146
108
|
```
|
|
147
109
|
|
|
@@ -172,76 +134,42 @@ of the environment variable.
|
|
|
172
134
|
logger.info('This message only show up when LOG_LEVEL is set to "info"')
|
|
173
135
|
```
|
|
174
136
|
|
|
175
|
-
### Lambda: Use
|
|
137
|
+
### Lambda: Use a handler wrapper for Serverless Express
|
|
176
138
|
|
|
177
139
|
```
|
|
178
|
-
import { logger,
|
|
140
|
+
import { logger, ensureFlushAll } from '@beforeyoubid/logger-adapter';
|
|
179
141
|
|
|
180
|
-
|
|
181
|
-
try {
|
|
182
|
-
logger.debug('Sample debug log - this message only show up when LOG_LEVEL is set to "debug"')
|
|
142
|
+
// you can use logger.debug('log text in a string format');
|
|
183
143
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
// Ensure the we flush all messages before Lambda function gets terminated
|
|
187
|
-
await flushAll();
|
|
188
|
-
|
|
189
|
-
return result;
|
|
190
|
-
} catch (e) {
|
|
191
|
-
// Ensure the we flush all messages before Lambda function gets terminated
|
|
192
|
-
await flushAll(); // Trigger to flush all messages
|
|
193
|
-
|
|
194
|
-
// Throw or send result as usual
|
|
195
|
-
throw e;
|
|
196
|
-
|
|
197
|
-
// Or handle it nicely
|
|
198
|
-
// return unsuccessfulResponse;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
144
|
+
export default ensureFlushAll(yourLambdaHandler);
|
|
201
145
|
|
|
202
146
|
```
|
|
203
147
|
|
|
204
148
|
### Lambda: Use with a Callback Handler
|
|
205
149
|
|
|
206
150
|
```
|
|
207
|
-
import { logger,
|
|
151
|
+
import { logger, ensureFlushAllCallback } from '@beforeyoubid/logger-adapter';
|
|
208
152
|
|
|
209
|
-
|
|
210
|
-
try {
|
|
211
|
-
logger.debug('Sample debug log - this message only show up when LOG_LEVEL is set to "debug"')
|
|
153
|
+
// you can use logger.debug('log text in a string format');
|
|
212
154
|
|
|
213
|
-
|
|
155
|
+
export default ensureFlushAllCallback(yourLambdaHandlerCallback);
|
|
214
156
|
|
|
215
|
-
callback(null, yourNormalResponseObject);
|
|
216
157
|
|
|
217
|
-
|
|
218
|
-
flushAll(); // Trigger to flush all messages
|
|
219
|
-
} catch (e) {
|
|
220
|
-
// Ensure the we flush all messages before Lambda function gets terminated
|
|
221
|
-
flushAll(); // Trigger to flush all messages
|
|
158
|
+
```
|
|
222
159
|
|
|
223
|
-
|
|
224
|
-
callback(yourErrorObject);
|
|
160
|
+
### Prefixing your log message
|
|
225
161
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
// callback(null, unsuccessfulResponse);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
162
|
+
In some cases, you may want to have a clearer log message by prefixing them with a predefined string e.g. name of your
|
|
163
|
+
module so they look like this. 
|
|
231
164
|
|
|
232
165
|
```
|
|
166
|
+
import { getLoggerObject } from '@beforeyoubid/logger-adapter';
|
|
233
167
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
LogDNA puts messages in the buffer and push out every 250ms. If Lambda is terminated before some of these intervals,
|
|
237
|
-
it's likely that some of message logs are not sent to LogDNA.
|
|
168
|
+
const logger = getLoggerObject('[CoreLogicListingProvider]');
|
|
238
169
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
Depending on how your Lambda handler is set up, but there are three variances we have observed.
|
|
242
|
-
|
|
243
|
-
1. Async handler
|
|
244
|
-
2. Async handler but use Serverless Express framework
|
|
245
|
-
3. Apollo non-async handler which is created by a `createHandler()` function
|
|
170
|
+
logger.info('the usual log string...')
|
|
171
|
+
```
|
|
246
172
|
|
|
247
|
-
|
|
173
|
+
**Notes that** this function just wraps the original Winston logger instance your normally access from this line.
|
|
174
|
+
`import { logger } from '@beforeyoubid/logger-adapter';`. It only wraps and add the prefix the log line for you and
|
|
175
|
+
returns with debug, info, warn, error functions.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { consoleLogger } from './console';
|
|
2
2
|
import { logger } from './logger';
|
|
3
|
+
import { getLoggerObject } from './logger/util';
|
|
3
4
|
import { getLogParams } from './params';
|
|
4
5
|
import { flushAll, ensureFlushAll, ensureFlushAllCallback } from './util';
|
|
5
|
-
export { consoleLogger, logger, getLogParams, flushAll, ensureFlushAll, ensureFlushAllCallback };
|
|
6
|
+
export { consoleLogger, logger, getLoggerObject, getLogParams, flushAll, ensureFlushAll, ensureFlushAllCallback };
|
package/dist/logger/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const logger:
|
|
1
|
+
declare const logger: import("winston").Logger;
|
|
2
2
|
export { logger };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import LogDNALogger from '@logdna/logger';
|
|
2
|
+
import { type ILogDNAParams } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Create one single instance of LogDNA (Mezmo) client so it can be shared/used in two cases
|
|
5
|
+
* 1) Use it with the console wrapper. We send anything from console.log(), console.info(), console.error()
|
|
6
|
+
* to LogDNA for backward compatibility. Consumer can use this by calling consoleLogger.init()
|
|
7
|
+
* 2) Use it with a Winston logger as part of the transports to send logs to LogDNA
|
|
8
|
+
*
|
|
9
|
+
* Before calling this function, make sure we check if LogDNA is enabled before creating it
|
|
10
|
+
*
|
|
11
|
+
* @param params
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
export declare const createLogDNAClient: (params: ILogDNAParams) => LogDNALogger.Logger;
|
|
15
|
+
/**
|
|
16
|
+
* Return the singleton instance of LogDNA client created by createLogDNAClient()
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export declare const getLogDNAClient: () => LogDNALogger.Logger;
|
package/dist/logger/logger.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import { ILogDNAParams } from '../types';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import winston from 'winston';
|
|
3
|
+
/**
|
|
4
|
+
* Create a Winston logger object so that we can get a few benefits
|
|
5
|
+
* 1. We can use the same logger to output logs to console. If we use logger from @logdna/logger, it won't show up locally
|
|
6
|
+
* 2. We can also format the colour of the log lines so that it's easier to read in the local docker container
|
|
7
|
+
* 3. We can use the same logger object and send logs to logDNA using transports mechanism
|
|
8
|
+
*
|
|
9
|
+
* @param params
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
declare const setupWinstonLogger: (params: ILogDNAParams) => winston.Logger;
|
|
13
|
+
export { setupWinstonLogger };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A utility command to return a logger with a prefix on log line.
|
|
3
|
+
* @param prefix string
|
|
4
|
+
*/
|
|
5
|
+
declare const getLoggerObject: (prefix?: string) => {
|
|
6
|
+
debug: (...args: unknown[]) => import("winston").Logger;
|
|
7
|
+
info: (...args: unknown[]) => import("winston").Logger;
|
|
8
|
+
warn: (...args: unknown[]) => import("winston").Logger;
|
|
9
|
+
error: (...args: unknown[]) => import("winston").Logger;
|
|
10
|
+
};
|
|
11
|
+
export { getLoggerObject };
|
package/dist/params.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { ILogDNAParams } from './types';
|
|
2
|
+
import { type ILogDNAParams } from './types';
|
|
3
3
|
declare const sendToRemote: (logDNAKey: string, logDNAEnabled: string) => boolean;
|
|
4
4
|
declare const getLogParams: (env?: NodeJS.ProcessEnv) => ILogDNAParams;
|
|
5
5
|
export { getLogParams, sendToRemote };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _params = require("../params");
|
|
6
|
+
describe('Log Params', function() {
|
|
7
|
+
it('return correct sendToRemote status', function() {
|
|
8
|
+
var status;
|
|
9
|
+
// LOGDNA_ENABLED is from env which is string
|
|
10
|
+
status = (0, _params.sendToRemote)('', 'true');
|
|
11
|
+
expect(status).toEqual(false);
|
|
12
|
+
status = (0, _params.sendToRemote)('something', 'true');
|
|
13
|
+
expect(status).toEqual(true);
|
|
14
|
+
status = (0, _params.sendToRemote)('something', 'false');
|
|
15
|
+
expect(status).toEqual(false);
|
|
16
|
+
});
|
|
17
|
+
it('is able to set default logdna setting', function() {
|
|
18
|
+
var simulatedEnv = {
|
|
19
|
+
STAGE: 'sample',
|
|
20
|
+
LOGDNA_KEY: '',
|
|
21
|
+
LOGDNA_SUPPRESS_FLUSH_ALL: 'true'
|
|
22
|
+
};
|
|
23
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
24
|
+
expect(params.logLevel).toEqual('info');
|
|
25
|
+
expect(params.logDNASuppressFlushAll).toEqual(true);
|
|
26
|
+
expect(params.functionName).toEqual('n/a');
|
|
27
|
+
expect(params.logDNAOptions.env).toEqual('sample');
|
|
28
|
+
});
|
|
29
|
+
describe('sendToRemote', function() {
|
|
30
|
+
it('should set sendToRemote to false when logdna_key is empty', function() {
|
|
31
|
+
var simulatedEnv = {
|
|
32
|
+
LOGDNA_KEY: ''
|
|
33
|
+
};
|
|
34
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
35
|
+
expect(params.sendToRemote).toEqual(false);
|
|
36
|
+
});
|
|
37
|
+
it('should set sendToRemote to true when logdna_key presents & logdna is enabled', function() {
|
|
38
|
+
var simulatedEnv = {
|
|
39
|
+
LOGDNA_KEY: 'some-random-key',
|
|
40
|
+
LOGDNA_ENABLED: 'true'
|
|
41
|
+
};
|
|
42
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
43
|
+
expect(params.sendToRemote).toEqual(true);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('sendToRemote', function() {
|
|
47
|
+
it('should set sendToRemote to false when logdna_key is not set', function() {
|
|
48
|
+
var simulatedEnv = {};
|
|
49
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
50
|
+
expect(params.sendToRemote).toEqual(false);
|
|
51
|
+
});
|
|
52
|
+
it('should set sendToRemote to false when logdna_key is empty', function() {
|
|
53
|
+
var simulatedEnv = {
|
|
54
|
+
LOGDNA_KEY: ''
|
|
55
|
+
};
|
|
56
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
57
|
+
expect(params.sendToRemote).toEqual(false);
|
|
58
|
+
});
|
|
59
|
+
it('should set sendToRemote to true when logdna_key presents & logdna is enabled', function() {
|
|
60
|
+
var simulatedEnv = {
|
|
61
|
+
LOGDNA_KEY: 'some-random-key',
|
|
62
|
+
LOGDNA_ENABLED: 'true'
|
|
63
|
+
};
|
|
64
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
65
|
+
expect(params.sendToRemote).toEqual(true);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('Validate logDNASuppressFlushAll', function() {
|
|
69
|
+
it('should set logDNASuppressFlushAll to false by default', function() {
|
|
70
|
+
var simulatedEnv = {};
|
|
71
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
72
|
+
expect(params.logDNASuppressFlushAll).toEqual(false);
|
|
73
|
+
});
|
|
74
|
+
it('should set logDNASuppressFlushAll to true when we supply env variable', function() {
|
|
75
|
+
var simulatedEnv = {
|
|
76
|
+
LOGDNA_SUPPRESS_FLUSH_ALL: 'true'
|
|
77
|
+
};
|
|
78
|
+
var params = (0, _params.getLogParams)(simulatedEnv);
|
|
79
|
+
expect(params.logDNASuppressFlushAll).toEqual(true);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9fX3Rlc3RzX18vcGFyYW1zLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nUGFyYW1zLCBzZW5kVG9SZW1vdGUgfSBmcm9tICcuLi9wYXJhbXMnO1xuXG5kZXNjcmliZSgnTG9nIFBhcmFtcycsICgpID0+IHtcbiAgaXQoJ3JldHVybiBjb3JyZWN0IHNlbmRUb1JlbW90ZSBzdGF0dXMnLCAoKSA9PiB7XG4gICAgbGV0IHN0YXR1cztcbiAgICAvLyBMT0dETkFfRU5BQkxFRCBpcyBmcm9tIGVudiB3aGljaCBpcyBzdHJpbmdcbiAgICBzdGF0dXMgPSBzZW5kVG9SZW1vdGUoJycsICd0cnVlJyk7XG4gICAgZXhwZWN0KHN0YXR1cykudG9FcXVhbChmYWxzZSk7XG5cbiAgICBzdGF0dXMgPSBzZW5kVG9SZW1vdGUoJ3NvbWV0aGluZycsICd0cnVlJyk7XG4gICAgZXhwZWN0KHN0YXR1cykudG9FcXVhbCh0cnVlKTtcblxuICAgIHN0YXR1cyA9IHNlbmRUb1JlbW90ZSgnc29tZXRoaW5nJywgJ2ZhbHNlJyk7XG4gICAgZXhwZWN0KHN0YXR1cykudG9FcXVhbChmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBhYmxlIHRvIHNldCBkZWZhdWx0IGxvZ2RuYSBzZXR0aW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IHNpbXVsYXRlZEVudiA9IHtcbiAgICAgIFNUQUdFOiAnc2FtcGxlJyxcbiAgICAgIExPR0ROQV9LRVk6ICcnLFxuICAgICAgTE9HRE5BX1NVUFBSRVNTX0ZMVVNIX0FMTDogJ3RydWUnLFxuICAgIH07XG4gICAgY29uc3QgcGFyYW1zID0gZ2V0TG9nUGFyYW1zKHNpbXVsYXRlZEVudik7XG4gICAgZXhwZWN0KHBhcmFtcy5sb2dMZXZlbCkudG9FcXVhbCgnaW5mbycpO1xuICAgIGV4cGVjdChwYXJhbXMubG9nRE5BU3VwcHJlc3NGbHVzaEFsbCkudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3QocGFyYW1zLmZ1bmN0aW9uTmFtZSkudG9FcXVhbCgnbi9hJyk7XG4gICAgZXhwZWN0KHBhcmFtcy5sb2dETkFPcHRpb25zLmVudikudG9FcXVhbCgnc2FtcGxlJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZW5kVG9SZW1vdGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgc2VuZFRvUmVtb3RlIHRvIGZhbHNlIHdoZW4gbG9nZG5hX2tleSBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNpbXVsYXRlZEVudiA9IHtcbiAgICAgICAgTE9HRE5BX0tFWTogJycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGFyYW1zID0gZ2V0TG9nUGFyYW1zKHNpbXVsYXRlZEVudik7XG4gICAgICBleHBlY3QocGFyYW1zLnNlbmRUb1JlbW90ZSkudG9FcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBzZW5kVG9SZW1vdGUgdG8gdHJ1ZSB3aGVuIGxvZ2RuYV9rZXkgcHJlc2VudHMgJiBsb2dkbmEgaXMgZW5hYmxlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNpbXVsYXRlZEVudiA9IHtcbiAgICAgICAgTE9HRE5BX0tFWTogJ3NvbWUtcmFuZG9tLWtleScsXG4gICAgICAgIExPR0ROQV9FTkFCTEVEOiAndHJ1ZScsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGFyYW1zID0gZ2V0TG9nUGFyYW1zKHNpbXVsYXRlZEVudik7XG4gICAgICBleHBlY3QocGFyYW1zLnNlbmRUb1JlbW90ZSkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NlbmRUb1JlbW90ZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNldCBzZW5kVG9SZW1vdGUgdG8gZmFsc2Ugd2hlbiBsb2dkbmFfa2V5IGlzIG5vdCBzZXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzaW11bGF0ZWRFbnYgPSB7fTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IGdldExvZ1BhcmFtcyhzaW11bGF0ZWRFbnYpO1xuICAgICAgZXhwZWN0KHBhcmFtcy5zZW5kVG9SZW1vdGUpLnRvRXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgc2VuZFRvUmVtb3RlIHRvIGZhbHNlIHdoZW4gbG9nZG5hX2tleSBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNpbXVsYXRlZEVudiA9IHtcbiAgICAgICAgTE9HRE5BX0tFWTogJycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGFyYW1zID0gZ2V0TG9nUGFyYW1zKHNpbXVsYXRlZEVudik7XG4gICAgICBleHBlY3QocGFyYW1zLnNlbmRUb1JlbW90ZSkudG9FcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBzZW5kVG9SZW1vdGUgdG8gdHJ1ZSB3aGVuIGxvZ2RuYV9rZXkgcHJlc2VudHMgJiBsb2dkbmEgaXMgZW5hYmxlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNpbXVsYXRlZEVudiA9IHtcbiAgICAgICAgTE9HRE5BX0tFWTogJ3NvbWUtcmFuZG9tLWtleScsXG4gICAgICAgIExPR0ROQV9FTkFCTEVEOiAndHJ1ZScsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGFyYW1zID0gZ2V0TG9nUGFyYW1zKHNpbXVsYXRlZEVudik7XG4gICAgICBleHBlY3QocGFyYW1zLnNlbmRUb1JlbW90ZSkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZhbGlkYXRlIGxvZ0ROQVN1cHByZXNzRmx1c2hBbGwnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgbG9nRE5BU3VwcHJlc3NGbHVzaEFsbCB0byBmYWxzZSBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2ltdWxhdGVkRW52ID0ge307XG4gICAgICBjb25zdCBwYXJhbXMgPSBnZXRMb2dQYXJhbXMoc2ltdWxhdGVkRW52KTtcbiAgICAgIGV4cGVjdChwYXJhbXMubG9nRE5BU3VwcHJlc3NGbHVzaEFsbCkudG9FcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBsb2dETkFTdXBwcmVzc0ZsdXNoQWxsIHRvIHRydWUgd2hlbiB3ZSBzdXBwbHkgZW52IHZhcmlhYmxlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2ltdWxhdGVkRW52ID0ge1xuICAgICAgICBMT0dETkFfU1VQUFJFU1NfRkxVU0hfQUxMOiAndHJ1ZScsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGFyYW1zID0gZ2V0TG9nUGFyYW1zKHNpbXVsYXRlZEVudik7XG4gICAgICBleHBlY3QocGFyYW1zLmxvZ0ROQVN1cHByZXNzRmx1c2hBbGwpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsInN0YXR1cyIsInNlbmRUb1JlbW90ZSIsImV4cGVjdCIsInRvRXF1YWwiLCJzaW11bGF0ZWRFbnYiLCJTVEFHRSIsIkxPR0ROQV9LRVkiLCJMT0dETkFfU1VQUFJFU1NfRkxVU0hfQUxMIiwicGFyYW1zIiwiZ2V0TG9nUGFyYW1zIiwibG9nTGV2ZWwiLCJsb2dETkFTdXBwcmVzc0ZsdXNoQWxsIiwiZnVuY3Rpb25OYW1lIiwibG9nRE5BT3B0aW9ucyIsImVudiIsIkxPR0ROQV9FTkFCTEVEIl0sIm1hcHBpbmdzIjoiOzs7O3NCQUEyQztBQUUzQ0EsU0FBUyxjQUFjO0lBQ3JCQyxHQUFHLHNDQUFzQztRQUN2QyxJQUFJQztRQUNKLDZDQUE2QztRQUM3Q0EsU0FBU0MsSUFBQUEsb0JBQVksRUFBQyxJQUFJO1FBQzFCQyxPQUFPRixRQUFRRyxPQUFPLENBQUM7UUFFdkJILFNBQVNDLElBQUFBLG9CQUFZLEVBQUMsYUFBYTtRQUNuQ0MsT0FBT0YsUUFBUUcsT0FBTyxDQUFDO1FBRXZCSCxTQUFTQyxJQUFBQSxvQkFBWSxFQUFDLGFBQWE7UUFDbkNDLE9BQU9GLFFBQVFHLE9BQU8sQ0FBQztJQUN6QjtJQUVBSixHQUFHLHlDQUF5QztRQUMxQyxJQUFNSyxlQUFlO1lBQ25CQyxPQUFPO1lBQ1BDLFlBQVk7WUFDWkMsMkJBQTJCO1FBQzdCO1FBQ0EsSUFBTUMsU0FBU0MsSUFBQUEsb0JBQVksRUFBQ0w7UUFDNUJGLE9BQU9NLE9BQU9FLFFBQVEsRUFBRVAsT0FBTyxDQUFDO1FBQ2hDRCxPQUFPTSxPQUFPRyxzQkFBc0IsRUFBRVIsT0FBTyxDQUFDO1FBQzlDRCxPQUFPTSxPQUFPSSxZQUFZLEVBQUVULE9BQU8sQ0FBQztRQUNwQ0QsT0FBT00sT0FBT0ssYUFBYSxDQUFDQyxHQUFHLEVBQUVYLE9BQU8sQ0FBQztJQUMzQztJQUVBTCxTQUFTLGdCQUFnQjtRQUN2QkMsR0FBRyw2REFBNkQ7WUFDOUQsSUFBTUssZUFBZTtnQkFDbkJFLFlBQVk7WUFDZDtZQUNBLElBQU1FLFNBQVNDLElBQUFBLG9CQUFZLEVBQUNMO1lBQzVCRixPQUFPTSxPQUFPUCxZQUFZLEVBQUVFLE9BQU8sQ0FBQztRQUN0QztRQUVBSixHQUFHLGdGQUFnRjtZQUNqRixJQUFNSyxlQUFlO2dCQUNuQkUsWUFBWTtnQkFDWlMsZ0JBQWdCO1lBQ2xCO1lBQ0EsSUFBTVAsU0FBU0MsSUFBQUEsb0JBQVksRUFBQ0w7WUFDNUJGLE9BQU9NLE9BQU9QLFlBQVksRUFBRUUsT0FBTyxDQUFDO1FBQ3RDO0lBQ0Y7SUFFQUwsU0FBUyxnQkFBZ0I7UUFDdkJDLEdBQUcsK0RBQStEO1lBQ2hFLElBQU1LLGVBQWUsQ0FBQztZQUN0QixJQUFNSSxTQUFTQyxJQUFBQSxvQkFBWSxFQUFDTDtZQUM1QkYsT0FBT00sT0FBT1AsWUFBWSxFQUFFRSxPQUFPLENBQUM7UUFDdEM7UUFFQUosR0FBRyw2REFBNkQ7WUFDOUQsSUFBTUssZUFBZTtnQkFDbkJFLFlBQVk7WUFDZDtZQUNBLElBQU1FLFNBQVNDLElBQUFBLG9CQUFZLEVBQUNMO1lBQzVCRixPQUFPTSxPQUFPUCxZQUFZLEVBQUVFLE9BQU8sQ0FBQztRQUN0QztRQUVBSixHQUFHLGdGQUFnRjtZQUNqRixJQUFNSyxlQUFlO2dCQUNuQkUsWUFBWTtnQkFDWlMsZ0JBQWdCO1lBQ2xCO1lBQ0EsSUFBTVAsU0FBU0MsSUFBQUEsb0JBQVksRUFBQ0w7WUFDNUJGLE9BQU9NLE9BQU9QLFlBQVksRUFBRUUsT0FBTyxDQUFDO1FBQ3RDO0lBQ0Y7SUFFQUwsU0FBUyxtQ0FBbUM7UUFDMUNDLEdBQUcseURBQXlEO1lBQzFELElBQU1LLGVBQWUsQ0FBQztZQUN0QixJQUFNSSxTQUFTQyxJQUFBQSxvQkFBWSxFQUFDTDtZQUM1QkYsT0FBT00sT0FBT0csc0JBQXNCLEVBQUVSLE9BQU8sQ0FBQztRQUNoRDtRQUVBSixHQUFHLHlFQUF5RTtZQUMxRSxJQUFNSyxlQUFlO2dCQUNuQkcsMkJBQTJCO1lBQzdCO1lBQ0EsSUFBTUMsU0FBU0MsSUFBQUEsb0JBQVksRUFBQ0w7WUFDNUJGLE9BQU9NLE9BQU9HLHNCQUFzQixFQUFFUixPQUFPLENBQUM7UUFDaEQ7SUFDRjtBQUNGIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _index = require("../index");
|
|
6
|
+
function _type_of(obj) {
|
|
7
|
+
"@swc/helpers - typeof";
|
|
8
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
9
|
+
}
|
|
10
|
+
describe('Console Logger', function() {
|
|
11
|
+
it('should be able to load module', function() {
|
|
12
|
+
var objType = typeof _index.consoleLogger === "undefined" ? "undefined" : _type_of(_index.consoleLogger);
|
|
13
|
+
expect(objType).toEqual('object');
|
|
14
|
+
expect(_type_of(_index.consoleLogger.init)).toEqual('function');
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25zb2xlL19fdGVzdHNfXy9jb25zb2xlTG9nZ2VyLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uc29sZUxvZ2dlciB9IGZyb20gJy4uL2luZGV4JztcblxuZGVzY3JpYmUoJ0NvbnNvbGUgTG9nZ2VyJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gbG9hZCBtb2R1bGUnLCAoKSA9PiB7XG4gICAgY29uc3Qgb2JqVHlwZSA9IHR5cGVvZiBjb25zb2xlTG9nZ2VyO1xuICAgIGV4cGVjdChvYmpUeXBlKS50b0VxdWFsKCdvYmplY3QnKTtcbiAgICBleHBlY3QodHlwZW9mIGNvbnNvbGVMb2dnZXIuaW5pdCkudG9FcXVhbCgnZnVuY3Rpb24nKTtcbiAgfSk7XG59KTtcbiJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0Iiwib2JqVHlwZSIsImNvbnNvbGVMb2dnZXIiLCJleHBlY3QiLCJ0b0VxdWFsIiwiaW5pdCJdLCJtYXBwaW5ncyI6Ijs7OztxQkFBOEI7Ozs7O0FBRTlCQSxTQUFTLGtCQUFrQjtJQUN6QkMsR0FBRyxpQ0FBaUM7UUFDbEMsSUFBTUMsVUFBVSxPQUFPQyxvQkFBYSxpQ0FBcEIsU0FBT0Esb0JBQWE7UUFDcENDLE9BQU9GLFNBQVNHLE9BQU8sQ0FBQztRQUN4QkQsT0FBTyxTQUFPRCxvQkFBYSxDQUFDRyxJQUFJLEdBQUVELE9BQU8sQ0FBQztJQUM1QztBQUNGIn0=
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "consoleLogger", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return consoleLogger;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _params = require("../params");
|
|
12
|
+
var _logWrapper = require("./logWrapper");
|
|
13
|
+
var _util = require("../util");
|
|
14
|
+
var _logdnaClient = require("../logger/logdnaClient");
|
|
15
|
+
var hasWrapped = false;
|
|
16
|
+
var logParams = (0, _params.getLogParams)();
|
|
17
|
+
/**
|
|
18
|
+
* Initialise and wrap the native console log object
|
|
19
|
+
* @param params
|
|
20
|
+
*/ var init = function() {
|
|
21
|
+
var params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : logParams;
|
|
22
|
+
if (hasWrapped) return;
|
|
23
|
+
var AWS_LAMBDA_FUNCTION_NAME = process.env.AWS_LAMBDA_FUNCTION_NAME;
|
|
24
|
+
var logDNAKey = params.logDNAKey, sendToRemote = params.sendToRemote, logLevel = params.logLevel;
|
|
25
|
+
var isEnabled = (0, _util.isLogDNAEnabled)(logDNAKey, sendToRemote);
|
|
26
|
+
if (isEnabled) {
|
|
27
|
+
// Create/reuse this logdna client instance so that we can use it in the console wrapper
|
|
28
|
+
var logDNAClient = (0, _logdnaClient.createLogDNAClient)(params);
|
|
29
|
+
// Wrap console object and keep the status
|
|
30
|
+
(0, _logWrapper.wrapAndSendToLogDNA)(logDNAClient, logLevel);
|
|
31
|
+
hasWrapped = true;
|
|
32
|
+
}
|
|
33
|
+
// What case is this?
|
|
34
|
+
var isFunctionNameAvailable = AWS_LAMBDA_FUNCTION_NAME !== undefined;
|
|
35
|
+
if (!isEnabled && isFunctionNameAvailable) {
|
|
36
|
+
console.info("LOGDNA is disabled");
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var consoleLogger = {
|
|
40
|
+
init: init,
|
|
41
|
+
flushAll: _util.flushAll
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25zb2xlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElMb2dETkFQYXJhbXMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldExvZ1BhcmFtcyB9IGZyb20gJy4uL3BhcmFtcyc7XG5pbXBvcnQgeyB3cmFwQW5kU2VuZFRvTG9nRE5BIH0gZnJvbSAnLi9sb2dXcmFwcGVyJztcbmltcG9ydCB7IGlzTG9nRE5BRW5hYmxlZCwgZmx1c2hBbGwgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IGNyZWF0ZUxvZ0ROQUNsaWVudCB9IGZyb20gJy4uL2xvZ2dlci9sb2dkbmFDbGllbnQnO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXIgfSBmcm9tICdAbG9nZG5hL2xvZ2dlcic7XG5cbmxldCBoYXNXcmFwcGVkOiBib29sZWFuID0gZmFsc2U7XG5jb25zdCBsb2dQYXJhbXMgPSBnZXRMb2dQYXJhbXMoKTtcblxuLyoqXG4gKiBJbml0aWFsaXNlIGFuZCB3cmFwIHRoZSBuYXRpdmUgY29uc29sZSBsb2cgb2JqZWN0XG4gKiBAcGFyYW0gcGFyYW1zXG4gKi9cbmNvbnN0IGluaXQgPSAocGFyYW1zOiBJTG9nRE5BUGFyYW1zID0gbG9nUGFyYW1zKTogdm9pZCA9PiB7XG4gIGlmIChoYXNXcmFwcGVkKSByZXR1cm47XG5cbiAgY29uc3QgeyBBV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUUgfSA9IHByb2Nlc3MuZW52O1xuICBjb25zdCB7IGxvZ0ROQUtleSwgc2VuZFRvUmVtb3RlLCBsb2dMZXZlbCB9ID0gcGFyYW1zO1xuICBjb25zdCBpc0VuYWJsZWQgPSBpc0xvZ0ROQUVuYWJsZWQobG9nRE5BS2V5LCBzZW5kVG9SZW1vdGUpO1xuXG4gIGlmIChpc0VuYWJsZWQpIHtcbiAgICAvLyBDcmVhdGUvcmV1c2UgdGhpcyBsb2dkbmEgY2xpZW50IGluc3RhbmNlIHNvIHRoYXQgd2UgY2FuIHVzZSBpdCBpbiB0aGUgY29uc29sZSB3cmFwcGVyXG4gICAgY29uc3QgbG9nRE5BQ2xpZW50ID0gY3JlYXRlTG9nRE5BQ2xpZW50KHBhcmFtcykgYXMgTG9nZ2VyO1xuXG4gICAgLy8gV3JhcCBjb25zb2xlIG9iamVjdCBhbmQga2VlcCB0aGUgc3RhdHVzXG4gICAgd3JhcEFuZFNlbmRUb0xvZ0ROQShsb2dETkFDbGllbnQsIGxvZ0xldmVsKTtcbiAgICBoYXNXcmFwcGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFdoYXQgY2FzZSBpcyB0aGlzP1xuICBjb25zdCBpc0Z1bmN0aW9uTmFtZUF2YWlsYWJsZSA9IEFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSAhPT0gdW5kZWZpbmVkO1xuICBpZiAoIWlzRW5hYmxlZCAmJiBpc0Z1bmN0aW9uTmFtZUF2YWlsYWJsZSkge1xuICAgIGNvbnNvbGUuaW5mbyhgTE9HRE5BIGlzIGRpc2FibGVkYCk7XG4gIH1cbn07XG5cbmNvbnN0IGNvbnNvbGVMb2dnZXIgPSB7XG4gIGluaXQsXG4gIGZsdXNoQWxsLFxufTtcblxuZXhwb3J0IHsgY29uc29sZUxvZ2dlciB9O1xuIl0sIm5hbWVzIjpbImNvbnNvbGVMb2dnZXIiLCJoYXNXcmFwcGVkIiwibG9nUGFyYW1zIiwiZ2V0TG9nUGFyYW1zIiwiaW5pdCIsInBhcmFtcyIsIkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSIsInByb2Nlc3MiLCJlbnYiLCJsb2dETkFLZXkiLCJzZW5kVG9SZW1vdGUiLCJsb2dMZXZlbCIsImlzRW5hYmxlZCIsImlzTG9nRE5BRW5hYmxlZCIsImxvZ0ROQUNsaWVudCIsImNyZWF0ZUxvZ0ROQUNsaWVudCIsIndyYXBBbmRTZW5kVG9Mb2dETkEiLCJpc0Z1bmN0aW9uTmFtZUF2YWlsYWJsZSIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJpbmZvIiwiZmx1c2hBbGwiXSwibWFwcGluZ3MiOiI7Ozs7K0JBMkNTQTs7O2VBQUFBOzs7c0JBekNvQjswQkFDTztvQkFDTTs0QkFDUDtBQUduQyxJQUFJQyxhQUFzQjtBQUMxQixJQUFNQyxZQUFZQyxJQUFBQSxvQkFBWTtBQUU5Qjs7O0NBR0MsR0FDRCxJQUFNQyxPQUFPO1FBQUNDLDBFQUF3Qkg7SUFDcEMsSUFBSUQsWUFBWTtJQUVoQixJQUFNLEFBQUVLLDJCQUE2QkMsUUFBUUMsR0FBRyxDQUF4Q0Y7SUFDUixJQUFRRyxZQUFzQ0osT0FBdENJLFdBQVdDLGVBQTJCTCxPQUEzQkssY0FBY0MsV0FBYU4sT0FBYk07SUFDakMsSUFBTUMsWUFBWUMsSUFBQUEscUJBQWUsRUFBQ0osV0FBV0M7SUFFN0MsSUFBSUUsV0FBVztRQUNiLHdGQUF3RjtRQUN4RixJQUFNRSxlQUFlQyxJQUFBQSxnQ0FBa0IsRUFBQ1Y7UUFFeEMsMENBQTBDO1FBQzFDVyxJQUFBQSwrQkFBbUIsRUFBQ0YsY0FBY0g7UUFDbENWLGFBQWE7SUFDZjtJQUVBLHFCQUFxQjtJQUNyQixJQUFNZ0IsMEJBQTBCWCw2QkFBNkJZO0lBQzdELElBQUksQ0FBQ04sYUFBYUsseUJBQXlCO1FBQ3pDRSxRQUFRQyxJQUFJLENBQUU7SUFDaEI7QUFDRjtBQUVBLElBQU1wQixnQkFBZ0I7SUFDcEJJLE1BQUFBO0lBQ0FpQixVQUFBQSxjQUFRO0FBQ1YifQ==
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
getDefaultConsoleLog: function() {
|
|
13
|
+
return getDefaultConsoleLog;
|
|
14
|
+
},
|
|
15
|
+
wrapAndSendToLogDNA: function() {
|
|
16
|
+
return wrapAndSendToLogDNA;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
function _array_like_to_array(arr, len) {
|
|
20
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
21
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
22
|
+
return arr2;
|
|
23
|
+
}
|
|
24
|
+
function _array_without_holes(arr) {
|
|
25
|
+
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
26
|
+
}
|
|
27
|
+
function _iterable_to_array(iter) {
|
|
28
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
29
|
+
}
|
|
30
|
+
function _non_iterable_spread() {
|
|
31
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
32
|
+
}
|
|
33
|
+
function _to_consumable_array(arr) {
|
|
34
|
+
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
35
|
+
}
|
|
36
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
37
|
+
if (!o) return;
|
|
38
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
39
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
40
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
41
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
42
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
43
|
+
}
|
|
44
|
+
// Original console functions
|
|
45
|
+
var _log = console.log;
|
|
46
|
+
var _info = console.info;
|
|
47
|
+
var _warn = console.warn;
|
|
48
|
+
var _error = console.error;
|
|
49
|
+
var wrapAndSendToLogDNA = function(logDNAClient, logLevel) {
|
|
50
|
+
if (logLevel === 'debug') {
|
|
51
|
+
_log('--------------------- Wrapping Console -----------------------');
|
|
52
|
+
}
|
|
53
|
+
var log = function log() {
|
|
54
|
+
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
|
|
55
|
+
args[_key] = arguments[_key];
|
|
56
|
+
}
|
|
57
|
+
if (logLevel === 'debug') {
|
|
58
|
+
(logDNAClient === null || logDNAClient === void 0 ? void 0 : logDNAClient.debug) && (logDNAClient === null || logDNAClient === void 0 ? void 0 : logDNAClient.debug(_to_consumable_array(args).join(' ')));
|
|
59
|
+
}
|
|
60
|
+
_log.apply(void 0, _to_consumable_array(args));
|
|
61
|
+
};
|
|
62
|
+
var info = function info() {
|
|
63
|
+
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
|
|
64
|
+
args[_key] = arguments[_key];
|
|
65
|
+
}
|
|
66
|
+
if ([
|
|
67
|
+
'debug',
|
|
68
|
+
'info'
|
|
69
|
+
].indexOf(logLevel) !== -1) {
|
|
70
|
+
(logDNAClient === null || logDNAClient === void 0 ? void 0 : logDNAClient.info) && (logDNAClient === null || logDNAClient === void 0 ? void 0 : logDNAClient.info(_to_consumable_array(args).join(' ')));
|
|
71
|
+
}
|
|
72
|
+
_info.apply(void 0, _to_consumable_array(args));
|
|
73
|
+
};
|
|
74
|
+
var warn = function warn() {
|
|
75
|
+
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
|
|
76
|
+
args[_key] = arguments[_key];
|
|
77
|
+
}
|
|
78
|
+
(logDNAClient === null || logDNAClient === void 0 ? void 0 : logDNAClient.warn) && logDNAClient.warn(_to_consumable_array(args).join(' '));
|
|
79
|
+
_warn.apply(void 0, _to_consumable_array(args));
|
|
80
|
+
};
|
|
81
|
+
var error = function error() {
|
|
82
|
+
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
|
|
83
|
+
args[_key] = arguments[_key];
|
|
84
|
+
}
|
|
85
|
+
(logDNAClient === null || logDNAClient === void 0 ? void 0 : logDNAClient.error) && logDNAClient.error(_to_consumable_array(args).join(' '));
|
|
86
|
+
_error.apply(void 0, _to_consumable_array(args));
|
|
87
|
+
};
|
|
88
|
+
// Override default functions with our wrapped functions
|
|
89
|
+
console.log = log;
|
|
90
|
+
console.debug = log;
|
|
91
|
+
console.info = info;
|
|
92
|
+
console.warn = warn;
|
|
93
|
+
console.error = error;
|
|
94
|
+
};
|
|
95
|
+
var getDefaultConsoleLog = function() {
|
|
96
|
+
return _log;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25zb2xlL2xvZ1dyYXBwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBMb2dnZXIgfSBmcm9tICdAbG9nZG5hL2xvZ2dlcic7XG5cbi8vIE9yaWdpbmFsIGNvbnNvbGUgZnVuY3Rpb25zXG5jb25zdCBfbG9nID0gY29uc29sZS5sb2c7XG5jb25zdCBfaW5mbyA9IGNvbnNvbGUuaW5mbztcbmNvbnN0IF93YXJuID0gY29uc29sZS53YXJuO1xuY29uc3QgX2Vycm9yID0gY29uc29sZS5lcnJvcjtcblxuY29uc3Qgd3JhcEFuZFNlbmRUb0xvZ0ROQSA9IChsb2dETkFDbGllbnQ6IExvZ2dlciwgbG9nTGV2ZWw6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBpZiAobG9nTGV2ZWwgPT09ICdkZWJ1ZycpIHtcbiAgICBfbG9nKCctLS0tLS0tLS0tLS0tLS0tLS0tLS0gV3JhcHBpbmcgQ29uc29sZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpO1xuICB9XG5cbiAgY29uc3QgbG9nID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKGxvZ0xldmVsID09PSAnZGVidWcnKSB7XG4gICAgICBsb2dETkFDbGllbnQ/LmRlYnVnICYmIGxvZ0ROQUNsaWVudD8uZGVidWcoWy4uLmFyZ3NdLmpvaW4oJyAnKSk7XG4gICAgfVxuICAgIF9sb2coLi4uYXJncyk7XG4gIH07XG5cbiAgY29uc3QgaW5mbyA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmIChbJ2RlYnVnJywgJ2luZm8nXS5pbmRleE9mKGxvZ0xldmVsKSAhPT0gLTEpIHtcbiAgICAgIGxvZ0ROQUNsaWVudD8uaW5mbyAmJiBsb2dETkFDbGllbnQ/LmluZm8oWy4uLmFyZ3NdLmpvaW4oJyAnKSk7XG4gICAgfVxuICAgIF9pbmZvKC4uLmFyZ3MpO1xuICB9O1xuXG4gIGNvbnN0IHdhcm4gPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICBsb2dETkFDbGllbnQ/Lndhcm4gJiYgbG9nRE5BQ2xpZW50Lndhcm4oWy4uLmFyZ3NdLmpvaW4oJyAnKSk7XG4gICAgX3dhcm4oLi4uYXJncyk7XG4gIH07XG5cbiAgY29uc3QgZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcbiAgICBsb2dETkFDbGllbnQ/LmVycm9yICYmIGxvZ0ROQUNsaWVudC5lcnJvcihbLi4uYXJnc10uam9pbignICcpKTtcbiAgICBfZXJyb3IoLi4uYXJncyk7XG4gIH07XG5cbiAgLy8gT3ZlcnJpZGUgZGVmYXVsdCBmdW5jdGlvbnMgd2l0aCBvdXIgd3JhcHBlZCBmdW5jdGlvbnNcbiAgY29uc29sZS5sb2cgPSBsb2c7XG4gIGNvbnNvbGUuZGVidWcgPSBsb2c7XG4gIGNvbnNvbGUuaW5mbyA9IGluZm87XG4gIGNvbnNvbGUud2FybiA9IHdhcm47XG4gIGNvbnNvbGUuZXJyb3IgPSBlcnJvcjtcbn07XG5cbmNvbnN0IGdldERlZmF1bHRDb25zb2xlTG9nID0gKCk6IGFueSA9PiBfbG9nO1xuXG5leHBvcnQgeyB3cmFwQW5kU2VuZFRvTG9nRE5BLCBnZXREZWZhdWx0Q29uc29sZUxvZyB9O1xuIl0sIm5hbWVzIjpbImdldERlZmF1bHRDb25zb2xlTG9nIiwid3JhcEFuZFNlbmRUb0xvZ0ROQSIsIl9sb2ciLCJjb25zb2xlIiwibG9nIiwiX2luZm8iLCJpbmZvIiwiX3dhcm4iLCJ3YXJuIiwiX2Vycm9yIiwiZXJyb3IiLCJsb2dETkFDbGllbnQiLCJsb2dMZXZlbCIsImFyZ3MiLCJkZWJ1ZyIsImpvaW4iLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQStDOEJBLG9CQUFvQjtlQUFwQkE7O0lBQXJCQyxtQkFBbUI7ZUFBbkJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBN0NULDZCQUE2QjtBQUM3QixJQUFNQyxPQUFPQyxRQUFRQyxHQUFHO0FBQ3hCLElBQU1DLFFBQVFGLFFBQVFHLElBQUk7QUFDMUIsSUFBTUMsUUFBUUosUUFBUUssSUFBSTtBQUMxQixJQUFNQyxTQUFTTixRQUFRTyxLQUFLO0FBRTVCLElBQU1ULHNCQUFzQixTQUFDVSxjQUFzQkM7SUFDakQsSUFBSUEsYUFBYSxTQUFTO1FBQ3hCVixLQUFLO0lBQ1A7SUFFQSxJQUFNRSxNQUFNO1FBQVUsSUFBQSxJQUFBLE9BQUEsVUFBQSxRQUFBLEFBQUdTLE9BQUgsVUFBQSxPQUFBLE9BQUEsR0FBQSxPQUFBLE1BQUE7WUFBR0EsS0FBSCxRQUFBLFNBQUEsQ0FBQSxLQUFjOztRQUNsQyxJQUFJRCxhQUFhLFNBQVM7WUFDeEJELENBQUFBLHlCQUFBQSxtQ0FBQUEsYUFBY0csS0FBSyxNQUFJSCx5QkFBQUEsbUNBQUFBLGFBQWNHLEtBQUssQ0FBQyxBQUFDLHFCQUFHRCxNQUFNRSxJQUFJLENBQUM7UUFDNUQ7UUFDQWIsS0FBQUEsTUFBQUEsS0FBQUEsR0FBSyxxQkFBR1c7SUFDVjtJQUVBLElBQU1QLE9BQU87UUFBVSxJQUFBLElBQUEsT0FBQSxVQUFBLFFBQUEsQUFBR08sT0FBSCxVQUFBLE9BQUEsT0FBQSxHQUFBLE9BQUEsTUFBQTtZQUFHQSxLQUFILFFBQUEsU0FBQSxDQUFBLEtBQWM7O1FBQ25DLElBQUk7WUFBQztZQUFTO1NBQU8sQ0FBQ0csT0FBTyxDQUFDSixjQUFjLENBQUMsR0FBRztZQUM5Q0QsQ0FBQUEseUJBQUFBLG1DQUFBQSxhQUFjTCxJQUFJLE1BQUlLLHlCQUFBQSxtQ0FBQUEsYUFBY0wsSUFBSSxDQUFDLEFBQUMscUJBQUdPLE1BQU1FLElBQUksQ0FBQztRQUMxRDtRQUNBVixNQUFBQSxNQUFBQSxLQUFBQSxHQUFNLHFCQUFHUTtJQUNYO0lBRUEsSUFBTUwsT0FBTztRQUFVLElBQUEsSUFBQSxPQUFBLFVBQUEsUUFBQSxBQUFHSyxPQUFILFVBQUEsT0FBQSxPQUFBLEdBQUEsT0FBQSxNQUFBO1lBQUdBLEtBQUgsUUFBQSxTQUFBLENBQUEsS0FBYzs7UUFDbkNGLENBQUFBLHlCQUFBQSxtQ0FBQUEsYUFBY0gsSUFBSSxLQUFJRyxhQUFhSCxJQUFJLENBQUMsQUFBQyxxQkFBR0ssTUFBTUUsSUFBSSxDQUFDO1FBQ3ZEUixNQUFBQSxNQUFBQSxLQUFBQSxHQUFNLHFCQUFHTTtJQUNYO0lBRUEsSUFBTUgsUUFBUTtRQUFVLElBQUEsSUFBQSxPQUFBLFVBQUEsUUFBQSxBQUFHRyxPQUFILFVBQUEsT0FBQSxPQUFBLEdBQUEsT0FBQSxNQUFBO1lBQUdBLEtBQUgsUUFBQSxTQUFBLENBQUEsS0FBYzs7UUFDcENGLENBQUFBLHlCQUFBQSxtQ0FBQUEsYUFBY0QsS0FBSyxLQUFJQyxhQUFhRCxLQUFLLENBQUMsQUFBQyxxQkFBR0csTUFBTUUsSUFBSSxDQUFDO1FBQ3pETixPQUFBQSxNQUFBQSxLQUFBQSxHQUFPLHFCQUFHSTtJQUNaO0lBRUEsd0RBQXdEO0lBQ3hEVixRQUFRQyxHQUFHLEdBQUdBO0lBQ2RELFFBQVFXLEtBQUssR0FBR1Y7SUFDaEJELFFBQVFHLElBQUksR0FBR0E7SUFDZkgsUUFBUUssSUFBSSxHQUFHQTtJQUNmTCxRQUFRTyxLQUFLLEdBQUdBO0FBQ2xCO0FBRUEsSUFBTVYsdUJBQXVCO1dBQVdFIn0=
|
|
@@ -10,4 +10,4 @@ Object.defineProperty(exports, "FALLBACK_TIMEOUT_AFTER_FLUSHING", {
|
|
|
10
10
|
});
|
|
11
11
|
var FALLBACK_TIMEOUT_AFTER_FLUSHING = 5000;
|
|
12
12
|
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgRkFMTEJBQ0tfVElNRU9VVF9BRlRFUl9GTFVTSElORyA9IDUwMDA7XG5cbmV4cG9ydCB7IEZBTExCQUNLX1RJTUVPVVRfQUZURVJfRkxVU0hJTkcgfTtcbiJdLCJuYW1lcyI6WyJGQUxMQkFDS19USU1FT1VUX0FGVEVSX0ZMVVNISU5HIl0sIm1hcHBpbmdzIjoiOzs7OytCQUVTQTs7O2VBQUFBOzs7QUFGVCxJQUFNQSxrQ0FBa0MifQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
consoleLogger: function() {
|
|
13
|
+
return _console.consoleLogger;
|
|
14
|
+
},
|
|
15
|
+
ensureFlushAll: function() {
|
|
16
|
+
return _util1.ensureFlushAll;
|
|
17
|
+
},
|
|
18
|
+
ensureFlushAllCallback: function() {
|
|
19
|
+
return _util1.ensureFlushAllCallback;
|
|
20
|
+
},
|
|
21
|
+
flushAll: function() {
|
|
22
|
+
return _util1.flushAll;
|
|
23
|
+
},
|
|
24
|
+
getLogParams: function() {
|
|
25
|
+
return _params.getLogParams;
|
|
26
|
+
},
|
|
27
|
+
getLoggerObject: function() {
|
|
28
|
+
return _util.getLoggerObject;
|
|
29
|
+
},
|
|
30
|
+
logger: function() {
|
|
31
|
+
return _logger.logger;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
var _console = require("./console");
|
|
35
|
+
var _logger = require("./logger");
|
|
36
|
+
var _util = require("./logger/util");
|
|
37
|
+
var _params = require("./params");
|
|
38
|
+
var _util1 = require("./util");
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zb2xlTG9nZ2VyIH0gZnJvbSAnLi9jb25zb2xlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGdldExvZ2dlck9iamVjdCB9IGZyb20gJy4vbG9nZ2VyL3V0aWwnO1xuaW1wb3J0IHsgZ2V0TG9nUGFyYW1zIH0gZnJvbSAnLi9wYXJhbXMnO1xuaW1wb3J0IHsgZmx1c2hBbGwsIGVuc3VyZUZsdXNoQWxsLCBlbnN1cmVGbHVzaEFsbENhbGxiYWNrIH0gZnJvbSAnLi91dGlsJztcblxuLy8gRXhwb3J0IGFsbCB0aGUgZnVuY3Rpb25zXG5leHBvcnQgeyBjb25zb2xlTG9nZ2VyLCBsb2dnZXIsIGdldExvZ2dlck9iamVjdCwgZ2V0TG9nUGFyYW1zLCBmbHVzaEFsbCwgZW5zdXJlRmx1c2hBbGwsIGVuc3VyZUZsdXNoQWxsQ2FsbGJhY2sgfTtcbiJdLCJuYW1lcyI6WyJjb25zb2xlTG9nZ2VyIiwiZW5zdXJlRmx1c2hBbGwiLCJlbnN1cmVGbHVzaEFsbENhbGxiYWNrIiwiZmx1c2hBbGwiLCJnZXRMb2dQYXJhbXMiLCJnZXRMb2dnZXJPYmplY3QiLCJsb2dnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBT1NBLGFBQWE7ZUFBYkEsc0JBQWE7O0lBQW1EQyxjQUFjO2VBQWRBLHFCQUFjOztJQUFFQyxzQkFBc0I7ZUFBdEJBLDZCQUFzQjs7SUFBaERDLFFBQVE7ZUFBUkEsZUFBUTs7SUFBdEJDLFlBQVk7ZUFBWkEsb0JBQVk7O0lBQTdCQyxlQUFlO2VBQWZBLHFCQUFlOztJQUF2QkMsTUFBTTtlQUFOQSxjQUFNOzs7dUJBUEE7c0JBQ1A7b0JBQ1M7c0JBQ0g7cUJBQ29DIn0=
|