{"_id":"@digid-sdk/firma-autografa-react","_rev":"5-1f4e58a28ef9185629994e57edee160c","name":"@digid-sdk/firma-autografa-react","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@digid-sdk/firma-autografa-react","version":"1.0.0","keywords":["digid","firma","autografa","react","sdk"],"author":{"name":"CONSTANCIAS DIGITALES"},"license":"Apache-2.0","_id":"@digid-sdk/firma-autografa-react@1.0.0","maintainers":[{"name":"digid_sdk","email":"contacto@digid.com.mx"}],"homepage":"https://github.com/digid-mexico/digid-sdk-react#readme","bugs":{"url":"https://github.com/digid-mexico/digid-sdk-react/issues"},"dist":{"shasum":"c2368a4f4ec410d6f68478ec79f47c0b1bc9785d","tarball":"https://registry.npmjs.org/@digid-sdk/firma-autografa-react/-/firma-autografa-react-1.0.0.tgz","fileCount":23,"integrity":"sha512-1NLpO9gNMu9HNhFzkjjw7tyqZWZzxH+tDTiJOYEMBUsGUnlnEui2ffqqORz05rGcKBrqdXewdzpGMqgoiL9rmA==","signatures":[{"sig":"MEUCIQCd4N3cW7Q4YOCdkxZd4kZudvsvh+H2vWemD1d6C6aBxQIgLMELFzHhmwi723DBpMxM/JhbpoGYmRCIGzomufbLlfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digid-sdk%2ffirma-autografa-react@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10410889},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./engine":{"import":{"types":"./dist/engine.d.ts","default":"./dist/engine.js"},"require":{"types":"./dist/engine.d.cts","default":"./dist/engine.cjs"}},"./styles.css":"./dist/styles.css"},"gitHead":"edc5f9b0b3af79095d0771042d6251da7d06eadb","scripts":{"dev":"vite --config playground/vite.config.ts","test":"vitest run --passWithNoTests","build":"tsup","dev:movil":"DIGID_DEV_HTTPS=1 vite --config playground/vite.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"digid_sdk","email":"contacto@digid.com.mx"},"repository":{"url":"git+https://github.com/digid-mexico/digid-sdk-react.git","type":"git"},"_npmVersion":"10.9.8","description":"SDK React para el flujo de firma autógrafa de Digid","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.23.1","dependencies":{"pdfjs-dist":"^4.5.136","zxing-wasm":"^3.1.2","@mediapipe/tasks-vision":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.3.0","tsup":"^8.1.0","vite":"^5.3.0","jsdom":"^24.0.0","react":"^18.3.0","vitest":"^2.0.0","react-dom":"^18.3.0","typescript":"^5.5.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.0","@testing-library/react":"^16.0.0","@vitejs/plugin-basic-ssl":"^1.2.0","@testing-library/jest-dom":"^6.4.0","@testing-library/user-event":"^14.5.0"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/firma-autografa-react_1.0.0_1785451265967_0.8197928092539364","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@digid-sdk/firma-autografa-react","version":"1.0.1","keywords":["digid","firma","autografa","react","sdk"],"author":{"name":"CONSTANCIAS DIGITALES"},"license":"Apache-2.0","_id":"@digid-sdk/firma-autografa-react@1.0.1","maintainers":[{"name":"digid_sdk","email":"contacto@digid.com.mx"}],"homepage":"https://github.com/digid-mexico/digid-sdk-react#readme","bugs":{"url":"https://github.com/digid-mexico/digid-sdk-react/issues"},"dist":{"shasum":"9001fbf01bc41b92fa7f930277e93877ff3e7faf","tarball":"https://registry.npmjs.org/@digid-sdk/firma-autografa-react/-/firma-autografa-react-1.0.1.tgz","fileCount":23,"integrity":"sha512-JiggRQwO+u4YFa83Rd7OfsA2PIMTEuJ4kMds/jBDuZeBxogqOGgs199YXQ7RAMyjINMLQmxEsOXNi74dwzy5pw==","signatures":[{"sig":"MEUCID7CK+ylV/4cBTxQNY0gjdvUe7ercqp/NlDjvp2p5pGBAiEA16NCdGUgAjtp1LEXKpNAiC7bliXt0iYzFMFP+1DwxaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digid-sdk%2ffirma-autografa-react@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10415545},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./engine":{"import":{"types":"./dist/engine.d.ts","default":"./dist/engine.js"},"require":{"types":"./dist/engine.d.cts","default":"./dist/engine.cjs"}},"./styles.css":"./dist/styles.css"},"gitHead":"6aeb7b74bd070c6e0c52684bc378aacddf4a19f9","scripts":{"dev":"vite --config playground/vite.config.ts","test":"vitest run --passWithNoTests","build":"tsup","dev:movil":"DIGID_DEV_HTTPS=1 vite --config playground/vite.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"digid_sdk","email":"contacto@digid.com.mx"},"repository":{"url":"git+https://github.com/digid-mexico/digid-sdk-react.git","type":"git"},"_npmVersion":"10.9.8","description":"SDK React para el flujo de firma autógrafa de Digid","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.23.1","dependencies":{"pdfjs-dist":"^4.5.136","zxing-wasm":"^3.1.2","@mediapipe/tasks-vision":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.3.0","tsup":"^8.1.0","vite":"^5.3.0","jsdom":"^24.0.0","react":"^18.3.0","vitest":"^2.0.0","react-dom":"^18.3.0","typescript":"^5.5.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.0","@testing-library/react":"^16.0.0","@vitejs/plugin-basic-ssl":"^1.2.0","@testing-library/jest-dom":"^6.4.0","@testing-library/user-event":"^14.5.0"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/firma-autografa-react_1.0.1_1785456922197_0.7709239815042652","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@digid-sdk/firma-autografa-react","version":"1.0.2","keywords":["digid","firma","autografa","react","sdk"],"author":{"name":"CONSTANCIAS DIGITALES"},"license":"Apache-2.0","_id":"@digid-sdk/firma-autografa-react@1.0.2","maintainers":[{"name":"digid_sdk","email":"contacto@digid.com.mx"}],"homepage":"https://github.com/digid-mexico/digid-sdk-react#readme","bugs":{"url":"https://github.com/digid-mexico/digid-sdk-react/issues"},"dist":{"shasum":"43ca769bbf019a058f468961d34aba0ed6a3ca4b","tarball":"https://registry.npmjs.org/@digid-sdk/firma-autografa-react/-/firma-autografa-react-1.0.2.tgz","fileCount":23,"integrity":"sha512-3OIoD2gOb5Tl4fFp7zV8lxnU2UubgV6v7+24EpA0+pN8eZq1vAO097jT+6zG6l0sYTPYtG/8wOJf1eMYE4pv/A==","signatures":[{"sig":"MEUCIQCFIobyL4QO2NYfB5ojA3y6l5Q5Yc7bgubEo8kBWMXc4QIgCV24+h2H1T0IHLoUD+MVt9rDlzdRslbzYcYJ+/SJ+pA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digid-sdk%2ffirma-autografa-react@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10416747},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./engine":{"import":{"types":"./dist/engine.d.ts","default":"./dist/engine.js"},"require":{"types":"./dist/engine.d.cts","default":"./dist/engine.cjs"}},"./styles.css":"./dist/styles.css"},"gitHead":"0e7ce9d3072c2f65d76d71109ecc7f770e6233cd","scripts":{"dev":"vite --config playground/vite.config.ts","test":"vitest run --passWithNoTests","build":"tsup","dev:movil":"DIGID_DEV_HTTPS=1 vite --config playground/vite.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"digid_sdk","email":"contacto@digid.com.mx"},"repository":{"url":"git+https://github.com/digid-mexico/digid-sdk-react.git","type":"git"},"_npmVersion":"10.9.8","description":"SDK React para el flujo de firma autógrafa de Digid","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.23.1","dependencies":{"pdfjs-dist":"^4.5.136","zxing-wasm":"^3.1.2","@mediapipe/tasks-vision":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.3.0","tsup":"^8.1.0","vite":"^5.3.0","jsdom":"^24.0.0","react":"^18.3.0","vitest":"^2.0.0","react-dom":"^18.3.0","typescript":"^5.5.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.0","@testing-library/react":"^16.0.0","@vitejs/plugin-basic-ssl":"^1.2.0","@testing-library/jest-dom":"^6.4.0","@testing-library/user-event":"^14.5.0"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/firma-autografa-react_1.0.2_1785457669935_0.3176328462014917","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@digid-sdk/firma-autografa-react","version":"1.1.0","keywords":["digid","firma","autografa","react","sdk"],"author":{"name":"CONSTANCIAS DIGITALES"},"license":"Apache-2.0","_id":"@digid-sdk/firma-autografa-react@1.1.0","maintainers":[{"name":"digid_sdk","email":"contacto@digid.com.mx"}],"homepage":"https://github.com/digid-mexico/digid-sdk-react#readme","bugs":{"url":"https://github.com/digid-mexico/digid-sdk-react/issues"},"dist":{"shasum":"a8e50a927e48253dd052473bef65d9288bf07868","tarball":"https://registry.npmjs.org/@digid-sdk/firma-autografa-react/-/firma-autografa-react-1.1.0.tgz","fileCount":23,"integrity":"sha512-3tRjY24tHcF5zz2afAl96fdgtoYGGQEPwG6raQu1vMuO8vuaqKG2TS2qx92MU9EzYrZ4MgGjFLd267yFSYfGlQ==","signatures":[{"sig":"MEUCIHZssBXLxJzen9cWODmBI8ana6Jl3rwK+RvpxlpUmzw4AiEAo0vzxuFWygEjEbQgoDJk/ERhV3EZAbTYkjWKbE4VlCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digid-sdk%2ffirma-autografa-react@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10424928},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./engine":{"import":{"types":"./dist/engine.d.ts","default":"./dist/engine.js"},"require":{"types":"./dist/engine.d.cts","default":"./dist/engine.cjs"}},"./styles.css":"./dist/styles.css"},"gitHead":"0c1556704f601fb47b4a90a58e896237f5044792","scripts":{"dev":"vite --config playground/vite.config.ts","test":"vitest run --passWithNoTests","build":"tsup","dev:movil":"DIGID_DEV_HTTPS=1 vite --config playground/vite.config.ts","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"digid_sdk","email":"contacto@digid.com.mx"},"repository":{"url":"git+https://github.com/digid-mexico/digid-sdk-react.git","type":"git"},"_npmVersion":"10.9.8","description":"SDK React para el flujo de firma autógrafa de Digid","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.23.1","dependencies":{"pdfjs-dist":"^4.5.136","zxing-wasm":"^3.1.2","@mediapipe/tasks-vision":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.3.0","tsup":"^8.1.0","vite":"^5.3.0","jsdom":"^24.0.0","react":"^18.3.0","vitest":"^2.0.0","react-dom":"^18.3.0","typescript":"^5.5.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.0","@testing-library/react":"^16.0.0","@vitejs/plugin-basic-ssl":"^1.2.0","@testing-library/jest-dom":"^6.4.0","@testing-library/user-event":"^14.5.0"},"peerDependencies":{"react":">=18","react-dom":">=18"},"_npmOperationalInternal":{"tmp":"tmp/firma-autografa-react_1.1.0_1785468983413_0.017332687982302142","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@digid-sdk/firma-autografa-react","version":"1.3.0","description":"SDK React para el flujo de firma autógrafa de Digid","repository":{"type":"git","url":"git+https://github.com/digid-mexico/digid-sdk-react.git"},"homepage":"https://github.com/digid-mexico/digid-sdk-react#readme","bugs":{"url":"https://github.com/digid-mexico/digid-sdk-react/issues"},"author":{"name":"CONSTANCIAS DIGITALES"},"license":"Apache-2.0","publishConfig":{"access":"public"},"keywords":["digid","firma","autografa","react","sdk"],"engines":{"node":">=18"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./engine":{"import":{"types":"./dist/engine.d.ts","default":"./dist/engine.js"},"require":{"types":"./dist/engine.d.cts","default":"./dist/engine.cjs"}},"./styles.css":"./dist/styles.css"},"sideEffects":["*.css"],"scripts":{"prepublishOnly":"npm run build","build":"tsup","test":"vitest run --passWithNoTests","test:watch":"vitest","typecheck":"tsc --noEmit","dev":"vite --config playground/vite.config.ts","dev:movil":"DIGID_DEV_HTTPS=1 vite --config playground/vite.config.ts"},"peerDependencies":{"react":">=18","react-dom":">=18"},"dependencies":{"@mediapipe/tasks-vision":"^1.0.0","pdfjs-dist":"^4.5.136","zxing-wasm":"^3.1.2"},"devDependencies":{"@testing-library/jest-dom":"^6.4.0","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.5.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","@vitejs/plugin-basic-ssl":"^1.2.0","@vitejs/plugin-react":"^4.3.0","jsdom":"^24.0.0","msw":"^2.3.0","react":"^18.3.0","react-dom":"^18.3.0","tsup":"^8.1.0","typescript":"^5.5.0","vite":"^5.3.0","vitest":"^2.0.0"},"_id":"@digid-sdk/firma-autografa-react@1.3.0","gitHead":"baf927e258f44fd95b5b5160a201fe9253ac74f5","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-ymkW+Dn6cgb6TnQXuZQSd8YY0aIyUakwGEytcPYS5uibEAID0gVlLvXbQWhRbeW48/KUWyuxuf+GgdlHqNEFvw==","shasum":"a17735b6c38ee6e9e073abe8829263138296f5a8","tarball":"https://registry.npmjs.org/@digid-sdk/firma-autografa-react/-/firma-autografa-react-1.3.0.tgz","fileCount":24,"unpackedSize":11789344,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@digid-sdk%2ffirma-autografa-react@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC3jOh1xC8b4z9h4DPCJnvr+D8f52iDY/iG2j2OlQt9kQIgA2/X5kjp9/URSJ4/ktqJGob8ZjgTDZ0AlfwAkQGRvMs="}]},"_npmUser":{"name":"digid_sdk","email":"contacto@digid.com.mx"},"directories":{},"maintainers":[{"name":"digid_sdk","email":"contacto@digid.com.mx"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/firma-autografa-react_1.3.0_1785801062974_0.4601576788469204"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-30T22:41:05.763Z","modified":"2026-08-03T23:51:03.606Z","1.0.0":"2026-07-30T22:41:06.246Z","1.0.1":"2026-07-31T00:15:22.525Z","1.0.2":"2026-07-31T00:27:50.171Z","1.1.0":"2026-07-31T03:36:23.709Z","1.3.0":"2026-08-03T23:51:03.264Z"},"bugs":{"url":"https://github.com/digid-mexico/digid-sdk-react/issues"},"author":{"name":"CONSTANCIAS DIGITALES"},"license":"Apache-2.0","homepage":"https://github.com/digid-mexico/digid-sdk-react#readme","keywords":["digid","firma","autografa","react","sdk"],"repository":{"type":"git","url":"git+https://github.com/digid-mexico/digid-sdk-react.git"},"description":"SDK React para el flujo de firma autógrafa de Digid","maintainers":[{"name":"digid_sdk","email":"contacto@digid.com.mx"}],"readme":"# @digid-sdk/firma-autografa-react\n\nSDK React para integrar el flujo de firma autógrafa de Digid en aplicaciones de terceros.\n\n> 📘 **¿Vas a integrar el SDK en tu proyecto?** Lee la\n> [Guía de integración para clientes](docs/GUIA-INTEGRACION.md) — requisitos, ejemplos\n> (Vite/Next.js), referencia de props, theming, permisos, CSP y solución de problemas.\n\n- **Repositorio:** https://github.com/digid-mexico/digid-sdk-react\n- **Reportar un problema:** https://github.com/digid-mexico/digid-sdk-react/issues\n\n## Instalación\n\n```bash\nnpm install @digid-sdk/firma-autografa-react\n```\n\nReact >= 18 y React DOM >= 18 son peer dependencies: deben existir en tu proyecto,\nel SDK no los instala ni los empaqueta.\n\nAdemás de instalar el paquete hay **dos pasos más**, y conviene no saltárselos:\n\n**1. Importar la hoja de estilos.** Sin ella el SDK se renderiza sin ningún formato.\n\n```ts\nimport '@digid-sdk/firma-autografa-react/styles.css';\n```\n\n**2. Copiar `scan-assets/` a tu directorio de estáticos.**\n\n```bash\ncp -R node_modules/@digid-sdk/firma-autografa-react/scan-assets public/digid-scan\n```\n\nEs el escáner de INE (OpenCV en un Web Worker). Hay que copiarlo porque\n`new Worker()` exige **mismo origen** y el navegador no permite construirlo desde un\nCDN — a diferencia de los modelos de la selfie, que sí se sirven remotos.\n\nComo `node_modules` no se versiona, engancha la copia a tu `postinstall` para que se\nrepita en cada instalación:\n\n```json\n\"postinstall\": \"cp -R node_modules/@digid-sdk/firma-autografa-react/scan-assets public/digid-scan\"\n```\n\nSi lo omites **el flujo de firma sigue funcionando**: los pasos de INE se degradan a\ncaptura manual, sin detección en vivo ni corrección de perspectiva, y la imagen de la\nidentificación se guarda como haya quedado dentro del marco. La selfie no se ve\nafectada. El detalle y cómo verificar que quedó bien están en la\n[sección 1.3 de la guía](docs/GUIA-INTEGRACION.md#13-escaneo-de-documentos-ine).\n\n## Uso\n\n    import { FirmaAutografa } from '@digid-sdk/firma-autografa-react';\n    import '@digid-sdk/firma-autografa-react/styles.css';\n\n    <FirmaAutografa\n      token={tokenDelFirmante}\n      baseUrl=\"https://digidmexico.com.mx\"   // pruebas: https://pruebas.digidmexico.com.mx\n      onComplete={() => router.push('/gracias')}\n      onExit={(reason) => console.log(reason)}   // 'user_exit' | 'already_signed' | 'document_cancelled'\n      onError={(err) => console.error(err)}\n    />\n\nEl flujo cubre: revisión del documento y aceptación de términos → captura de INE frontal\n→ INE reverso → selfie (opcional) → creación de firma autógrafa → colocación de firmas\nsobre el PDF → confirmación. Las pantallas de INE frontal/reverso y selfie son\ncondicionales: se muestran u omiten según las preferencias del documento configuradas en\nDigid (`Data.preferences` de `start_autografa`); si el backend no envía esas preferencias\n(o las envía incompletas), el SDK muestra las tres pantallas por default. Los firmantes\nRepresentante Legal (con firma y contraseña ya registradas en Digid) firman directo desde\nla pantalla de revisión, sin las pantallas de identificación/selfie. El contenedor raíz\n(`.digid-root`) trae `max-width: 900px` y se centra solo dentro de tu página. En la vista de\nrevisión, el visor de PDF incluye controles de zoom (50%–300%) y navegación rápida entre\npáginas.\n\nEn los pasos de INE frente/reverso, el firmante ve primero una pantalla de instrucción y\nluego la cámara con un marco guía ID-1: el SDK detecta y **recorta automáticamente** el\ndocumento (contorno + corrección de perspectiva vía OpenCV, en el propio dispositivo, sin\nenviar nada a ningún servidor) en cuanto queda bien alineado dentro del marco y nítido, y\nmuestra un preview con el recorte antes de continuar. La captura manual con el botón o la\ncarga de una foto desde archivo/galería siempre están disponibles como alternativa en\nestos dos pasos. En el paso de selfie, la cámara frontal se abre de inmediato —**sin\npantalla de instrucción ni alternativa de archivo: la selfie es obligatoria por\ncámara**— y detecta el rostro (MediaPipe) para su propia captura automática dentro de un\nóvalo guía. Ver la\n[guía de integración](docs/GUIA-INTEGRACION.md#12-captura-automática) para el detalle de\n`detectionAssets` (selfie) y la [sección 1.3](docs/GUIA-INTEGRACION.md#13-escaneo-de-documentos-ine)\npara `scanAssets` (INE) y CSP.\n\nEl paquete incluye, bajo `scan-assets/`, el núcleo de escaneo/recorte de documentos con\nOpenCV que usan los pasos de INE (ver la\n[guía de integración](docs/GUIA-INTEGRACION.md#13-escaneo-de-documentos-ine)): a diferencia\nde los modelos de detección de la sección anterior, el Web Worker que lo usa exige mismo\norigen (no puede cargarse desde un CDN), así que **debes copiar esa carpeta a tu directorio\nde estáticos** para que el escáner funcione — si no la sirves, el SDK se degrada\nautomáticamente a captura manual con el marco guía (sin recorte ni detección automática),\nsin romper el flujo.\n\n### Props\n\n| Prop | Tipo | Descripción |\n|---|---|---|\n| token | string | Token del firmante (obligatorio) |\n| baseUrl | string | Origen del backend Digid (default: mismo origen) |\n| tokenTransport | 'both' \\| 'header' \\| 'query' | Cómo viaja el token (default: `'both'`). Cambia a `'header'` en cuanto el backend lea `X-Digid-Token` — ver sección 5.1 de la guía |\n| theme | DigidTheme | Colores opcionales; los estilos del cliente configurados en Digid tienen prioridad |\n| termsUrl | string | URL de términos y condiciones |\n| pdfWorkerUrl | string | URL del worker de `pdfjs-dist` para el visor de PDF (default: resolución automática, con reintento a `/digid-scan/pdf.worker.min.mjs` si falla la carga) — ver más abajo |\n| detectionAssets | DetectionAssets | URLs propias para autoalojar los modelos de detección de la captura automática (default: CDNs públicos); solo usados por la selfie — ver nota abajo sobre `zxingWasmUrl` |\n| scanAssets | ScanAssets | URL propia del worker de escaneo OpenCV (default: `/digid-scan/scan-worker.js`), usado por los pasos de INE frente/reverso para el recorte automático del documento; requiere servir `scan-assets/` en tu propio origen (ver sección 1.3 de la guía) |\n| onComplete | () => void | Proceso terminado con éxito |\n| onExit | (reason: string) => void | El firmante salió sin completar |\n| onError | (error: Error) => void | Error irrecuperable (token inválido, red) |\n\n> **Nota sobre `detectionAssets.zxingWasmUrl`.** Antes de esta versión, el reverso de la\n> INE usaba lectura de código QR/PDF417 (zxing-wasm) para la captura automática. Ahora ese\n> paso usa el escáner de documentos con OpenCV (marco guiado + recorte de perspectiva, ver\n> sección 1.3 de la guía), así que `zxingWasmUrl` queda sin uso — se mantiene en el tipo\n> `DetectionAssets` por compatibilidad, reservado por si un futuro paso vuelve a\n> necesitarlo.\n\n### Worker del visor PDF\n\n**No asumas que se resuelve solo.** El SDK intenta resolver el worker de pdf.js vía\n`import.meta.url`, pero Vite (y otros bundlers basados en esbuild) no reescriben esa URL\nal pre-empaquetar dependencias: la URL se construye sin error y aun así apunta a un 404\nen runtime. Si eso pasa, el visor lo detecta (falla la carga del documento) y **reintenta\nuna vez sirviéndolo desde `/digid-scan/pdf.worker.min.mjs`** — si ya sirves `scan-assets/`\n(paso 2 de arriba), no necesitas nada más. Si no la sirves ahí, pasa la URL con la prop\n`pdfWorkerUrl` de `<FirmaAutografa>` (o `workerSrc` si usas `PdfViewer` por separado).\nDetalle completo en la\n[sección 10.2 de la guía](docs/GUIA-INTEGRACION.md#102-worker-del-visor-pdf-todos-los-proyectos).\n\n## Requisitos del backend\n\n- CORS: agregar el dominio del integrador al allowlist de `config/cors.php`\n  (no usar `*` junto con `supports_credentials: true`).\n- Endpoints consumidos: `GET /api/archivofirma/start_autografa`, `GET /api/asignado/autografa`,\n  `GET /api/archivofirma/document_pdf`, `GET /api/archivofirma/signature_image`,\n  `POST /api/asignado/autografa/save_file`, `POST /api/archivofirma/finish_autografa`,\n  `POST /api/archivofirma/valid_repre` y `POST /api/firmante/forgot_pwd_rl` (estos dos\n  últimos solo aplican a firmantes Representante Legal).\n- Requiere un backend con `document_pdf`/`signature_image` (añadidos 2026-07-29); con\n  uno más viejo el PDF no cargará cross-origin — el proxy de la sección 6.3 de la\n  guía es el workaround mientras se actualiza.\n\n## Seguridad\n\n- Todo el estado vive en memoria (sin localStorage/sessionStorage).\n- Todas las rutas de subida de imagen (INE y el botón de galería del escáner;\n  la selfie no tiene subida de archivo, es obligatoria por cámara) validan por\n  magic bytes, limitan el archivo a 10 MB y rechazan imágenes que decodifiquen\n  a más de 50 MP (bombas de descompresión).\n- Las imágenes se re-encodean a JPEG, lo que elimina los metadatos EXIF\n  (incluido GPS). Excepción conocida: si el re-encode falla, el paso de INE\n  sube el archivo original **con EXIF intacto** — ver `normalizeToJpeg` en\n  `src/utils/image.ts`.\n- El token puede mandarse en un header en vez de la query string\n  (`tokenTransport`), para que no quede escrito en los logs de acceso.\n- La cámara se apaga en cuanto se captura o se desmonta el componente.\n- Sin scripts de terceros en runtime (pdf.js va empaquetado como dependencia); la captura\n  automática carga de forma perezosa (solo al abrir la cámara) modelos de detección on-device\n  para rostro/código de barras — el análisis corre enteramente en el navegador, nunca se\n  envían frames de video a Digid ni a terceros (ver la guía de integración para detalle y CSP).\n- Los colores de marca del backend se validan (solo hex) antes de inyectarse como CSS variables.\n\n## API estable vs. motor interno\n\nEl paquete expone dos entradas con garantías distintas:\n\n```ts\n// Estable: cubierto por SemVer\nimport { FirmaAutografa } from '@digid-sdk/firma-autografa-react';\n\n// Inestable: motor de escaneo/detección, para UIs de captura propias\nimport { initDocScan } from '@digid-sdk/firma-autografa-react/engine';\n```\n\nEl subpath `/engine` expone el escáner con OpenCV, los detectores on-device y los\numbrales de calibración. **No sigue SemVer**: esos umbrales se reajustan con datos\nde campo y pueden cambiar en cualquier versión, incluida una patch. Si lo usas, fija\nla versión exacta y revisa el [CHANGELOG](CHANGELOG.md) antes de actualizar.\n\n## Versionado y publicación\n\nEl paquete sigue [SemVer](https://semver.org) sobre la entrada principal. Las reglas\ncompletas —qué cuenta como major, la matriz de compatibilidad con el backend y la\npolítica de deprecación— están en [docs/VERSIONADO.md](docs/VERSIONADO.md).\n\n- Cambios por versión: [CHANGELOG.md](CHANGELOG.md)\n- Proceso de release: [docs/PUBLICACION.md](docs/PUBLICACION.md)\n\n## Desarrollo\n\n    npm install\n    npm test            # vitest\n    npm run typecheck\n    npm run build       # tsup → dist/\n    npm run dev         # playground en http://localhost:5199/?token=<token>\n\nEl playground hace proxy de /api y /docments a http://127.0.0.1:8000\n(backend Laravel local).\n\nPara probar la cámara desde un celular (getUserMedia exige HTTPS):\n\n    npm run dev:movil   # HTTPS autofirmado + expuesto en la red local\n\nAbre en el celular la URL \"Network\" que imprime Vite (p. ej.\nhttps://192.168.0.33:5199/?token=...), acepta la advertencia del certificado\nautofirmado y la cámara funcionará. Mac y celular deben estar en la misma red.\n\nLas notas de contrato con el backend y los puntos pendientes de verificar contra un\nentorno real están en [docs/PENDIENTES-BACKEND.md](docs/PENDIENTES-BACKEND.md).\n\n## Licencia\n\n[Apache-2.0](LICENSE) — Copyright 2026 CONSTANCIAS DIGITALES.\n\nEl SDK es software libre bajo esa licencia, pero **no reemplaza al contrato de\nservicio**: el flujo de firma solo funciona contra la plataforma de Digid con un\ntoken de firmante válido, que se obtiene con una cuenta activa.\n\nLas atribuciones de terceros redistribuidos dentro del paquete (OpenCV, jscanify)\nestán en [NOTICE](NOTICE).\n","readmeFilename":"README.md"}