Skip to content

feat: migrate contact export (CSV, VCard, Google) from Express backend to Supabase Edge Function (#2812)#2849

Open
malek10xdev wants to merge 17 commits into
mainfrom
migrate-expoer-contacts-to-edge
Open

feat: migrate contact export (CSV, VCard, Google) from Express backend to Supabase Edge Function (#2812)#2849
malek10xdev wants to merge 17 commits into
mainfrom
migrate-expoer-contacts-to-edge

Conversation

@malek10xdev

Copy link
Copy Markdown
Collaborator

Migrates contact export functionality (CSV, VCard, Google Contacts) from the Express backend to a new Supabase Edge Function.

Changes

  • New edge function supabase/functions/export-contacts/ — Hono-based app with format strategies (factory pattern), Redis-backed Google API rate limiter, Repository-pattern DB client, i18n modal responses
  • Deleted backend/src/services/export/ — entire directory removed
  • Stripped backend/src/controllers/contacts.controller.ts and routes — export POST endpoint removed
  • Updated frontend ExportContacts.vue — now calls edge function via $saasEdgeFunctions, passes miningSourceId, handles ModalResponse (266/400/401/402) via GenericComplianceDialog
  • Added supabase/functions/_shared/rate-limiter.ts — Redis-backed TokenBucketRateLimiter for Google API quota management

Resolves #2812

enrich_contacts RPC requires user_id in every contact record.
The enrich function was sending enriched data without user_id,
causing 'All records in p_contacts_data must contain user_id field' error.

Also adds enrich function config to supabase/config.toml for
Docker edge runtime registration.
Add a new POST /api/imap/boxes endpoint to the emails-fetcher that
retrieves the IMAP folder tree for a given email. The endpoint:
- Validates userId and email input
- Fetches IMAP credentials from the mining source service
- Opens an IMAP connection via ImapConnectionProvider
- Uses ImapBoxesFetcher to build the IMAP folder tree
- Properly handles connection cleanup in finally block
Replace the backend API call (/api/imap/boxes) with a direct Supabase
edge function invocation (imap/boxes). Only requires email now, since
the edge function resolves the user ID from the auth token.
Migrate the IMAP edge function from raw Deno.serve to Hono framework.
Add POST /boxes endpoint that proxies IMAP folder listing requests to
the emails-fetcher microservice. Refactor /detect to use Hono routing.
Remove the old backend IMAP controller, routes, and service for listing
IMAP boxes. This functionality has been migrated to:
- The supabase/functions/imap edge function (proxies to emails-fetcher)
- The micro-services/emails-fetcher microservice (actual IMAP logic)
…or, make MiningSource.id required

- Conflicts #1, #2, #3: Take deletion (enrich edge function replaces backend enrichment layer)
- Conflict #4: Keep MiningSource.id required (fix frontend callers if needed)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

sub-issue: Create export-contacts edge function

1 participant