Initial commit
This commit is contained in:
37
src/index.ts
Normal file
37
src/index.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Elysia } from "elysia";
|
||||
import { cors } from "@elysiajs/cors"
|
||||
import { jsonResponse } from "./lib/util";
|
||||
import { drizzle } from 'drizzle-orm/mysql2';
|
||||
import mysql from 'mysql2/promise';
|
||||
import dotenv from 'dotenv'
|
||||
|
||||
import { handler as launcherVersionsHandler } from "./routes/launcher/versions";
|
||||
import { handler as launcherLatestHandler } from "./routes/launcher/latest";
|
||||
import { handler as launcherLoaderLatestHandler } from "./routes/launcher/loader/latest";
|
||||
import { handler as launcherLoaderUpdateDataHandler } from "./routes/launcher/loader/update-data";
|
||||
|
||||
dotenv.config()
|
||||
|
||||
const connection = await mysql.createConnection({
|
||||
host: process.env.DB_HOST ?? 'localhost',
|
||||
port: Number(process.env.DB_PORT) || 3306,
|
||||
user: process.env.DB_USER ?? '',
|
||||
password: process.env.DB_PASS ?? '',
|
||||
database: process.env.DB_NAME ?? ''
|
||||
});
|
||||
|
||||
const db = drizzle(connection);
|
||||
|
||||
const app = new Elysia()
|
||||
.use(cors({
|
||||
origin: "*",
|
||||
methods: ["POST", "GET"]
|
||||
}))
|
||||
|
||||
app.get("/launcher/versions", (context) => launcherVersionsHandler(context, db))
|
||||
app.get("/launcher/latest", launcherLatestHandler)
|
||||
app.get("/launcher/loader/latest", launcherLoaderLatestHandler)
|
||||
app.get("/launcher/loader/update-data", (context) => launcherLoaderUpdateDataHandler(context, db))
|
||||
app.all("*", () => jsonResponse({ message: "No endpoint found (are you using the correct request method?)" }, 404))
|
||||
|
||||
app.listen(3342)
|
||||
31
src/lib/tables.ts
Normal file
31
src/lib/tables.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { bigint, boolean, int, mysqlTable, text, varchar } from "drizzle-orm/mysql-core";
|
||||
|
||||
export const launcherGames = mysqlTable('launchergames', {
|
||||
id: int('id').primaryKey().autoincrement(),
|
||||
name: text('name').notNull(),
|
||||
official: boolean('official').notNull().default(false),
|
||||
verified: boolean('verified').notNull().default(false),
|
||||
cutOff: int('cutOff').notNull().default(-1)
|
||||
})
|
||||
|
||||
export const launcherVersions = mysqlTable('launcherversions', {
|
||||
id: varchar('id', { length: 24 }).primaryKey(),
|
||||
versionName: text('versionName').notNull(),
|
||||
releaseDate: bigint('releaseDate', { mode: 'number' }).notNull(),
|
||||
downloadUrls: text('downloadUrls').notNull(),
|
||||
platforms: text('platforms').notNull(),
|
||||
executables: text('executables').notNull(),
|
||||
hidden: boolean('hidden').notNull().default(true),
|
||||
game: int('game').notNull().default(0).references(() => launcherGames.id),
|
||||
place: int('place').notNull().default(0)
|
||||
})
|
||||
|
||||
export const launcherUpdates = mysqlTable('launcherupdates', {
|
||||
id: varchar('id', { length: 24 }).primaryKey(),
|
||||
releaseDate: bigint('releaseDate', { mode: 'number' }).notNull(),
|
||||
downloadUrls: text('downloadUrls').notNull(),
|
||||
platforms: text('platforms').notNull(),
|
||||
executables: text('executables').notNull(),
|
||||
hidden: boolean('hidden').notNull().default(true),
|
||||
place: int('place').notNull().default(0)
|
||||
})
|
||||
6
src/lib/util.ts
Normal file
6
src/lib/util.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export function jsonResponse(data: any, status = 200) {
|
||||
return new Response(JSON.stringify(data, null, 2), {
|
||||
status,
|
||||
headers: { "Content-Type": "application/json" }
|
||||
})
|
||||
}
|
||||
3
src/routes/launcher/latest.ts
Normal file
3
src/routes/launcher/latest.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export async function handler() {
|
||||
return "1.0.0"
|
||||
}
|
||||
3
src/routes/launcher/loader/latest.ts
Normal file
3
src/routes/launcher/loader/latest.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export async function handler() {
|
||||
return "1.0.0"
|
||||
}
|
||||
27
src/routes/launcher/loader/update-data.ts
Normal file
27
src/routes/launcher/loader/update-data.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import type { Context } from "elysia";
|
||||
import { MySql2Database } from "drizzle-orm/mysql2";
|
||||
import { launcherUpdates } from "../../../lib/tables";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { jsonResponse } from "../../../lib/util";
|
||||
|
||||
export async function handler(context: Context, db: MySql2Database) {
|
||||
const versionsRaw = await db.select({
|
||||
id: launcherUpdates.id,
|
||||
releaseDate: launcherUpdates.releaseDate,
|
||||
downloadUrls: launcherUpdates.downloadUrls,
|
||||
platforms: launcherUpdates.platforms
|
||||
})
|
||||
.from(launcherUpdates)
|
||||
.where(eq(launcherUpdates.hidden, false))
|
||||
.orderBy(launcherUpdates.place)
|
||||
.limit(1)
|
||||
.execute()
|
||||
|
||||
const versions = versionsRaw.map(v => ({
|
||||
...v,
|
||||
downloadUrls: JSON.parse(v.downloadUrls),
|
||||
platforms: JSON.parse(v.platforms)
|
||||
}))
|
||||
|
||||
return jsonResponse(versions[0])
|
||||
}
|
||||
34
src/routes/launcher/versions.ts
Normal file
34
src/routes/launcher/versions.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import type { Context } from "elysia";
|
||||
import { MySql2Database } from "drizzle-orm/mysql2";
|
||||
import { launcherGames, launcherVersions } from "../../lib/tables";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { jsonResponse } from "../../lib/util";
|
||||
|
||||
export async function handler(context: Context, db: MySql2Database) {
|
||||
const versionsRaw = await db.select({
|
||||
id: launcherVersions.id,
|
||||
versionName: launcherVersions.versionName,
|
||||
releaseDate: launcherVersions.releaseDate,
|
||||
downloadUrls: launcherVersions.downloadUrls,
|
||||
platforms: launcherVersions.platforms,
|
||||
executables: launcherVersions.executables,
|
||||
game: launcherVersions.game,
|
||||
place: launcherVersions.place
|
||||
}).from(launcherVersions).where(eq(launcherVersions.hidden, false)).execute()
|
||||
|
||||
const versions = versionsRaw.map(v => ({
|
||||
...v,
|
||||
downloadUrls: JSON.parse(v.downloadUrls),
|
||||
platforms: JSON.parse(v.platforms),
|
||||
executables: JSON.parse(v.executables)
|
||||
}))
|
||||
|
||||
const gamesRaw = await db.select().from(launcherGames).execute()
|
||||
|
||||
const games = gamesRaw.map(v => ({
|
||||
...v,
|
||||
cutOff: v.cutOff === -1 ? null : v.cutOff
|
||||
}))
|
||||
|
||||
return jsonResponse({ versions, games })
|
||||
}
|
||||
Reference in New Issue
Block a user