@mongosh/logging 1.10.1 → 1.10.3

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/.depcheckrc CHANGED
@@ -1,2 +1,11 @@
1
- # needed as a peer dependency of @mongodb-js/devtools-connect
2
- ignores: ['mongodb']
1
+ ignores:
2
+ - '@mongodb-js/eslint-config-mongosh'
3
+ - '@mongodb-js/tsconfig-mongosh'
4
+ - '@mongodb-js/prettier-config-devtools'
5
+ - '@typescript-eslint/parser'
6
+ - '@typescript-eslint/eslint-plugin'
7
+ - chai
8
+ - eslint-plugin-mocha
9
+ - eslint-config-mongodb-js
10
+ ignore-patterns:
11
+ - .eslintrc.js
package/.eslintrc.js CHANGED
@@ -1 +1,10 @@
1
- module.exports = require('../../config/eslintrc.base');
1
+ const { fixCygwinPath } = require('@mongodb-js/eslint-config-mongosh/utils');
2
+
3
+ module.exports = {
4
+ root: true,
5
+ extends: ['@mongodb-js/eslint-config-mongosh'],
6
+ parserOptions: {
7
+ tsconfigRootDir: fixCygwinPath(__dirname),
8
+ project: ['./tsconfig-lint.json'],
9
+ },
10
+ };
@@ -0,0 +1,6 @@
1
+ **/lib
2
+ **/dist
3
+ **/node_modules
4
+ **/test/fixtures
5
+ **/*.nocov*
6
+ **/*.wxs
@@ -0,0 +1 @@
1
+ "@mongodb-js/prettier-config-devtools"
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  Package for [MongoDB Shell](mongosh).
4
4
 
5
5
  ### Installation
6
+
6
7
  ```shell
7
8
  npm install -S @mongosh/logging
8
9
  ```
9
10
 
10
11
  [mongosh]: https://github.com/mongodb-js/mongosh
