move sdk packages to its own folder and rename api & dashboard

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-03-11 13:15:44 +01:00
parent 1ca95442b9
commit 6d4f9010d4
318 changed files with 350 additions and 351 deletions

View File

@@ -0,0 +1,59 @@
import { isBot } from '@/bots';
import * as controller from '@/controllers/event.controller';
import { validateSdkRequest } from '@/utils/auth';
import type { FastifyPluginCallback, FastifyRequest } from 'fastify';
import { createBotEvent } from '@mixan/db';
import type { PostEventPayload } from '@mixan/sdk';
const eventRouter: FastifyPluginCallback = (fastify, opts, done) => {
fastify.addHook(
'preHandler',
async (
req: FastifyRequest<{
Body: PostEventPayload;
}>,
reply
) => {
try {
const projectId = await validateSdkRequest(req.headers);
req.projectId = projectId;
const bot = req.headers['user-agent']
? isBot(req.headers['user-agent'])
: null;
if (bot) {
const path = (req.body?.properties?.__path ||
req.body?.properties?.path) as string | undefined;
req.log.warn({ ...req.headers, bot }, 'Bot detected (event)');
await createBotEvent({
...bot,
projectId,
path: path ?? '',
createdAt: new Date(req.body?.timestamp),
});
reply.status(202).send('OK');
}
} catch (e) {
req.log.error(e, 'Failed to create bot event');
reply.status(401).send();
return;
}
}
);
fastify.route({
method: 'POST',
url: '/',
handler: controller.postEvent,
});
fastify.route({
method: 'GET',
url: '/',
handler: controller.postEvent,
});
done();
};
export default eventRouter;

View File

@@ -0,0 +1,27 @@
import * as controller from '@/controllers/live.controller';
import fastifyWS from '@fastify/websocket';
import type { FastifyPluginCallback } from 'fastify';
const liveRouter: FastifyPluginCallback = (fastify, opts, done) => {
fastify.route({
method: 'GET',
url: '/events/test/:projectId',
handler: controller.test,
});
fastify.register(fastifyWS);
fastify.register((fastify, _, done) => {
fastify.get(
'/visitors/:projectId',
{ websocket: true },
controller.wsVisitors
);
fastify.get('/events/:projectId', { websocket: true }, controller.wsEvents);
done();
});
done();
};
export default liveRouter;

View File

@@ -0,0 +1,20 @@
import * as controller from '@/controllers/misc.controller';
import type { FastifyPluginCallback } from 'fastify';
const miscRouter: FastifyPluginCallback = (fastify, opts, done) => {
fastify.route({
method: 'GET',
url: '/favicon',
handler: controller.getFavicon,
});
fastify.route({
method: 'GET',
url: '/favicon/clear',
handler: controller.clearFavicons,
});
done();
};
export default miscRouter;

View File

@@ -0,0 +1,46 @@
import { isBot } from '@/bots';
import * as controller from '@/controllers/profile.controller';
import { validateSdkRequest } from '@/utils/auth';
import type { FastifyPluginCallback } from 'fastify';
const eventRouter: FastifyPluginCallback = (fastify, opts, done) => {
fastify.addHook('preHandler', async (req, reply) => {
try {
const projectId = await validateSdkRequest(req.headers);
req.projectId = projectId;
const bot = req.headers['user-agent']
? isBot(req.headers['user-agent'])
: null;
if (bot) {
reply.log.warn({ ...req.headers, bot }, 'Bot detected (profile)');
reply.status(202).send('OK');
}
} catch (e) {
reply.status(401).send();
return;
}
});
fastify.route({
method: 'POST',
url: '/',
handler: controller.updateProfile,
});
fastify.route({
method: 'POST',
url: '/increment',
handler: controller.incrementProfileProperty,
});
fastify.route({
method: 'POST',
url: '/decrement',
handler: controller.decrementProfileProperty,
});
done();
};
export default eventRouter;