Storage, Eventos & Contexto
Conheça as APIs nativas disponíveis no AddonContext (Storage criptografado, Eventos em tempo real, Timer e Notificações).
Storage, Eventos & APIs do Contexto
Quando um Addon é ativado através do método onActivate(context: AddonContext), ele recebe acesso a um conjunto poderoso de ferramentas para interagir com o Core do Pandhora.
🔒 1. Storage Criptografado (context.storage)
O context.storage oferece persistência segura baseada em chave-valor. Todos os dados são criptografados no chaveiro nativo do sistema operacional (Windows Credential Manager / macOS Keychain) e isolados estritamente pelo workspaceId ativo.
// Salvar dados
await context.storage.set('apiUrl', 'https://api.empresa.com')
await context.storage.set('userToken', 'meu-token-secreto')
// Ler dados
const token = await context.storage.get('userToken')
// Remover dados
await context.storage.delete('userToken')
⚡ 2. Eventos em Tempo Real (context.events)
Os addons podem escutar e reagir a eventos do ciclo de trabalho e do sistema operacional:
// 1. Quando o usuário inicia o cronômetro para uma tarefa
context.events.onTimerStart((data) => {
console.log('Timer iniciado para a tarefa:', data.taskId)
})
// 2. Quando o usuário pausa ou finaliza o cronômetro
context.events.onTimerStop((data) => {
console.log(`Timer finalizado. Duração: ${data.durationSeconds}s`)
})
// 3. Atualização de cada segundo do cronômetro (Tick)
context.events.onTimerTick?.((data) => {
console.log(`Tempo decorrido: ${data.elapsedSeconds}s`)
})
// 4. Detecção de inatividade do usuário no computador
context.events.onSystemIdle?.((idleTimeSeconds) => {
console.log(`Usuário ausente há ${idleTimeSeconds} segundos.`)
})
// 5. Mudança de Workspace ativo
context.events.onWorkspaceChanged?.((newWorkspaceId) => {
console.log('Workspace alternado para:', newWorkspaceId)
})
🔔 3. Notificações Nativas (context.notifications)
Permite disparar alertas e notificações nativas do sistema operacional:
await context.notifications.show({
title: 'Meta Diária Concluída!',
body: 'Você atingiu 8 horas de apontamentos registradas hoje.',
})
⏱️ 4. Controle do Timer Ativo (context.timer)
Permite ler o estado atual do cronômetro ou disparar ações de início e pausa programaticamente:
// Consultar status atual
const activeTimer = await context.timer.getActive()
if (activeTimer) {
console.log(
`Cronômetro rodando na tarefa ${activeTimer.taskId} há ${activeTimer.elapsedSeconds}s`,
)
}
// Iniciar cronômetro para uma tarefa
await context.timer.start({
taskId: 'task-123',
activityId: 'dev-activity',
})
// Parar cronômetro atual
await context.timer.stop()
📝 5. Criação Direta de Apontamentos (context.timeEntries)
Permite criar lançamentos de tempo diretamente no repositório local do Pandhora sem passar pela interface gráfica:
await context.timeEntries.create({
taskId: 'task-123',
activityId: 'activity-dev',
startDate: new Date(Date.now() - 3600 * 1000), // 1 hora atrás
endDate: new Date(),
timeSpent: 3600,
comments: 'Correção de bug crítico no módulo de pagamentos',
})