chore: Move to Typescript (#2783)

This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously.

closes #1282
This commit is contained in:
Tom Moor
2021-11-29 06:40:55 -08:00
committed by GitHub
parent 25ccfb5d04
commit 15b1069bcc
1017 changed files with 17410 additions and 54942 deletions

66
server/utils/updates.ts Normal file
View File

@@ -0,0 +1,66 @@
import crypto from "crypto";
import fetch from "fetch-with-proxy";
import invariant from "invariant";
import { User, Team, Collection, Document } from "@server/models";
import packageInfo from "../../package.json";
import { client } from "../redis";
const UPDATES_URL = "https://updates.getoutline.com";
const UPDATES_KEY = "UPDATES_KEY";
export async function checkUpdates() {
invariant(
process.env.SECRET_KEY && process.env.URL,
"SECRET_KEY or URL env var is not set"
);
const secret = process.env.SECRET_KEY.slice(0, 6) + process.env.URL;
const id = crypto.createHash("sha256").update(secret).digest("hex");
const [
userCount,
teamCount,
collectionCount,
documentCount,
] = await Promise.all([
User.count(),
Team.count(),
Collection.count(),
Document.count(),
]);
const body = JSON.stringify({
id,
version: 1,
clientVersion: packageInfo.version,
analytics: {
userCount,
teamCount,
collectionCount,
documentCount,
},
});
await client.del(UPDATES_KEY);
try {
const response = await fetch(UPDATES_URL, {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
body,
});
const data = await response.json();
if (data.severity) {
await client.set(
UPDATES_KEY,
JSON.stringify({
severity: data.severity,
message: data.message,
url: data.url,
})
);
}
} catch (_e) {
// no-op
}
}