diff --git a/.eslintrc.js b/.eslintrc.js index 3de849de34..c80aaab823 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -25,7 +25,8 @@ module.exports = { "build/*.ts", "src/**/*.ts", "integration/**/*.ts", - "src/extensions/**/*.ts*" + "src/extensions/**/*.ts*", + "extensions/**/*.ts*" ], parser: "@typescript-eslint/parser", extends: [ diff --git a/extensions/telemetry/main.ts b/extensions/telemetry/main.ts index bf1bb1cf34..262980700f 100644 --- a/extensions/telemetry/main.ts +++ b/extensions/telemetry/main.ts @@ -1,16 +1,17 @@ import { LensMainExtension } from "@lens/extensions"; -import { TelemetryPreferencesStore } from "./src/telemetry-preferences-store" +import { telemetryPreferencesStore } from "./src/telemetry-preferences-store" +import { tracker } from "./src/tracker"; export default class TelemetryMainExtension extends LensMainExtension { - protected preferencesStore: TelemetryPreferencesStore async onActivate() { console.log("telemetry main extension activated") - this.preferencesStore = TelemetryPreferencesStore.getInstance() - await this.preferencesStore.load() + tracker.start() + await telemetryPreferencesStore.load() } onDeactivate() { + tracker.stop() console.log("telemetry main extension deactivated") } } diff --git a/extensions/telemetry/package-lock.json b/extensions/telemetry/package-lock.json index f2e17b45d7..1219363028 100644 --- a/extensions/telemetry/package-lock.json +++ b/extensions/telemetry/package-lock.json @@ -201,7 +201,6 @@ "version": "6.12.5", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -271,6 +270,14 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -318,6 +325,11 @@ } } }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -331,12 +343,27 @@ "dev": true, "optional": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -404,6 +431,14 @@ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -633,6 +668,11 @@ "unset-value": "^1.0.0" } }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -734,6 +774,14 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -805,8 +853,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-ecdh": { "version": "4.0.4", @@ -878,6 +925,14 @@ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -934,6 +989,11 @@ } } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -981,6 +1041,15 @@ "stream-shift": "^1.0.0" } }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "elliptic": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", @@ -1129,6 +1198,11 @@ } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1215,17 +1289,20 @@ } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "figgy-pudding": { "version": "3.5.2", @@ -1285,6 +1362,21 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -1335,6 +1427,14 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -1365,6 +1465,20 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1474,6 +1588,16 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -1633,6 +1757,11 @@ "isobject": "^3.0.1" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -1657,23 +1786,42 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { "version": "1.0.1", @@ -1684,6 +1832,17 @@ "minimist": "^1.2.0" } }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -1817,6 +1976,19 @@ } } }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -1989,6 +2161,11 @@ } } }, + "node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1996,6 +2173,11 @@ "dev": true, "optional": true }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2164,6 +2346,11 @@ "sha.js": "^2.4.8" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", @@ -2226,6 +2413,11 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -2284,8 +2476,12 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "querystring": { "version": "0.2.0", @@ -2389,6 +2585,33 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -2432,8 +2655,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -2447,8 +2669,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "schema-utils": { "version": "1.0.0", @@ -2680,6 +2901,22 @@ "extend-shallow": "^3.0.0" } }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "ssri": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", @@ -2883,6 +3120,15 @@ "is-number": "^7.0.0" } }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, "ts-loader": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.4.tgz", @@ -2908,6 +3154,19 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -2950,6 +3209,31 @@ "imurmurhash": "^0.1.4" } }, + "universal-analytics": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", + "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "requires": { + "debug": "^4.1.1", + "request": "^2.88.2", + "uuid": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -3001,7 +3285,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -3059,6 +3342,21 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", diff --git a/extensions/telemetry/package.json b/extensions/telemetry/package.json index 4f598a4d5a..5d9a306299 100644 --- a/extensions/telemetry/package.json +++ b/extensions/telemetry/package.json @@ -12,12 +12,15 @@ "build": "webpack --config webpack.config.js", "dev": "npm run build --watch" }, - "dependencies": {}, + "dependencies": { + }, "devDependencies": { "ts-loader": "^8.0.4", "typescript": "^4.0.3", "webpack": "^4.44.2", "mobx": "^5.15.5", - "react": "^16.13.1" + "react": "^16.13.1", + "node-machine-id": "^1.1.12", + "universal-analytics": "^0.4.23" } } diff --git a/extensions/telemetry/renderer.tsx b/extensions/telemetry/renderer.tsx index 83b34b00e1..6417488072 100644 --- a/extensions/telemetry/renderer.tsx +++ b/extensions/telemetry/renderer.tsx @@ -1,15 +1,14 @@ import { AppPreferenceRegistry, LensRendererExtension } from "@lens/ui-extensions"; -import { TelemetryPreferencesStore } from "./src/telemetry-preferences-store" +import { telemetryPreferencesStore } from "./src/telemetry-preferences-store" import { TelemetryPreferenceHint, TelemetryPreferenceInput } from "./src/telemetry-preference" +import { tracker } from "./src/tracker" import React from "react" export default class TelemetryRendererExtension extends LensRendererExtension { - protected preferencesStore: TelemetryPreferencesStore - async onActivate() { console.log("telemetry extension activated") - this.preferencesStore = TelemetryPreferencesStore.getInstance() - await this.preferencesStore.load() + tracker.start() + await telemetryPreferencesStore.load() } registerAppPreferences(registry: AppPreferenceRegistry) { @@ -18,7 +17,7 @@ export default class TelemetryRendererExtension extends LensRendererExtension { title: "Telemetry & Usage Tracking", components: { Hint: () => , - Input: () => + Input: () => } }) ) diff --git a/extensions/telemetry/src/telemetry-preferences-store.ts b/extensions/telemetry/src/telemetry-preferences-store.ts index 08810e0208..45809791f5 100644 --- a/extensions/telemetry/src/telemetry-preferences-store.ts +++ b/extensions/telemetry/src/telemetry-preferences-store.ts @@ -31,3 +31,5 @@ export class TelemetryPreferencesStore extends BaseStore() diff --git a/extensions/telemetry/src/tracker.ts b/extensions/telemetry/src/tracker.ts new file mode 100644 index 0000000000..dba2fca4b7 --- /dev/null +++ b/extensions/telemetry/src/tracker.ts @@ -0,0 +1,72 @@ +import { Singleton, appEventBus, AppEvent } from "@lens/extensions" +import ua from "universal-analytics" +import { machineIdSync } from "node-machine-id" +import { telemetryPreferencesStore } from "./telemetry-preferences-store" + +export class Tracker extends Singleton { + static readonly GA_ID = "UA-159377374-1" + + protected eventHandlers: Array<(ev: AppEvent ) => void> = [] + protected started = false + protected visitor: ua.Visitor + protected machineId: string = null; + protected ip: string = null; + protected appVersion: string; + protected locale: string; + protected electronUA: string; + + private constructor() { + super(); + try { + this.visitor = ua(Tracker.GA_ID, machineIdSync(), { strictCidFormat: false }) + } catch (error) { + this.visitor = ua(Tracker.GA_ID) + } + this.visitor.set("dl", "https://telemetry.k8slens.dev") + + } + + start() { + if (this.started === true) { return } + + this.started = true + + const handler = (ev: AppEvent) => { + this.event(ev.name, ev.action, ev.params) + } + this.eventHandlers.push(handler) + appEventBus.addListener(handler) + } + + stop() { + if (!this.started) { return } + + this.started = false + + for (const handler of this.eventHandlers) { + appEventBus.removeListener(handler) + } + } + + protected async isTelemetryAllowed(): Promise { + return telemetryPreferencesStore.enabled + } + + protected async event(eventCategory: string, eventAction: string, otherParams = {}) { + try { + const allowed = await this.isTelemetryAllowed(); + if (!allowed) { + return; + } + this.visitor.event({ + ec: eventCategory, + ea: eventAction, + ...otherParams, + }).send() + } catch (err) { + console.error(`Failed to track "${eventCategory}:${eventAction}"`, err) + } + } +} + +export const tracker = Tracker.getInstance(); diff --git a/package.json b/package.json index 1c8a19a3e4..138d4d0f6b 100644 --- a/package.json +++ b/package.json @@ -203,7 +203,6 @@ "mobx": "^5.15.5", "mobx-observable-history": "^1.0.3", "mock-fs": "^4.12.0", - "node-machine-id": "^1.1.12", "node-pty": "^0.9.0", "npm": "^6.14.8", "openid-client": "^3.15.2", @@ -218,7 +217,6 @@ "tar": "^6.0.2", "tcp-port-used": "^1.0.1", "tempy": "^0.5.0", - "universal-analytics": "^0.4.20", "uuid": "^8.1.0", "win-ca": "^3.2.0", "winston": "^3.2.1", diff --git a/src/common/__tests__/event-bus.test.ts b/src/common/__tests__/event-bus.test.ts new file mode 100644 index 0000000000..7daa9ed9b0 --- /dev/null +++ b/src/common/__tests__/event-bus.test.ts @@ -0,0 +1,15 @@ +import { appEventBus, AppEvent } from "../event-bus" + +describe("event bus tests", () => { + describe("emit", () => { + it("emits an event", () => { + let event: AppEvent = null + appEventBus.addListener((data) => { + event = data + }) + + appEventBus.emit({name: "foo", action: "bar"}) + expect(event.name).toBe("foo") + }) + }) +}) diff --git a/src/common/cluster-ipc.ts b/src/common/cluster-ipc.ts index dd98df1560..7a96b2e524 100644 --- a/src/common/cluster-ipc.ts +++ b/src/common/cluster-ipc.ts @@ -1,7 +1,7 @@ import { createIpcChannel } from "./ipc"; import { ClusterId, clusterStore } from "./cluster-store"; import { extensionLoader } from "../extensions/extension-loader" -import { tracker } from "./tracker"; +import { appEventBus } from "./event-bus" export const clusterIpc = { activate: createIpcChannel({ @@ -37,7 +37,7 @@ export const clusterIpc = { disconnect: createIpcChannel({ channel: "cluster:disconnect", handle: (clusterId: ClusterId) => { - tracker.event("cluster", "stop"); + appEventBus.emit({name: "cluster", action: "stop"}); return clusterStore.getById(clusterId)?.disconnect(); }, }), @@ -45,7 +45,7 @@ export const clusterIpc = { installFeature: createIpcChannel({ channel: "cluster:install-feature", handle: async (clusterId: ClusterId, feature: string, config?: any) => { - tracker.event("cluster", "install", feature); + appEventBus.emit({name: "cluster", action: "install", params: { feature: feature}}) const cluster = clusterStore.getById(clusterId); if (cluster) { await cluster.installFeature(feature, config) @@ -58,7 +58,7 @@ export const clusterIpc = { uninstallFeature: createIpcChannel({ channel: "cluster:uninstall-feature", handle: (clusterId: ClusterId, feature: string) => { - tracker.event("cluster", "uninstall", feature); + appEventBus.emit({name: "cluster", action: "uninstall", params: { feature: feature}}) return clusterStore.getById(clusterId)?.uninstallFeature(feature) } }), @@ -66,7 +66,7 @@ export const clusterIpc = { upgradeFeature: createIpcChannel({ channel: "cluster:upgrade-feature", handle: (clusterId: ClusterId, feature: string, config?: any) => { - tracker.event("cluster", "upgrade", feature); + appEventBus.emit({name: "cluster", action: "upgrade", params: { feature: feature}}) return clusterStore.getById(clusterId)?.upgradeFeature(feature, config) } }), diff --git a/src/common/cluster-store.ts b/src/common/cluster-store.ts index 4ab64f668b..b8549bbcc6 100644 --- a/src/common/cluster-store.ts +++ b/src/common/cluster-store.ts @@ -7,7 +7,7 @@ import { BaseStore } from "./base-store"; import { Cluster, ClusterState } from "../main/cluster"; import migrations from "../migrations/cluster-store" import logger from "../main/logger"; -import { tracker } from "./tracker"; +import { appEventBus } from "./event-bus" import { dumpConfigYaml } from "./kube-helpers"; import { saveToAppFiles } from "./utils/saveToAppFiles"; import { KubeConfig } from "@kubernetes/client-node"; @@ -142,7 +142,7 @@ export class ClusterStore extends BaseStore { @action addCluster(...models: ClusterModel[]) { models.forEach(model => { - tracker.event("cluster", "add"); + appEventBus.emit({name: "cluster", action: "add"}) const cluster = new Cluster(model); this.clusters.set(model.id, cluster); }) @@ -150,7 +150,7 @@ export class ClusterStore extends BaseStore { @action async removeById(clusterId: ClusterId) { - tracker.event("cluster", "remove"); + appEventBus.emit({name: "cluster", action: "remove"}) const cluster = this.getById(clusterId); if (cluster) { this.clusters.delete(clusterId); diff --git a/src/common/event-bus.ts b/src/common/event-bus.ts new file mode 100644 index 0000000000..4259467380 --- /dev/null +++ b/src/common/event-bus.ts @@ -0,0 +1,9 @@ +import { EventEmitter } from "./event-emitter" + +export type AppEvent = { + name: string; + action: string; + params?: object; +} + +export const appEventBus = new EventEmitter<[AppEvent]>() diff --git a/src/renderer/utils/eventEmitter.ts b/src/common/event-emitter.ts similarity index 100% rename from src/renderer/utils/eventEmitter.ts rename to src/common/event-emitter.ts diff --git a/src/common/tracker.ts b/src/common/tracker.ts deleted file mode 100644 index f2fcb9c1c9..0000000000 --- a/src/common/tracker.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { app, App, remote } from "electron" -import ua from "universal-analytics" -import { machineIdSync } from "node-machine-id" -import Singleton from "./utils/singleton"; -import { userStore } from "./user-store" -import logger from "../main/logger"; - -export class Tracker extends Singleton { - static readonly GA_ID = "UA-159377374-1" - - protected visitor: ua.Visitor - protected machineId: string = null; - protected ip: string = null; - protected appVersion: string; - protected locale: string; - protected electronUA: string; - - private constructor(app: App) { - super(); - try { - this.visitor = ua(Tracker.GA_ID, machineIdSync(), { strictCidFormat: false }) - } catch (error) { - this.visitor = ua(Tracker.GA_ID) - } - this.visitor.set("dl", "https://telemetry.k8slens.dev") - } - - protected async isTelemetryAllowed(): Promise { - return userStore.preferences.allowTelemetry; - } - - async event(eventCategory: string, eventAction: string, otherParams = {}) { - try { - const allowed = await this.isTelemetryAllowed(); - if (!allowed) { - return; - } - this.visitor.event({ - ec: eventCategory, - ea: eventAction, - ...otherParams, - }).send() - } catch (err) { - logger.error(`Failed to track "${eventCategory}:${eventAction}"`, err) - } - } -} - -export const tracker = Tracker.getInstance(app || remote.app); diff --git a/src/common/user-store.ts b/src/common/user-store.ts index f7d3ade005..00abe8dd2c 100644 --- a/src/common/user-store.ts +++ b/src/common/user-store.ts @@ -7,7 +7,7 @@ import { BaseStore } from "./base-store"; import migrations from "../migrations/user-store" import { getAppVersion } from "./utils/app-version"; import { kubeConfigDefaultPath, loadConfig } from "./kube-helpers"; -import { tracker } from "./tracker"; +import { appEventBus } from "./event-bus" import logger from "../main/logger"; import path from 'path'; @@ -40,7 +40,7 @@ export class UserStore extends BaseStore { // track telemetry availability reaction(() => this.preferences.allowTelemetry, allowed => { - tracker.event("telemetry", allowed ? "enabled" : "disabled"); + appEventBus.emit({name: "telemetry", action: allowed ? "enabled" : "disabled"}) }); // refresh new contexts @@ -77,7 +77,7 @@ export class UserStore extends BaseStore { @action saveLastSeenAppVersion() { - tracker.event("app", "whats-new-seen") + appEventBus.emit({name: "app", action: "whats-new-seen"}) this.lastSeenAppVersion = getAppVersion(); } diff --git a/src/extensions/extension-api.ts b/src/extensions/extension-api.ts index 581ca894eb..ebd5fa6d71 100644 --- a/src/extensions/extension-api.ts +++ b/src/extensions/extension-api.ts @@ -4,3 +4,6 @@ export type { LensExtensionRuntimeEnv } from "./lens-runtime"; // APIs export * from "./lens-main-extension" export { BaseStore } from "../common/base-store" +export { appEventBus } from "../common/event-bus" +export type { AppEvent } from "../common/event-bus" +export { Singleton } from "../common/utils" diff --git a/src/extensions/extension-renderer-api.ts b/src/extensions/extension-renderer-api.ts index 8542d179d9..02b01ade3f 100644 --- a/src/extensions/extension-renderer-api.ts +++ b/src/extensions/extension-renderer-api.ts @@ -6,6 +6,9 @@ export * from "./lens-extension" export * from "./lens-renderer-extension" export { DynamicPageType, PageRegistry } from "./page-registry" export { AppPreferenceRegistry } from "./app-preference-registry" +export { appEventBus } from "../common/event-bus" +export type { AppEvent } from "../common/event-bus" +export { Singleton } from "../common/utils" // TODO: add more common re-usable UI components + refactor interfaces (Props -> ComponentProps) export * from "../renderer/components/icon" diff --git a/src/main/index.ts b/src/main/index.ts index e0e8bfb477..6e12706a66 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -16,7 +16,7 @@ import { registerFileProtocol } from "../common/register-protocol"; import { clusterStore } from "../common/cluster-store" import { userStore } from "../common/user-store"; import { workspaceStore } from "../common/workspace-store"; -import { tracker } from "../common/tracker"; +import { appEventBus } from "../common/event-bus" import * as LensExtensions from "../extensions/extension-api"; import { extensionManager } from "../extensions/extension-manager"; import { extensionLoader } from "../extensions/extension-loader"; @@ -48,7 +48,6 @@ async function main() { await shellSync(); logger.info(`🚀 Starting Lens from "${workingDir}"`) - tracker.event("app", "start"); const updater = new AppUpdater() updater.start(); @@ -89,6 +88,10 @@ async function main() { extensionLoader.loadOnMain(getLensRuntime) extensionLoader.extensions.replace(await extensionManager.load()) extensionLoader.broadcastExtensions() + + setTimeout(() => { + appEventBus.emit({name: "app", action: "start"}) + }, 1000) } app.on("ready", main); diff --git a/src/main/node-shell-session.ts b/src/main/node-shell-session.ts index b669c262eb..f5967cb47f 100644 --- a/src/main/node-shell-session.ts +++ b/src/main/node-shell-session.ts @@ -6,7 +6,7 @@ import * as k8s from "@kubernetes/client-node" import { KubeConfig } from "@kubernetes/client-node" import { Cluster } from "./cluster" import logger from "./logger"; -import { tracker } from "../common/tracker"; +import { appEventBus } from "../common/event-bus" export class NodeShellSession extends ShellSession { protected nodeName: string; @@ -44,7 +44,7 @@ export class NodeShellSession extends ShellSession { this.closeWebsocketOnProcessExit() this.exitProcessOnWebsocketClose() - tracker.event("node-shell", "open") + appEventBus.emit({name: "node-shell", action: "open"}) } protected exit(code = 1000) { diff --git a/src/main/resource-applier.ts b/src/main/resource-applier.ts index 0103416f43..41441a3f90 100644 --- a/src/main/resource-applier.ts +++ b/src/main/resource-applier.ts @@ -6,7 +6,7 @@ import * as yaml from "js-yaml"; import path from "path"; import * as tempy from "tempy"; import logger from "./logger" -import { tracker } from "../common/tracker"; +import { appEventBus } from "../common/event-bus" import { cloneJsonObject } from "../common/utils"; export class ResourceApplier { @@ -15,7 +15,7 @@ export class ResourceApplier { async apply(resource: KubernetesObject | any): Promise { resource = this.sanitizeObject(resource); - tracker.event("resource", "apply") + appEventBus.emit({name: "resource", action: "apply"}) return await this.kubectlApply(yaml.safeDump(resource)); } diff --git a/src/main/shell-session.ts b/src/main/shell-session.ts index 2367bb63c0..6ea9e4eede 100644 --- a/src/main/shell-session.ts +++ b/src/main/shell-session.ts @@ -9,7 +9,7 @@ import { Cluster } from "./cluster" import { ClusterPreferences } from "../common/cluster-store"; import { helmCli } from "./helm/helm-cli" import { isWindows } from "../common/vars"; -import { tracker } from "../common/tracker"; +import { appEventBus } from "../common/event-bus" import { userStore } from "../common/user-store"; export class ShellSession extends EventEmitter { @@ -58,7 +58,7 @@ export class ShellSession extends EventEmitter { this.closeWebsocketOnProcessExit() this.exitProcessOnWebsocketClose() - tracker.event("shell", "open") + appEventBus.emit({name: "shell", action: "open"}) } protected cwd(): string { diff --git a/src/main/window-manager.ts b/src/main/window-manager.ts index 2854c11dd3..cbe0c3803d 100644 --- a/src/main/window-manager.ts +++ b/src/main/window-manager.ts @@ -5,6 +5,7 @@ import windowStateKeeper from "electron-window-state" import { observable } from "mobx"; import { initMenu } from "./menu"; import { extensionLoader } from "../extensions/extension-loader"; +import { appEventBus } from "../common/event-bus" export class WindowManager { protected mainView: BrowserWindow; @@ -44,6 +45,12 @@ export class WindowManager { this.mainView.webContents.on("dom-ready", () => { extensionLoader.broadcastExtensions() }) + this.mainView.on("focus", () => { + appEventBus.emit({name: "app", action: "focus"}) + }) + this.mainView.on("blur", () => { + appEventBus.emit({name: "app", action: "blur"}) + }) // track visible cluster from ui ipcMain.on("cluster-view:current-id", (event, clusterId: ClusterId) => { diff --git a/src/renderer/api/json-api.ts b/src/renderer/api/json-api.ts index 2d274d5f6c..027c201175 100644 --- a/src/renderer/api/json-api.ts +++ b/src/renderer/api/json-api.ts @@ -1,7 +1,7 @@ // Base http-service / json-api class import { stringify } from "querystring"; -import { EventEmitter } from "../utils/eventEmitter"; +import { EventEmitter } from "../../common/event-emitter"; import { cancelableFetch } from "../utils/cancelableFetch"; export interface JsonApiData { diff --git a/src/renderer/api/websocket-api.ts b/src/renderer/api/websocket-api.ts index daf46b286c..cb94881035 100644 --- a/src/renderer/api/websocket-api.ts +++ b/src/renderer/api/websocket-api.ts @@ -1,5 +1,5 @@ import { observable } from "mobx"; -import { EventEmitter } from "../utils/eventEmitter"; +import { EventEmitter } from "../../common/event-emitter"; interface IParams { url?: string; // connection url, starts with ws:// or wss:// diff --git a/src/renderer/components/app.tsx b/src/renderer/components/app.tsx index 6ae7700fd2..380c0c89e8 100755 --- a/src/renderer/components/app.tsx +++ b/src/renderer/components/app.tsx @@ -39,6 +39,7 @@ import { pageRegistry } from "../../extensions/page-registry"; import { DynamicPage } from "../../extensions/dynamic-page"; import { extensionLoader } from "../../extensions/extension-loader"; import { getLensRuntime } from "../../extensions/lens-runtime"; +import { appEventBus } from "../../common/event-bus" @observer export class App extends React.Component { @@ -51,6 +52,9 @@ export class App extends React.Component { await clusterIpc.setFrameId.invokeFromRenderer(clusterId, frameId); await getHostedCluster().whenReady; // cluster.activate() is done at this point extensionLoader.loadOnClusterRenderer(getLensRuntime) + appEventBus.emit({name: "cluster", action: "open", params: { + clusterId: clusterId + }}) } get startURL() { diff --git a/src/renderer/utils/index.ts b/src/renderer/utils/index.ts index 4ae9b068a7..d8c9d692c4 100755 --- a/src/renderer/utils/index.ts +++ b/src/renderer/utils/index.ts @@ -7,7 +7,7 @@ export * from "../../common/utils" export * from "./cssVar" export * from "./cssNames" -export * from "./eventEmitter" +export * from "../../common/event-emitter" export * from "./downloadFile" export * from "./prevDefault" export * from "./createStorage" diff --git a/yarn.lock b/yarn.lock index 3228205295..f36ff35adb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9174,11 +9174,6 @@ node-loader@^0.6.0: resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8" integrity sha1-x5fvUQle1YWZArFX9jhPY2HgWug= -node-machine-id@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" - integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== - node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -12948,15 +12943,6 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -universal-analytics@^0.4.20: - version "0.4.20" - resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" - integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== - dependencies: - debug "^3.0.0" - request "^2.88.0" - uuid "^3.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -13132,7 +13118,7 @@ utila@^0.4.0, utila@~0.4: resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= -uuid@^3.0.0, uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==