wulf-pulse/app/api/mimecast/cloud-user/route.ts
lorentz fcdec8e38b feat: Mimecast multi-tenant held mail viewer
- migration 062: mimecast_tenants table (company_id, client_id/secret, account_code)
- Seed Wulf (CUSA13A95) + Seubert (CUSA96A181) tenants
- MimecastClient.getHeldMessages(): full pagination via meta.pagination.next cursor
  (API always returns 10/page regardless of pageSize param, totalCount in meta)
- getMimecastClientForTenant() factory for per-tenant instantiation
- GET /api/mimecast/held?tenantId=&recipient= — fetches all tenants in parallel,
  merges + sorts by date, returns per-tenant counts + combined messages[]
- Held Mail tab on /admin/sync/mimecast (on-demand load, recipient filter,
  tenant badges, policy filter dropdown, DMARC/impersonation highlighted red)
2026-03-31 22:38:22 -04:00

22 lines
776 B
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { getMimecastClient } from '@/lib/services/mimecast-client';
export async function GET(req: NextRequest) {
const emailAddress = req.nextUrl.searchParams.get('emailAddress');
const domain = req.nextUrl.searchParams.get('domain');
if (!emailAddress || !domain) {
return NextResponse.json({ error: 'emailAddress and domain are required' }, { status: 400 });
}
try {
const client = getMimecastClient();
const user = await client.getCloudUser(emailAddress, domain);
if (!user) {
return NextResponse.json({ found: false });
}
return NextResponse.json({ found: true, user });
} catch (err: any) {
return NextResponse.json({ error: err.message }, { status: 500 });
}
}