SergioRicJr48 downloadsSync notes and attachments with Magalu Cloud S3 using on-device encryption and revision history.
Sincronize notas e anexos do Obsidian com o Object Storage da Magalu Cloud, usando criptografia no aparelho e histórico de revisões. Este é um plugin independente da comunidade, sem afiliação com a Magalu Cloud ou o Obsidian.
Disponível no catálogo da comunidade. No Obsidian, use Configurações → Plugins da comunidade → Explorar → Sync with Magalu Cloud → Instalar → Habilitar. Confira o autor SergioRicJr.
Versão desta publicação: 0.3.0. Obsidian mínimo: 1.13.0.
Novo na 0.3.0: resolvedor visual integrado, comparação por trechos, editor do resultado e escolha explícita para anexos e exclusões. Atualize todos os aparelhos antes de resolver. A primeira resolução ou limpeza migra o estado local para 3; não instale 0.2.x ou anterior sobre esse estado. A chave e o formato criptográfico remoto continuam os mesmos.
A partir da 0.2.3, o plugin passa a se chamar Sync with Magalu Cloud. Quem já usa o plugin pode atualizar normalmente: as configurações, chaves e notas são preservadas, sem reinstalação nem repetição do assistente. Mantenha a pasta de instalação existente. O programa usa APIs portáteis para Windows e Android. A validação física específica da versão 0.3.0 no Android ainda não está registrada; teste primeiro com um cofre fictício.
O projeto passou por mais de 200 testes automatizados, incluindo uma regressão de Base64 e AES-GCM com anexo de 20 MiB. A versão 0.2.1 teve sincronização confirmada em Windows e Android, incluindo recebimento no computador de uma nota fictícia criada no celular. Consulte as notas de cada release para os resultados da versão exata. A 0.2.2 foi publicada no catálogo após a revisão automática, sem erros bloqueantes. Essa revisão e os testes não equivalem a auditoria independente ou certificação de segurança.
O plugin roda dentro do Obsidian e faz requisições de saída diretamente ao Object Storage da Magalu. Não há backend próprio, servidor intermediário, servidor local ouvindo portas ou serviço independente em segundo plano.
Obsidian + plugin no computador
↕ HTTPS / API S3
Bucket privado na Magalu: revisões criptografadas
↕ HTTPS / API S3
Obsidian + plugin no Android
Os aparelhos não precisam estar ligados ao mesmo tempo. Um envia as revisões e o outro as consulta depois. GitHub e catálogo distribuem o programa; não participam do transporte das notas.
O transporte usa a API HTTP nativa do Obsidian e assina as requisições com AWS Signature Version 4. Lista e lê objetos, confere tamanhos e envia novas revisões. A conta precisa de permissões de listar, ler e gravar no destino. O plugin não precisa excluir objetos remotamente. O autoteste usa um subprefixo separado dentro do prefixo configurado, que também precisa dessas permissões. São aceitos somente os endpoints regionais oficiais oferecidos nas configurações, com HTTPS.
| Valor | Função |
|---|---|
| Access Key ID | Identifica a credencial de acesso ao S3. |
| Secret Access Key | Assina as requisições S3; não é enviada como segredo em texto nos cabeçalhos. |
| Chave de recuperação | Criptografa e descriptografa as revisões no aparelho; não é enviada pela sincronização à Magalu. |
A chave de recuperação é uma chave AES aleatória de 32 bytes representada por 43 caracteres. Não é a senha da conta Magalu. Todos os aparelhos do mesmo cofre remoto precisam da chave original. Sem ela, o plugin não recupera o conteúdo criptografado remoto. Não há recuperação de senha, rotação ou migração automática da chave no mesmo destino. Guarde uma cópia independente em um gerenciador de senhas; não a envie ao suporte.
As notas continuam sendo arquivos locais comuns. Escreva nas pastas normais do cofre; não existe uma pasta especial obrigatória para enviar notas. Arquivos e pastas com ponto inicial, a configuração do Obsidian e a recuperação local ficam fora da sincronização.
Na versão 0.2.2, uma rodada comprovadamente inalterada pode usar os IDs já autenticados em cache, sem baixar novamente os conteúdos nem regravar notas. Ainda há leitura local, listagem remota e persistência do horário da rodada. Isso pressupõe IDs de revisão imutáveis e não é uma auditoria contínua de todo o ciphertext armazenado. Novas revisões e conteúdos baixados continuam exigindo validação e autenticação antes da aplicação.
A fila e parte do estado local podem conter conteúdo em Base64, que é uma representação legível, não criptografia. Não copie o estado entre aparelhos nem o publique. A credencial S3 autoriza o armazenamento; a chave de recuperação abre o conteúdo criptografado. Guarde essa chave fora do cofre.
Um aparelho novo precisa inspecionar revisões desconhecidas para reconstruir o histórico; isso pode incluir versões antigas de arquivos. O histórico cresce, não há expurgo automático e a transferência inicial pode ser maior que o tamanho das notas atuais. Conteúdos temporários de descoberta podem ser descartados e relidos para manter o orçamento de trabalho.
O plugin não cobra pelo uso. A Magalu pode cobrar armazenamento, requisições e transferência conforme sua contratação, incluindo histórico e objetos de teste. A compatibilidade é limitada aos endpoints regionais oficiais oferecidos nas configurações. Não é um cliente para qualquer serviço que aceite S3. Consulte os endpoints e a cobrança na documentação do provedor.
Baixe o pacote sync-with-magalu-cloud-0.3.0.zip da
release 0.3.0
e confira seu arquivo .zip.sha256. Ele contém a pasta
magalu-vault-sync com três arquivos de programa, LICENSE e NOTICE.
Também é possível baixar main.js, manifest.json e styles.css
individualmente e conferir SHA256SUMS.txt. O ZIP automático “Source
code” do GitHub é diferente do pacote de instalação.
Com o Obsidian fechado, extraia a pasta do plugin para
<SEU_COFRE>/.obsidian/plugins/. Os três arquivos de programa devem ficar
diretamente em:
<SEU_COFRE>/.obsidian/plugins/magalu-vault-sync/
Abra o Obsidian, permita plugins da comunidade e habilite Sync with Magalu Cloud. Abra a página de configurações do plugin.
É possível usar um cofre que já tem notas, sem mover os arquivos para uma pasta especial. Faça um backup independente antes da primeira sincronização. O nome das opções do assistente se refere ao destino remoto, não à criação de uma nova pasta local.
| Situação | O que escolher |
|---|---|
| Estas notas ainda não usam o plugin e terão uma sincronização própria | Começar novo cofre, com prefixo remoto exclusivo e chave própria. |
| Quero acessar as mesmas notas que outro aparelho já sincroniza | Conectar ao cofre existente, com a mesma região, bucket, prefixo e chave original. |
| Este aparelho já está configurado e sincronizando | Continue usando Sincronizar agora; uma atualização não exige refazer o assistente. |
Para receber um cofre remoto em um aparelho novo, começar com uma pasta local vazia simplifica a conferência. Se os dois lados já tiverem notas, arquivos diferentes no mesmo caminho podem gerar conflitos. Compare e resolva essas cópias antes de continuar o trabalho. Cofres independentes podem compartilhar um bucket, mas precisam de prefixos diferentes.
Prefira uma credencial por aparelho para permitir revogação independente. Use as menores permissões disponíveis: acesso somente ao bucket pretendido quando a sua conta oferecer esse isolamento. Uma chave pessoal com nome exclusivo pode continuar acessando outros buckets do titular. Criptografar as notas não reduz os privilégios da credencial. Este protocolo grava exclusões como revisões novas e não precisa apagar objetos remotos.
O versionamento do bucket é uma proteção adicional, com custos próprios; não é o mesmo mecanismo que o histórico do plugin. Veja a documentação de versionamento.
Não copie data.json, SecretStorage ou a pasta completa de configurações de
outro aparelho. Cada instalação mantém sua própria identificação e estado.
Se o aparelho novo já tiver notas, faça backup antes: conteúdos diferentes
no mesmo caminho podem virar ramos de conflito.
Não conte com sincronização enquanto o aplicativo estiver fechado, suspenso ou limitado pelo Android. Ao trocar de aparelho, sincronize antes de editar e novamente ao terminar. A execução em segundo plano não é garantida nem oferecida como serviço pelo plugin.
Na instalação manual no Android, abra o cofre uma vez, feche o aplicativo e
extraia a pasta do ZIP para <SEU_COFRE>/.obsidian/plugins/. Habilite arquivos
ocultos no gerenciador se necessário. main.js, manifest.json e styles.css
devem ficar diretamente em plugins/magalu-vault-sync/, sem uma pasta extra
entre eles. Não copie o estado nem os segredos de outro aparelho.
Teste de sincronização com uma
frase de exemplo e um anexo pequeno sem informações pessoais.No computador, Ctrl+P → Sync with Magalu Cloud: Sincronizar agora oferece o mesmo comando do botão nas configurações e do ícone de nuvem. Aguarde a conclusão antes de fechar o aplicativo ou mudar de aparelho. Não edite a mesma nota nos dois aparelhos sem sincronizar entre as edições.
Cada alteração detectada numa rodada gera uma revisão com identificador próprio e referências às versões anteriores. Leituras e listagens do provedor podem atrasar; uma listagem vazia não é interpretada como exclusão. Revisões concorrentes são preservadas. O relógio do aparelho não escolhe qual texto descartar.
Quando surgir um conflito, use Resolver conflitos na paleta, nas configurações ou no resultado da sincronização. Abra Comparar e resolver. Compare uma versão por vez com o resultado proposto: mantenha trechos, aplique a outra versão, mantenha ambos ou edite o resultado. Depois use Revisar e confirmar resolução. A ação considera todas as versões apresentadas, inclusive quando há três ou mais.
A comparação por trechos aceita Markdown e texto UTF-8 de até 512 KiB. Anexos, arquivos estruturados e textos maiores usam Usar esta versão inteira. Escolher exclusão requer confirmação específica. Datas e tamanhos identificam versões; não escolhem o vencedor automaticamente.
Se a nota ou as revisões mudarem, o plugin recusa a confirmação e mantém o rascunho na tela. Use Atualizar versões e manter rascunho e revise. Fechar a tela descarta o rascunho não confirmado. Uma resolução confirmada fica na fila persistente antes da alteração local. Após falha de rede, sincronize para retomar. Uma remoção interrompida sem confirmação exige conferir a recuperação e restaurar o arquivo antes de tentar novamente.
Confira o resultado nos aparelhos antes de usar Arquivar cópias intactas. Essa limpeza opcional preserva cópias modificadas ou com outras versões, guarda o conteúdo removido na recuperação local e sincroniza as exclusões. Editar uma cópia a transforma em outra nota; isso sozinho não resolve o original. Editar o original preserva os outros ramos até a resolução explícita. O comando antigo abre a nova tela, preservando atalhos existentes.
Antes de substituir ou remover um arquivo local, o plugin procura preservar
uma cópia em .magalu-sync-recovery/, dentro do cofre. Faça backup antes de
restaurar. Para recuperar uma cópia local:
.magalu-sync-recovery/ dentro da pasta do cofre. As cópias são organizadas
por data, identificador e caminho original.Essa pasta fica somente no aparelho que produziu a cópia; não substitui um backup independente. Não apague objetos remotos manualmente para liberar espaço: revisões posteriores podem depender deles.
Nomes que diferem apenas por maiúsculas/minúsculas ou normalização Unicode podem ser recusados para evitar colisões entre Windows e Android. Essa restrição considera o histórico: renomear por um nome intermediário não remove um nome antigo do histórico.
| Sintoma | O que conferir |
|---|---|
| O plugin não aparece ou não carrega | Versão mínima do Obsidian, plugins da comunidade habilitados e cofre correto. Na instalação manual, confira a pasta sem níveis extras. |
| Falha de rede ou acesso negado | Internet, região, bucket, prefixo e o par correto de credenciais S3; confira as permissões de listar, ler e gravar, incluindo o subprefixo de teste. Não torne o bucket público para tentar corrigir. |
| Erro ao abrir conteúdo criptografado | Importe a chave original do mesmo destino. Não gere outra chave nem apague o estado como tentativa de reparo. |
| Uma alteração ainda não chegou | Aguarde a propagação, sincronize o aparelho que editou e depois o que deve receber. Confira pendências e se o Obsidian está ativo. |
| Nada enviado ou recebido | Pode ser normal se os aparelhos já estiverem atualizados. Confira o texto de uma nota de teste nos dois lados. |
| O automático não executa | Ative a opção, conclua uma primeira sincronização manual e mantenha o aplicativo aberto. |
| Arquivo ignorado ou limite atingido | Leia o aviso e os limites abaixo. Preserve os dados; não apague revisões do bucket nem data.json para liberar espaço. |
Cópia com conflict no nome |
Abra Resolver conflitos, compare e confirme o resultado. Depois confira a limpeza opcional das cópias intactas. |
Para pedir ajuda, informe versões, plataforma, aviso curto sem segredos e passos com dados fictícios. Não publique notas reais, configurações ou logs completos. Suspeitas de vulnerabilidade seguem SECURITY.md.
Os limites são proteções de recursos, não metas de capacidade testada para qualquer cofre. Quando houver recusa ou aviso, preserve os dados e leia a mensagem; não apague estado ou revisões para tentar contornar a proteção.
| Recurso | Limite |
|---|---|
| Arquivo individual | 20 MiB |
| Arquivos locais considerados | 10.000 |
| Revisões remotas conhecidas/listadas | 10.000 |
| Relações entre revisões | 50.000 |
| Revisões na fila local de envio | 1.000 |
| Conjunto de trabalho de conteúdo não criptografado por sincronização | 64 MiB |
| Revisão serializada | 28 MiB |
| Envelope remoto criptografado | 40 MiB |
| Página de listagem remota | 4 MiB |
Revisões contam alterações, não somente notas; o histórico pode atingir o limite antes do número de arquivos. Esta versão não expurga o histórico. Verificações de tamanho de respostas ocorrem depois do recebimento pela API HTTP nativa, que pode armazenar o corpo antes da validação do plugin; esses limites não garantem um teto rígido de memória ou transferência de rede.
Conteúdo, caminhos e metadados de cada revisão são criptografados no aparelho com AES-256-GCM antes do envio. A conexão é HTTPS e as requisições S3 são assinadas. A chave de recuperação não é enviada ao provedor pela sincronização. O provedor ainda pode observar número, tamanhos aproximados e horários dos objetos, além dos dados de conta e autenticação necessários ao serviço.
O plugin utiliza a rede para se comunicar com o Object Storage configurado e realizar seus testes de conexão. Não inclui telemetria, servidor intermediário ou atualizador automático. O histórico e os objetos de teste ocupam armazenamento e geram requisições na sua conta.
Os valores S3 e a chave de recuperação são guardados no SecretStorage do Obsidian; a configuração do plugin contém referências. Esse armazenamento não isola segredos de outros plugins nem garante um cofre criptográfico do sistema operacional. Seus arquivos, a recuperação e parte do estado local continuam legíveis no aparelho. Proteja os dispositivos e seus backups.
Participantes com a chave de recuperação e acesso de escrita podem criar revisões válidas. O plugin não fornece permissões por pessoa, defesa contra um aparelho comprometido ou detecção garantida de remoção de todo o histórico em uma instalação nova. Para binários há verificações e cópias de recuperação, mas a API portátil não oferece substituição atômica completa contra gravações simultâneas de outros programas. Evite editar o mesmo anexo fora do Obsidian durante a sincronização.
Nunca envie notas, credenciais, chave de recuperação, estado, logs completos ou screenshots do cofre para uma issue. Use dados fictícios e consulte SECURITY.md para relatar problemas. Sincronização e histórico não substituem um backup independente.
Faça backup e espere a sincronização terminar. Em Configurações → Plugins da comunidade, use Verificar atualizações e Atualizar ao lado do plugin. Confira a versão instalada, reative-o se necessário e execute uma sincronização manual. A atualização mantém o mesmo destino e chave; não exige desinstalar o plugin ou repetir o assistente.
Na alternativa manual, feche o Obsidian e substitua somente main.js,
manifest.json e styles.css pela release escolhida. Preserve data.json,
notas e armazenamento de segredos. Reabra e confira a primeira rodada.
Não instale versões diretamente de uma branch em movimento.
A versão 0.2.0 migra automaticamente o cache local antigo para a versão 2 antes de iniciar operações de sincronização. O formato de revisões e envelopes criptografados na nuvem continua na versão 1. Não faça downgrade para 0.1.x depois de usar 0.2.0: as versões antigas não aceitam o cache local novo. Preserve um backup anterior à atualização e não apague o estado para tentar forçar o downgrade.
Na 0.3.0, a primeira resolução confirmada ou limpeza de cópias migra o estado
local para 3, antes de alterar arquivos. Versões 0.2.x e anteriores recusam
esse estado: não faça downgrade nem apague data.json. Atualize todos os
aparelhos e mantenha backups antes de resolver. O protocolo remoto permanece
na versão 1, com os mesmos objetos criptografados e chave de recuperação.
SHA256SUMS.txt cobre os arquivos do conjunto que o acompanha, exceto ele
próprio; RELEASE-MANIFEST.json registra seus tamanhos e hashes. Para conferir
uma release, use os arquivos e hashes da mesma tag/release. A documentação
da branch principal pode receber correções sem alterar os arquivos já
lançados: os manifests da branch descrevem esse snapshot, e os anexos da
release permanecem fixos. Um checksum ajuda a identificar o arquivo baixado,
mas não é uma auditoria do programa nem prova de aprovação por terceiros.
Os arquivos JavaScript e a documentação distribuídos neste repositório público estão sob MIT, copyright SergioRicJr; veja LICENSE. O TypeScript de desenvolvimento permanece em um repositório privado. Isso não limita os direitos MIT de usar, modificar e redistribuir os arquivos publicados. O JavaScript distribuído pode ser inspecionado normalmente.
O catálogo Obsidian oferece verificação com acesso ao fonte privado por sua
GitHub App. A publicação e a revisão automática da 0.2.2 foram concluídas;
isso não confirma um selo adicional de reprodução do fonte privado nem
auditoria independente. Consulte a
entrada pública
e a versão disponível no aplicativo. A biblioteca incorporada aws4fetch mantém
sua licença MIT e atribuição originais em NOTICE.