@mongosh/logging 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,10 +25,12 @@ export declare class ToggleableAnalytics implements MongoshAnalytics {
25
25
  _queue: Array<['identify', Parameters<MongoshAnalytics['identify']>] | ['track', Parameters<MongoshAnalytics['track']>]>;
26
26
  _state: 'enabled' | 'disabled' | 'paused';
27
27
  _target: MongoshAnalytics;
28
+ _pendingError?: Error;
28
29
  constructor(target?: MongoshAnalytics);
29
30
  identify(...args: Parameters<MongoshAnalytics['identify']>): void;
30
31
  track(...args: Parameters<MongoshAnalytics['track']>): void;
31
32
  enable(): void;
32
33
  disable(): void;
33
34
  pause(): void;
35
+ _validateArgs([firstArg]: [MongoshAnalyticsIdentity]): void;
34
36
  }
@@ -13,6 +13,7 @@ class ToggleableAnalytics {
13
13
  this._target = target;
14
14
  }
15
15
  identify(...args) {
16
+ this._validateArgs(args);
16
17
  switch (this._state) {
17
18
  case 'enabled':
18
19
  this._target.identify(...args);
@@ -25,6 +26,7 @@ class ToggleableAnalytics {
25
26
  }
26
27
  }
27
28
  track(...args) {
29
+ this._validateArgs(args);
28
30
  switch (this._state) {
29
31
  case 'enabled':
30
32
  this._target.track(...args);
@@ -37,6 +39,9 @@ class ToggleableAnalytics {
37
39
  }
38
40
  }
39
41
  enable() {
42
+ if (this._pendingError) {
43
+ throw this._pendingError;
44
+ }
40
45
  this._state = 'enabled';
41
46
  const queue = this._queue;
42
47
  this._queue = [];
@@ -49,11 +54,28 @@ class ToggleableAnalytics {
49
54
  }
50
55
  disable() {
51
56
  this._state = 'disabled';
57
+ this._pendingError = undefined;
52
58
  this._queue = [];
53
59
  }
54
60
  pause() {
55
61
  this._state = 'paused';
56
62
  }
63
+ _validateArgs([firstArg]) {
64
+ var _a;
65
+ if (!('userId' in firstArg && firstArg.userId) &&
66
+ !('anonymousId' in firstArg && firstArg.anonymousId)) {
67
+ const err = new Error('Telemetry setup is missing userId or anonymousId');
68
+ switch (this._state) {
69
+ case 'enabled':
70
+ throw err;
71
+ case 'paused':
72
+ (_a = this._pendingError) !== null && _a !== void 0 ? _a : (this._pendingError = err);
73
+ break;
74
+ default:
75
+ break;
76
+ }
77
+ }
78
+ }
57
79
  }
58
80
  exports.ToggleableAnalytics = ToggleableAnalytics;
59
81
  //# 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;IAK9B,YAAY,SAA2B,IAAI,aAAa,EAAE;QAJ1D,WAAM,GAAqH,EAAE,CAAC;QAC9H,WAAM,GAAsC,QAAQ,CAAC;QAInD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,GAAG,IAA8C;QACxD,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,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,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,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IACzB,CAAC;CACF;AArDD,kDAqDC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mongosh/logging",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "MongoDB Shell Logging Utilities Package",
5
5
  "homepage": "https://github.com/mongodb-js/mongosh",
6
6
  "license": "Apache-2.0",
@@ -18,14 +18,14 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@mongodb-js/devtools-connect": "^1.4.3",
21
- "@mongosh/errors": "1.6.0",
22
- "@mongosh/history": "1.6.0",
23
- "@mongosh/types": "1.6.0",
21
+ "@mongosh/errors": "1.6.1",
22
+ "@mongosh/history": "1.6.1",
23
+ "@mongosh/types": "1.6.1",
24
24
  "mongodb-log-writer": "^1.1.3",
25
25
  "mongodb-redact": "^0.2.2"
26
26
  },
27
27
  "devDependencies": {
28
- "mongodb": "^4.10.0"
28
+ "mongodb": "^4.12.1"
29
29
  },
30
30
  "scripts": {
31
31
  "test": "mocha -r \"../../scripts/import-expansions.js\" --timeout 15000 -r ts-node/register \"./src/**/*.spec.ts\"",
@@ -38,5 +38,5 @@
38
38
  "mongosh": {
39
39
  "unitTestsOnly": true
40
40
  },
41
- "gitHead": "fbbf54a08fb315ae5fde693a98d439b9aa3285f8"
41
+ "gitHead": "51c067456d3e0127156ef1722a44659151e01a12"
42
42
  }
@@ -41,4 +41,15 @@ describe('ToggleableAnalytics', () => {
41
41
  [ 'track', { userId: 'me', event: 'something2', properties: { mongosh_version: '1.2.3' } } ]
42
42
  ]);
43
43
  });
