Files
outline/server/utils/updates.ts
Tom Moor 3c002f82cc chore: Centralize env parsing, validation, defaults, and deprecation notices (#3487)
* chore: Centralize env parsing, defaults, deprecation

* wip

* test

* test

* tsc

* docs, more validation

* fix: Allow empty REDIS_URL (defaults to localhost)

* test

* fix: SLACK_MESSAGE_ACTIONS not bool

* fix: Add SMTP port validation
2022-05-19 08:05:11 -07:00

66 lines
1.5 KiB
TypeScript

import crypto from "crypto";
import fetch from "fetch-with-proxy";
import env from "@server/env";
import Collection from "@server/models/Collection";
import Document from "@server/models/Document";
import Team from "@server/models/Team";
import User from "@server/models/User";
import Redis from "@server/redis";
import packageInfo from "../../package.json";
const UPDATES_URL = "https://updates.getoutline.com";
const UPDATES_KEY = "UPDATES_KEY";
export async function checkUpdates() {
const secret = env.SECRET_KEY.slice(0, 6) + 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 Redis.defaultClient.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 Redis.defaultClient.set(
UPDATES_KEY,
JSON.stringify({
severity: data.severity,
message: data.message,
url: data.url,
})
);
}
} catch (_e) {
// no-op
}
}