Recursos & APIs

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',
})