{"_id":"@agenus-io/backredirect","_rev":"2-586ed7425ce6763f3dc1966b2e377131","name":"@agenus-io/backredirect","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.2":{"name":"@agenus-io/backredirect","version":"0.0.2","_id":"@agenus-io/backredirect@0.0.2","maintainers":[{"name":"agenus.io","email":"admin@agenus.com.br"}],"dist":{"shasum":"0142cf6fb45316d92885e00411a4ff7ad5d66962","tarball":"https://registry.npmjs.org/@agenus-io/backredirect/-/backredirect-0.0.2.tgz","fileCount":11,"integrity":"sha512-RFx588MUX9dVLkf1QHeP0notbCvzXQTVj1+/Q4RSBwHSv/f3E5pLR7NIf+sc/CJvt08PlkrGuQt+xqujvsBBow==","signatures":[{"sig":"MEYCIQDeRhpZ67Jvtw2JcTnD+oyEcq7t5kuU6R7trpeKYc10jgIhAMZ0VGI5b97XuUHz6NZmygLvK+LpnXGsEWUnYZ79ViV9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88227},"main":"./dist/index.cjs.js","_from":"file:agenus-io-backredirect-0.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./global":{"default":"./dist/index.global.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts,.tsx","build":"tsup","format":"prettier --write src/**/*.{ts,tsx,js,jsx,json,css,md}","release":"pnpm build && changeset publish","version":"changeset version","lint:fix":"eslint src --ext .ts,.tsx --fix","changeset":"changeset","type-check":"tsc --noEmit"},"_npmUser":{"name":"agenus.io","email":"admin@agenus.com.br"},"_resolved":"C:\\Users\\KABUM\\AppData\\Local\\Temp\\1c2ce0983c326e07a8d29c5860d50450\\agenus-io-backredirect-0.0.2.tgz","_integrity":"sha512-RFx588MUX9dVLkf1QHeP0notbCvzXQTVj1+/Q4RSBwHSv/f3E5pLR7NIf+sc/CJvt08PlkrGuQt+xqujvsBBow==","_npmVersion":"10.9.2","description":"Sistema de redirecionamento de volta (Back Redirect) que intercepta a navegação do usuário e redireciona para uma URL específica quando ele tenta voltar na página.","directories":{},"_nodeVersion":"22.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.2","eslint":"^8.57.0","typescript":"5.5.4","@changesets/cli":"^2.29.7"},"_npmOperationalInternal":{"tmp":"tmp/backredirect_0.0.2_1763184484435_0.5072838173049039","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-15T05:28:04.330Z","modified":"2025-12-11T22:01:32.061Z","0.0.2":"2025-11-15T05:28:04.638Z"},"description":"Sistema de redirecionamento de volta (Back Redirect) que intercepta a navegação do usuário e redireciona para uma URL específica quando ele tenta voltar na página.","maintainers":[{"email":"davidpimanta@gmail.com","name":"davidpimenta"},{"email":"admin@agenus.com.br","name":"agenus.io"}],"readme":"# 🔙 BackRedirect\r\n\r\nSistema de redirecionamento de volta (Back Redirect) que intercepta a navegação do usuário e redireciona para uma URL específica quando ele tenta voltar na página.\r\n\r\n[![NPM Version](https://img.shields.io/npm/v/@agenus-io/backredirect)](https://www.npmjs.com/package/@agenus-io/backredirect)\r\n\r\n---\r\n\r\n## ✅ Funcionalidades\r\n\r\n- ✅ **Inicialização Imediata**: Ativa automaticamente ao carregar a página, sem esperar interação do usuário\r\n- ✅ **Entrada Falsa Automática**: Cria automaticamente uma entrada falsa no histórico para habilitar o botão voltar\r\n- ✅ Intercepta navegação de volta (botão voltar do navegador)\r\n- ✅ Redireciona automaticamente para URL configurada\r\n- ✅ Preserva parâmetros de busca (opcional)\r\n- ✅ Sistema de tracking e logs\r\n- ✅ Callbacks antes e depois do redirecionamento\r\n- ✅ Suporte a delay configurável\r\n- ✅ Modo debug para desenvolvimento\r\n- ✅ Bloqueio global anti-duplicação\r\n- ✅ Suporte a múltiplos formatos (CJS, ESM, IIFE)\r\n\r\n---\r\n\r\n## ✅ Instalação\r\n\r\n```bash\r\nnpm install @agenus-io/backredirect\r\n# ou\r\nyarn add @agenus-io/backredirect\r\n# ou\r\npnpm add @agenus-io/backredirect\r\n```\r\n\r\n---\r\n\r\n## ✅ Uso Básico (TypeScript / ESM)\r\n\r\n```typescript\r\nimport { init } from \"@agenus-io/backredirect\";\r\n\r\nconst tracker = init({\r\n  url: \"https://example.com\",\r\n  preserveSearchParams: true,\r\n  enabled: true,\r\n  debug: true,\r\n});\r\n```\r\n\r\n---\r\n\r\n## ✅ Uso via Script Tag (AutoInit)\r\n\r\nO script pode ser inicializado automaticamente usando atributos `data-*`:\r\n\r\n```html\r\n<script \r\n  src=\"https://cdn.jsdelivr.net/npm/@agenus-io/backredirect/dist/index.global.js\"\r\n  data-backredirect\r\n  data-url=\"https://example.com\"\r\n  data-preserve-search-params=\"true\"\r\n  data-enabled=\"true\"\r\n  data-debug=\"true\"\r\n  data-delay=\"0\"\r\n  data-force-redirect=\"false\">\r\n</script>\r\n```\r\n\r\n### Atributos do Script Tag\r\n\r\n| Atributo | Tipo | Padrão | Descrição |\r\n|---|---|---|---|\r\n| `data-backredirect` | boolean | - | **Obrigatório** - Ativa a inicialização automática |\r\n| `data-url` | string | `\"/\"` | URL de destino para redirecionamento |\r\n| `data-preserve-search-params` | boolean | `false` | Preserva parâmetros de busca da URL atual |\r\n| `data-enabled` | boolean | `true` | Ativa/desativa o tracker |\r\n| `data-delay` | number | `0` | Delay em milissegundos antes do redirecionamento |\r\n| `data-force-redirect` | boolean | `false` | Força redirecionamento imediato ao carregar |\r\n| `data-debug` | boolean | `false` | Habilita logs no console |\r\n\r\n---\r\n\r\n## ✅ Configuração (`InitProps`)\r\n\r\n| Propriedade | Tipo | Padrão | Descrição |\r\n|---|---|---|---|\r\n| `url` | string | - | **Obrigatório** - URL de destino para redirecionamento |\r\n| `preserveSearchParams` | boolean | `false` | Mantém os query params da URL atual |\r\n| `enabled` | boolean | `true` | Ativa/desativa o tracker |\r\n| `delay` | number | `0` | Delay em milissegundos antes do redirecionamento |\r\n| `forceRedirect` | boolean | `false` | Força redirecionamento imediato ao inicializar |\r\n| `onBeforeRedirect` | Function | `() => {}` | Callback executado antes do redirecionamento |\r\n| `onAfterRedirect` | Function | `() => {}` | Callback executado após o redirecionamento |\r\n| `debug` | boolean | `false` | Habilita logs detalhados no console |\r\n\r\n---\r\n\r\n## ✅ Comportamento Imediato\r\n\r\nO BackRedirect foi projetado para funcionar **imediatamente** ao carregar a página:\r\n\r\n1. **Entrada Falsa Automática**: Assim que o script carrega, uma entrada falsa é criada no histórico do navegador, habilitando o botão \"voltar\"\r\n2. **Interceptador Ativo**: O interceptador de navegação de volta é ativado imediatamente, sem esperar interação do usuário\r\n3. **Pronto para Uso**: O sistema está completamente funcional desde o carregamento da página\r\n\r\n### Como Funciona\r\n\r\n```\r\nPágina carrega\r\n    ↓\r\nScript inicializa\r\n    ↓\r\nCria entrada falsa no histórico (#fake-entry)\r\n    ↓\r\nAtiva interceptador de popstate\r\n    ↓\r\nUsuário clica em \"voltar\"\r\n    ↓\r\nPopstate detecta entrada falsa\r\n    ↓\r\nRedireciona para URL configurada\r\n```\r\n\r\n---\r\n\r\n## ✅ API Pública\r\n\r\n### Funções Principais\r\n\r\n| Função | Descrição |\r\n|---|---|\r\n| `init(config)` | Inicializa o tracker com as configurações fornecidas |\r\n| `BackRedirectInit` | Classe principal do tracker (retornada por `init()`) |\r\n\r\n### Funções Utilitárias (Exportadas)\r\n\r\n| Função | Descrição |\r\n|---|---|\r\n| `forceFakeHistoryEntry(debug?)` | Adiciona entrada falsa ao histórico manualmente |\r\n| `injectBackRedirect(ctx)` | Injeta o sistema de interceptação (chamado automaticamente) |\r\n| `interceptLinkClicks(ctx)` | Intercepta cliques em links internos |\r\n| `interceptBackNavigation(ctx)` | Intercepta navegação de volta (popstate) |\r\n| `buildTargetUrl(config)` | Constrói a URL final com parâmetros preservados |\r\n| `waitForFirstUserInteraction(callback)` | Aguarda primeira interação do usuário (não usado mais na inicialização) |\r\n| `log(options)` | Função de logging interna |\r\n\r\n---\r\n\r\n## ✅ Tipos TypeScript\r\n\r\n```typescript\r\ninterface RedirectData {\r\n  timestamp: number;\r\n  currentUrl: string;\r\n  targetUrl: string;\r\n  referrer: string;\r\n  sessionId: string;\r\n  userAgent: string;\r\n  screenResolution: string;\r\n  timeOnPage: number;\r\n  redirectType: \"back\" | \"forward\" | \"external\" | \"fallback\";\r\n  preservedParams?: string;\r\n  metadata?: Record<string, any>;\r\n}\r\n\r\ninterface InitProps {\r\n  url: string;\r\n  preserveSearchParams: boolean;\r\n  enabled: boolean;\r\n  delay?: number;\r\n  forceRedirect?: boolean;\r\n  onBeforeRedirect?: (data: RedirectData) => void;\r\n  onAfterRedirect?: (data: RedirectData) => void;\r\n  debug?: boolean;\r\n}\r\n\r\ninterface TrackerContext {\r\n  config: Required<InitProps>;\r\n  sessionId: string;\r\n  startTime: number;\r\n  redirectHistory: RedirectData[];\r\n  isTracking: boolean;\r\n  targetUrl: string;\r\n}\r\n```\r\n\r\n---\r\n\r\n## ✅ Fluxo Interno\r\n\r\n1. **Inicialização**: Script carrega e detecta atributos `data-*` ou chamada manual de `init()`\r\n2. **Criação de Entrada Falsa**: `forceFakeHistoryEntry()` cria entrada falsa no histórico imediatamente\r\n3. **Ativação do Interceptador**: `interceptBackNavigation()` é ativado imediatamente\r\n4. **Interceptação de Links**: `interceptLinkClicks()` monitora cliques em links internos\r\n5. **Detecção de Volta**: Quando usuário clica em \"voltar\", `popstate` é disparado\r\n6. **Redirecionamento**: Sistema redireciona para URL configurada\r\n7. **Callbacks**: Executa `onBeforeRedirect` e `onAfterRedirect` se configurados\r\n\r\n---\r\n\r\n## ✅ Exemplo Completo\r\n\r\n```typescript\r\nimport { init } from \"@agenus-io/backredirect\";\r\n\r\nconst tracker = init({\r\n  url: \"https://example.com\",\r\n  preserveSearchParams: true,\r\n  enabled: true,\r\n  delay: 0,\r\n  debug: true,\r\n  onBeforeRedirect: (data) => {\r\n    console.log(\"Redirecionando para:\", data.targetUrl);\r\n  },\r\n  onAfterRedirect: (data) => {\r\n    console.log(\"Redirecionamento concluído\");\r\n  },\r\n});\r\n\r\n// O tracker está ativo imediatamente\r\n// O botão \"voltar\" do navegador já está habilitado\r\n```\r\n\r\n---\r\n\r\n## ✅ Desenvolvimento Local\r\n\r\n```bash\r\n# Instalar dependências\r\npnpm install\r\n\r\n# Compilar o projeto\r\npnpm build\r\n\r\n# Modo desenvolvimento (watch)\r\npnpm dev\r\n\r\n# Verificar tipos\r\npnpm type-check\r\n\r\n# Lint\r\npnpm lint\r\n```\r\n\r\n---\r\n\r\n## ✅ Estrutura do Projeto\r\n\r\n```\r\nsrc/\r\n├── index.ts                      # Exportações principais e auto-init\r\n├── init.ts                       # Função de inicialização\r\n├── types.ts                      # Tipos TypeScript\r\n├── global.d.ts                   # Declarações globais\r\n└── utils/\r\n    ├── backRedirectTracker.ts    # Classe principal BackRedirectInit\r\n    ├── injectBackRedirect.ts     # Injeção do sistema\r\n    ├── forceFakeHistoryEntry.ts  # Criação de entrada falsa no histórico\r\n    ├── interceptBackNavigation.ts # Interceptação de navegação de volta\r\n    ├── interceptLinkClicks.ts  # Interceptação de cliques em links\r\n    ├── buildTargetUrl.ts         # Construção da URL de destino\r\n    ├── generateSessionId.ts     # Geração de ID de sessão\r\n    ├── waitForFirstUserInteraction.ts # Aguarda interação (utilitário)\r\n    └── log.ts                    # Sistema de logging\r\n```\r\n\r\n---\r\n\r\n## ✅ Formato de Build\r\n\r\nO projeto é compilado em três formatos:\r\n\r\n- **CJS** (`dist/index.cjs.js`): CommonJS para Node.js\r\n- **ESM** (`dist/index.esm.js`): ES Modules para bundlers modernos\r\n- **IIFE** (`dist/index.global.js`): Formato global para uso direto no browser\r\n\r\n---\r\n\r\n## ✅ Licença\r\n\r\nMIT\r\n","readmeFilename":"README.md"}