{"_id":"@aegisjsproject/secret-store","_rev":"4-25b2742511a91c3911b32406f96efebb","name":"@aegisjsproject/secret-store","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@aegisjsproject/secret-store","version":"1.0.0","keywords":["aegis","secure","crypto","secret-store"],"author":{"name":"Chris Zuber","email":"admin@kernvalley.us"},"license":"MIT","_id":"@aegisjsproject/secret-store@1.0.0","maintainers":[{"name":"shgysk8zer0","email":"shgysk8zer0@gmail.com"}],"homepage":"https://github.com/AegisJSProject/secret-store#readme","bugs":{"url":"https://github.com/AegisJSProject/secret-store/issues"},"dist":{"shasum":"57a401ac0ef63f3fadcd0b53b5e51e8fbef847c3","tarball":"https://registry.npmjs.org/@aegisjsproject/secret-store/-/secret-store-1.0.0.tgz","fileCount":8,"integrity":"sha512-pLLB5CMxd2bPqrU/rx706WUg/Hp0dnuR+8wZupRTN7dECXM1AUTxwHmnxQCF8BmQrjKX1oD8jpPM8wScv4cMIg==","signatures":[{"sig":"MEUCID6WB4Yk3/svkfUGw8+dcu6TE8DvDmfTOzYzGw6gbindAiEA+Tj1QHArpPTQrTdiRDiD4u7ld3cFLqH/IDc9SB+dZAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aegisjsproject%2fsecret-store@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20048},"main":"./secret-store.cjs","type":"module","unpkg":"./secret-store.min.js","module":"./secret-store.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./secret-store.js","require":"./secret-store.cjs"},"./*":{"import":"./*.js","require":"./*.cjs"},"./*.js":{"import":"./*.js","require":"./*.cjs"},"./*.cjs":{"import":"./*.js","require":"./*.cjs"},"./*.mjs":{"import":"./*.js","require":"./*.cjs"}},"funding":[{"url":"https://liberapay.com/shgysk8zer0","type":"librepay"},{"url":"https://github.com/sponsors/shgysk8zer0","type":"github"}],"gitHead":"74bd6943d571ca94777a47b0864c87eead6aec2e","private":false,"scripts":{"test":"npm run lint:js && npm run run:tests && npm run build","build":"npm run build:js","clean":"rm -f ./*.cjs","fix:js":"eslint . --fix","lint:js":"eslint .","prepare":"npm run build","build:js":"npm run clean && rollup -c rollup.config.js","coverage":"node --test --experimental-test-coverage","run:tests":"node --test","preversion":"npm test","create:lock":"npm i --package-lock-only --ignore-scripts --no-audit --no-fund","version:bump":"npm run version:bump:patch","version:bump:major":"npm version --no-git-tag-version major && npm run create:lock","version:bump:minor":"npm version --no-git-tag-version minor && npm run create:lock","version:bump:patch":"npm version --no-git-tag-version patch && npm run create:lock"},"_npmUser":{"name":"shgysk8zer0","email":"shgysk8zer0@gmail.com"},"repository":{"url":"git+https://github.com/AegisJSProject/secret-store.git","type":"git"},"_npmVersion":"10.1.0","description":"Proxy-based wrapper for encrypting and decrypting data over any storage object","directories":{},"_nodeVersion":"20.9.0","dependencies":{"@shgysk8zer0/aes-gcm":"^1.0.8","@rollup/plugin-terser":"^0.4.4"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.34.0","rollup":"^4.50.0","http-server":"^14.1.1","@shgysk8zer0/polyfills":"^0.4.12","@shgysk8zer0/eslint-config":"^1.0.4","@shgysk8zer0/rollup-import":"^1.2.6"},"_npmOperationalInternal":{"tmp":"tmp/secret-store_1.0.0_1757008026138_0.6808150795931289","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aegisjsproject/secret-store","version":"1.0.1","keywords":["aegis","secure","crypto","secret-store"],"author":{"name":"Chris Zuber","email":"admin@kernvalley.us"},"license":"MIT","_id":"@aegisjsproject/secret-store@1.0.1","maintainers":[{"name":"shgysk8zer0","email":"shgysk8zer0@gmail.com"}],"homepage":"https://github.com/AegisJSProject/secret-store#readme","bugs":{"url":"https://github.com/AegisJSProject/secret-store/issues"},"dist":{"shasum":"2c74d27c6046741097c85ddab985408a431127fd","tarball":"https://registry.npmjs.org/@aegisjsproject/secret-store/-/secret-store-1.0.1.tgz","fileCount":8,"integrity":"sha512-s8CEAj+0rNohvyUIzOZ31e/ob5yLnOjFwOspn7UiY1mkhVEoWRsIhBn3pKpj1PsipIG6zYflHYE4CNo+dHneOg==","signatures":[{"sig":"MEYCIQC8gGXwj0IxHFjqYi1ua2k27IIlfWFLd4keN/xcuHh0aAIhAKGKRWPvKb1IOGfZY9OJqi7M9wfPQrEvvYQLUTMMno+2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aegisjsproject%2fsecret-store@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20045},"main":"./secret-store.cjs","type":"module","unpkg":"./secret-store.min.js","module":"./secret-store.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./secret-store.js","require":"./secret-store.cjs"},"./*":{"import":"./*.js","require":"./*.cjs"},"./*.js":{"import":"./*.js","require":"./*.cjs"},"./*.cjs":{"import":"./*.js","require":"./*.cjs"},"./*.mjs":{"import":"./*.js","require":"./*.cjs"}},"funding":[{"url":"https://liberapay.com/shgysk8zer0","type":"librepay"},{"url":"https://github.com/sponsors/shgysk8zer0","type":"github"}],"gitHead":"0dec822c40145bece18b91b3d75f060b17d454d4","private":false,"scripts":{"test":"npm run lint:js && npm run run:tests && npm run build","build":"npm run build:js","clean":"rm -f ./*.cjs","fix:js":"eslint . --fix","lint:js":"eslint .","prepare":"npm run build","build:js":"npm run clean && rollup -c rollup.config.js","coverage":"node --test --experimental-test-coverage","run:tests":"node --test","preversion":"npm test","create:lock":"npm i --package-lock-only --ignore-scripts --no-audit --no-fund","version:bump":"npm run version:bump:patch","version:bump:major":"npm version --no-git-tag-version major && npm run create:lock","version:bump:minor":"npm version --no-git-tag-version minor && npm run create:lock","version:bump:patch":"npm version --no-git-tag-version patch && npm run create:lock"},"_npmUser":{"name":"shgysk8zer0","email":"shgysk8zer0@gmail.com"},"repository":{"url":"git+https://github.com/AegisJSProject/secret-store.git","type":"git"},"_npmVersion":"10.1.0","description":"Proxy-based wrapper for encrypting and decrypting data over any storage object","directories":{},"_nodeVersion":"20.9.0","dependencies":{"@shgysk8zer0/aes-gcm":"^1.0.8","@rollup/plugin-terser":"^0.4.4"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.34.0","rollup":"^4.50.0","http-server":"^14.1.1","@shgysk8zer0/polyfills":"^0.4.12","@shgysk8zer0/eslint-config":"^1.0.4","@shgysk8zer0/rollup-import":"^1.2.6"},"_npmOperationalInternal":{"tmp":"tmp/secret-store_1.0.1_1757021839726_0.260354308143788","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aegisjsproject/secret-store","version":"1.1.0","keywords":["aegis","secure","crypto","secret-store"],"author":{"name":"Chris Zuber","email":"admin@kernvalley.us"},"license":"MIT","_id":"@aegisjsproject/secret-store@1.1.0","maintainers":[{"name":"shgysk8zer0","email":"shgysk8zer0@gmail.com"}],"homepage":"https://github.com/AegisJSProject/secret-store#readme","bugs":{"url":"https://github.com/AegisJSProject/secret-store/issues"},"dist":{"shasum":"53ad6d16db442cfcc9027dd5b1906f2d6ff0a4eb","tarball":"https://registry.npmjs.org/@aegisjsproject/secret-store/-/secret-store-1.1.0.tgz","fileCount":8,"integrity":"sha512-RBm0zZx4/uHg7JUND60CeEjTdKC2DAKilpedlMEDrRX/KKW2/MuMEcZlf4aQbVi3V55kYhaHCdrfCMxrWpr1tQ==","signatures":[{"sig":"MEYCIQCMfJQP50plFK36UrL4sZPzeDLNnIiE/ZCcZa5YFN8ovAIhAN31rrLlRpgkep4wW6jaDRq6eoUGra2BsB6sKxyc05vY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aegisjsproject%2fsecret-store@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43704},"main":"./secret-store.cjs","type":"module","unpkg":"./secret-store.min.js","module":"./secret-store.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./secret-store.js","require":"./secret-store.cjs"},"./*":{"import":"./*.js","require":"./*.cjs"},"./*.js":{"import":"./*.js","require":"./*.cjs"},"./*.cjs":{"import":"./*.js","require":"./*.cjs"},"./*.mjs":{"import":"./*.js","require":"./*.cjs"}},"funding":[{"url":"https://liberapay.com/shgysk8zer0","type":"librepay"},{"url":"https://github.com/sponsors/shgysk8zer0","type":"github"}],"gitHead":"73c9f11e60c50b8832c5cb462860b562be4d2664","private":false,"scripts":{"test":"npm run lint:js && npm run run:tests && npm run build","build":"npm run build:js","clean":"rm -f ./*.cjs","fix:js":"eslint . --fix","lint:js":"eslint .","prepare":"npm run build","build:js":"npm run clean && rollup -c rollup.config.js","coverage":"node --test --experimental-test-coverage","run:tests":"node --test","preversion":"npm test","create:lock":"npm i --package-lock-only --ignore-scripts --no-audit --no-fund","version:bump":"npm run version:bump:patch","version:bump:major":"npm version --no-git-tag-version major && npm run create:lock","version:bump:minor":"npm version --no-git-tag-version minor && npm run create:lock","version:bump:patch":"npm version --no-git-tag-version patch && npm run create:lock"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60a67505-7756-4ced-ad77-6ea4db48615c"}},"repository":{"url":"git+https://github.com/AegisJSProject/secret-store.git","type":"git"},"_npmVersion":"11.6.2","description":"Proxy-based wrapper for encrypting and decrypting data over any storage object","directories":{},"_nodeVersion":"25.3.0","dependencies":{"@shgysk8zer0/aes-gcm":"^1.0.8","@rollup/plugin-terser":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","rollup":"^4.60.1","http-server":"^14.1.1","@shgysk8zer0/eslint-config":"^1.0.9","@shgysk8zer0/rollup-import":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/secret-store_1.1.0_1774996065918_0.525689764085318","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@aegisjsproject/secret-store","version":"1.1.1","description":"Proxy-based wrapper for encrypting and decrypting data over any storage object","keywords":["aegis","secure","crypto","secret-store"],"type":"module","main":"./secret-store.cjs","module":"./secret-store.js","unpkg":"./secret-store.min.js","exports":{".":{"import":"./secret-store.js","require":"./secret-store.cjs"},"./*.js":{"import":"./*.js","require":"./*.cjs"},"./*.mjs":{"import":"./*.js","require":"./*.cjs"},"./*.cjs":{"import":"./*.js","require":"./*.cjs"},"./*":{"import":"./*.js","require":"./*.cjs"}},"engines":{"node":">=18.0.0"},"private":false,"scripts":{"test":"npm run lint:js && npm run run:tests && npm run build","preversion":"npm test","prepare":"npm run build","lint:js":"eslint .","fix:js":"eslint . --fix","build":"npm run build:js","run:tests":"node --test","coverage":"node --test --experimental-test-coverage","clean":"rm -f ./*.cjs","build:js":"npm run clean && rollup -c rollup.config.js","create:lock":"npm i --package-lock-only --ignore-scripts --no-audit --no-fund","version:bump":"npm run version:bump:patch","version:bump:patch":"npm version --no-git-tag-version patch && npm run create:lock","version:bump:minor":"npm version --no-git-tag-version minor && npm run create:lock","version:bump:major":"npm version --no-git-tag-version major && npm run create:lock"},"repository":{"type":"git","url":"git+https://github.com/AegisJSProject/secret-store.git"},"author":{"name":"Chris Zuber","email":"admin@kernvalley.us"},"license":"MIT","funding":[{"type":"librepay","url":"https://liberapay.com/shgysk8zer0"},{"type":"github","url":"https://github.com/sponsors/shgysk8zer0"}],"bugs":{"url":"https://github.com/AegisJSProject/secret-store/issues"},"homepage":"https://github.com/AegisJSProject/secret-store#readme","devDependencies":{"@shgysk8zer0/eslint-config":"^1.0.9","@shgysk8zer0/rollup-import":"^2.0.3","eslint":"^10.1.0","http-server":"^14.1.1","rollup":"^4.60.1"},"dependencies":{"@rollup/plugin-terser":"^1.0.0","@shgysk8zer0/aes-gcm":"^1.0.8"},"gitHead":"56affa485293d9c9b4b7d7988e08f45cd58906cc","_id":"@aegisjsproject/secret-store@1.1.1","_nodeVersion":"25.3.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-SnukagcEEqsKLIXxqEgNNy1oqO5zIe7pINcUt4ajHjSAW06SMp8S8+tbsMybAOcSrK3c3LONO6wqzPEw7X/riA==","shasum":"f880a4406cd516b86239c72372925150d009c381","tarball":"https://registry.npmjs.org/@aegisjsproject/secret-store/-/secret-store-1.1.1.tgz","fileCount":8,"unpackedSize":44692,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aegisjsproject%2fsecret-store@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDFA9Tv6QF+YhlYLRQ1XdwjiWWc4b+60FZ24O4eGJ5z0AiEAyl/vV26LlItQNI8P2DYusIpi+uGmxejg6nQspwLaa2A="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:60a67505-7756-4ced-ad77-6ea4db48615c"}},"directories":{},"maintainers":[{"name":"shgysk8zer0","email":"shgysk8zer0@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/secret-store_1.1.1_1774999905342_0.9012184543109159"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-04T17:47:06.061Z","modified":"2026-03-31T23:31:45.846Z","1.0.0":"2025-09-04T17:47:06.329Z","1.0.1":"2025-09-04T21:37:19.920Z","1.1.0":"2026-03-31T22:27:46.073Z","1.1.1":"2026-03-31T23:31:45.493Z"},"bugs":{"url":"https://github.com/AegisJSProject/secret-store/issues"},"author":{"name":"Chris Zuber","email":"admin@kernvalley.us"},"license":"MIT","homepage":"https://github.com/AegisJSProject/secret-store#readme","keywords":["aegis","secure","crypto","secret-store"],"repository":{"type":"git","url":"git+https://github.com/AegisJSProject/secret-store.git"},"description":"Proxy-based wrapper for encrypting and decrypting data over any storage object","maintainers":[{"name":"shgysk8zer0","email":"shgysk8zer0@gmail.com"}],"readme":"# `@aegisjsproject/secret-store`\n\nProxy-based wrapper for encrypting and decrypting data over any storage object\n\n[![CodeQL](https://@github.com/AegisJSProject/secret-store/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/shgysk8zer0/npm-template/actions/workflows/codeql-analysis.yml)\n![Node CI](https://@github.com/AegisJSProject/secret-store/workflows/Node%20CI/badge.svg)\n![Lint Code Base](https://@github.com/AegisJSProject/secret-store/workflows/Lint%20Code%20Base/badge.svg)\n\n[![GitHub license](https://img.shields.io/github/license/AegisJSProject/secret-store.svg)](https://@github.com/AegisJSProject/secret-store/blob/master/LICENSE)\n[![GitHub last commit](https://img.shields.io/github/last-commit/AegisJSProject/secret-store.svg)](https://@github.com/AegisJSProject/secret-store/commits/master)\n[![GitHub release](https://img.shields.io/github/release/AegisJSProject/secret-store?logo=github)](https://@github.com/AegisJSProject/secret-store/releases)\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/shgysk8zer0?logo=github)](https://github.com/sponsors/shgysk8zer0)\n\n[![npm](https://img.shields.io/npm/v/@aegisjsproject/secret-store)](https://www.npmjs.com/package/@aegisjsproject/secret-store)\n![node-current](https://img.shields.io/node/v/@aegisjsproject/secret-store)\n![NPM Unpacked Size](https://img.shields.io/npm/unpacked-size/%40aegisjsproject%secret-store)\n[![npm](https://img.shields.io/npm/dw/@aegisjsproject/secret-store?logo=npm)](https://www.npmjs.com/package/@aegisjsproject/secret-store)\n\n[![GitHub followers](https://img.shields.io/github/followers/AegisJSProject.svg?style=social)](https://github.com/AegisJSProject)\n![GitHub forks](https://img.shields.io/github/forks/AegisJSProject/secret-store.svg?style=social)\n![GitHub stars](https://img.shields.io/github/stars/AegisJSProject/secret-store.svg?style=social)\n[![Twitter Follow](https://img.shields.io/twitter/follow/shgysk8zer0.svg?style=social)](https://twitter.com/shgysk8zer0)\n\n[![Donate using Liberapay](https://img.shields.io/liberapay/receives/shgysk8zer0.svg?logo=liberapay)](https://liberapay.com/shgysk8zer0/donate \"Donate using Liberapay\")\n- - -\n\n- [Code of Conduct](./.github/CODE_OF_CONDUCT.md)\n- [Contributing](./.github/CONTRIBUTING.md)\n<!-- - [Security Policy](./.github/SECURITY.md) -->\n\n## Installation\n\n### npm\n```bash\nnpm install @aegisjsproject/secret-store\n```\n\n### `<script type=\"importmap\">`\n\n```html\n<script type=\"importmap\">\n{\n  \"imports\": {\n    \"@aegisjsproject/secret-store\": \"https://unpkg.com/@aegisjsproject/secret-store/secret-store.min.js\",\n    \"@shgysk8zer0/aes-gcm\": \"https://unpkg.com/@shgysk8zer0/aes-gcm/aes-gcm.min.js\"\n  }\n}\n</script>\n```\n\n## API\n\n### `useSecretStore(key, targetObject, handler)`\n\nCreates an encrypted proxy around an object where values are automatically encrypted on set and decrypted on get.\n\n**Parameters:**\n- `key` - CryptoKey with decrypt usage (encrypt usage required for setter)\n- `targetObject` - Object to wrap (defaults to `process.env`)\n- `handler` - ProxyHandler (defaults to `Reflect`)\n\n**Returns:** `[proxy, setter]` - Frozen array containing the proxy and async setter function\n\n**Throws:** TypeError if key lacks decrypt usage\n\n### `openSecretStoreFile(key, path, config)`\n\nNode.js only. Loads and wraps a JSON file as an encrypted store.\n\n**Parameters:**\n- `key` - CryptoKey \n- `path` - File path string\n- `config.encoding` - File encoding (default: \"utf8\")\n- `config.handler` - ProxyHandler (default: `Reflect`)\n- `config.signal` - AbortSignal for cancellation\n\n**Returns:** Promise resolving to `[proxy, setter]`\n\n## Usage\n\n```js\nimport { useSecretStore, openSecretStoreFile } from '@aegisjsproject/secret-store';\n\n// Generate key\nconst key = await crypto.subtle.generateKey(\n  { name: 'AES-GCM', length: 256 },\n  false,\n  ['encrypt', 'decrypt']\n);\n\n// Create store\nconst [store, set] = useSecretStore(key, {});\n\n// Values are encrypted when set, decrypted when accessed\nawait set('password', 'secret123');\nconst password = await store.password; // 'secret123'\n\n// Load from file (Node.js)\nconst [fileStore] = await openSecretStoreFile(key, './secrets.json');\n```\n","readmeFilename":"README.md"}