Convert submit-rageshake to typescript
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
c04a8d326e
commit
3bc5a0a0b2
4 changed files with 63 additions and 10 deletions
|
@ -117,6 +117,7 @@
|
||||||
"@babel/register": "^7.7.4",
|
"@babel/register": "^7.7.4",
|
||||||
"@peculiar/webcrypto": "^1.0.22",
|
"@peculiar/webcrypto": "^1.0.22",
|
||||||
"@types/classnames": "^2.2.10",
|
"@types/classnames": "^2.2.10",
|
||||||
|
"@types/modernizr": "^3.5.3",
|
||||||
"@types/react": "16.9",
|
"@types/react": "16.9",
|
||||||
"babel-eslint": "^10.0.3",
|
"babel-eslint": "^10.0.3",
|
||||||
"babel-jest": "^24.9.0",
|
"babel-jest": "^24.9.0",
|
||||||
|
|
40
src/@types/global.d.ts
vendored
Normal file
40
src/@types/global.d.ts
vendored
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as ModernizrStatic from "modernizr";
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
Modernizr: ModernizrStatic;
|
||||||
|
Olm: {
|
||||||
|
init: () => Promise<void>;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// workaround for https://github.com/microsoft/TypeScript/issues/30933
|
||||||
|
interface ObjectConstructor {
|
||||||
|
fromEntries?(xs: [string|number|symbol, any][]): object
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Document {
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/Document/hasStorageAccess
|
||||||
|
hasStorageAccess?: () => Promise<boolean>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StorageEstimate {
|
||||||
|
usageDetails?: {[key: string]: number};
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,6 +33,13 @@ if (!TextEncoder) {
|
||||||
TextEncoder = TextEncodingUtf8.TextEncoder;
|
TextEncoder = TextEncodingUtf8.TextEncoder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface IOpts {
|
||||||
|
label?: string;
|
||||||
|
userText?: string;
|
||||||
|
sendLogs?: boolean;
|
||||||
|
progressCallback?: (string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a bug report.
|
* Send a bug report.
|
||||||
*
|
*
|
||||||
|
@ -48,7 +55,7 @@ if (!TextEncoder) {
|
||||||
*
|
*
|
||||||
* @return {Promise} Resolved when the bug report is sent.
|
* @return {Promise} Resolved when the bug report is sent.
|
||||||
*/
|
*/
|
||||||
export default async function sendBugReport(bugReportEndpoint, opts) {
|
export default async function sendBugReport(bugReportEndpoint: string, opts: IOpts) {
|
||||||
if (!bugReportEndpoint) {
|
if (!bugReportEndpoint) {
|
||||||
throw new Error("No bug report endpoint has been set.");
|
throw new Error("No bug report endpoint has been set.");
|
||||||
}
|
}
|
||||||
|
@ -70,13 +77,13 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
|
||||||
let installedPWA = "UNKNOWN";
|
let installedPWA = "UNKNOWN";
|
||||||
try {
|
try {
|
||||||
// Known to work at least for desktop Chrome
|
// Known to work at least for desktop Chrome
|
||||||
installedPWA = window.matchMedia('(display-mode: standalone)').matches;
|
installedPWA = String(window.matchMedia('(display-mode: standalone)').matches);
|
||||||
} catch (e) { }
|
} catch (e) {}
|
||||||
|
|
||||||
let touchInput = "UNKNOWN";
|
let touchInput = "UNKNOWN";
|
||||||
try {
|
try {
|
||||||
// MDN claims broad support across browsers
|
// MDN claims broad support across browsers
|
||||||
touchInput = window.matchMedia('(pointer: coarse)').matches;
|
touchInput = String(window.matchMedia('(pointer: coarse)').matches);
|
||||||
} catch (e) { }
|
} catch (e) { }
|
||||||
|
|
||||||
const client = MatrixClientPeg.get();
|
const client = MatrixClientPeg.get();
|
||||||
|
@ -118,21 +125,21 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
|
||||||
// add storage persistence/quota information
|
// add storage persistence/quota information
|
||||||
if (navigator.storage && navigator.storage.persisted) {
|
if (navigator.storage && navigator.storage.persisted) {
|
||||||
try {
|
try {
|
||||||
body.append("storageManager_persisted", await navigator.storage.persisted());
|
body.append("storageManager_persisted", String(await navigator.storage.persisted()));
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
} else if (document.hasStorageAccess) { // Safari
|
} else if (document.hasStorageAccess) { // Safari
|
||||||
try {
|
try {
|
||||||
body.append("storageManager_persisted", await document.hasStorageAccess());
|
body.append("storageManager_persisted", String(await document.hasStorageAccess()));
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
if (navigator.storage && navigator.storage.estimate) {
|
if (navigator.storage && navigator.storage.estimate) {
|
||||||
try {
|
try {
|
||||||
const estimate = await navigator.storage.estimate();
|
const estimate = await navigator.storage.estimate();
|
||||||
body.append("storageManager_quota", estimate.quota);
|
body.append("storageManager_quota", String(estimate.quota));
|
||||||
body.append("storageManager_usage", estimate.usage);
|
body.append("storageManager_usage", String(estimate.usage));
|
||||||
if (estimate.usageDetails) {
|
if (estimate.usageDetails) {
|
||||||
Object.keys(estimate.usageDetails).forEach(k => {
|
Object.keys(estimate.usageDetails).forEach(k => {
|
||||||
body.append(`storageManager_usage_${k}`, estimate.usageDetails[k]);
|
body.append(`storageManager_usage_${k}`, String(estimate.usageDetails[k]));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
@ -163,7 +170,7 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
|
||||||
await _submitReport(bugReportEndpoint, body, progressCallback);
|
await _submitReport(bugReportEndpoint, body, progressCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _submitReport(endpoint, body, progressCallback) {
|
function _submitReport(endpoint: string, body: FormData, progressCallback: (string) => void) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const req = new XMLHttpRequest();
|
const req = new XMLHttpRequest();
|
||||||
req.open("POST", endpoint);
|
req.open("POST", endpoint);
|
|
@ -1257,6 +1257,11 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||||
|
|
||||||
|
"@types/modernizr@^3.5.3":
|
||||||
|
version "3.5.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/modernizr/-/modernizr-3.5.3.tgz#8ef99e6252191c1d88647809109dc29884ba6d7a"
|
||||||
|
integrity sha512-jhMOZSS0UGYTS9pqvt6q3wtT3uvOSve5piTEmTMx3zzTuBLvSIMxSIBIc3d5lajVD5h4xc41AMZD2M5orN3PxA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "13.11.0"
|
version "13.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b"
|
||||||
|
|
Loading…
Reference in a new issue