- backend/api/magic/register: explicit import of MAGIC_DEVICE_LIMIT and createAdGuardClient (Nitro auto-import was missing them → ReferenceError → HTTP 500 on /api/magic/register) - mac-app: default backendBaseUrl falls back to staging.rebreak.org (app.rebreak.org serves wrong TLS cert) - native MagicSheet: fallback download/dmg URLs point to staging - native settings: Magic sheet capped at detents=[0.85] so AppHeader stays visible - bundles all in-flight Magic feature work (pair create/redeem, device endpoints, schema, adguard utils, mac-app, locales)
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { listMagicDevices } from "../../db/devices";
|
|
import { requireUser } from "../../utils/auth";
|
|
|
|
/**
|
|
* GET /api/magic/devices
|
|
*
|
|
* Listet alle aktiven Magic-Bindings des Users für UI.
|
|
* Response: [{ deviceId, hostname, model, osVersion, magicEnrolledAt, releaseRequestedAt, releaseAvailableAt }]
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
const user = await requireUser(event);
|
|
const devices = await listMagicDevices(user.id);
|
|
|
|
// Berechne releaseAvailableAt (releaseRequestedAt + 24h)
|
|
const enriched = devices.map((d) => {
|
|
let releaseAvailableAt: string | null = null;
|
|
if (d.releaseRequestedAt) {
|
|
const availableAt = new Date(
|
|
d.releaseRequestedAt.getTime() + 24 * 60 * 60 * 1000,
|
|
);
|
|
releaseAvailableAt = availableAt.toISOString();
|
|
}
|
|
|
|
return {
|
|
deviceId: d.deviceId,
|
|
hostname: d.hostname,
|
|
model: d.model,
|
|
osVersion: d.osVersion,
|
|
magicEnrolledAt: d.magicEnrolledAt.toISOString(),
|
|
releaseRequestedAt: d.releaseRequestedAt?.toISOString() ?? null,
|
|
releaseAvailableAt,
|
|
};
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
data: enriched,
|
|
};
|
|
});
|