chahinebrini 77edd67cbe fix(magic): explicit imports + staging defaults + sheet height
- 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)
2026-06-03 08:25:02 +02:00

56 lines
1.3 KiB
TypeScript

/**
* POST /api/magic/devices/[deviceId]/cancel-release
*
* User zieht Release-Request zurück. Setzt releaseRequestedAt zurück auf NULL.
*/
export default defineEventHandler(async (event) => {
const user = await requireUser(event);
const deviceId = getRouterParam(event, "deviceId");
if (!deviceId) {
throw createError({
statusCode: 400,
message: "deviceId required",
});
}
const db = usePrisma();
// Ownership-Check + Magic-Binding-Check
const device = await db.userDevice.findUnique({
where: { userId_deviceId: { userId: user.id, deviceId } },
select: {
id: true,
magicEnrolledAt: true,
magicRevokedAt: true,
releaseRequestedAt: true,
},
});
if (!device || !device.magicEnrolledAt || device.magicRevokedAt) {
throw createError({
statusCode: 404,
message: "Magic-Binding nicht gefunden oder bereits revoked",
});
}
if (!device.releaseRequestedAt) {
// Idempotent: kein offener Request → noop
return {
success: true,
data: { ok: true },
};
}
// Clear releaseRequestedAt
await db.userDevice.update({
where: { id: device.id },
data: { releaseRequestedAt: null },
});
return {
success: true,
data: { ok: true },
};
});