{"_id":"@acegalaxy/security-utils","_rev":"4-d0608763a9d0ca40f39c5ae79d548fba","name":"@acegalaxy/security-utils","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@acegalaxy/security-utils","version":"0.1.0","keywords":["security","rate-limit","audit","vault","notion","secrets","caller-validator"],"author":{"name":"ACE Galaxy","email":"hello@acegalaxy.co"},"license":"MIT","_id":"@acegalaxy/security-utils@0.1.0","maintainers":[{"name":"kanelr","email":"lanhnk@acegalaxy.co"}],"homepage":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs#readme","bugs":{"url":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs/issues"},"dist":{"shasum":"6193fbbf25646ec303b7d0d449829354cfbd7538","tarball":"https://registry.npmjs.org/@acegalaxy/security-utils/-/security-utils-0.1.0.tgz","fileCount":42,"integrity":"sha512-+yyU2wFYz/0zhAaKI4DZqmfZiQalRyJ6weTH4EsHoeCDOMB9+cbh24sHGv1kgXPqeVdDkIhE35RfAf9/5xih4A==","signatures":[{"sig":"MEYCIQCXnNkwzQ8jbC/btyF3A35SQaXv5UbovUICbUb/+90uvQIhAMnufsn+CSr4ox98nTSnCvdN/uXMaRCWtEVi7V1iYOVu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75651},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./audit-log":{"types":"./dist/audit-log/index.d.ts","default":"./dist/audit-log/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./vault-loader":{"types":"./dist/vault-loader/index.d.ts","default":"./dist/vault-loader/index.js"},"./caller-validator":{"types":"./dist/caller-validator/index.d.ts","default":"./dist/caller-validator/index.js"}},"gitHead":"8212050b3c3126e3f1e67e525c43c92b419fd672","private":false,"scripts":{"test":"node --test test/*.test.js","build":"tsc","clean":"rm -rf dist","pretest":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"kanelr","email":"lanhnk@acegalaxy.co"},"repository":{"url":"git+https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs.git","type":"git"},"_npmVersion":"11.12.1","description":"Security/trust layer primitives: audit-log + caller-validator + rate-limit + vault-loader. Bundle of 4 small libs for production gateways.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/security-utils_0.1.0_1778086010172_0.6660324513655431","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@acegalaxy/security-utils","version":"0.1.1","keywords":["security","rate-limit","audit","vault","notion","secrets","caller-validator"],"author":{"name":"ACE Galaxy","email":"hello@acegalaxy.co"},"license":"MIT","_id":"@acegalaxy/security-utils@0.1.1","maintainers":[{"name":"kanelr","email":"lanhnk@acegalaxy.co"}],"homepage":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs#readme","bugs":{"url":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs/issues"},"dist":{"shasum":"3bf7a44716163e073df143c358fa49aacf8fda8b","tarball":"https://registry.npmjs.org/@acegalaxy/security-utils/-/security-utils-0.1.1.tgz","fileCount":42,"integrity":"sha512-Y3u3aH4mlMBvdPfYFlLDO97QkWlUGAT/Msu3IX1UD+nZKJ+D+vpfb23XhzdnDeiimEvUr3Mn+Wf7w7RqAal+EA==","signatures":[{"sig":"MEUCIQDpOmNffdnkX4MqFYNJpmnTRWWqzGjCyKx8oQi0YyimVQIgHyqrZvbK6yCyngs0ZXFSInVaixpbzYWwUxp1BPdCFaA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75651},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./audit-log":{"types":"./dist/audit-log/index.d.ts","default":"./dist/audit-log/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./vault-loader":{"types":"./dist/vault-loader/index.d.ts","default":"./dist/vault-loader/index.js"},"./caller-validator":{"types":"./dist/caller-validator/index.d.ts","default":"./dist/caller-validator/index.js"}},"gitHead":"f13d9687d2c1d1f816428759b39499500581a843","private":false,"scripts":{"test":"node --test test/*.test.js","build":"tsc","clean":"rm -rf dist","pretest":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"kanelr","email":"lanhnk@acegalaxy.co"},"repository":{"url":"git+https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs.git","type":"git"},"_npmVersion":"11.12.1","description":"Security/trust layer primitives: audit-log + caller-validator + rate-limit + vault-loader. Bundle of 4 small libs for production gateways.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/security-utils_0.1.1_1778088184380_0.5986876111039576","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@acegalaxy/security-utils","version":"0.1.2","keywords":["security","rate-limit","audit","vault","notion","secrets","caller-validator"],"author":{"name":"ACE Galaxy","email":"hello@acegalaxy.co"},"license":"MIT","_id":"@acegalaxy/security-utils@0.1.2","maintainers":[{"name":"kanelr","email":"lanhnk@acegalaxy.co"}],"homepage":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs#readme","bugs":{"url":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs/issues"},"dist":{"shasum":"6d30498b1360bd4b61abbf05628f9b7286ac34ce","tarball":"https://registry.npmjs.org/@acegalaxy/security-utils/-/security-utils-0.1.2.tgz","fileCount":42,"integrity":"sha512-9xj3nWy1FGGOe5EiyV3hbzSBKTqjCkeSAiM40o7tm7hIn6ioG5CWI06gZuNx5e6N6hMlJF8Y2fsF5lUVgVpoNw==","signatures":[{"sig":"MEUCIQD7yo9BCRFy4flqraDikYX+zoUsEbJOuulaavSKPnnIxwIgBudnzEzWwsfp00DuQZ5+zuTat21rBrfrliKzs7P+Et4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75691},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./audit-log":{"types":"./dist/audit-log/index.d.ts","default":"./dist/audit-log/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./package.json":"./package.json","./vault-loader":{"types":"./dist/vault-loader/index.d.ts","default":"./dist/vault-loader/index.js"},"./caller-validator":{"types":"./dist/caller-validator/index.d.ts","default":"./dist/caller-validator/index.js"}},"gitHead":"f13d9687d2c1d1f816428759b39499500581a843","private":false,"scripts":{"test":"node --test test/*.test.js","build":"tsc","clean":"rm -rf dist","pretest":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"kanelr","email":"lanhnk@acegalaxy.co"},"repository":{"url":"git+https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs.git","type":"git"},"_npmVersion":"11.12.1","description":"Security/trust layer primitives: audit-log + caller-validator + rate-limit + vault-loader. Bundle of 4 small libs for production gateways.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/security-utils_0.1.2_1778088271079_0.18248924308350145","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@acegalaxy/security-utils","version":"0.2.0","description":"Security/trust layer primitives: audit-log + caller-validator + rate-limit. Bundle of 3 small libs for production gateways. (vault-loader extracted to @acegalaxy/notion-vault.)","main":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit-log":{"types":"./dist/audit-log/index.d.ts","default":"./dist/audit-log/index.js"},"./caller-validator":{"types":"./dist/caller-validator/index.d.ts","default":"./dist/caller-validator/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./*":{"types":"./dist/*.d.ts","default":"./dist/*.js"},"./package.json":"./package.json"},"scripts":{"test":"node --test test/*.test.js","build":"tsc","prepublishOnly":"npm run build","clean":"rm -rf dist","pretest":"npm run build"},"keywords":["security","rate-limit","audit","caller-validator","authz"],"author":{"name":"ACE Galaxy","email":"hello@acegalaxy.co"},"license":"MIT","private":false,"engines":{"node":">=20"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs.git"},"bugs":{"url":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs/issues"},"homepage":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs#readme","types":"dist/index.d.ts","devDependencies":{"typescript":"^5.7.0","@types/node":"^20.0.0"},"gitHead":"e36a18d8886cfbf73aa96ff5649ea398e935da2d","_id":"@acegalaxy/security-utils@0.2.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-G9JoXgM+z1mL0XaBx4qTqg5GV68OkdGpPLya+ImqbCEDRiVmn4IUgQAofR6zvgCzTKX2uqRsNT9axTKdCvS84A==","shasum":"5dab20ad8066c807e06d62ae6039db917d639a98","tarball":"https://registry.npmjs.org/@acegalaxy/security-utils/-/security-utils-0.2.0.tgz","fileCount":22,"unpackedSize":28193,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD4n4VTs6wwb7lGr/ATFgrRRhI2plVaBJ6agL2e505GpAIgI10ejqtku+7I1KeXedNqZqmXTOOuJuTfggc4VyKdeQ4="}]},"_npmUser":{"name":"kanelr","email":"lanhnk@acegalaxy.co"},"directories":{},"maintainers":[{"name":"kanelr","email":"lanhnk@acegalaxy.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/security-utils_0.2.0_1778141971667_0.1311059888343311"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T16:46:50.035Z","modified":"2026-05-07T08:19:32.001Z","0.1.0":"2026-05-06T16:46:50.327Z","0.1.1":"2026-05-06T17:23:04.533Z","0.1.2":"2026-05-06T17:24:31.230Z","0.2.0":"2026-05-07T08:19:31.858Z"},"bugs":{"url":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs/issues"},"author":{"name":"ACE Galaxy","email":"hello@acegalaxy.co"},"license":"MIT","homepage":"https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs#readme","keywords":["security","rate-limit","audit","caller-validator","authz"],"repository":{"type":"git","url":"git+https://github.com/acegalaxy-co/ace_commons-security-utils-nodejs.git"},"description":"Security/trust layer primitives: audit-log + caller-validator + rate-limit. Bundle of 3 small libs for production gateways. (vault-loader extracted to @acegalaxy/notion-vault.)","maintainers":[{"name":"kanelr","email":"lanhnk@acegalaxy.co"}],"readme":"# @acegalaxy/security-utils\n\n[![npm version](https://img.shields.io/npm/v/@acegalaxy%2Fsecurity-utils.svg)](https://www.npmjs.com/package/@acegalaxy/security-utils)\n[![npm downloads](https://img.shields.io/npm/dm/@acegalaxy%2Fsecurity-utils.svg)](https://www.npmjs.com/package/@acegalaxy/security-utils)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node](https://img.shields.io/node/v/@acegalaxy%2Fsecurity-utils.svg)](https://nodejs.org)\n\n\n> 3-in-1 security primitives for Node.js services — rate-limit, audit-log, caller-validator.\n>\n> _(vault-loader was extracted into a standalone package: [`@acegalaxy/notion-vault`](https://www.npmjs.com/package/@acegalaxy/notion-vault).)_\n\nExtracted from production gateways (`db-gateway`, `ott-gateway`, `voice-gateway`) at ACE Galaxy. Battle-tested, opinionated defaults, zero heavy deps.\n\n## Install\n\n```bash\nnpm install @acegalaxy/security-utils\n```\n\nRequires Node.js >= 20.\n\n## Subpath exports\n\n| Subpath | Layer | Purpose |\n|---|---|---|\n| `@acegalaxy/security-utils/audit-log` | L5 forensics | Append-only JSONL logger. Never throws. |\n| `@acegalaxy/security-utils/caller-validator` | L2 authz | Enforce `{service, scope}` contract on resolved callers. |\n| `@acegalaxy/security-utils/rate-limit` | L4 DoS guard | Sliding-window limiter + TTL replay-guard. In-memory. |\n\n## Quick start\n\n### audit-log\n\n```js\nimport { createAuditLogger } from \"@acegalaxy/security-utils/audit-log\";\n\nconst audit = createAuditLogger({ file: \"/var/log/app/audit.jsonl\" });\naudit.log({ event: \"login\", actor: \"user:42\", ok: true });\n```\n\n### caller-validator\n\n```js\nimport { createCallerValidator } from \"@acegalaxy/security-utils/caller-validator\";\n\nconst validate = createCallerValidator({\n  allow: [{ service: \"ott-gateway\", scope: \"send\" }],\n});\nvalidate({ service: \"ott-gateway\", scope: \"send\" }); // ok\nvalidate({ service: \"rogue\", scope: \"send\" });       // throws\n```\n\n### rate-limit\n\n```js\nimport { createSlidingWindow, createReplayGuard } from \"@acegalaxy/security-utils/rate-limit\";\n\nconst limiter = createSlidingWindow({ windowMs: 60_000, max: 30 });\nif (!limiter.allow(\"ip:1.2.3.4\")) throw new Error(\"429\");\n\nconst replay = createReplayGuard({ ttlMs: 5 * 60_000 });\nif (!replay.accept(nonce)) throw new Error(\"replay\");\n```\n\n## Why bundle?\n\nAll 3 modules belong to the same domain (service-trust) and tend to evolve together. Single repo = single PR = single review. Each subpath is independently importable for tree-shaking.\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md). Security issues: please follow [SECURITY.md](./SECURITY.md).\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}