mirror of
https://github.com/outline/outline.git
synced 2026-01-04 18:21:23 -06:00
* 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
66 lines
1.5 KiB
TypeScript
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
|
|
}
|
|
}
|