client initiate

This commit is contained in:
DecDuck
2024-10-08 13:17:30 +11:00
parent ceacd8469d
commit 909432a6ce
8 changed files with 66 additions and 9 deletions

View File

@ -1,6 +1,6 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: '2024-04-03',
compatibilityDate: "2024-04-03",
devtools: { enabled: false },
css: ["~/assets/core.scss"],
@ -13,9 +13,7 @@ export default defineNuxtConfig({
app: {
head: {
link: [
{ rel: 'icon', href: '/favicon.ico', }
]
}
}
})
link: [{ rel: "icon", href: "/favicon.ico" }],
},
},
});

View File

@ -0,0 +1 @@
<template></template>

View File

@ -49,6 +49,9 @@ model Client {
endpoint String
capabilities ClientCapabilities[]
name String
platform String
}
enum MetadataSource {

View File

@ -0,0 +1,3 @@
export default defineEventHandler((h3) => {
});

View File

@ -0,0 +1,3 @@
export default defineEventHandler((h3) => {
});

View File

@ -1,3 +1,18 @@
export default defineEventHandler(async (h3) => {
import clientHandler from "~/server/internal/clients/handler";
});
export default defineEventHandler(async (h3) => {
const body = await readBody(h3);
const name = body.name;
const platform = body.platform;
if (!name || !platform)
throw createError({
statusCode: 400,
statusMessage: "Missing name or platform in body",
});
const clientId = await clientHandler.initiate({ name, platform });
return `/client/${clientId}/callback`;
});

View File

@ -0,0 +1,5 @@
export default defineEventHandler((h3) => {
return {
appName: "Drop",
};
});

View File

@ -0,0 +1,29 @@
import { v4 as uuidv4 } from "uuid";
export interface ClientMetadata {
name: string;
platform: string;
}
export class ClientHandler {
private temporaryClientTable: {
[key: string]: { timeout: NodeJS.Timeout; data: ClientMetadata };
} = {};
async initiate(metadata: ClientMetadata) {
const clientId = uuidv4();
this.temporaryClientTable[clientId] = {
data: metadata,
timeout: setTimeout(() => {
if (this.temporaryClientTable[clientId])
delete this.temporaryClientTable[clientId];
}, 1000 * 60 * 10), // 10 minutes
};
return clientId;
}
}
export const clientHandler = new ClientHandler();
export default clientHandler;