Compare commits

...

8 Commits

Author SHA1 Message Date
Florian Metz
93c62cc38f chore: release v0.0.3 2024-08-18 00:34:59 +02:00
Florian Metz
8553613593 feat: add feature flags 2024-08-18 00:34:15 +02:00
Bas950
bf83dc4452 chore: bump dep 2024-08-08 11:04:12 +02:00
Bas950
91bf2237c2 chore: release v0.0.3 2024-08-04 19:35:05 +02:00
Bas950
ae9b579e84 feat(api-master): add logs 2024-08-04 19:34:54 +02:00
Bas950
2488d98ede chore: release v0.0.2 2024-08-04 19:06:10 +02:00
Bas950
3eedb8ba81 chore: release v0.0.2 2024-08-04 19:05:53 +02:00
Bas950
bc5cc3054b chore(api): remove old sentry tracing 2024-08-04 19:05:13 +02:00
8 changed files with 87 additions and 94 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "@premid/api-master",
"type": "module",
"version": "0.0.1",
"version": "0.0.3",
"private": true,
"description": "PreMiD's api master",
"license": "MPL-2.0",
@@ -17,8 +17,11 @@
"@discordjs/rest": "^2.3.0",
"@envelop/sentry": "^9.0.0",
"@sentry/node": "^8.17.0",
"@sentry/tracing": "^7.114.0",
"cron": "^3.1.7",
"debug": "^4.3.6",
"ioredis": "^5.3.2"
},
"devDependencies": {
"@types/debug": "^4.1.12"
}
}

View File

@@ -1,10 +1,18 @@
import { REST } from "@discordjs/rest";
import { redis } from "../index.js";
import { mainLog, redis } from "../index.js";
export async function clearOldSesssions() {
const sessions = await redis.hgetall("pmd-api.sessions");
const now = Date.now();
if (Object.keys(sessions).length === 0) {
mainLog("No sessions to clear");
return;
}
mainLog(`Checking ${Object.keys(sessions).length} sessions`);
let cleared = 0;
for (const [key, value] of Object.entries(sessions)) {
const session = JSON.parse(value) as {
token: string;
@@ -27,9 +35,13 @@ export async function clearOldSesssions() {
});
}
catch (error) {
console.error(error);
mainLog(`Failed to delete session: %O`, error);
}
cleared++;
await redis.hdel("pmd-api.sessions", key);
}
mainLog(`Cleared ${cleared} sessions`);
}

View File

@@ -1,10 +1,15 @@
import { CronJob } from "cron";
import debug from "debug";
import createRedis from "./functions/createRedis.js";
import { clearOldSesssions } from "./functions/clearOldSessions.js";
export const redis = createRedis();
export const mainLog = debug("api-master");
debug("Starting cron job to clear old sessions");
void new CronJob(
// Every 5 seconds
"*/5 * * * * *",

View File

@@ -1,7 +1,7 @@
{
"name": "@premid/api-worker",
"type": "module",
"version": "0.0.1",
"version": "0.0.3",
"private": true,
"description": "PreMiD's api",
"license": "MPL-2.0",
@@ -25,8 +25,8 @@
"@fastify/websocket": "^10.0.1",
"@premid/db": "workspace:*",
"@sentry/node": "^8.17.0",
"@sentry/tracing": "^7.114.0",
"arktype": "2.0.0-beta.2",
"defu": "^6.1.4",
"discord-api-types": "^0.37.92",
"fastify": "^4.28.1",
"graphql": "^16.9.0",

View File

@@ -1,6 +1,6 @@
import { readFile } from "node:fs/promises";
import { resolve } from "node:path";
import process from "node:process";
import { useSentry } from "@envelop/sentry";
import { maxAliasesPlugin } from "@escape.tech/graphql-armor-max-aliases";
import { maxDepthPlugin } from "@escape.tech/graphql-armor-max-depth";
@@ -11,6 +11,7 @@ import fastify from "fastify";
import { createSchema, createYoga } from "graphql-yoga";
import fastifyWebsocket from "@fastify/websocket";
import { defu } from "defu";
import { resolvers } from "../graphql/resolvers/v5/index.js";
import { Socket } from "../classes/Socket.js";
import createRedis from "./createRedis.js";
@@ -84,6 +85,17 @@ export default async function createServer() {
});
});
app.get("/v5/feature-flags", async (request, reply) => {
const disabledFlags = process.env.DISABLED_FEATURE_FLAGS?.split(",") ?? [];
const flags = Object.fromEntries(disabledFlags.map(flag => [flag, false]));
const test = defu(flags, {
WebSocketManager: true,
});
void reply.send(test);
});
return app;
}

