Loading package-lock.json +26 −0 Original line number Diff line number Diff line Loading @@ -7453,6 +7453,11 @@ "node": ">=8" } }, "node_modules/bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", Loading Loading @@ -12428,6 +12433,18 @@ "node": ">=0.4.0" } }, "node_modules/prom-client": { "version": "15.1.2", "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.2.tgz", "integrity": "sha512-on3h1iXb04QFLLThrmVYg1SChBQ9N1c+nKAjebBjokBqipddH3uxmOUcEkTnzmJ8Jh/5TSUnUqS40i2QB2dJHQ==", "dependencies": { "@opentelemetry/api": "^1.4.0", "tdigest": "^0.1.1" }, "engines": { "node": "^16 || ^18 || >=20" } }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", Loading Loading @@ -14215,6 +14232,14 @@ "node": ">=6" } }, "node_modules/tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", "dependencies": { "bintrees": "1.0.2" } }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", Loading Loading @@ -16298,6 +16323,7 @@ "express-session": "^1.17.3", "openid-client": "^5.6.5", "prisma-dbml-generator": "^0.12.0", "prom-client": "^15.1.2", "rate-limit-redis": "^4.2.0", "redis": "^4.6.12", "socket.io": "^4.7.2", packages/server/package.json +1 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ "express-session": "^1.17.3", "openid-client": "^5.6.5", "prisma-dbml-generator": "^0.12.0", "prom-client": "^15.1.2", "rate-limit-redis": "^4.2.0", "redis": "^4.6.12", "socket.io": "^4.7.2", Loading packages/server/src/index.ts +12 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,18 @@ if (!process.env.SESSION_SECRET) { process.exit(1); } if (!process.env.NODE_APP_INSTANCE) { Logger.warn( "NODE_APP_INSTANCE is not defined, metrics will not include process label" ); } if (!process.env.PROMETHEUS_TOKEN) { Logger.warn( "PROMETHEUS_TOKEN is not defined, /metrics will not be accessable" ); } if (!process.env.REDIS_HOST) { Logger.error("REDIS_HOST is not defined"); process.exit(1); Loading packages/server/src/lib/Canvas.ts +17 −0 Original line number Diff line number Diff line Loading @@ -141,6 +141,23 @@ class Canvas { return await this.canvasToRedis(); } /** * Get if a pixel is maybe empty * @param x * @param y * @returns */ async isPixelEmpty(x: number, y: number) { const redis = await Redis.getClient(); const pixelColor = await redis.get(Redis.key("pixelColor", x, y)); if (pixelColor === null) { return true; } return pixelColor === "transparent"; } async getPixel(x: number, y: number) { return ( await prisma.pixel.findMany({ Loading packages/server/src/lib/Express.ts +2 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import APIRoutes_client from "../api/client"; import APIRoutes_admin from "../api/admin"; import { Logger } from "./Logger"; import bodyParser from "body-parser"; import { handleMetricsEndpoint } from "./Prometheus"; export const session = expressSession({ secret: process.env.SESSION_SECRET, Loading Loading @@ -93,6 +94,7 @@ export class ExpressServer { this.app.use(bodyParser.json()); this.app.use("/api", APIRoutes_client); this.app.use("/api/admin", APIRoutes_admin); this.app.use("/metrics", handleMetricsEndpoint); this.httpServer.listen(parseInt(process.env.PORT), () => { Logger.info("Listening on :" + process.env.PORT); Loading Loading
package-lock.json +26 −0 Original line number Diff line number Diff line Loading @@ -7453,6 +7453,11 @@ "node": ">=8" } }, "node_modules/bintrees": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", Loading Loading @@ -12428,6 +12433,18 @@ "node": ">=0.4.0" } }, "node_modules/prom-client": { "version": "15.1.2", "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.2.tgz", "integrity": "sha512-on3h1iXb04QFLLThrmVYg1SChBQ9N1c+nKAjebBjokBqipddH3uxmOUcEkTnzmJ8Jh/5TSUnUqS40i2QB2dJHQ==", "dependencies": { "@opentelemetry/api": "^1.4.0", "tdigest": "^0.1.1" }, "engines": { "node": "^16 || ^18 || >=20" } }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", Loading Loading @@ -14215,6 +14232,14 @@ "node": ">=6" } }, "node_modules/tdigest": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", "dependencies": { "bintrees": "1.0.2" } }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", Loading Loading @@ -16298,6 +16323,7 @@ "express-session": "^1.17.3", "openid-client": "^5.6.5", "prisma-dbml-generator": "^0.12.0", "prom-client": "^15.1.2", "rate-limit-redis": "^4.2.0", "redis": "^4.6.12", "socket.io": "^4.7.2",
packages/server/package.json +1 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ "express-session": "^1.17.3", "openid-client": "^5.6.5", "prisma-dbml-generator": "^0.12.0", "prom-client": "^15.1.2", "rate-limit-redis": "^4.2.0", "redis": "^4.6.12", "socket.io": "^4.7.2", Loading
packages/server/src/index.ts +12 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,18 @@ if (!process.env.SESSION_SECRET) { process.exit(1); } if (!process.env.NODE_APP_INSTANCE) { Logger.warn( "NODE_APP_INSTANCE is not defined, metrics will not include process label" ); } if (!process.env.PROMETHEUS_TOKEN) { Logger.warn( "PROMETHEUS_TOKEN is not defined, /metrics will not be accessable" ); } if (!process.env.REDIS_HOST) { Logger.error("REDIS_HOST is not defined"); process.exit(1); Loading
packages/server/src/lib/Canvas.ts +17 −0 Original line number Diff line number Diff line Loading @@ -141,6 +141,23 @@ class Canvas { return await this.canvasToRedis(); } /** * Get if a pixel is maybe empty * @param x * @param y * @returns */ async isPixelEmpty(x: number, y: number) { const redis = await Redis.getClient(); const pixelColor = await redis.get(Redis.key("pixelColor", x, y)); if (pixelColor === null) { return true; } return pixelColor === "transparent"; } async getPixel(x: number, y: number) { return ( await prisma.pixel.findMany({ Loading
packages/server/src/lib/Express.ts +2 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import APIRoutes_client from "../api/client"; import APIRoutes_admin from "../api/admin"; import { Logger } from "./Logger"; import bodyParser from "body-parser"; import { handleMetricsEndpoint } from "./Prometheus"; export const session = expressSession({ secret: process.env.SESSION_SECRET, Loading Loading @@ -93,6 +94,7 @@ export class ExpressServer { this.app.use(bodyParser.json()); this.app.use("/api", APIRoutes_client); this.app.use("/api/admin", APIRoutes_admin); this.app.use("/metrics", handleMetricsEndpoint); this.httpServer.listen(parseInt(process.env.PORT), () => { Logger.info("Listening on :" + process.env.PORT); Loading