# Tutorial do Noterich P2P Sync: Sincronização entre Dispositivos Sem Nuvem > **Sincronize suas notas entre dispositivos de forma segura — sem necessidade de armazenamento na nuvem.** Em uma era em que a privacidade dos dados é mais importante do que nunca, o Noterich oferece uma abordagem revolucionária para sincronização entre dispositivos. Nossa funcionalidade **P2P (Peer-to-Peer) Sync** permite o compartilhamento transparente de notas entre seus dispositivos, sem depender de servidores da nuvem. Seus dados permanecem sob sua responsabilidade — sempre. ## Por que escolher P2P Sync? Aplicativos tradicionais de anotações armazenam seus dados em servidores centralizados. Isso gera riscos de privacidade, custos de assinatura e dependência de infraestrutura de terceiros. O Noterich segue um caminho diferente: ```mermaid graph LR A[Seu Dispositivo] <-->|Conexão Direta| B[Seu Outro Dispositivo] C[Servidor da Nuvem] -.->|Não Necessário| A C -.->|Não Necessário| B style A fill:#4CAF50,color:#fff style B fill:#4CAF50,color:#fff style C fill:#9E9E9E,color:#fff,stroke-dasharray: 5 5 ``` ### Principais Benefícios - **🔒 Privacidade em Primeiro Lugar**: Suas notas nunca entram em contato com servidores de terceiros - **⚡ Rápido e Direto**: Dispositivos se comunicam diretamente para sincronizações mais rápidas - **💰 Sem Assinaturas**: Sincronização P2P gratuita, sem níveis premium - **🌐 Funciona em qualquer lugar**: Sincronização via rede local ou internet - **📱 Plataformas Cruzadas**: Funciona entre desktop, laptop, tablet e celular ## Como Funciona o P2P Sync O Noterich utiliza a **tecnologia WebRTC** combinada com **PeerJS** para estabelecer conexões diretas entre seus dispositivos. Quando você inicia uma sincronização: ```mermaid sequenceDiagram participant D1 como Dispositivo A (Remetente) participant S como Servidor de Sinalização participant D2 como Dispositivo B (Receptor) D1->>S: Solicitar conexão ID S-->>D1: Gerar ID da sala D1->>D2: Compartilhar link de conexão (QR/URL) D2->>S: Conectar usando ID da sala S-->>D2: Estabelecer conexão peer D1->>D2: Criptografar e enviar notas D2->>D2: Descriptografar e importar notas Nota sobre D1,D2: Transferência criptografada direta<br/>Nenhum dado é armazenado no servidor ``` ### A Tecnologia por Trás A implementação P2P do Noterich utiliza: 1. **Biblioteca PeerJS**: Lida com a complexidade do WebRTC para comunicação entre navegadores 2. **Criptografia AES-GCM**: Criptografia de nível militar para seus dados de notas 3. **Derivação de Chave PBKDF2**: Geração segura de chaves de criptografia baseadas em senha 4. **Serialização MessagePack**: Codificação binária eficiente para transferências rápidas 5. **Armazenamento IndexedDB**: Banco de dados local para acesso off-line ## Começando com o P2P Sync ### Pré-requisitos Antes de começar, verifique se você tem: - ✅ O Noterich instalado em ambos os dispositivos - ✅ Ambos os dispositivos conectados à internet (ou mesma rede local) - ✅ Um navegador moderno (Chrome, Firefox, Edge, Safari) ### Passo 1: Iniciar o Compartilhamento do Dispositivo Origem 1. Abra a nota que deseja compartilhar no Noterich 2. Clique no botão **Compartilhar** na barra de ferramentas 3. Selecione a opção **"P2P Compartilhar"** 4. (Opcional) Defina uma senha para maior segurança - As senhas devem ter pelo menos 8 caracteres - Utiliza criptografia AES-256-GCM 5. Espere o servidor P2P inicializar ```mermaid graph TD A[Abrir Nota] --> B[Clique em Botão Compartilhar] B --> C[Selecionar P2P Compartilhar] C --> D{Definir Senha?} D -->|Sim| E[Insira Senha ≥8 caracteres] D -->|Não| F[Ignorar Criptografia] E --> G[Inicializar Servidor P2P] F --> G G --> H[Gerar Link de Compartilhamento e QR Code] ``` ### Passo 2: Compartilhar o Link de Conexão Quando o servidor P2P inicia, o Noterich gera: - **Um link de compartilhamento único** contendo parâmetros de conexão - **Um QR code** para scanning rápido em dispositivos móveis O formato do link é assim: ``` https://noterich.com/#dbshare=<infoHash>&server=<signaling-server> ``` **Métodos de Compartilhamento:** | Método | Melhor Para | Como Fazer | |--------|----------|--------| | 🔗 Copiar Link | Email, aplicativos de mensagens | Clique em "Copiar Link" | | 📱 QR Code | Dispositivos móveis | Escaneie com câmera do dispositivo | | 📧 Email | Colaboradores remotos | Copie o link no email | ### Passo 3: Receber no Dispositivo Destinatário No dispositivo receptor: 1. **Abrir o link de compartilhamento** - Clique diretamente no link, ou - Escaneie o QR code com seu dispositivo móvel 2. **Revisar as notas recebidas** - Visualizar títulos e metadados da nota - Verificar as informações do remetente 3. **Inserir a senha** (se criptografada) - Insira a senha fornecida pelo remetente - Os dados são descriptografados localmente no seu dispositivo 4. **Selecionar workspace de destino** - Escolher um workspace existente, ou - Criar um novo workspace para as notas importadas 5. **Confirmar a importação** - As notas são descriptografadas e salvas no IndexedDB - O índice de busca é reconstruído automaticamente ```mermaid graph TD A[Abrir Link] --> B[Conectar com o Remetente] B --> C{Encriptado?} C -->|Sim| D[Insira Senha] C -->|Não| E[Receber Metadados] D --> E E --> F[Visualizar Notas] F --> G[Selecionar Workspace] G --> H[Importar e Indexar] H --> I[Sincronização Completa!] style I fill:#4CAF50,color:#fff ``` ## Recursos Avançados ### Transferências Criptografadas Para notas confidenciais, o Noterich oferece criptografia end-to-end opcional: **Processo de Criptografia:** ```javascript // Senha → Chave de Criptografia (PBKDF2) password + salta → deriveKey() → Chave AES-256-GCM // Dados da Nota → Buffer Criptografado noteData + chave + iv → encrypt() → encryptedBuffer // Pacote de Transferência { encryptedBuffer: ArrayBuffer, salt: Uint8Array, // Para derivação da chave iv: Uint8Array // Vector de inicialização } ``` **Recursos de Segurança:** - 🔐 100.000 iterações de PBKDF2 para derivação da chave - 🔐 Salta e IV aleatórios para cada transferência - 🔐 Criptografia autenticada AES-256-GCM - 🔐 A senha nunca é transmitida — apenas usada localmente ### Sincronização em Lote Transferir várias notas de forma eficiente: 1. Acesse **Transferência de Banco de Dados** nas configurações 2. Selecione o modo **"P2P Sync"** 3. Escolha as notas a sincronizar 4. O receptor recebe uma visualização em lote com opções de seleção **Otimização de Desempenho:** - As notas são transferidas em blocos (512KB cada) - Processamento assíncrono para evitar bloqueio da IU - Acompanhamento do progresso com precisão de byte - Cancele a qualquer momento sem danos aos dados ### Resolução de Conflitos Quando sincronizando notas que existem em ambos os dispositivos: ```mermaid graph TD A[Detectar Conflito] --> B{Comparar Datações} B -->|Local Mais Recente| C[Manter Versão Local] B -->|Local Mais Recente do Remetente| D[Mostrar Diálogo de Conflito] D --> E[Escolher Versão] E --> F[Local] E --> G[Remetente] E --> H[Mergir Manualmente] B -->|Ambos Exclusos| I[Ignorar] style C fill:#2196F3,color:#fff style F fill:#2196F3,color:#fff style G fill:#4CAF50,color:#fff ``` **Tipos de Conflito Geridos:** - `local-mais-reciente`: Sua versão é mais recente - `local-mais-reciente-do-remetente`: A versão recebida é mais recente - `local-excluso`: Você excluiu essa nota localmente - `remetente-excluso`: A nota foi excluída no dispositivo do remetente - `remetente-restaurado`: Nota anteriormente excluída foi restaurada ## Solução de Problemas ### Problemas Comuns e Soluções #### ❌ "Biblioteca PeerJS não carregada" **Causa**: Bloqueio da rede pelo CDN do PeerJS ou pelo servidor de sinalização **Soluções:** 1. Verificar a conexão à internet 2. Verificar se o firewall permite conexões WebRTC 3. Tentar uma rede alternativa ( hotspot móvel ) 4. Assegurar que o navegador suporte WebRTC #### ❌ "Tempo de Conexão Expirado" **Causa**: NAT/firewall impedindo a conexão direta **Soluções:** 1. Ambos os dispositivos na mesma rede ajuda 2. Desativar VPN temporariamente 3. Verificar as configurações WebRTC do roteador 4. Usar QR code para conexões móveis #### ❌ "Decryptografia Falhou" **Causa**: Senha incorreta ou transferência corrompida **Soluções:** 1. Verificar se a senha coincide exatamente (caso-sensitive) 2. Solicitar um novo link de compartilhamento do remetente 3. Assegurar uma conexão estável durante a transferência 4. Tente tamanhos de lote menores #### ❌ Erro "Sincronização em andamento" **Causa**: Várias tentativas de sincronização simultâneas **Soluções:** 1. Espere a sincronização atualizar completar 2. Feche outras abas/windows do Noterich 3. atualizar a página e tentar novamente 4. Limpar a cache do navegador se persistir ### Indicadores de Status de Conexão | Status | Significado | Ação | |--------|---------|--------| | 🔵 Conectando | Estabelecendo conexão peer | Espere 5-10 segundos | | 🟡 Comparando | Analisando diferenças de notas | Processo normal | | 🟠 Esperando usuário | Senha ou confirmação necessárias | Verifique diálogos | | 🟢 Aplicando | Importando notas para o banco de dados | Não feche a aba | | ✅ Sucesso | Sincronização concluída com sucesso | Pronto para usar as notas | | 🔴 Erro | Conexão ou transferência falhou | Verifique soluções de erro | ## Práticas de Segurança ### Protegendo seus Dados Embora a sincronização P2P seja intrinsecamente segura, siga estas diretrizes: 1. **Use Senhas Fortes** - No mínimo 8 caracteres (recomendado 12+) - Misture maiúsculas, minúsculas, números e símbolos - Nunca reutilize senhas de outros serviços 2. **Verificar Destinatários** - Compartilhe links apenas com dispositivos confiáveis - Use QR codes para transferências em proximidade física - Evite postar links em canais públicos 3. **Monitore Conexões Ativas** - Verifique peers conectados durante a sincronização - Desconecte após transferência bem-sucedida - Revogue links compartilhados se comprometidos 4. **Backups Regulares** - Exporte notas importantes periodicamente - Armazene os backups em local seguro - Teste as procedimentos de restauração regularmente ### Entendendo os Limites da Criptografia **O que é criptografado:** - ✅ Conteúdo da nota (texto, formatação, metadados) - ✅ Anexos e mídias embutidas - ✅ Estrutura do banco de dados durante a transferência **O que não é criptografado:** - ⚠️ Metadados de conexão (tempo, tamanho de dados) - ⚠️ Endereços IP (visíveis para o servidor de sinalização) - ⚠️ Identificadores de dispositivo (para roteamento de conexão) ## Dicas de Desempenho ### Otimizar a Velocidade de Sincronização 1. **Condições de Rede** - Mesma rede local = transferências mais rápidas - Wi-Fi 5GHz preferencialmente ao 2.4GHz - Ethernet para dispositivos desktop 2. **Tamanhos de Lote** - Transferências grandes: Divida em lotes menores - Monitore o indicador de progresso - Cancele e tente novamente se estiver parado 3. **Desempenho do Navegador** - Mantenha a aba do Noterich ativa durante a sincronização - Feche abas do navegador desnecessárias - Atualize para a versão mais recente do navegador 4. **Recursos do Dispositivo** - Assegure espaço de armazenamento suficiente - Feche aplicativos que consumem muita memória - Reinicie o navegador se a sincronização demorar ### Gerenciamento de Memória O Noterich implementa processamento em lote inteligente para evitar travamentos do navegador: ```javascript // Processamento em lote assíncrono com setTimeout async function asyncBatchProcessor(items, processor, batchSize = 10) { // Processa itens em lotes de 10 // Dá controle a cada 10ms para manter a interface gráfica responsiva // Evita bloqueio do thread principal durante importações grandes } ``` **Recomendações:** - Limite transferências individuais a 100 notas no máximo - Espere 30 segundos entre grandes lotes de sincronização - Limpar a cache do navegador periodicamente ## Perguntas Frequentes ### P: Posso sincronizar mais de dois dispositivos? **R:** Sim! Inicie sessões P2P separadas para cada par de dispositivos. Para fluxos de trabalho múltiplos dispositivos: 1. Sincronizar Dispositivo A → Dispositivo B 2. Depois sincronizar Dispositivo B → Dispositivo C 3. Ou usar Dispositivo A como hub central para todos os outros ### P: A sincronização P2P funciona offline? **R:** A P2P requer conexão à internet inicial para o handshake do servidor de sinalização. Após a estabelecimento da conexão: - ✅ Transferências de rede local funcionam sem internet - ✅ Dados são transferidos diretamente entre dispositivos - ❌ Conexão inicial precisa do acesso ao servidor de sinalização ### P: O que acontece se a sincronização for interrompida? **R:** O Noterich lida com interrupções de forma adequada: - Notas parcialmente transferidas são descartadas - Nenhum dado corrompido entra no seu banco de dados - Basta reiniciar o processo de sincronização - Notas já sincronizadas permanecem inalteradas ### P: Posso sincronizar com a instância do Noterich de outra pessoa? **R:** Absolutamente! A sincronização P2P funciona entre usuários de qualquer Noterich: - Compartilhe notas individuais com colaboradores - Não é necessário vínculo de conta - Cada transferência é independente e segura - Perfeito para compartilhamento de notas de uso único ### P: Existe um limite de tamanho de arquivo? **R:** Limites práticos dependem de: - Memória disponível no navegador - Estabilidade da rede - Recomendado máximo: 50MB por sessão - Transferências maiores: Divida em vários lotes ### P: Quanto tempo dura um link de compartilhamento? **R:** Os links de compartilhamento são por sessão: - Válidos enquanto a aba do Noterich estiver aberta - Expiram quando o remetente fecha a aba/browser - Recomenda-se uso único por segurança - Gere um novo link para cada sessão de transferência ## Comparação: P2P vs Sincronização na Nuvem ```mermaid quadrantChart title "Comparação de Métodos de Sincronização" x-axis "Menor Privacidade" --> "Maior Privacidade" y-axis "Menor Controle" --> "Maior Controle" quadrant-1 "Noterich P2P" quadrant-2 "Evite" quadrant-3 "Sincronização na Nuvem Tradicional" quadrant-4 "Serviços Centralizados" "Noterich P2P": [0.9, 0.9] "Sincronização na Nuvem Tradicional": [0.3, 0.4] "Serviços Centralizados": [0.4, 0.3] ``` | Recurso | Noterich P2P | Sincronização na Nuvem | |---------|--------------|---------------------------| | **Armazenamento dos Dados** | Seus dispositivos apenas | Servidores de terceiros | | **Nível de Privacidade** | Máximo | Depende do fornecedor | | **Custo** | Gratuito | Geralmente com assinaturas | | **Complexidade de Configuração** | Moderada | Simples | | **Velocidade de Sincronização** | Muito rápida (direta) | Médio (via servidor) | | **Acesso Offline** | Total | Limitado | | **Fidelidade ao Fornecedor** | Nenhuma | Alta | | **Portabilidade de Dados** | Total | Restrita | ## Casos de Uso Reais ### 📚 Base de Conhecimento Pessoal Sincronize seu sistema de gestão de conhecimento pessoal (PKM) em: - Desktop em casa para trabalhos profundos - Laptop para sessões em cafés - Tablet para leitura e anotações - Celular para capturas rápidas ### 👥 Colaboração em Equipe Compartilhe anotações de pesquisa de forma segura dentro da equipe: - Não é necessário infraestrutura de TI - Transferências criptografadas end-to-end - Rastreabilidade por meio de logs de transferência - Conforme regulamentos de privacidade ### 🎓 Pesquisa Acadêmica Colabore em artigos e revisões de literatura: - Compartilhe PDFs com anotações - Mantenha histórico de versões localmente - Trabalhe entre dispositivos universitários/pessoais - Proteja pesquisas inéditas ### 🏢 Implementação Empresarial Implante o Noterich em organizações que valorizam a privacidade: - Nenhum dado sai da rede da empresa - Funciona atrás de firewalls com configuração - Integra-se com políticas de segurança existentes - Reduz dependência de serviços da nuvem ## Detalhes Técnicos (Para Desenvolvedores) ### Visão Geral da Arquitetura ```mermaid graph TB subgraph Sender["Dispositivo Remetente"] A1[Dados da Nota] --> A2[Serializar com MessagePack] A2 --> A3{Encriptado?} A3 -->|Sim| A4[Encriptar com AES-256-GCM] A3 -->|Não| A5[Binário Bruto] A4 --> A6[Fragmentar em 512KB] A5 --> A6 A6 --> A7[Chamado de Dados WebRTC] end subgraph Receptor["Dispositivo Receptor"] B1[Chamado de Dados WebRTC] --> B2[Reorganizar Fragmentos] B2 --> B3{Encriptado?} B3 -->|Sim| B4[Descriptografar com AES-256-GCM] B3 -->|Não| B5[Binário Bruto] B4 --> B6[Deserialize com MessagePack] B5 --> B6 B6 --> B7[Armazenamento IndexedDB] B7 --> B8[Reconstruir Índice de Busca] end A7 -.->|Conexão P2P| B1 style A4 fill:#FF5722,color:#fff style B4 fill:#FF5722,color:#fff style A7 fill:#4CAF50,color:#fff style B1 fill:#4CAF50,color:#fff ```