diff --git a/apps/memoro/apps/server/src/routes/meetings-webhooks.ts b/apps/memoro/apps/server/src/routes/meetings-webhooks.ts index c0bb6aa65..99a1f51b3 100644 --- a/apps/memoro/apps/server/src/routes/meetings-webhooks.ts +++ b/apps/memoro/apps/server/src/routes/meetings-webhooks.ts @@ -48,14 +48,14 @@ meetingWebhookRoutes.post('/bot-events', async (c) => { const signature = c.req.header('x-webhook-signature') ?? ''; if (WEBHOOK_SECRET && !verifySignature(rawBody, signature)) { - return c.json({ error: 'Invalid webhook signature' }, 401); + return c.json({ success: false, error: 'Invalid webhook signature' }, 401); } let payload: WebhookEvent; try { payload = JSON.parse(rawBody) as WebhookEvent; } catch { - return c.json({ error: 'Invalid JSON payload' }, 400); + return c.json({ success: false, error: 'Invalid JSON payload' }, 400); } const key = idempotencyKey(payload); @@ -116,6 +116,6 @@ meetingWebhookRoutes.post('/bot-events', async (c) => { // Remove from processed set so it can be retried processedEvents.delete(key); console.error('[meetings-webhook] Error processing event:', err); - return c.json({ error: 'Failed to process webhook event' }, 500); + return c.json({ success: false, error: 'Failed to process webhook event' }, 500); } }); diff --git a/apps/memoro/apps/server/src/routes/meetings.test.ts b/apps/memoro/apps/server/src/routes/meetings.test.ts index 1cd2905c5..3055263e5 100644 --- a/apps/memoro/apps/server/src/routes/meetings.test.ts +++ b/apps/memoro/apps/server/src/routes/meetings.test.ts @@ -127,7 +127,7 @@ describe('POST /api/v1/meetings/bots', () => { expect(res.status).toBe(402); const data = await res.json(); - expect(data.error).toBe('InsufficientCredits'); + expect(data.error).toContain('Insufficient credits'); }); }); diff --git a/apps/memoro/apps/server/src/routes/meetings.ts b/apps/memoro/apps/server/src/routes/meetings.ts index 2eacd5a46..d510bb76f 100644 --- a/apps/memoro/apps/server/src/routes/meetings.ts +++ b/apps/memoro/apps/server/src/routes/meetings.ts @@ -35,12 +35,9 @@ meetingRoutes.post('/bots', async (c) => { return c.json( { success: false, - error: 'InsufficientCredits', - message: `Not enough credits to start recording. Need at least ${MINIMUM_RECORDING_CREDITS} credits.`, - details: { - requiredCredits: MINIMUM_RECORDING_CREDITS, - availableCredits: creditCheck.availableCredits, - }, + error: `Insufficient credits: need at least ${MINIMUM_RECORDING_CREDITS}`, + requiredCredits: MINIMUM_RECORDING_CREDITS, + availableCredits: creditCheck.availableCredits, }, 402 ); diff --git a/apps/memoro/apps/web/src/lib/i18n/index.ts b/apps/memoro/apps/web/src/lib/i18n/index.ts index 14fe96ccd..57702cf7c 100644 --- a/apps/memoro/apps/web/src/lib/i18n/index.ts +++ b/apps/memoro/apps/web/src/lib/i18n/index.ts @@ -13,13 +13,13 @@ export const supportedLocales = ['de', 'en', 'fr', 'it', 'es'] as const; export type SupportedLocale = (typeof supportedLocales)[number]; // Default locale -const defaultLocale = 'en'; +const defaultLocale = 'de'; // Get initial locale from browser or localStorage function getInitialLocale(): SupportedLocale { if (browser) { // Check localStorage first - const stored = localStorage.getItem('locale'); + const stored = localStorage.getItem('memoro_locale'); if (stored && supportedLocales.includes(stored as SupportedLocale)) { return stored as SupportedLocale; } @@ -46,7 +46,7 @@ export function initI18n() { export function setLocale(newLocale: SupportedLocale) { locale.set(newLocale); if (browser) { - localStorage.setItem('locale', newLocale); + localStorage.setItem('memoro_locale', newLocale); } } diff --git a/apps/memoro/apps/web/src/routes/offline/+page.svelte b/apps/memoro/apps/web/src/routes/offline/+page.svelte new file mode 100644 index 000000000..1ddaa36c1 --- /dev/null +++ b/apps/memoro/apps/web/src/routes/offline/+page.svelte @@ -0,0 +1,9 @@ + + +