{"_id":"@currentfear/web-politica-enmascaramiento-amovil","_rev":"5-67f8ae3f4adfab1ba1920ae6968a1973","name":"@currentfear/web-politica-enmascaramiento-amovil","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@currentfear/web-politica-enmascaramiento-amovil","version":"1.0.0","keywords":["data-masking","privacy","vanilla-js","enmascaramiento"],"author":"","license":"MIT","_id":"@currentfear/web-politica-enmascaramiento-amovil@1.0.0","maintainers":[{"name":"currentfear","email":"david.gomez@amovil.co"}],"homepage":"https://github.com/currentfear/web-politica-enmascaramiento-amovil#readme","bugs":{"url":"https://github.com/currentfear/web-politica-enmascaramiento-amovil/issues"},"dist":{"shasum":"a785a4178e247b05ff0917e374c7504219761f96","tarball":"https://registry.npmjs.org/@currentfear/web-politica-enmascaramiento-amovil/-/web-politica-enmascaramiento-amovil-1.0.0.tgz","fileCount":11,"integrity":"sha512-1Qg7ICCfbknDYxy1fqgwIOqNDmLwUW2AaMLwFd9sWtHNlaKFVv6BAfPw206m985CDto+thdLlLARwPz+xWGtYQ==","signatures":[{"sig":"MEQCIBAR2QuMFYN7aGxFdk4CIEMJfRQBfvPpC3QVbpCuGR4gAiAoQjnemofFcEOQB+TuUsQp6F9J+H+lErCUnowWwlm5aA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148066},"main":"dist/politica-enmascaramiento.js","type":"module","gitHead":"1075ada90a016bf1438cf78c0880827675b84177","scripts":{"dev":"node dev-server.js","build":"node build.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"currentfear","email":"david.gomez@amovil.co"},"repository":{"url":"git+https://github.com/currentfear/web-politica-enmascaramiento-amovil.git","type":"git"},"_npmVersion":"10.5.1","description":"Libreria vanilla JavaScript para visualizar diferentes tipos de enmascaramiento de datos","directories":{},"_nodeVersion":"22.0.0","dependencies":{"unique-names-generator":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4"},"_npmOperationalInternal":{"tmp":"tmp/web-politica-enmascaramiento-amovil_1.0.0_1766974345786_0.9564650381252302","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@currentfear/web-politica-enmascaramiento-amovil","version":"1.0.1","keywords":["data-masking","privacy","vanilla-js","enmascaramiento"],"author":"","license":"MIT","_id":"@currentfear/web-politica-enmascaramiento-amovil@1.0.1","maintainers":[{"name":"currentfear","email":"david.gomez@amovil.co"}],"homepage":"https://github.com/currentfear/web-politica-enmascaramiento-amovil#readme","bugs":{"url":"https://github.com/currentfear/web-politica-enmascaramiento-amovil/issues"},"dist":{"shasum":"96dce5bff1c09c852c2a43e140688059e945f1f4","tarball":"https://registry.npmjs.org/@currentfear/web-politica-enmascaramiento-amovil/-/web-politica-enmascaramiento-amovil-1.0.1.tgz","fileCount":11,"integrity":"sha512-QkAEwDbbappBMSkF//i4FLUIYVSEpKo9QqCpeDjgWclMpGYLqoOLbovqHuAf/dn8yC48hNOWD59HqjuVhW5ltA==","signatures":[{"sig":"MEQCIFFEYA7j9Bpf4x4+Kx2Khxzx96BrBmZolt0a0pgdDhjkAiBuw6kbp4D+KbqlaFzzQyn33iiMyQUE1Ytv5v/FhcidXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148066},"main":"dist/politica-enmascaramiento.js","type":"module","gitHead":"d9f3d83856c312cd6bea57345001f34d37bf6db6","scripts":{"dev":"node dev-server.js","build":"node build.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"currentfear","email":"david.gomez@amovil.co"},"repository":{"url":"git+https://github.com/currentfear/web-politica-enmascaramiento-amovil.git","type":"git"},"_npmVersion":"10.5.1","description":"Libreria vanilla JavaScript para visualizar diferentes tipos de enmascaramiento de datos","directories":{},"_nodeVersion":"22.0.0","dependencies":{"unique-names-generator":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4"},"_npmOperationalInternal":{"tmp":"tmp/web-politica-enmascaramiento-amovil_1.0.1_1766974966422_0.17008506767654152","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@currentfear/web-politica-enmascaramiento-amovil","version":"1.0.2","keywords":["data-masking","privacy","vanilla-js","enmascaramiento"],"author":"","license":"MIT","_id":"@currentfear/web-politica-enmascaramiento-amovil@1.0.2","maintainers":[{"name":"currentfear","email":"david.gomez@amovil.co"}],"homepage":"https://github.com/currentfear/web-politica-enmascaramiento-amovil#readme","bugs":{"url":"https://github.com/currentfear/web-politica-enmascaramiento-amovil/issues"},"dist":{"shasum":"5030ac1b859c558fa44595a4b3cbaacc6270943e","tarball":"https://registry.npmjs.org/@currentfear/web-politica-enmascaramiento-amovil/-/web-politica-enmascaramiento-amovil-1.0.2.tgz","fileCount":11,"integrity":"sha512-LsJ9tK9zH5RHfHQF8tb3nG0BqLvca3LxU+36EJeGS4W+btF5G+KCjClE1pU0Mmsqd3QJ8zMk0Cm97g4eC/hVbw==","signatures":[{"sig":"MEUCIQCUV+ybAp7tGf9dlOm0+pagw0e6Cr27uYPH6gnQIPl1rgIge1YlLQKf1sYlt8+y6qjcDgJm4oWewg40+6wpQCRdUB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148066},"main":"dist/politica-enmascaramiento.js","type":"module","gitHead":"d9f3d83856c312cd6bea57345001f34d37bf6db6","scripts":{"dev":"node dev-server.js","build":"node build.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"currentfear","email":"david.gomez@amovil.co"},"repository":{"url":"git+https://github.com/currentfear/web-politica-enmascaramiento-amovil.git","type":"git"},"_npmVersion":"10.5.1","description":"Libreria vanilla JavaScript para visualizar diferentes tipos de enmascaramiento de datos","directories":{},"_nodeVersion":"22.0.0","dependencies":{"unique-names-generator":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4"},"_npmOperationalInternal":{"tmp":"tmp/web-politica-enmascaramiento-amovil_1.0.2_1766975356580_0.6200597642357681","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@currentfear/web-politica-enmascaramiento-amovil","version":"1.1.0","keywords":["data-masking","privacy","vanilla-js","enmascaramiento"],"author":"","license":"MIT","_id":"@currentfear/web-politica-enmascaramiento-amovil@1.1.0","maintainers":[{"name":"currentfear","email":"david.gomez@amovil.co"}],"homepage":"https://github.com/currentfear/web-politica-enmascaramiento-amovil#readme","bugs":{"url":"https://github.com/currentfear/web-politica-enmascaramiento-amovil/issues"},"dist":{"shasum":"2ed25ab0a954de9485c62a00c6e9c86aa53cac85","tarball":"https://registry.npmjs.org/@currentfear/web-politica-enmascaramiento-amovil/-/web-politica-enmascaramiento-amovil-1.1.0.tgz","fileCount":11,"integrity":"sha512-bD3GkBUBCneNUnjrOLN7dtMFILFCwqomGV2c5CatdWgf28nmasc4P8wC6Sn92jeWVMa9DWx0BFVMvysPMmF0Ew==","signatures":[{"sig":"MEQCIEzIqIthZKbDmPyV0a2BZRfTVH76qo0zPdsHeivOZvAhAiBRDHeXjwe5FMCLtxKYGVHNjcz3kyqurEM8z8EY/mDr+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151159},"main":"dist/politica-enmascaramiento.js","type":"module","gitHead":"5b298235da571271c2acca6baf76b8bb04d80b7e","scripts":{"dev":"node dev-server.js","build":"node build.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"currentfear","email":"david.gomez@amovil.co"},"repository":{"url":"git+https://github.com/currentfear/web-politica-enmascaramiento-amovil.git","type":"git"},"_npmVersion":"10.9.0","description":"Libreria vanilla JavaScript para visualizar diferentes tipos de enmascaramiento de datos","directories":{},"_nodeVersion":"22.12.0","dependencies":{"unique-names-generator":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4"},"_npmOperationalInternal":{"tmp":"tmp/web-politica-enmascaramiento-amovil_1.1.0_1772499575437_0.4559882430905968","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@currentfear/web-politica-enmascaramiento-amovil","version":"1.2.0","description":"Libreria vanilla JavaScript para visualizar diferentes tipos de enmascaramiento de datos","type":"module","main":"dist/politica-enmascaramiento.js","scripts":{"build":"node build.js","dev":"node dev-server.js","prepublishOnly":"npm run build"},"keywords":["data-masking","privacy","vanilla-js","enmascaramiento"],"author":"","license":"MIT","repository":{"type":"git","url":"git+https://github.com/currentfear/web-politica-enmascaramiento-amovil.git"},"dependencies":{"unique-names-generator":"^4.7.1"},"devDependencies":{"vite":"^7.2.4"},"_id":"@currentfear/web-politica-enmascaramiento-amovil@1.2.0","gitHead":"66761ca9ecb80976b37fdc3b2f0fdb2b02c897ad","bugs":{"url":"https://github.com/currentfear/web-politica-enmascaramiento-amovil/issues"},"homepage":"https://github.com/currentfear/web-politica-enmascaramiento-amovil#readme","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-MZ038iceLWtaQ8e9IA1eMxIstBA5uY47A/YVAVbBuqN4aEWEEGj9YP05n9Dt9rlALh1HiZe15zQoL8EPEhVQuw==","shasum":"22ea053db85b05c2e3d4bdd8831e2e2bc7a06ca0","tarball":"https://registry.npmjs.org/@currentfear/web-politica-enmascaramiento-amovil/-/web-politica-enmascaramiento-amovil-1.2.0.tgz","fileCount":11,"unpackedSize":157909,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDe+BiDnVhwXSowLVUmv3h8ru496fOG5kFgmXG6AhhKFQIhAPJkn31to+PPJn6ryRCfL4jChm+vrnZ1ywgDypQRP/BN"}]},"_npmUser":{"name":"currentfear","email":"david.gomez@amovil.co"},"directories":{},"maintainers":[{"name":"currentfear","email":"david.gomez@amovil.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/web-politica-enmascaramiento-amovil_1.2.0_1773177947800_0.9434729437457969"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-29T02:12:25.674Z","modified":"2026-03-10T21:25:48.107Z","1.0.0":"2025-12-29T02:12:25.933Z","1.0.1":"2025-12-29T02:22:46.575Z","1.0.2":"2025-12-29T02:29:16.723Z","1.1.0":"2026-03-03T00:59:35.583Z","1.2.0":"2026-03-10T21:25:47.967Z"},"bugs":{"url":"https://github.com/currentfear/web-politica-enmascaramiento-amovil/issues"},"license":"MIT","homepage":"https://github.com/currentfear/web-politica-enmascaramiento-amovil#readme","keywords":["data-masking","privacy","vanilla-js","enmascaramiento"],"repository":{"type":"git","url":"git+https://github.com/currentfear/web-politica-enmascaramiento-amovil.git"},"description":"Libreria vanilla JavaScript para visualizar diferentes tipos de enmascaramiento de datos","maintainers":[{"name":"currentfear","email":"david.gomez@amovil.co"}],"readme":"# @currentfear/web-politica-enmascaramiento-amovil\n\nLibrería vanilla JavaScript para aplicar y visualizar técnicas de enmascaramiento de datos directamente en el DOM. No requiere ningún framework.\n\n---\n\n## Instalación\n\n**npm**\n```bash\nnpm install @currentfear/web-politica-enmascaramiento-amovil\n```\n\n**CDN (UMD global)**\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/@currentfear/web-politica-enmascaramiento-amovil/dist/politica-enmascaramiento.umd.js\"></script>\n```\n\nAl usar la versión CDN, todas las funciones quedan disponibles en el objeto global `PoliticaEnmascaramiento`.\n\n---\n\n## Uso básico\n\n```js\nimport { renderMasking } from '@currentfear/web-politica-enmascaramiento-amovil';\n\nconst el = document.getElementById('mi-elemento');\n\nrenderMasking(el, 'sustitucion', {\n  type: 'sustitucion',\n  original: 'Juan Pérez',\n});\n```\n\n---\n\n## API — `renderMasking`\n\n```js\nrenderMasking(element, type, data, options)\n```\n\n| Parámetro | Tipo | Descripción |\n|-----------|------|-------------|\n| `element` | `HTMLElement` | Elemento DOM donde se renderiza el resultado |\n| `type` | `string` | Tipo de enmascaramiento (ver tipos disponibles) |\n| `data` | `object` | Datos de entrada para el enmascaramiento |\n| `options` | `object` | Opciones de renderizado (ver tabla de opciones) |\n\n### Opciones de renderizado\n\n| Opción | Tipo | Por defecto | Descripción |\n|--------|------|-------------|-------------|\n| `showOriginal` | `boolean` | `false` | Muestra el valor original junto al enmascarado |\n| `showLabel` | `boolean` | `true` | Muestra la etiqueta del tipo de enmascaramiento |\n| `className` | `string` | `''` | Clase CSS adicional aplicada al contenedor |\n| `maskCount` | `number` | — | Cantidad fija de caracteres de máscara. Si se combina con `maskWordsStart`/`maskWordsEnd`, aplica por palabra |\n| `maskChar` | `string` | `'*'` | Carácter usado para enmascarar |\n| `maskWordsStart` | `number` | `0` | Cantidad de palabras a enmascarar desde el inicio del valor |\n| `maskWordsEnd` | `number` | `0` | Cantidad de palabras a enmascarar desde el final del valor |\n| `nullValue` | `string` | — | Texto a mostrar cuando `original` es nulo, undefined o cadena vacía |\n| `constantValue` | `string` | — | Si se define, renderiza este valor directamente sin aplicar ningún enmascaramiento |\n\n---\n\n## Tipos de enmascaramiento\n\n### sustitucion\n\nReemplaza el valor original por un nombre ficticio determinista generado a partir del original. El resultado es siempre el mismo para el mismo valor de entrada.\n\nCampos soportados:\n\n| Campo | Tipo | Por defecto | Descripción |\n|------|------|-------------|-------------|\n| `original` | `string` | — | Valor original a enmascarar |\n| `suffix` | `string` | — | Sufijo opcional para nombres de empresa, por ejemplo `S.A.` o `S.A.S.` |\n\n```js\nrenderMasking(el, 'sustitucion', {\n  type: 'sustitucion',\n  original: 'Ana Gómez',\n  suffix: 'S.A.S.', // opcional\n});\n```\n\nSi se define `suffix`, se agrega al valor generado. Ejemplo: `Laura Martínez S.A.S.`\n\n---\n\n### permutacion\n\nIntercambia el valor con otro registro. Si se omite `swappedWith`, genera un valor ficticio.\n\nCampos soportados:\n\n| Campo | Tipo | Por defecto | Descripción |\n|------|------|-------------|-------------|\n| `original` | `string` | — | Valor original a enmascarar |\n| `swappedWith` | `string` | — | Valor alternativo a usar directamente |\n| `suffix` | `string` | — | Sufijo opcional. Solo aplica cuando la librería genera un valor ficticio y no cuando se usa `swappedWith` |\n\n```js\nrenderMasking(el, 'permutacion', {\n  type: 'permutacion',\n  original: 'Carlos Ruiz',\n  swappedWith: 'Luis Martínez', // opcional\n  suffix: 'S.A.', // opcional, aplica cuando se genera un valor ficticio\n});\n```\n\n---\n\n### cifrado\n\nCodifica el valor en Base64.\n\n```js\nrenderMasking(el, 'cifrado', {\n  type: 'cifrado',\n  original: '1023456789',\n  algorithm: 'Base64', // opcional, solo informativo\n});\n```\n\n---\n\n### enmascaramiento-parcial\n\nOculta una parte del valor mostrando solo los últimos `N` caracteres.\n\n```js\nrenderMasking(el, 'enmascaramiento-parcial', {\n  type: 'enmascaramiento-parcial',\n  original: '3001234567',\n  visibleChars: 4,  // por defecto 4\n  maskChar: '*',    // por defecto '*'\n});\n// Resultado: ******4567\n```\n\nOpciones del dato para enmascaramiento parcial:\n\n| Campo | Tipo | Por defecto | Descripción |\n|------|------|-------------|-------------|\n| `visibleChars` | `number` | `4` | Cantidad de caracteres visibles al final cuando el valor es texto |\n| `maskChar` | `string` | `'*'` | Carácter usado para enmascarar |\n| `valueType` | `'text' \\| 'email'` | `'text'` | Si es `email`, oculta el usuario y conserva el dominio. Si el correo no tiene dominio válido, usa `dominio-ficticio.test` |\n\nComportamiento:\n\n- Si `valueType` es `'text'`, la librería deja visibles los últimos `visibleChars` caracteres del valor completo.\n- Si `valueType` es `'email'`, la librería enmascara la parte antes de `@` y conserva el dominio.\n- Si el correo no tiene un formato válido, el resultado será `****@dominio-ficticio.test`.\n\nEjemplo para correo:\n\n```js\nrenderMasking(el, 'enmascaramiento-parcial', {\n  type: 'enmascaramiento-parcial',\n  original: 'usuario@gmail.com',\n  valueType: 'email',\n});\n// Resultado: *******@gmail.com\n```\n\n---\n\n### envejecimiento-fechas\n\nDesplaza una fecha aplicando un offset en días.\n\n```js\nrenderMasking(el, 'envejecimiento-fechas', {\n  type: 'envejecimiento-fechas',\n  original: '2024-06-15',\n  originalDate: '2024-06-15', // formato YYYY-MM-DD\n  offsetDays: -180,           // por defecto -180\n});\n```\n\n---\n\n### tokenizacion\n\nReemplaza el valor por un token único y consistente derivado del original.\n\n```js\nrenderMasking(el, 'tokenizacion', {\n  type: 'tokenizacion',\n  original: 'usuario@ejemplo.com',\n  tokenPrefix: 'TKN', // por defecto 'TKN'\n});\n// Resultado: TKN-A1B2-C3D4\n```\n\n---\n\n### datos-sinteticos\n\nGenera un valor sintético completamente nuevo, diferente al original.\n\nCampos soportados:\n\n| Campo | Tipo | Por defecto | Descripción |\n|------|------|-------------|-------------|\n| `original` | `string` | — | Valor original a usar como base determinista |\n| `suffix` | `string` | — | Sufijo opcional para nombres de empresa, por ejemplo `S.A.` o `S.A.S.` |\n\n```js\nrenderMasking(el, 'datos-sinteticos', {\n  type: 'datos-sinteticos',\n  original: 'Pedro Sánchez',\n  suffix: 'S.A.S.', // opcional\n});\n```\n\n---\n\n## Opciones avanzadas\n\n### Controlar la cantidad de caracteres de máscara\n\n```js\n// Muestra siempre 6 asteriscos independientemente del valor\nrenderMasking(el, 'sustitucion', {\n  type: 'sustitucion',\n  original: 'Juan Pérez',\n}, {\n  maskCount: 6,\n  maskChar: '*',\n});\n// Resultado en pantalla: ******\n```\n\n---\n\n### Enmascarar palabras al inicio o al final\n\n```js\n// Enmascara la primera palabra del resultado\nrenderMasking(el, 'sustitucion', {\n  type: 'sustitucion',\n  original: 'María López García',\n}, {\n  maskWordsStart: 1,\n  maskCount: 4, // cantidad de caracteres por palabra enmascarada (por defecto 3)\n});\n// Si el valor generado fuera \"Laura Martínez\":\n// Resultado: **** Martínez\n\n// Enmascara la última palabra\nrenderMasking(el, 'permutacion', {\n  type: 'permutacion',\n  original: 'Carlos Díaz',\n}, {\n  maskWordsEnd: 1,\n  maskCount: 5,\n});\n// Resultado: Carlos *****\n\n// Enmascara inicio y final simultáneamente\nrenderMasking(el, 'datos-sinteticos', {\n  type: 'datos-sinteticos',\n  original: 'Ana Beatriz Torres',\n}, {\n  maskWordsStart: 1,\n  maskWordsEnd: 1,\n  maskChar: '#',\n  maskCount: 3,\n});\n// Resultado: ### Beatriz ###\n```\n\n---\n\n### Manejar valores nulos o vacíos\n\n```js\nrenderMasking(el, 'sustitucion', {\n  type: 'sustitucion',\n  original: '',\n}, {\n  nullValue: 'Sin dato',\n});\n// Resultado: Sin dato\n```\n\n---\n\n### Valor constante (sin enmascaramiento)\n\nÚtil cuando se quiere mostrar un valor fijo sin importar los datos de entrada, por ejemplo para registros que por configuración siempre deben mostrar un texto específico.\n\n```js\nrenderMasking(el, 'sustitucion', {\n  type: 'sustitucion',\n  original: 'Juan Pérez',\n}, {\n  constantValue: 'CONFIDENCIAL',\n});\n// Resultado: CONFIDENCIAL\n```\n\n---\n\n## Uso de generadores directamente\n\nSi no se necesita renderizado DOM, se pueden usar las funciones generadoras directamente:\n\n```js\nimport {\n  generateSustitucion,\n  generateEnmascaramientoParcial,\n  generateTokenizacion,\n} from '@currentfear/web-politica-enmascaramiento-amovil';\n\nconst nombre = generateSustitucion({ type: 'sustitucion', original: 'Juan Pérez' });\n// 'Laura Martínez' (determinista)\n\nconst empresa = generateSustitucion({\n  type: 'sustitucion',\n  original: 'Acme',\n  suffix: 'S.A.S.',\n});\n// 'Laura Martínez S.A.S.'\n\nconst cc = generateEnmascaramientoParcial({\n  type: 'enmascaramiento-parcial',\n  original: '1023456789',\n  visibleChars: 4,\n});\n// '******6789'\n\nconst correo = generateEnmascaramientoParcial({\n  type: 'enmascaramiento-parcial',\n  original: 'usuario@gmail.com',\n  valueType: 'email',\n});\n// '*******@gmail.com'\n\nconst { token } = generateTokenizacion({\n  type: 'tokenizacion',\n  original: 'usuario@ejemplo.com',\n});\n// 'TKN-A1B2-C3D4'\n```\n\nReglas importantes:\n\n- `suffix` está disponible en `sustitucion`, `permutacion` y `datos-sinteticos`.\n- En `permutacion`, `suffix` solo aplica cuando no se envía `swappedWith`.\n- `valueType: 'email'` solo aplica en `enmascaramiento-parcial`.\n- Las opciones de renderizado como `maskWordsStart`, `maskWordsEnd` y `maskCount` afectan la visualización final, no el valor generado por las funciones generadoras.\n\n---\n\n## Uso con CDN\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n  <script src=\"https://cdn.jsdelivr.net/npm/@currentfear/web-politica-enmascaramiento-amovil/dist/politica-enmascaramiento.umd.js\"></script>\n</head>\n<body>\n  <div id=\"campo\"></div>\n\n  <script>\n    const { renderMasking } = PoliticaEnmascaramiento;\n\n    renderMasking(document.getElementById('campo'), 'enmascaramiento-parcial', {\n      type: 'enmascaramiento-parcial',\n      original: '3001234567',\n      visibleChars: 3,\n    }, {\n      maskCount: 6,\n      showLabel: false,\n    });\n  </script>\n</body>\n</html>\n```\n\n---\n\n## Integración con backend\n\nLa librería está diseñada para recibir datos ya procesados desde el backend. El flujo recomendado es:\n\n1. El backend aplica la política de enmascaramiento y envía el tipo y los datos al frontend.\n2. El frontend usa esta librería para visualizarlos de forma consistente.\n\n**Ejemplo con fetch:**\n\n```js\nfetch('/api/datos-enmascarados')\n  .then(res => res.json())\n  .then(({ type, data }) => {\n    renderMasking(document.getElementById('resultado'), type, data);\n  });\n```\n\n**Ejemplo de respuesta esperada del backend:**\n\n```json\n{\n  \"type\": \"enmascaramiento-parcial\",\n  \"data\": {\n    \"type\": \"enmascaramiento-parcial\",\n    \"original\": \"3001234567\",\n    \"visibleChars\": 4\n  }\n}\n```\n\n---\n\n## Licencia\n\nMIT\n","readmeFilename":"README.md"}