diff --git a/.travis.yml b/.travis.yml index 0f9059d..d4ffaa1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,11 +2,7 @@ sudo: false dist: bionic language: node_js node_js: - - 12 - - 13 -install: - - npm ci -script: - - npm run check - - npm test + - 10.17.0 # 10gen/charts + - 12.4.0 # mongodb-js/compass +script: npm run ci cache: npm diff --git a/lib/trackers/bugsnag.js b/lib/trackers/bugsnag.js index 4e6a74a..c010344 100644 --- a/lib/trackers/bugsnag.js +++ b/lib/trackers/bugsnag.js @@ -14,10 +14,10 @@ var BugsnagTracker = State.extend({ id: 'bugsnag', // assign properties to bugsnag handler props: { - apiKey: ['string', true, ''], // set through metrics.configure() + apiKey: ['string', true, ''], // set through metrics.configure() autoNotify: ['boolean', true, true], metaData: ['object', false], - appVersion: ['string', true, ''], // set by App resource + appVersion: ['string', true, ''], // set by App resource notifyReleaseStages: { type: 'array', default: function() { @@ -32,8 +32,8 @@ var BugsnagTracker = State.extend({ required: true, default: false }, - appStage: ['string', true, ''], // set by App resource - userId: ['string', true, ''], // set by User resource + appStage: ['string', true, ''], // set by App resource + userId: ['string', true, ''], // set by User resource bugsnagHandler: ['object', false, null] }, derived: { @@ -45,7 +45,7 @@ var BugsnagTracker = State.extend({ }, // this is just a rename of `appStage`, set by App resource, but bugsnag // requires the name to be releaseStage - 'releaseStage': { + releaseStage: { deps: ['appStage'], fn: function() { return this.appStage; @@ -76,8 +76,9 @@ var BugsnagTracker = State.extend({ _configureBugsnag: function() { if (this.enabledAndConfigured) { if (typeof window !== 'undefined') { - this.bugsnagHandler = this.bugsnagHandler || require('bugsnag-js').noConflict(); - var options = this.serialize({props: true, derived: true}); + this.bugsnagHandler = + this.bugsnagHandler || require('bugsnag-js').noConflict(); + var options = this.serialize({ props: true, derived: true }); options.beforeNotify = this.beforeNotify; delete options.enabledAndConfigured; debug('configuring bugsnag with %j', options); diff --git a/lib/trackers/ga.js b/lib/trackers/ga.js index b2c6de6..709ea3f 100644 --- a/lib/trackers/ga.js +++ b/lib/trackers/ga.js @@ -1,6 +1,6 @@ var querystring = require('querystring'); var State = require('ampersand-state'); -var xhr = (typeof window !== 'undefined') ? require('xhr') : require('request'); +var xhr = typeof window !== 'undefined' ? require('xhr') : require('request'); var _ = require('lodash'); var singleton = require('singleton-js'); var redact = require('mongodb-redact'); @@ -10,26 +10,26 @@ var debug = require('debug')('mongodb-js-metrics:trackers:ga'); // rename property names to google analytics keys var PROTOCOL_PARAMETER_MAP = { - 'version': 'v', - 'dataSource': 'ds', - 'trackingId': 'tid', - 'userId': 'cid', - 'hitType': 't', - 'appName': 'an', - 'appVersion': 'av', - 'appPlatform': 'aiid', // we use the app installer id field to track platform - 'eventCategory': 'ec', - 'eventAction': 'ea', - 'eventLabel': 'el', - 'eventValue': 'ev', - 'timingCategory': 'utc', - 'timingVar': 'utv', - 'timingValue': 'utt', - 'timingLabel': 'utl', - 'screenName': 'cd', - 'documentPath': 'dp', - 'exDescription': 'exd', - 'exFatal': 'exf' + version: 'v', + dataSource: 'ds', + trackingId: 'tid', + userId: 'cid', + hitType: 't', + appName: 'an', + appVersion: 'av', + appPlatform: 'aiid', // we use the app installer id field to track platform + eventCategory: 'ec', + eventAction: 'ea', + eventLabel: 'el', + eventValue: 'ev', + timingCategory: 'utc', + timingVar: 'utv', + timingValue: 'utt', + timingLabel: 'utl', + screenName: 'cd', + documentPath: 'dp', + exDescription: 'exd', + exFatal: 'exf' }; var GATracker = State.extend({ @@ -37,11 +37,11 @@ var GATracker = State.extend({ props: { version: ['number', true, 1], dataSource: ['string', true, 'app'], - trackingId: ['string', true, ''], // set through metrics.configure() - userId: ['string', true, ''], // set by User resource - appName: ['string', true, ''], // set by App resource - appVersion: ['string', true, ''], // set by App resource - appPlatform: ['string', true, ''] // set by App resource + trackingId: ['string', true, ''], // set through metrics.configure() + userId: ['string', true, ''], // set by User resource + appName: ['string', true, ''], // set by App resource + appVersion: ['string', true, ''], // set by App resource + appPlatform: ['string', true, ''] // set by App resource }, session: { enabled: { @@ -80,11 +80,13 @@ var GATracker = State.extend({ if (!this.enabled) { return; } - callback = callback || function(err) { - if (err) { - debug('Google Analytics returned error:', err.message); - } - }; + callback = + callback || + function(err) { + if (err) { + debug('Google Analytics returned error:', err.message); + } + }; // extend options with default options _.defaults(options || {}, this.serialize()); options = this.shortify(options); diff --git a/lib/trackers/intercom.js b/lib/trackers/intercom.js index b9fc070..9e992c7 100644 --- a/lib/trackers/intercom.js +++ b/lib/trackers/intercom.js @@ -11,8 +11,10 @@ var sentenceCase = require('../shared').sentenceCase; */ var MONGO_ERROR = 'MongoError'; -var os = (typeof window === 'undefined') ? - require('os') : require('electron').remote.require('os'); +var os = + typeof window === 'undefined' + ? require('os') + : require('electron').remote.require('os'); var IntercomTracker = State.extend({ id: 'intercom', @@ -80,8 +82,11 @@ var IntercomTracker = State.extend({ enabledAndConfigured: { deps: ['enabled', 'panelEnabled', 'appId', 'userId'], fn: function() { - return (this.enabled || this.panelEnabled) - && this.appId !== '' && this.userId !== ''; + return ( + (this.enabled || this.panelEnabled) && + this.appId !== '' && + this.userId !== '' + ); } } }, @@ -253,7 +258,11 @@ var IntercomTracker = State.extend({ // redact metadata metadata = sentenceCase(redact(metadata)); - debug('sending event `%s` to intercom with metadata %j', eventName, metadata); + debug( + 'sending event `%s` to intercom with metadata %j', + eventName, + metadata + ); if (typeof window !== 'undefined' && window.Intercom) { window.Intercom('trackEvent', eventName, metadata); } diff --git a/lib/trackers/stitch.js b/lib/trackers/stitch.js index 23885a7..eb01575 100644 --- a/lib/trackers/stitch.js +++ b/lib/trackers/stitch.js @@ -66,7 +66,13 @@ var StitchTracker = State.extend({ _usersDatabaseName: 'any', _usersCollectionName: 'any', _client: 'any', - _callsQueue: ['array', true, function() { return []; }], // array of object with format: { fn: Function, args: Array } + _callsQueue: [ + 'array', + true, + function() { + return []; + } + ], // array of object with format: { fn: Function, args: Array } enabled: ['boolean', true, false], hasBooted: ['boolean', true, false] }, @@ -88,11 +94,12 @@ var StitchTracker = State.extend({ _enabledConfiguredChanged: function() { if (this.enabledAndConfigured) { // tracks all events from queue and calls _identify only when stitch client has been initialized - this._setup() - .then(function() { + this._setup().then( + function() { this._trackFromQueue(); this._identify(); - }.bind(this)); + }.bind(this) + ); } }, _trackFromQueue: function() { @@ -117,23 +124,24 @@ var StitchTracker = State.extend({ } var self = this; - return stitch.StitchClientFactory.create(this.appId) - .then(function(client) { - return client.login() - .then(function() { - self._client = client; + return stitch.StitchClientFactory.create(this.appId).then(function(client) { + return client + .login() + .then(function() { + self._client = client; - debug('setup client', { - _client: self._client, - _eventsDatabaseName: self._eventsDatabaseName, - _eventsCollectionName: self._eventsCollectionName, - _usersDatabaseName: self._usersDatabaseName, - _usersCollectionName: self._usersCollectionName - }); - }).catch(function(e) { - debug('error logging in via stitch: %s', e.message); + debug('setup client', { + _client: self._client, + _eventsDatabaseName: self._eventsDatabaseName, + _eventsCollectionName: self._eventsCollectionName, + _usersDatabaseName: self._usersDatabaseName, + _usersCollectionName: self._usersCollectionName }); - }); + }) + .catch(function(e) { + debug('error logging in via stitch: %s', e.message); + }); + }); }, _identify: function() { // this is only used when a user is first created ($setOnInsert) @@ -194,7 +202,13 @@ var StitchTracker = State.extend({ if (!this._isTrackerReady()) { return fn(new Error('stitch tracker not configured yet.')); } - return fn(null, this._client.service('mongodb', 'mongodb-atlas').db(db).collection(name)); + return fn( + null, + this._client + .service('mongodb', 'mongodb-atlas') + .db(db) + .collection(name) + ); }, /** @@ -217,7 +231,7 @@ var StitchTracker = State.extend({ // toplevel fields var payload = Object.assign({ - _id: metadata['event id'], // lift up from metadata + _id: metadata['event id'], // lift up from metadata resource: resource, action: action, user_id: this.userId, @@ -240,7 +254,11 @@ var StitchTracker = State.extend({ if (!this._isTrackerReady()) { this._callsQueue.push({ fn: this._getCollection, - args: [this._eventsDatabaseName, this._eventsCollectionName, getCollectionCallback] + args: [ + this._eventsDatabaseName, + this._eventsCollectionName, + getCollectionCallback + ] }); return; } diff --git a/package-lock.json b/package-lock.json index 23770a2..2365011 100644 --- a/package-lock.json +++ b/package-lock.json @@ -202,15 +202,15 @@ "dev": true }, "@types/node": { - "version": "13.1.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.7.tgz", - "integrity": "sha512-HU0q9GXazqiKwviVxg9SI/+t/nAsGkvLDkIdxz+ObejG2nX6Si00TeLqHMoS+a/1tjH7a8YpKVQwtgHuMQsldg==", + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.5.2.tgz", + "integrity": "sha512-Fr6a47c84PRLfd7M7u3/hEknyUdQrrBA6VoPmkze0tcflhU5UnpWEX2kn12ktA/lb+MNHSqFlSiPHIHsaErTPA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.16.0.tgz", - "integrity": "sha512-hyrCYjFHISos68Bk5KjUAXw0pP/455qq9nxqB1KkT67Pxjcfw+r6Yhcmqnp8etFL45UexCHUMrADHH7dI/m2WQ==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.18.0.tgz", + "integrity": "sha512-gVHylf7FDb8VSi2ypFuEL3hOtoC4HkZZ5dOjXvVjoyKdRrvXAOPSzpNRnKMfaUUEiSLP8UF9j9X9EDLxC0lfZg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -975,24 +975,18 @@ "dev": true }, "escodegen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", - "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.13.0.tgz", + "integrity": "sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw==", "dev": true, "requires": { - "esprima": "^3.1.3", + "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2146,12 +2140,12 @@ } }, "mongodb-js-precommit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mongodb-js-precommit/-/mongodb-js-precommit-2.1.0.tgz", - "integrity": "sha512-No7FZnzPkU7584ULwD4FID+WcfCjpdSoghaHa6YFmuORv8xUetBMq37KP0WcBv8AOxlcTQmaNHo8Ibz2nHYuCA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mongodb-js-precommit/-/mongodb-js-precommit-2.2.0.tgz", + "integrity": "sha512-zfWo/dmJ0JosbWwy/UOhzRePVlDgiGblvNNl+EoS/hSD5JLCwRp3g66P3EoD6DSkXpsKISTRyQjLVr5/f5Kmiw==", "dev": true, "requires": { - "async": "^2.6.1", + "async": "^3.1.0", "chalk": "^3.0.0", "debug": "^4.1.1", "dependency-check": "^4.1.0", @@ -2176,15 +2170,6 @@ "color-convert": "^2.0.1" } }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -3279,9 +3264,9 @@ "dev": true }, "typescript": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", - "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", + "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", "dev": true }, "unc-path-regex": { diff --git a/package.json b/package.json index 6bca671..40525f6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "version": "5.0.0", "scripts": { "check": "mongodb-js-precommit", - "test": "mocha" + "test": "mocha", + "ci": "npm run check && npm test" }, "homepage": "http://github.com/mongodb-js/metrics", "repository": {