{"_id":"@agenus-io/web-push","_rev":"2-6e9678a2c2e13e0d99ee728428fc2798","name":"@agenus-io/web-push","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@agenus-io/web-push","version":"0.0.1","keywords":["react","hook","push","notifications","service-worker","web-push","pwa"],"author":"","license":"ISC","_id":"@agenus-io/web-push@0.0.1","maintainers":[{"name":"agenus.io","email":"admin@agenus.com.br"}],"dist":{"shasum":"0ea1a421f96d031cb502bcf37116fea2b243ce96","tarball":"https://registry.npmjs.org/@agenus-io/web-push/-/web-push-0.0.1.tgz","fileCount":13,"integrity":"sha512-ZBFmLt8h2n75znlQvvbUSyMbF5+VQNp4/pDT6g2VKrnwBxfbv22tHHHwRkOE6uo4dhIjFSS3edIr52HL0yY7cA==","signatures":[{"sig":"MEQCIEy/GyqGQ+8WjyCNHLqM0uLiusXoDvHqLmgbuL4OVOXxAiBISSkpxxC9UyZ/aM6V7KTpvXigappAUa9ENie6dvURlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38806},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"private":false,"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","format":"prettier --write \"src/**/*.{ts,tsx}\"","prepare":"pnpm build","publish":"node scripts/publish.js","version":"pnpm changeset:version","lint:fix":"eslint src --ext .ts,.tsx --fix","changeset":"changeset","publish:ci":"pnpm build && changeset publish --access public","postinstall":"node scripts/copy-sw.js","format:check":"prettier --check \"src/**/*.{ts,tsx}\"","changeset:publish":"changeset publish --access public","changeset:version":"changeset version"},"_npmUser":{"name":"agenus.io","email":"admin@agenus.com.br"},"_npmVersion":"10.9.2","description":"React hook para gerenciar notificações push com service worker","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"packageManager":"pnpm@10.7.1","devDependencies":{"tsup":"^8.5.0","react":"^19.2.0","eslint":"^9.39.1","prettier":"^3.6.2","react-dom":"^19.2.0","typescript":"^5.9.3","@types/node":"^24.10.0","@types/react":"^19.2.2","@changesets/cli":"^2.29.7","@types/react-dom":"^19.2.2","eslint-plugin-react":"^7.37.5","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","@typescript-eslint/parser":"^8.46.3","eslint-plugin-react-hooks":"^7.0.1","@typescript-eslint/eslint-plugin":"^8.46.3"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/web-push_0.0.1_1762491710523_0.5684968492036995","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-07T05:01:50.459Z","modified":"2025-12-11T22:01:34.273Z","0.0.1":"2025-11-07T05:01:50.715Z"},"license":"ISC","keywords":["react","hook","push","notifications","service-worker","web-push","pwa"],"description":"React hook para gerenciar notificações push com service worker","maintainers":[{"email":"davidpimanta@gmail.com","name":"davidpimenta"},{"email":"admin@agenus.com.br","name":"agenus.io"}],"readme":"# @agenus-io/web-push\r\n\r\nReact hook para gerenciar notificações push com service worker.\r\n\r\n## Instalação\r\n\r\n```bash\r\nnpm install @agenus-io/web-push\r\n# ou\r\npnpm add @agenus-io/web-push\r\n# ou\r\nyarn add @agenus-io/web-push\r\n```\r\n\r\n## Requisitos\r\n\r\n- React >= 16.8.0\r\n- Navegador com suporte a Service Workers e Push API\r\n\r\n## Uso Básico\r\n\r\n```tsx\r\nimport { usePush } from \"@agenus-io/web-push\";\r\n\r\nfunction App() {\r\n  const { isSupported, isChecking, error, subscription, requestPermission } =\r\n    usePush({\r\n      apiKey: \"sua-chave-publica-vapid\",\r\n    });\r\n\r\n  if (isChecking) {\r\n    return <div>Verificando suporte...</div>;\r\n  }\r\n\r\n  if (!isSupported) {\r\n    return <div>Seu navegador não suporta notificações push</div>;\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      {error && <p>Erro: {error}</p>}\r\n      {!subscription && (\r\n        <button onClick={requestPermission}>\r\n          Ativar Notificações Push\r\n        </button>\r\n      )}\r\n      {subscription && <p>Notificações ativadas!</p>}\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n## Service Worker\r\n\r\nO pacote automaticamente copia o service worker (`sw.js`) para a pasta `public/` do seu projeto durante a instalação. Se você precisar usar um caminho customizado:\r\n\r\n```tsx\r\nconst { subscription } = usePush({\r\n  apiKey: \"sua-chave-publica-vapid\",\r\n  serviceWorkerPath: \"/custom-path/sw.js\", // Caminho customizado\r\n});\r\n```\r\n\r\n## API\r\n\r\n### `usePush(options)`\r\n\r\nHook principal para gerenciar notificações push.\r\n\r\n#### Parâmetros\r\n\r\n- `apiKey` (string, obrigatório): Chave pública VAPID para autenticação\r\n- `serviceWorkerPath` (string, opcional): Caminho customizado para o service worker. Padrão: `/sw.js`\r\n\r\n#### Retorno\r\n\r\n- `isSupported` (boolean): Indica se o navegador suporta notificações push\r\n- `isChecking` (boolean): Indica se está verificando o suporte\r\n- `error` (string | null): Mensagem de erro, se houver\r\n- `subscription` (PushSubscription | null): Objeto de assinatura push\r\n- `requestPermission()`: Função para solicitar permissão de notificação\r\n- `subscribeToPush()`: Função para inscrever-se nas notificações push\r\n\r\n## Exemplo Completo\r\n\r\n```tsx\r\nimport { usePush } from \"@agenus-io/web-push\";\r\nimport { useEffect } from \"react\";\r\n\r\nfunction NotificationButton() {\r\n  const {\r\n    isSupported,\r\n    isChecking,\r\n    error,\r\n    subscription,\r\n    requestPermission,\r\n    subscribeToPush,\r\n  } = usePush({\r\n    apiKey: process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY || \"\",\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (subscription) {\r\n      // Enviar subscription para seu backend\r\n      fetch(\"/api/subscribe\", {\r\n        method: \"POST\",\r\n        headers: { \"Content-Type\": \"application/json\" },\r\n        body: JSON.stringify(subscription),\r\n      });\r\n    }\r\n  }, [subscription]);\r\n\r\n  if (isChecking) return <div>Carregando...</div>;\r\n  if (!isSupported) return <div>Não suportado</div>;\r\n\r\n  return (\r\n    <div>\r\n      {error && <p className=\"error\">{error}</p>}\r\n      {!subscription ? (\r\n        <button onClick={requestPermission}>Ativar Notificações</button>\r\n      ) : (\r\n        <p>✓ Notificações ativadas</p>\r\n      )}\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n## Enviando Notificações\r\n\r\nPara enviar notificações push, você precisa de um servidor backend que use a chave privada VAPID. O service worker incluído no pacote suporta o seguinte formato de payload:\r\n\r\n```json\r\n{\r\n  \"title\": \"Título da Notificação\",\r\n  \"body\": \"Corpo da mensagem\",\r\n  \"icon\": \"/icon.png\",\r\n  \"badge\": \"/badge.png\",\r\n  \"image\": \"/image.png\",\r\n  \"url\": \"/redirect-url\",\r\n  \"vibrate\": [200, 100, 200],\r\n  \"actions\": [\r\n    {\r\n      \"action\": \"action1\",\r\n      \"title\": \"Ação 1\",\r\n      \"icon\": \"/action1-icon.png\",\r\n      \"url\": \"/action1-url\"\r\n    }\r\n  ],\r\n  \"data\": {\r\n    \"custom\": \"data\"\r\n  }\r\n}\r\n```\r\n\r\n## Desenvolvimento\r\n\r\n```bash\r\n# Instalar dependências\r\npnpm install\r\n\r\n# Build\r\npnpm build\r\n\r\n# Desenvolvimento com watch\r\npnpm dev\r\n\r\n# Lint\r\npnpm lint\r\n\r\n# Format\r\npnpm format\r\n```\r\n\r\n## Publicação\r\n\r\nEste projeto usa [Changesets](https://github.com/changesets/changesets) para gerenciar versões e changelogs.\r\n\r\n### Processo de Publicação\r\n\r\n1. **Criar um changeset** (após fazer suas mudanças):\r\n   ```bash\r\n   pnpm changeset\r\n   ```\r\n   Isso criará um arquivo em `.changeset/` descrevendo suas mudanças. Escolha o tipo de versão (patch, minor, major).\r\n\r\n2. **Commit e push**:\r\n   ```bash\r\n   git add .\r\n   git commit -m \"feat: sua mudança\"\r\n   git push\r\n   ```\r\n\r\n3. **Publicar**:\r\n   ```bash\r\n   pnpm publish\r\n   ```\r\n   Ou use o script helper:\r\n   ```bash\r\n   node scripts/publish.js\r\n   ```\r\n\r\n   O script irá:\r\n   - Verificar se você está logado no npm\r\n   - Fazer build do projeto\r\n   - Aplicar as versões do changeset\r\n   - Publicar no npm\r\n\r\n### Scripts Disponíveis\r\n\r\n- `pnpm changeset` - Criar um novo changeset\r\n- `pnpm changeset:version` - Aplicar versões dos changesets\r\n- `pnpm changeset:publish` - Publicar no npm\r\n- `pnpm publish` - Script completo de publicação (recomendado)\r\n\r\n### Primeira Publicação\r\n\r\nAntes da primeira publicação, certifique-se de:\r\n\r\n1. Estar logado no npm com acesso à organização `@agenus-io`:\r\n   ```bash\r\n   npm login --scope=@agenus-io\r\n   ```\r\n\r\n2. Ter configurado o registry correto no `.npmrc` (se necessário)\r\n\r\n**Nota**: O pacote é publicado como **público** automaticamente (não requer plano pago). O script já inclui `--access public`.\r\n\r\n## Licença\r\n\r\nISC\r\n\r\n","readmeFilename":"README.md"}