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:
66
server/utils/updates.ts
Normal file
66
server/utils/updates.ts
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user