Estensione Chrome - Outreach Machine
Overview
L'estensione Chrome di Outreach Machine consente agli utenti di importare contatti LinkedIn direttamente nell'applicazione. L'estensione è personalizzata per ogni workspace con un API key univoco incorporato.
Download e Installazione
Download Personalizato
Ogni utente autenticato può scaricare una versione personalizzata dell'estensione:
- Accedi a Outreach Machine
- Vai a Impostazioni → Estensione Chrome
- Clicca su Scarica Estensione
- Un file ZIP
outreach-machine-extension.zipverrà scaricato
Instalazione in Chrome
- Estrai il file ZIP in una cartella sul tuo computer
- Apri Chrome e vai a
chrome://extensions/ - Attiva Modalità sviluppatore (toggle in alto a destra)
- Clicca su Carica estensione non pacchettizzata
- Seleziona la cartella estratta
L'estensione è ora installata e pronta all'uso.
Come Funziona
Estrazione Contatti LinkedIn
- Vai su LinkedIn e apri il profilo di un contatto
- L'estensione mostrerà un'icona nel browser
- Clicca sull'icona per estrarre i dati dal profilo:
- Nome
- Ruolo
- Azienda
- Ubicazione
- URL LinkedIn
- Settore
Importazione in Outreach Machine
- Dopo l'estrazione, l'estensione mostra una lista di contatti estratti
- Seleziona i contatti che vuoi importare
- Scegli una campagna di destinazione
- Clicca su Importa
I contatti verranno aggiunti alla campagna selezionata con stato "Importato da LinkedIn".
Dettagli Tecnici
Architettura
L'estensione è composta da:
- manifest.json - Configurazione dell'estensione
- background.js - Service Worker che gestisce l'API key
- content.js - Script iniettato nelle pagine LinkedIn
- popup.html/popup.js - UI della popup dell'estensione
- icon*.png - Icone per la barra dei comandi
API Key
Ogni workspace ha un'API key univoca generata automaticamente. L'API key è incorporata nel file background.js durante il download e viene salvata nel storage del browser alla prima installazione.
⚠️ Sicurezza: L'API key è presente nel file ZIP scaricato. Non condividere l'estensione con altri - ogni utente deve scaricare la propria copia personalizzata.
Endpoint API
L'estensione comunica con l'applicazione tramite:
GET /api/extension
- Query: action=ping - Verifica connessione
- Query: action=campaigns - Ottiene liste campagne attive
POST /api/extension - Body: Dati contatto estratto - Response: ID lead creato
Tutti i requests includono l'header: x-api-key: {workspace_api_key}
Troubleshooting
"L'estensione non si carica"
- Verifica di aver estratto completamente il file ZIP
- Controlla che manifest.json sia nella cartella radice
- Abilita la "Modalità sviluppatore" su
chrome://extensions/
"Errore durante l'importazione"
- Verifica di essere autenticato in Outreach Machine
- Assicurati che la campagna di destinazione esista ed sia attiva
- Controlla la connessione a internet
"L'estensione non estrae i dati da LinkedIn"
- LinkedIn potrebbe aver bloccato l'estensione - ricarica la pagina
- Verifica che il profilo LinkedIn sia accessibile al tuo account
- Prova con un profilo pubblico come test
Storico Implementazione
Data: 2026-06-01
Problema risolto: Download dell'estensione per il workspace di Marianna
Soluzione:
- Creato endpoint GET /api/extension/download che genera un ZIP personalizzato
- L'endpoint:
1. Autentica l'utente tramite Supabase
2. Recupera il workspace dell'utente
3. Cerca o crea un'API key per il workspace
4. Genera un ZIP con l'estensione e il background.js personalizzato
5. Ritorna il ZIP pronto per il download
Miglioramenti: - API key univoca per workspace garantisce isolamento dei dati - ZIP generato dinamicamente con API key incorporato - Supporto per più workspaces simultanei
Problemi riscontrati e soluzioni:
1. RLS policy ricorsiva su workspace_members → Fixata con migration che utilizza subquery non-ricorsive
2. Incompatibilità archiver con Turbopack → Sostituito con jszip (modulo JavaScript puro)
3. Query .single() fallava senza API key → Cambiato a .maybeSingle() per permettere zero righe
Test: - ✅ Download extension per utente autenticato - ✅ Generazione ZIP con API key personalizzata - ✅ Import da LinkedIn funzionante
Data: 2026-06-01 (Continuazione)
Problema risolto: 3 vulnerabilità critiche di isolamento workspace
Soluzioni implementate:
- Correzione query settings in
/app/api/send/route.ts - Problema: Email inviate con settings globali instead of workspace-specific
- Soluzione: Cambiato da
.eq('id', 'default')a.eq('workspace_id', email.workspace_id) -
Impatto: Garantisce che ogni workspace usi i propri sender_email e brevo_api_key
-
Filtro workspace in
/app/api/campaigns/route.ts - Problema: Campaign steps caricate globalmente senza filtro workspace
- Soluzione: Aggiunto
.eq('workspace_id', workspaceId)alla query -
Impatto: Previene che step da altri workspaces siano visibili/accessibili
-
Rimozione fallback authentication in
/app/api/extension/route.ts - Problema: Legacy code paths permettevano authentication senza workspace context
- Soluzione: Rimossi
authCheckFallback()eresolveWorkspaceId(), onlyauthCheckV2() - Impatto: Elimina qualsiasi bypass di isolamento workspace
Deployment: - Vercel ID: 910c958 - Status: ✅ Live in production - All 3 fixes deployed simultaneously with single commit
Versione: 1.1
Ultimo aggiornamento: 2026-06-01
Autore: Sistema Outreach Machine