44
+
45
+ it('emits an error for invalid messages if telemetry is enabled', () => {
46
+ const toggleable = new ToggleableAnalytics(target);
47
+
48
+ toggleable.identify({} as any);
49
+ expect(() => toggleable.enable()).to.throw('Telemetry setup is missing userId or anonymousId');
50
+
51
+ toggleable.disable();
52
+ expect(() => toggleable.enable()).to.not.throw();
53
+ expect(() => toggleable.track({} as any)).to.throw('Telemetry setup is missing userId or anonymousId');
54
+ });
44
55
  });
@@ -40,12 +40,14 @@ export class ToggleableAnalytics implements MongoshAnalytics {
40
40
  _queue: Array<['identify', Parameters<MongoshAnalytics['identify']>] | ['track', Parameters<MongoshAnalytics['track']>]> = [];
41
41
  _state: 'enabled' | 'disabled' | 'paused' = 'paused';
42
42
  _target: MongoshAnalytics;
43
+ _pendingError?: Error;
43
44
 
44
45
  constructor(target: MongoshAnalytics = new NoopAnalytics()) {
45
46
  this._target = target;
46
47
  }
47
48
 
48
49
  identify(...args: Parameters<MongoshAnalytics['identify']>): void {
50
+ this._validateArgs(args);
49
51
  switch (this._state) {
50
52
  case 'enabled':
51
53
  this._target.identify(...args);
@@ -59,6 +61,7 @@ export class ToggleableAnalytics implements MongoshAnalytics {
59
61
  }
60
62
 
61
63
  track(...args: Parameters<MongoshAnalytics['track']>): void {
64
+ this._validateArgs(args);
62
65
  switch (this._state) {
63
66
  case 'enabled':
64
67
  this._target.track(...args);
@@ -72,6 +75,9 @@ export class ToggleableAnalytics implements MongoshAnalytics {
72
75
  }
73
76
 
74
77
  enable() {
78
+ if (this._pendingError) {
79
+ throw this._pendingError;
80
+ }
75
81
  this._state = 'enabled';
76
82
  const queue = this._queue;
77
83
  this._queue = [];
@@ -83,10 +89,34 @@ export class ToggleableAnalytics implements MongoshAnalytics {
83
89
 
84
90
  disable() {
85
91
  this._state = 'disabled';
92
+ this._pendingError = undefined;
86
93
  this._queue = [];
87
94
  }
88
95
 
89
96
  pause() {
90
97
  this._state = 'paused';
91
98
  }
99
+
100
+ _validateArgs([firstArg]: [MongoshAnalyticsIdentity]): void {
101
+ // Validate that the first argument of a track() or identify() call has
102
+ // a .userId or .anonymousId property set.
103
+ // This validation is also performed by the segment package, but is done
104
+ // here for two reasons: One, if telemetry is disabled, then we lose the
105
+ // stack trace information for where the buggy call came from, and two,
106
+ // this way the validation affects all tests in CI, not just the ones that
107
+ // are explicitly written to enable telemetry to a fake endpoint.
108
+ if (!('userId' in firstArg && firstArg.userId) &&
109
+ !('anonymousId' in firstArg && firstArg.anonymousId)) {
110
+ const err = new Error('Telemetry setup is missing userId or anonymousId');
111
+ switch (this._state) {
112
+ case 'enabled':
113
+ throw err;
114
+ case 'paused':
115
+ this._pendingError ??= err;
116
+ break;
117
+ default:
118
+ break;
119
+ }
120
+ }
121
+ }
92
122
  }