View File

@@ -1,6 +1,4 @@
/* eslint-disable no-console */
import "@sentry/tracing";
import process from "node:process";
import * as Sentry from "@sentry/node";
import { connect } from "mongoose";

View File

@@ -11,7 +11,7 @@
"postinstall": "nuxt prepare"
},
"dependencies": {
"@discord-user-card/vue": "^0.0.8",
"@discord-user-card/vue": "^0.0.9",
"@discordjs/rest": "^2.3.0",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-brands-svg-icons": "^6.6.0",

131
pnpm-lock.yaml generated
View File

@@ -62,15 +62,19 @@ importers:
'@sentry/node':
specifier: ^8.17.0
version: 8.20.0
'@sentry/tracing':
specifier: ^7.114.0
version: 7.114.0
cron:
specifier: ^3.1.7
version: 3.1.7
debug:
specifier: ^4.3.6
version: 4.3.6
ioredis:
specifier: ^5.3.2
version: 5.4.1
devDependencies:
'@types/debug':
specifier: ^4.1.12
version: 4.1.12
apps/api-worker:
dependencies:
@@ -101,12 +105,12 @@ importers:
'@sentry/node':
specifier: ^8.17.0
version: 8.20.0
'@sentry/tracing':
specifier: ^7.114.0
version: 7.114.0
arktype:
specifier: 2.0.0-beta.2
version: 2.0.0-beta.2
defu:
specifier: ^6.1.4
version: 6.1.4
discord-api-types:
specifier: ^0.37.92
version: 0.37.93
@@ -215,8 +219,8 @@ importers:
apps/website:
dependencies:
'@discord-user-card/vue':
specifier: ^0.0.8
version: 0.0.8(vue@3.4.34(typescript@5.5.4))
specifier: ^0.0.9
version: 0.0.9(vue@3.4.34(typescript@5.5.4))
'@discordjs/rest':
specifier: ^2.3.0
version: 2.3.0
@@ -970,11 +974,11 @@ packages:
resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==}
engines: {node: '>=v18'}
'@discord-user-card/core@0.0.8':
resolution: {integrity: sha512-Q7M8bB/ZIEKPoiXm9CQ/NfvJxxTGOmeuX7EU/714PMGU+sDaVgCX6ES616pB9ARGzBjYK8+9IFukw3H+Sc6TgA==}
'@discord-user-card/core@0.0.9':
resolution: {integrity: sha512-Vr7jbKtCCnz4Te1UgyC3gxzI/MUy2hN6TmCNfhrTqMuXPOJUxcV9JKDcgp5iYFODURH/tKOrmhDVaYB64G+snQ==}
'@discord-user-card/vue@0.0.8':
resolution: {integrity: sha512-4DADGSz0QHUtjEPxuHI2CkfLb+yIHBqmOIjiYV4WM71CzvebXTqAmFZotlxpUzvJGwDmDUFba67TdS4+Y1ueJg==}
'@discord-user-card/vue@0.0.9':
resolution: {integrity: sha512-uWrCNJbdfhQCOPpiXz6IplAjXaoNby1ouAd90ZL2r+XSzXDSo2x++I3bWZlSDsrau3l7yhBvxByJI4OuTP52rA==}
peerDependencies:
vue: ^3.0.0
@@ -2596,6 +2600,7 @@ packages:
'@rollup/rollup-linux-arm64-gnu@4.19.1':
resolution: {integrity: sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.18.1':
@@ -2699,14 +2704,6 @@ packages:
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
'@sentry-internal/tracing@7.114.0':
resolution: {integrity: sha512-dOuvfJN7G+3YqLlUY4HIjyWHaRP8vbOgF+OsE5w2l7ZEn1rMAaUbPntAR8AF9GBA6j2zWNoSo8e7GjbJxVofSg==}
engines: {node: '>=8'}
'@sentry/core@7.114.0':
resolution: {integrity: sha512-YnanVlmulkjgZiVZ9BfY9k6I082n+C+LbZo52MTvx3FY6RE5iyiPMpaOh67oXEZRWcYQEGm+bKruRxLVP6RlbA==}
engines: {node: '>=8'}
'@sentry/core@8.20.0':
resolution: {integrity: sha512-R81snuw+67VT4aCxr6ShST/s0Y6FlwN2YczhDwaGyzumn5rlvA6A4JtQDeExduNoDDyv4T3LrmW8wlYZn3CJJw==}
engines: {node: '>=14.18'}
@@ -2725,22 +2722,10 @@ packages:
'@opentelemetry/sdk-trace-base': ^1.25.1
'@opentelemetry/semantic-conventions': ^1.25.1
'@sentry/tracing@7.114.0':
resolution: {integrity: sha512-eldEYGADReZ4jWdN5u35yxLUSTOvjsiZAYd4KBEpf+Ii65n7g/kYOKAjNl7tHbrEG1EsMW4nDPWStUMk1w+tfg==}
engines: {node: '>=8'}
'@sentry/types@7.114.0':
resolution: {integrity: sha512-tsqkkyL3eJtptmPtT0m9W/bPLkU7ILY7nvwpi1hahA5jrM7ppoU0IMaQWAgTD+U3rzFH40IdXNBFb8Gnqcva4w==}
engines: {node: '>=8'}
'@sentry/types@8.20.0':
resolution: {integrity: sha512-6IP278KojOpiAA7vrd1hjhUyn26cl0n0nGsShzic5ztCVs92sTeVRnh7MTB9irDVtAbOEyt/YH6go3h+Jia1pA==}
engines: {node: '>=14.18'}
'@sentry/utils@7.114.0':
resolution: {integrity: sha512-319N90McVpupQ6vws4+tfCy/03AdtsU0MurIE4+W5cubHME08HtiEWlfacvAxX+yuKFhvdsO4K4BB/dj54ideg==}
engines: {node: '>=8'}
'@sentry/utils@8.20.0':
resolution: {integrity: sha512-+1I5H8dojURiEUGPliDwheQk8dhjp8uV1sMccR/W/zjFrt4wZyPs+Ttp/V7gzm9LDJoNek9tmELert/jQqWTgg==}
engines: {node: '>=14.18'}
@@ -2820,6 +2805,9 @@ packages:
'@types/conventional-commits-parser@5.0.0':
resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==}
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
'@types/eslint-scope@3.7.7':
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
@@ -2871,6 +2859,9 @@ packages:
'@types/mime-types@2.1.4':
resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==}
'@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
'@types/mysql@2.15.22':
resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==}
@@ -4411,15 +4402,6 @@ packages:
supports-color:
optional: true
debug@4.3.5:
resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
debug@4.3.6:
resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
engines: {node: '>=6.0'}
@@ -4537,8 +4519,8 @@ packages:
discord-api-types@0.37.93:
resolution: {integrity: sha512-M5jn0x3bcXk8EI2c6F6V6LeOWq10B/cJf+YJSyqNmg7z4bdXK+Z7g9zGJwHS0h9Bfgs0nun2LQISFOzwck7G9A==}
discord-user-card@0.0.8:
resolution: {integrity: sha512-mSPvXFEhDuWKY/Vt4jC27S1P1MqQ2Q0MJoAD5LcbRSEYoRu5OPIveXLNhrN8p76yiFFCODcq8I7bPlWTqbcFQQ==}
discord-user-card@0.0.9:
resolution: {integrity: sha512-oNW2WLScbDhmNSxE3f5wgJYKAbjGa39gQQ57LqLG/GML7aeWYgrhvadZwpdLP0AZKdZoRh9ZdCA+6BBufJ3mYQ==}
doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
@@ -9336,11 +9318,11 @@ snapshots:
'@types/conventional-commits-parser': 5.0.0
chalk: 5.3.0
'@discord-user-card/core@0.0.8': {}
'@discord-user-card/core@0.0.9': {}
'@discord-user-card/vue@0.0.8(vue@3.4.34(typescript@5.5.4))':
'@discord-user-card/vue@0.0.9(vue@3.4.34(typescript@5.5.4))':
dependencies:
discord-user-card: 0.0.8
discord-user-card: 0.0.9
vue: 3.4.34(typescript@5.5.4)
'@discordjs/collection@2.1.0': {}
@@ -10973,7 +10955,7 @@ snapshots:
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.18.1)
'@rollup/plugin-yaml': 4.1.2(rollup@4.18.1)
'@vue/compiler-sfc': 3.4.32
debug: 4.3.5
debug: 4.3.6
defu: 6.1.4
estree-walker: 3.0.3
is-https: 4.0.0
@@ -11607,17 +11589,6 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {}
'@sentry-internal/tracing@7.114.0':
dependencies:
'@sentry/core': 7.114.0
'@sentry/types': 7.114.0
'@sentry/utils': 7.114.0
'@sentry/core@7.114.0':
dependencies:
'@sentry/types': 7.114.0
'@sentry/utils': 7.114.0
'@sentry/core@8.20.0':
dependencies:
'@sentry/types': 8.20.0
@@ -11669,18 +11640,8 @@ snapshots:
'@sentry/types': 8.20.0
'@sentry/utils': 8.20.0
'@sentry/tracing@7.114.0':
dependencies:
'@sentry-internal/tracing': 7.114.0
'@sentry/types@7.114.0': {}
'@sentry/types@8.20.0': {}
'@sentry/utils@7.114.0':
dependencies:
'@sentry/types': 7.114.0
'@sentry/utils@8.20.0':
dependencies:
'@sentry/types': 8.20.0
@@ -11776,6 +11737,10 @@ snapshots:
dependencies:
'@types/node': 20.14.13
'@types/debug@4.1.12':
dependencies:
'@types/ms': 0.7.34
'@types/eslint-scope@3.7.7':
dependencies:
'@types/eslint': 9.6.0
@@ -11828,6 +11793,8 @@ snapshots:
'@types/mime-types@2.1.4': {}
'@types/ms@0.7.34': {}
'@types/mysql@2.15.22':
dependencies:
'@types/node': 20.14.13
@@ -11905,7 +11872,7 @@ snapshots:
'@typescript-eslint/types': 8.0.0-alpha.40
'@typescript-eslint/typescript-estree': 8.0.0-alpha.40(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 8.0.0-alpha.40
debug: 4.3.5
debug: 4.3.6
eslint: 9.7.0
optionalDependencies:
typescript: 5.5.4
@@ -12565,7 +12532,7 @@ snapshots:
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 0.2.3
debug: 4.3.5
debug: 4.3.6
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6
@@ -13934,10 +13901,6 @@ snapshots:
dependencies:
ms: 2.1.3
debug@4.3.5:
dependencies:
ms: 2.1.2
debug@4.3.6:
dependencies:
ms: 2.1.2
@@ -14010,9 +13973,9 @@ snapshots:
discord-api-types@0.37.93: {}
discord-user-card@0.0.8:
discord-user-card@0.0.9:
dependencies:
'@discord-user-card/core': 0.0.8
'@discord-user-card/core': 0.0.9
doctrine@3.0.0:
dependencies:
@@ -14355,7 +14318,7 @@ snapshots:
eslint-plugin-toml@0.11.1(eslint@9.7.0):
dependencies:
debug: 4.3.5
debug: 4.3.6
eslint: 9.7.0
eslint-compat-utils: 0.5.1(eslint@9.7.0)
lodash: 4.17.21
@@ -14417,7 +14380,7 @@ snapshots:
eslint-plugin-yml@1.14.0(eslint@9.7.0):
dependencies:
debug: 4.3.5
debug: 4.3.6
eslint: 9.7.0
eslint-compat-utils: 0.5.1(eslint@9.7.0)
lodash: 4.17.21
@@ -15297,7 +15260,7 @@ snapshots:
dependencies:
'@ioredis/commands': 1.2.0
cluster-key-slot: 1.1.2
debug: 4.3.5
debug: 4.3.6
denque: 2.1.0
lodash.defaults: 4.2.0
lodash.isarguments: 3.1.0
@@ -15497,7 +15460,7 @@ snapshots:
istanbul-lib-source-maps@5.0.6:
dependencies:
'@jridgewell/trace-mapping': 0.3.25
debug: 4.3.5
debug: 4.3.6
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
@@ -18144,7 +18107,7 @@ snapshots:
vite-node@2.0.4(@types/node@20.14.13)(sass@1.77.8)(terser@5.31.3):
dependencies:
cac: 6.7.14
debug: 4.3.5
debug: 4.3.6
pathe: 1.1.2
tinyrainbow: 1.2.0
vite: 5.3.4(@types/node@20.14.13)(sass@1.77.8)(terser@5.31.3)
@@ -18161,7 +18124,7 @@ snapshots:
vite-node@2.0.4(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3):
dependencies:
cac: 6.7.14
debug: 4.3.5
debug: 4.3.6
pathe: 1.1.2
tinyrainbow: 1.2.0
vite: 5.3.4(@types/node@22.0.0)(sass@1.77.8)(terser@5.31.3)
@@ -18321,7 +18284,7 @@ snapshots:
'@vitest/spy': 2.0.4
'@vitest/utils': 2.0.4
chai: 5.1.1
debug: 4.3.5
debug: 4.3.6
execa: 8.0.1
magic-string: 0.30.10
pathe: 1.1.2
@@ -18387,7 +18350,7 @@ snapshots:
vue-eslint-parser@9.4.3(eslint@9.7.0):
dependencies:
debug: 4.3.5
debug: 4.3.6
eslint: 9.7.0
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3