diff --git a/extensions/survey/main.ts b/extensions/survey/main.ts
new file mode 100644
index 0000000000..6fc78f3554
--- /dev/null
+++ b/extensions/survey/main.ts
@@ -0,0 +1,9 @@
+import { LensMainExtension } from "@k8slens/extensions";
+import { surveyPreferencesStore } from "./src/survey-preferences-store";
+
+export default class SurveyMainExtension extends LensMainExtension {
+
+ async onActivate() {
+ await surveyPreferencesStore.loadExtension(this);
+ }
+}
diff --git a/extensions/survey/package-lock.json b/extensions/survey/package-lock.json
index 0962c48d72..03edf5a3c2 100644
--- a/extensions/survey/package-lock.json
+++ b/extensions/survey/package-lock.json
@@ -1359,6 +1359,12 @@
}
}
},
+ "@sindresorhus/is": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
+ "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==",
+ "dev": true
+ },
"@sinonjs/commons": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz",
@@ -1377,6 +1383,15 @@
"@sinonjs/commons": "^1.7.0"
}
},
+ "@szmarczak/http-timer": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
+ "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^2.0.0"
+ }
+ },
"@types/babel__core": {
"version": "7.1.12",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz",
@@ -1418,6 +1433,18 @@
"@babel/types": "^7.3.0"
}
},
+ "@types/cacheable-request": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
+ "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
+ "dev": true,
+ "requires": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "*",
+ "@types/node": "*",
+ "@types/responselike": "*"
+ }
+ },
"@types/graceful-fs": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz",
@@ -1427,6 +1454,12 @@
"@types/node": "*"
}
},
+ "@types/http-cache-semantics": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
+ "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==",
+ "dev": true
+ },
"@types/istanbul-lib-coverage": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
@@ -1451,6 +1484,15 @@
"@types/istanbul-lib-report": "*"
}
},
+ "@types/keyv": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
+ "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/node": {
"version": "14.14.20",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz",
@@ -1469,6 +1511,15 @@
"integrity": "sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA==",
"dev": true
},
+ "@types/responselike": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
+ "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/stack-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
@@ -2317,6 +2368,38 @@
"unset-value": "^1.0.0"
}
},
+ "cacheable-lookup": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
+ "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
+ "dev": true
+ },
+ "cacheable-request": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz",
+ "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^4.1.0",
+ "responselike": "^2.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -2448,6 +2531,15 @@
"wrap-ansi": "^6.2.0"
}
},
+ "clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -2738,6 +2830,23 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
+ "decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^3.1.0"
+ },
+ "dependencies": {
+ "mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true
+ }
+ }
+ },
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
@@ -2750,6 +2859,12 @@
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true
},
+ "defer-to-connect": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz",
+ "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==",
+ "dev": true
+ },
"define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
@@ -3449,6 +3564,25 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
+ "got": {
+ "version": "11.8.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.1.tgz",
+ "integrity": "sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.1",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ }
+ },
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
@@ -3617,6 +3751,12 @@
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -3628,6 +3768,16 @@
"sshpk": "^1.7.0"
}
},
+ "http2-wrapper": {
+ "version": "1.0.0-beta.5.2",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz",
+ "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==",
+ "dev": true,
+ "requires": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ }
+ },
"https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
@@ -4647,6 +4797,12 @@
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
+ "json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
"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",
@@ -4698,6 +4854,15 @@
"verror": "1.10.0"
}
},
+ "keyv": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
+ "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.1"
+ }
+ },
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -4780,6 +4945,12 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
+ "lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true
+ },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -4907,6 +5078,12 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ },
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -5166,6 +5343,12 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
+ "normalize-url": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true
+ },
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -5280,6 +5463,12 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
+ "p-cancelable": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
+ "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
+ "dev": true
+ },
"p-each-series": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
@@ -5618,6 +5807,12 @@
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
"dev": true
},
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true
+ },
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -5880,6 +6075,12 @@
"path-parse": "^1.0.6"
}
},
+ "resolve-alpn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
+ "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==",
+ "dev": true
+ },
"resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
@@ -5901,6 +6102,15 @@
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
"dev": true
},
+ "responselike": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
+ "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^2.0.0"
+ }
+ },
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
diff --git a/extensions/survey/package.json b/extensions/survey/package.json
index 895a138ea0..fb8dfcce11 100644
--- a/extensions/survey/package.json
+++ b/extensions/survey/package.json
@@ -2,6 +2,7 @@
"name": "lens-survey",
"version": "0.1.0",
"description": "Lens survey",
+ "main": "dist/main.js",
"renderer": "dist/renderer.js",
"lens": {
"metadata": {},
@@ -15,6 +16,7 @@
"dependencies": {},
"devDependencies": {
"@k8slens/extensions": "file:../../src/extensions/npm/extensions",
+ "got": "^11.8.1",
"jest": "^26.6.3",
"node-machine-id": "^1.1.12",
"react": "^16.13.1",
diff --git a/extensions/survey/renderer.tsx b/extensions/survey/renderer.tsx
index 66a5162ff6..e8b2e4758c 100644
--- a/extensions/survey/renderer.tsx
+++ b/extensions/survey/renderer.tsx
@@ -1,8 +1,21 @@
import { LensRendererExtension } from "@k8slens/extensions";
import { survey } from "./src/survey";
+import { SurveyPreferenceHint, SurveyPreferenceInput } from "./src/survey-preference";
+import { surveyPreferencesStore } from "./src/survey-preferences-store";
+import React from "react";
export default class SurveyRendererExtension extends LensRendererExtension {
+ appPreferences = [
+ {
+ title: "In-App Surveys",
+ components: {
+ Hint: () => ,
+ Input: () =>
+ }
+ }
+ ];
async onActivate() {
+ await surveyPreferencesStore.loadExtension(this);
survey.start();
}
}
diff --git a/extensions/survey/src/survey-preference.tsx b/extensions/survey/src/survey-preference.tsx
new file mode 100644
index 0000000000..92b28cbd45
--- /dev/null
+++ b/extensions/survey/src/survey-preference.tsx
@@ -0,0 +1,27 @@
+import { Component } from "@k8slens/extensions";
+import React from "react";
+import { observer } from "mobx-react";
+import { SurveyPreferencesStore } from "./survey-preferences-store";
+
+@observer
+export class SurveyPreferenceInput extends React.Component<{survey: SurveyPreferencesStore}, {}> {
+ render() {
+ const { survey } = this.props;
+
+ return (
+ { survey.enabled = v; }}
+ />
+ );
+ }
+}
+
+export class SurveyPreferenceHint extends React.Component {
+ render() {
+ return (
+ Surveys are used improve the Lens experience.
+ );
+ }
+}
diff --git a/extensions/survey/src/survey-preferences-store.ts b/extensions/survey/src/survey-preferences-store.ts
new file mode 100644
index 0000000000..f15e582fe3
--- /dev/null
+++ b/extensions/survey/src/survey-preferences-store.ts
@@ -0,0 +1,36 @@
+import { Store } from "@k8slens/extensions";
+import { observable, toJS, when } from "mobx";
+
+export type SurveyPreferencesModel = {
+ enabled: boolean;
+};
+
+export class SurveyPreferencesStore extends Store.ExtensionStore {
+
+ @observable enabled = true;
+
+ whenEnabled = when(() => this.enabled);
+
+ private constructor() {
+ super({
+ configName: "preferences-store",
+ defaults: {
+ enabled: true
+ }
+ });
+ }
+
+ protected fromStore({ enabled }: SurveyPreferencesModel): void {
+ this.enabled = enabled;
+ }
+
+ toJSON(): SurveyPreferencesModel {
+ return toJS({
+ enabled: this.enabled
+ }, {
+ recurseEverything: true
+ });
+ }
+}
+
+export const surveyPreferencesStore = SurveyPreferencesStore.getInstance();
diff --git a/extensions/survey/src/survey.ts b/extensions/survey/src/survey.ts
index 4c87c40ff6..2e9bc5b6eb 100644
--- a/extensions/survey/src/survey.ts
+++ b/extensions/survey/src/survey.ts
@@ -1,22 +1,46 @@
import { Util } from "@k8slens/extensions";
import { machineIdSync } from "node-machine-id";
import Refiner from "refiner-js";
+import got from "got";
+import { surveyPreferencesStore } from "./survey-preferences-store";
+type SurveyIdResponse = {
+ surveyId: string;
+};
export class Survey extends Util.Singleton {
- static readonly PROJECT_ID = "12a3b8f0-4f5e-11eb-84d0-212af0117cc2";
+ static readonly PROJECT_ID = "af468d00-4f8f-11eb-b01d-23b6562fef43";
protected anonymousId: string;
private constructor() {
super();
- this.anonymousId = machineIdSync();
}
- start() {
- Refiner("setProject", Survey.PROJECT_ID);
- Refiner("identifyUser", {
- id: this.anonymousId,
- });
+ async start() {
+ await surveyPreferencesStore.whenEnabled;
+
+ const surveyId = await this.fetchSurveyId();
+
+ if (surveyId) {
+ Refiner("setProject", Survey.PROJECT_ID);
+ Refiner("identifyUser", {
+ id: surveyId,
+ });
+
+ }
+ }
+
+ async fetchSurveyId() {
+ try {
+ const surveyApi = process.env.SURVEY_API_URL || "https://survey.k8slens.dev";
+ const anonymousId = machineIdSync();
+ const { body } = await got(`${surveyApi}/api/survey-id?anonymousId=${anonymousId}`, { responseType: "json"});
+
+ return (body as SurveyIdResponse).surveyId;
+ } catch(error) {
+ return null;
+ }
+
}
}
-export const survey = Survey.getInstance();
\ No newline at end of file
+export const survey = Survey.getInstance();
diff --git a/extensions/survey/webpack.config.js b/extensions/survey/webpack.config.js
index 91c886ec28..c7862dc2c9 100644
--- a/extensions/survey/webpack.config.js
+++ b/extensions/survey/webpack.config.js
@@ -1,6 +1,37 @@
const path = require("path");
module.exports = [
+ {
+ entry: "./main.ts",
+ context: __dirname,
+ target: "electron-main",
+ mode: "production",
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ use: "ts-loader",
+ exclude: /node_modules/,
+ },
+ ],
+ },
+ externals: [
+ {
+ "@k8slens/extensions": "var global.LensExtensions",
+ "react": "var global.React",
+ "mobx": "var global.Mobx"
+ }
+ ],
+ resolve: {
+ extensions: [ ".tsx", ".ts", ".js" ],
+ },
+ output: {
+ libraryTarget: "commonjs2",
+ globalObject: "this",
+ filename: "main.js",
+ path: path.resolve(__dirname, "dist"),
+ },
+ },
{
entry: "./renderer.tsx",
context: __dirname,
diff --git a/package.json b/package.json
index a21aba3e05..9b68720e47 100644
--- a/package.json
+++ b/package.json
@@ -160,7 +160,7 @@
"nsis": {
"include": "build/installer.nsh",
"oneClick": false,
- "allowToChangeInstallationDirectory": true
+ "allowToChangeInstallationDirectory": true
},
"publish": [
{
@@ -180,7 +180,8 @@
"node-menu",
"metrics-cluster-feature",
"license-menu-item",
- "kube-object-event-status"
+ "kube-object-event-status",
+ "survey"
]
},
"dependencies": {