30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import { randomBytes } from "node:crypto";
|
|
import { hashToken } from "@minecraft-account-manager/auth";
|
|
import { eq } from "drizzle-orm";
|
|
import { createDatabase, pluginCredentials } from "../src/index";
|
|
|
|
const serverId = process.argv[2]?.trim();
|
|
if (!serverId || !/^[a-z0-9][a-z0-9_-]{1,99}$/i.test(serverId)) {
|
|
throw new Error("Usage: npm run plugin:create-credential --workspace @minecraft-account-manager/database -- <server-id>");
|
|
}
|
|
|
|
const databaseUrl = process.env.DATABASE_URL?.trim();
|
|
if (!databaseUrl) throw new Error("DATABASE_URL is required");
|
|
|
|
const token = randomBytes(32).toString("base64url");
|
|
const { db, client } = createDatabase(databaseUrl);
|
|
const now = new Date();
|
|
|
|
await db
|
|
.insert(pluginCredentials)
|
|
.values({ serverId, secretHash: hashToken(token) })
|
|
.onConflictDoUpdate({
|
|
target: pluginCredentials.serverId,
|
|
set: { secretHash: hashToken(token), revokedAt: null, updatedAt: now },
|
|
});
|
|
|
|
console.log(`Server ID: ${serverId}`);
|
|
console.log(`API token: ${token}`);
|
|
console.log("Store this token in the Velocity plugin configuration now; it will not be shown again.");
|
|
await client.end();
|