client initiate

This commit is contained in:
DecDuck
2024-10-08 13:17:30 +11:00
parent 88a07e0723
commit 1c63d62e3d
8 changed files with 66 additions and 9 deletions
+5 -7
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" }],
},
},
});
+1
View File
@@ -0,0 +1 @@
<template></template>
+3
View File
@@ -49,6 +49,9 @@ model Client {
endpoint String
capabilities ClientCapabilities[]
name String
platform String
}
enum MetadataSource {
@@ -0,0 +1,3 @@
export default defineEventHandler((h3) => {
});
@@ -0,0 +1,3 @@
export default defineEventHandler((h3) => {
});
+17 -2
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`;
});
+5
View File
@@ -0,0 +1,5 @@
export default defineEventHandler((h3) => {
return {
appName: "Drop",
};
});
+29
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;