11
-
@@ -1,29 +1,46 @@
1
- export declare type MongoshAnalyticsIdentity = {
1
+ export type MongoshAnalyticsIdentity = {
2
2
  userId: string;
3
+ anonymousId?: never;
3
4
  } | {
5
+ userId?: never;
4
6
  anonymousId: string;
5
7
  };
8
+ type AnalyticsIdentifyMessage = MongoshAnalyticsIdentity & {
9
+ traits: {
10
+ platform: string;
11
+ };
12
+ };
13
+ type AnalyticsTrackMessage = MongoshAnalyticsIdentity & {
14
+ event: string;
15
+ properties: {
16
+ mongosh_version: string;
17
+ [key: string]: any;
18
+ };
19
+ };
6
20
  export interface MongoshAnalytics {
7
- identify(message: MongoshAnalyticsIdentity & {
8
- traits: {
9
- platform: string;
10
- };
11
- }): void;
12
- track(message: MongoshAnalyticsIdentity & {
13
- event: string;
14
- properties: {
15
- mongosh_version: string;
16
- [key: string]: any;
17
- };
18
- }): void;
21
+ identify(message: AnalyticsIdentifyMessage): void;
22
+ track(message: AnalyticsTrackMessage): void;
23
+ flush(callback: (err?: Error) => void): void;
24
+ }
25
+ declare class Queue<T> {
26
+ private applyFn;
27
+ private queue;
28
+ private state;
29
+ constructor(applyFn: (val: T) => void);
30
+ push(val: T): void;
31
+ enable(): void;
32
+ disable(): void;
33
+ pause(): void;
34
+ getState(): "paused" | "enabled" | "disabled";
19
35
  }
20
36
  export declare class NoopAnalytics implements MongoshAnalytics {
21
37
  identify(_info: any): void;
22
38
  track(_info: any): void;
39
+ flush(cb: () => void): void;
23
40
  }
41
+ type AnalyticsEventsQueueItem = ['identify', Parameters<MongoshAnalytics['identify']>] | ['track', Parameters<MongoshAnalytics['track']>];
24
42
  export declare class ToggleableAnalytics implements MongoshAnalytics {
25
- _queue: Array<['identify', Parameters<MongoshAnalytics['identify']>] | ['track', Parameters<MongoshAnalytics['track']>]>;
26
- _state: 'enabled' | 'disabled' | 'paused';
43
+ _queue: Queue<AnalyticsEventsQueueItem>;
27
44
  _target: MongoshAnalytics;
28
45
  _pendingError?: Error;
29
46
  constructor(target?: MongoshAnalytics);
@@ -33,4 +50,31 @@ export declare class ToggleableAnalytics implements MongoshAnalytics {
33
50
  disable(): void;
34
51
  pause(): void;
35
52
  _validateArgs([firstArg]: [MongoshAnalyticsIdentity]): void;
53
+ flush(callback: (err?: Error | undefined) => void): void;
54
+ }
55
+ type ThrottledAnalyticsOptions = {
56
+ target: MongoshAnalytics;
57
+ throttle: {
58
+ rate: number;
59
+ timeframe?: number;
60
+ metadataPath: string;
61
+ lockfileStaleDuration?: number;
62
+ } | null;
63
+ };
64
+ export declare class ThrottledAnalytics implements MongoshAnalytics {
65
+ private trackQueue;
66
+ private target;
67
+ private currentUserId;
68
+ private throttleOptions;
69
+ private throttleState;
70
+ private restorePromise;
71
+ private unlock;
72
+ constructor({ target, throttle }?: Partial<ThrottledAnalyticsOptions>);
73
+ get metadataPath(): string;
74
+ identify(message: AnalyticsIdentifyMessage): void;
75
+ track(message: AnalyticsTrackMessage): void;
76
+ private restoreThrottleState;
77
+ private shouldEmitAnalyticsEvent;
78
+ flush(callback: (err?: Error | undefined) => void): void;
36
79
  }
80
+ export {};
@@ -1,71 +1,96 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ToggleableAnalytics = exports.NoopAnalytics = void 0;
6
+ exports.ThrottledAnalytics = exports.ToggleableAnalytics = exports.NoopAnalytics = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ class Queue {
10
+ constructor(applyFn) {
11
+ this.applyFn = applyFn;
12
+ this.queue = [];
13
+ this.state = 'paused';
14
+ }
15
+ push(val) {
16
+ switch (this.state) {
17
+ case 'paused':
18
+ this.queue.push(val);
19
+ return;
20
+ case 'enabled':
21
+ this.applyFn(val);
22
+ return;
23
+ case 'disabled':
24
+ default:
25
+ return;
26
+ }
27
+ }
28
+ enable() {
29
+ this.state = 'enabled';
30
+ const queue = this.queue;
31
+ this.queue = [];
32
+ queue.forEach((val) => {
33
+ this.applyFn(val);
34
+ });
35
+ }
36
+ disable() {
37
+ this.state = 'disabled';
38
+ this.queue = [];
39
+ }
40
+ pause() {
41
+ this.state = 'paused';
42
+ }
43
+ getState() {
44
+ return this.state;
45
+ }
46
+ }
4
47
  class NoopAnalytics {
5
48
  identify(_info) { }
6
49
  track(_info) { }
50
+ flush(cb) {
51
+ cb();
52
+ }
7
53
  }
8
54
  exports.NoopAnalytics = NoopAnalytics;
9
55
  class ToggleableAnalytics {
10
56
  constructor(target = new NoopAnalytics()) {
11
- this._queue = [];
12
- this._state = 'paused';
57
+ this._queue = new Queue((item) => {
58
+ if (item[0] === 'identify') {
59
+ this._target.identify(...item[1]);
60
+ }
61
+ if (item[0] === 'track') {
62
+ this._target.track(...item[1]);
63
+ }
64
+ });
13
65
  this._target = target;
14
66
  }
15
67
  identify(...args) {
16
68
  this._validateArgs(args);
17
- switch (this._state) {
18
- case 'enabled':
19
- this._target.identify(...args);
20
- break;
21
- case 'paused':
22
- this._queue.push(['identify', args]);
23
- break;
24
- default:
25
- break;
26
- }
69
+ this._queue.push(['identify', args]);
27
70
  }
28
71
  track(...args) {
29
72
  this._validateArgs(args);
30
- switch (this._state) {
31
- case 'enabled':
32
- this._target.track(...args);
33
- break;
34
- case 'paused':
35
- this._queue.push(['track', args]);
36
- break;
37
- default:
38
- break;
39
- }
73
+ this._queue.push(['track', args]);
40
74
  }
41
75
  enable() {
42
76
  if (this._pendingError) {
43
77
  throw this._pendingError;
44
78
  }
45
- this._state = 'enabled';
46
- const queue = this._queue;
47
- this._queue = [];
48
- for (const entry of queue) {
49
- if (entry[0] === 'identify')
50
- this.identify(...entry[1]);
51
- if (entry[0] === 'track')
52
- this.track(...entry[1]);
53
- }
79
+ this._queue.enable();
54
80
  }
55
81
  disable() {
56
- this._state = 'disabled';
57
82
  this._pendingError = undefined;
58
- this._queue = [];
83
+ this._queue.disable();
59
84
  }
60
85
  pause() {
61
- this._state = 'paused';
86
+ this._queue.pause();
62
87
  }
63
88
  _validateArgs([firstArg]) {
64
89
  var _a;
65
90
  if (!('userId' in firstArg && firstArg.userId) &&
66
91
  !('anonymousId' in firstArg && firstArg.anonymousId)) {
67
92
  const err = new Error('Telemetry setup is missing userId or anonymousId');
68
- switch (this._state) {
93
+ switch (this._queue.getState()) {
69
94
  case 'enabled':
70
95
  throw err;
71
96
  case 'paused':
@@ -76,6 +101,148 @@ class ToggleableAnalytics {
76
101
  }
77
102
  }
78
103
  }
104
+ flush(callback) {
105
+ return this._target.flush(callback);
106
+ }
79
107
  }
80
108
  exports.ToggleableAnalytics = ToggleableAnalytics;
109
+ async function lockfile(filepath, staleDuration = 43200000) {
110
+ var _a;
111
+ let intervalId;
112
+ const lockfilePath = `${filepath}.lock`;
113
+ const unlock = async () => {
114
+ clearInterval(intervalId);
115
+ try {
116
+ return await fs_1.default.promises.rmdir(lockfilePath);
117
+ }
118
+ catch (_a) {
119
+ }
120
+ };
121
+ try {
122
+ await fs_1.default.promises.mkdir(lockfilePath);
123
+ intervalId = setInterval(() => {
124
+ const now = Date.now();
125
+ fs_1.default.promises.utimes(lockfilePath, now, now).catch(() => { });
126
+ }, staleDuration / 2);
127
+ (_a = intervalId.unref) === null || _a === void 0 ? void 0 : _a.call(intervalId);
128
+ return unlock;
129
+ }
130
+ catch (e) {
131
+ if (e.code !== 'EEXIST') {
132
+ throw e;
133
+ }
134
+ const stats = await fs_1.default.promises.stat(lockfilePath);
135
+ if (Date.now() - stats.mtimeMs > staleDuration) {
136
+ await fs_1.default.promises.rmdir(lockfilePath);
137
+ return lockfile(filepath, staleDuration);
138
+ }
139
+ throw new Error(`File ${filepath} already locked`);
140
+ }
141
+ }
142
+ class ThrottledAnalytics {
143
+ constructor({ target, throttle } = {}) {
144
+ this.trackQueue = new Queue((message) => {
145
+ if (this.shouldEmitAnalyticsEvent()) {
146
+ this.target.track(message);
147
+ this.throttleState.count++;
148
+ }
149
+ });
150
+ this.target = new NoopAnalytics();
151
+ this.currentUserId = null;
152
+ this.throttleOptions = null;
153
+ this.throttleState = { count: 0, timestamp: Date.now() };
154
+ this.restorePromise = Promise.resolve();
155
+ this.unlock = () => Promise.resolve();
156
+ this.target = target !== null && target !== void 0 ? target : this.target;
157
+ this.throttleOptions = throttle !== null && throttle !== void 0 ? throttle : this.throttleOptions;
158
+ }
159
+ get metadataPath() {
160
+ if (!this.throttleOptions) {
161
+ throw new Error('Metadata path is not avaialble if throttling is disabled');
162
+ }
163
+ if (!this.currentUserId) {
164
+ throw new Error('Metadata path is not avaialble if userId is not set');
165
+ }
166
+ const { throttleOptions: { metadataPath }, currentUserId: userId, } = this;
167
+ return path_1.default.resolve(metadataPath, `am-${userId}.json`);
168
+ }
169
+ identify(message) {
170
+ var _a;
171
+ if (this.currentUserId) {
172
+ throw new Error('Identify can only be called once per user session');
173
+ }
174
+ this.currentUserId = (_a = message.userId) !== null && _a !== void 0 ? _a : message.anonymousId;
175
+ this.restorePromise = this.restoreThrottleState().then((enabled) => {
176
+ if (!enabled) {
177
+ this.trackQueue.disable();
178
+ return;
179
+ }
180
+ if (this.shouldEmitAnalyticsEvent()) {
181
+ this.target.identify(message);
182
+ this.throttleState.count++;
183
+ }
184
+ this.trackQueue.enable();
185
+ });
186
+ }
187
+ track(message) {
188
+ this.trackQueue.push(message);
189
+ }
190
+ async restoreThrottleState() {
191
+ if (!this.throttleOptions) {
192
+ return true;
193
+ }
194
+ if (!this.currentUserId) {
195
+ throw new Error('Trying to restore throttle state before userId is set');
196
+ }
197
+ try {
198
+ this.unlock = await lockfile(this.metadataPath, this.throttleOptions.lockfileStaleDuration);
199
+ }
200
+ catch (e) {
201
+ return false;
202
+ }
203
+ try {
204
+ this.throttleState = JSON.parse(await fs_1.default.promises.readFile(this.metadataPath, 'utf8'));
205
+ }
206
+ catch (e) {
207
+ if (e.code !== 'ENOENT') {
208
+ return false;
209
+ }
210
+ }
211
+ return true;
212
+ }
213
+ shouldEmitAnalyticsEvent() {
214
+ var _a;
215
+ if (!this.throttleOptions) {
216
+ return true;
217
+ }
218
+ if (Date.now() - this.throttleState.timestamp >
219
+ ((_a = this.throttleOptions.timeframe) !== null && _a !== void 0 ? _a : 60000)) {
220
+ this.throttleState.timestamp = Date.now();
221
+ this.throttleState.count = 0;
222
+ return true;
223
+ }
224
+ return this.throttleState.count < this.throttleOptions.rate;
225
+ }
226
+ flush(callback) {
227
+ if (!this.throttleOptions) {
228
+ this.target.flush(callback);
229
+ return;
230
+ }
231
+ if (!this.currentUserId) {
232
+ callback(new Error('Trying to persist throttle state before userId is set'));
233
+ return;
234
+ }
235
+ this.restorePromise.finally(async () => {
236
+ try {
237
+ await fs_1.default.promises.writeFile(this.metadataPath, JSON.stringify(this.throttleState));
238
+ await this.unlock();
239
+ this.target.flush(callback);
240
+ }
241
+ catch (e) {
242
+ callback(e);
243
+ }
244
+ });
245
+ }
246
+ }
247
+ exports.ThrottledAnalytics = ThrottledAnalytics;
81
248
  //# sourceMappingURL=analytics-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-helpers.js","sourceRoot":"","sources":["../src/analytics-helpers.ts"],"names":[],"mappings":";;;AA6BA,MAAa,aAAa;IACxB,QAAQ,CAAC,KAAU,IAAS,CAAC;IAC7B,KAAK,CAAC,KAAU,IAAS,CAAC;CAC3B;AAHD,sCAGC;AAMD,MAAa,mBAAmB;IAM9B,YAAY,SAA2B,IAAI,aAAa,EAAE;QAL1D,WAAM,GAAqH,EAAE,CAAC;QAC9H,WAAM,GAAsC,QAAQ,CAAC;QAKnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,GAAG,IAA8C;QACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,QAAQ,IAAI,CAAC,MAAM,EAAE;YACnB,KAAK,SAAS;gBACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;gBACrC,MAAM;YACR;gBACE,MAAM;SACT;IACH,CAAC;IAED,KAAK,CAAC,GAAG,IAA2C;QAClD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,QAAQ,IAAI,CAAC,MAAM,EAAE;YACnB,KAAK,SAAS;gBACZ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAClC,MAAM;YACR;gBACE,MAAM;SACT;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,IAAI,CAAC,aAAa,CAAC;SAC1B;QACD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;YACzB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACnD;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,CAAC;IAED,aAAa,CAAC,CAAC,QAAQ,CAA6B;;QAQlD,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;YAC1C,CAAC,CAAC,aAAa,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE;YACxD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAC1E,QAAQ,IAAI,CAAC,MAAM,EAAE;gBACnB,KAAK,SAAS;oBACZ,MAAM,GAAG,CAAC;gBACZ,KAAK,QAAQ;oBACX,MAAA,IAAI,CAAC,aAAa,oCAAlB,IAAI,CAAC,aAAa,GAAK,GAAG,EAAC;oBAC3B,MAAM;gBACR;oBACE,MAAM;aACT;SACF;IACH,CAAC;CACF;AAnFD,kDAmFC"}
1
+ {"version":3,"file":"analytics-helpers.js","sourceRoot":"","sources":["../src/analytics-helpers.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { setupLoggerAndTelemetry } from './setup-logger-and-telemetry';
2
- export { MongoshAnalytics, ToggleableAnalytics, NoopAnalytics } from './analytics-helpers';
2
+ export { MongoshAnalytics, ToggleableAnalytics, NoopAnalytics, ThrottledAnalytics, } from './analytics-helpers';
package/lib/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoopAnalytics = exports.ToggleableAnalytics = exports.setupLoggerAndTelemetry = void 0;
3
+ exports.ThrottledAnalytics = exports.NoopAnalytics = exports.ToggleableAnalytics = exports.setupLoggerAndTelemetry = void 0;
4
4
  var setup_logger_and_telemetry_1 = require("./setup-logger-and-telemetry");
5
5
  Object.defineProperty(exports, "setupLoggerAndTelemetry", { enumerable: true, get: function () { return setup_logger_and_telemetry_1.setupLoggerAndTelemetry; } });
6
6
  var analytics_helpers_1 = require("./analytics-helpers");
7
7
  Object.defineProperty(exports, "ToggleableAnalytics", { enumerable: true, get: function () { return analytics_helpers_1.ToggleableAnalytics; } });
8
8
  Object.defineProperty(exports, "NoopAnalytics", { enumerable: true, get: function () { return analytics_helpers_1.NoopAnalytics; } });
9
+ Object.defineProperty(exports, "ThrottledAnalytics", { enumerable: true, get: function () { return analytics_helpers_1.ThrottledAnalytics; } });
9
10
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAChC,yDAA2F;AAAhE,wHAAA,mBAAmB,OAAA;AAAE,kHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAChC,yDAK6B;AAH3B,wHAAA,mBAAmB,OAAA;AACnB,kHAAA,aAAa,OAAA;AACb,uHAAA,kBAAkB,OAAA"}
@@ -1,4 +1,4 @@
1
1
  import type { MongoshBus } from '@mongosh/types';
2
- import { MongoLogWriter } from 'mongodb-log-writer';
3
- import { MongoshAnalytics } from './analytics-helpers';
2
+ import type { MongoLogWriter } from 'mongodb-log-writer';
3
+ import type { MongoshAnalytics } from './analytics-helpers';
4
4
  export declare function setupLoggerAndTelemetry(bus: MongoshBus, log: MongoLogWriter, analytics: MongoshAnalytics, userTraits: any, mongosh_version: string): void;