{"_id":"@core-tecnologias-empresariales/core-security","name":"@core-tecnologias-empresariales/core-security","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@core-tecnologias-empresariales/core-security","version":"0.1.0","description":"Capacidades criptográficas transversales (password hashing, token hashing, secure random, encryption) para el ecosistema Core Tecnología Empresarial.","license":"UNLICENSED","publishConfig":{"access":"public"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":"./dist/index.js"},"dependencies":{"argon2":"^0.41.1"},"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.14.0"},"scripts":{"build":"tsc -p tsconfig.json","test":"tsc -p tsconfig.json && node --test dist"},"_id":"@core-tecnologias-empresariales/core-security@0.1.0","_integrity":"sha512-l0aXmkw89ctIrtbPa5bI2wW+EHEk5xHnWWt5fxK3UANXfNZVjdvHriakN8S0L3l654XVfQSrsesWqO9NfioySQ==","_resolved":"C:\\Users\\Administrador\\AppData\\Local\\Temp\\51aaf3958a224cf025c78c7917d81d7f\\core-tecnologias-empresariales-core-security-0.1.0.tgz","_from":"file:core-tecnologias-empresariales-core-security-0.1.0.tgz","_nodeVersion":"20.20.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-l0aXmkw89ctIrtbPa5bI2wW+EHEk5xHnWWt5fxK3UANXfNZVjdvHriakN8S0L3l654XVfQSrsesWqO9NfioySQ==","shasum":"252563abb78edc0d8a9017aea2785a59dab7e1e3","tarball":"https://registry.npmjs.org/@core-tecnologias-empresariales/core-security/-/core-security-0.1.0.tgz","fileCount":29,"unpackedSize":17042,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHKmYzONuCGSs9Oqvx309dVOXT1+tMV4emVTHShYKg8NAiEAyoGIOIQDd7LY0cnhPJJoIhD3fUSJUMb6uw8LtKd+P90="}]},"_npmUser":{"name":"balamchac","email":"marcelosazop@gmail.com"},"directories":{},"maintainers":[{"name":"balamchac","email":"marcelosazop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core-security_0.1.0_1788053514634_0.5292210456148032"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T01:31:54.419Z","0.1.0":"2026-08-30T01:31:54.772Z","modified":"2026-08-30T01:31:55.077Z"},"maintainers":[{"name":"balamchac","email":"marcelosazop@gmail.com"}],"description":"Capacidades criptográficas transversales (password hashing, token hashing, secure random, encryption) para el ecosistema Core Tecnología Empresarial.","license":"UNLICENSED","readme":"# @core-tecnologias-empresariales/core-security\n\nCapacidades criptográficas transversales del ecosistema Core Tecnología Empresarial. Evita que cada producto reimplemente hashing, random generation o encryption por su cuenta.\n\n## Para qué sirve\n\n- **Password hashing** (`hashPassword`/`verifyPassword`) — Argon2id, nunca MD5/SHA1/SHA256 directo (CLAUDE.md §11/§53).\n- **Token hashing** (`hashToken`) — SHA-256 determinístico, para refresh tokens y códigos que se comparan por igualdad (no sirve Argon2id ahí: su salt aleatorio impide el lookup).\n- **Secure random** (`generateSecureToken`, `generateNumericCode`) — `node:crypto`, nunca `Math.random()`.\n- **Encryption autenticado** (`encrypt`/`decrypt`) — AES-256-GCM. La clave nunca se almacena junto al payload cifrado.\n\n## Para qué NO sirve\n\nNo contiene reglas tributarias ni de negocio. No es el logger — la redacción de secretos en logs vive en `core-logging` (`redact()`), no se duplica acá.\n\n## Instalación\n\n```bash\npnpm add @core-tecnologias-empresariales/core-security\n```\n\nDepende de [`argon2`](https://www.npmjs.com/package/argon2) (binding nativo). Necesita binarios prebuilt o toolchain de compilación (`node-gyp`) según la plataforma.\n\n## API\n\n```ts\nimport { hashPassword, verifyPassword, hashToken, generateSecureToken, generateNumericCode, encrypt, decrypt } from \"@core-tecnologias-empresariales/core-security\";\n\nconst hash = await hashPassword(\"hunter2\");\nawait verifyPassword(\"hunter2\", hash); // true\n\nconst tokenHash = hashToken(refreshToken); // guardar esto en refresh_tokens.token_hash, nunca el token en claro\n\nconst resetCode = generateNumericCode(6);   // \"483920\" — para password_reset_requests\nconst nonce = generateSecureToken();        // hex de 32 bytes por defecto\n\nconst key = crypto.randomBytes(32); // gestionado por Secret Manager/Vault, no por este paquete\nconst payload = encrypt(\"dato sensible\", key);\ndecrypt(payload, key); // \"dato sensible\"\n```\n\n## Desarrollo\n\n```bash\npnpm build\npnpm test\n```\n","readmeFilename":"README.md","_rev":"1-a7e3f181d463b4268e884e4e27b75109"}