{"_id":"node-env-resolver-dotenvx","_rev":"9-db1e3c3f040554f6186115c338dc3d6d","name":"node-env-resolver-dotenvx","dist-tags":{"latest":"3.0.0"},"versions":{"1.0.0":{"name":"node-env-resolver-dotenvx","version":"1.0.0","keywords":["dotenvx","dotenv","encrypted","keychain","secrets","environment","env","config","node-env-resolver"],"author":{"url":"https://jagreehal.com","name":"Jagvinder Singh Reehal","email":"jag@jagreehal.com"},"license":"MIT","_id":"node-env-resolver-dotenvx@1.0.0","maintainers":[{"name":"jagreehal","email":"jag.reehal@gmail.com"}],"homepage":"https://github.com/jagreehal/node-env-resolver#readme","bugs":{"url":"https://github.com/jagreehal/node-env-resolver/issues"},"dist":{"shasum":"6fc502c29b259b7b5393e1b486702b35718a54ee","tarball":"https://registry.npmjs.org/node-env-resolver-dotenvx/-/node-env-resolver-dotenvx-1.0.0.tgz","fileCount":16,"integrity":"sha512-vzwQJi0jTvfnQKzdwQBHQZbvpWRvx+mdYt5DoeOk0l2bYuB8fTtOeeJO0GoGwJTWCpGKdJbC9Z6MNlPm/HLCrg==","signatures":[{"sig":"MEUCIHritarhZizAnJg8EwNOXY/cEFlr18Q70XG6o82BDys1AiEApL4eGg7NnZsoo1qDvf6/4pTF7De/+BSdVzIKM/EMCvY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47331},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./handlers":{"types":"./dist/handlers.d.ts","import":"./dist/handlers.js","default":"./dist/handlers.js","require":"./dist/handlers.cjs"}},"gitHead":"4bc2c7b9c4f3effb7eab56002d3c8ebf89c44412","scripts":{"lint":"eslint src/","test":"vitest run","build":"NODE_ENV=production tsup","format":"prettier --write \"**/*.{ts,tsx,md}\"","build:dev":"tsup","build:dts":"tsc --emitDeclarationOnly","type-check":"tsc -p tsconfig.json --noEmit","prepublishOnly":"pnpm build && pnpm type-check"},"_npmUser":{"name":"jagreehal","email":"jag.reehal@gmail.com"},"repository":{"url":"git+https://github.com/jagreehal/node-env-resolver.git","type":"git","directory":"packages/node-env-resolver-dotenvx"},"_npmVersion":"11.6.2","description":"Dotenvx and OS Keychain resolvers for node-env-resolver (encrypted .env files, keychain:// secret references)","directories":{},"sideEffects":false,"_nodeVersion":"24.12.0","dependencies":{"@dotenvx/dotenvx":"^1.61.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["./dist/index.d.ts"],"handlers":["./dist/handlers.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.2.0","vitest":"^4.1.4","prettier":"^3.8.2","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^25.6.0","node-env-resolver":"workspace:*","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.58.1","@typescript-eslint/eslint-plugin":"^8.58.1"},"peerDependencies":{"node-env-resolver":"^6.4.0"},"_npmOperationalInternal":{"tmp":"tmp/node-env-resolver-dotenvx_1.0.0_1776628497355_0.4180698550941786","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"node-env-resolver-dotenvx","version":"2.0.0","keywords":["dotenvx","dotenv","encrypted","keychain","secrets","environment","env","config","node-env-resolver"],"author":{"url":"https://jagreehal.com","name":"Jagvinder Singh Reehal","email":"jag@jagreehal.com"},"license":"MIT","_id":"node-env-resolver-dotenvx@2.0.0","maintainers":[{"name":"jagreehal","email":"jag.reehal@gmail.com"}],"homepage":"https://github.com/jagreehal/node-env-resolver#readme","bugs":{"url":"https://github.com/jagreehal/node-env-resolver/issues"},"dist":{"shasum":"e98cc67b71308053a73543f9ccb4dc74401c6442","tarball":"https://registry.npmjs.org/node-env-resolver-dotenvx/-/node-env-resolver-dotenvx-2.0.0.tgz","fileCount":12,"integrity":"sha512-ICil02t+RFC9iMoH3hwzFvnBCipVLqTUDV9XKLTaR6Jn41QWJch34AnEYCOR8VjlR/U140z+5vFwZDdlkOYBYg==","signatures":[{"sig":"MEQCIGl5F2Iek2Y032HEjeVQC1oiL8XoqejJHU05kyHATFyCAiBwU4kOsBac38TvOiO5KMRrVFHyIKCNe4+wqKB8v56o8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/node-env-resolver-dotenvx@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36530},"main":"./dist/index.js","type":"module","_from":"file:node-env-resolver-dotenvx-2.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./handlers":{"types":"./dist/handlers.d.ts","import":"./dist/handlers.js","default":"./dist/handlers.js","require":"./dist/handlers.cjs"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"NODE_ENV=production tsup","format":"prettier --write \"**/*.{ts,tsx,md}\"","build:dev":"tsup","build:dts":"tsc --emitDeclarationOnly","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e734b3ea-a867-40bd-992e-2ae8247ee018"}},"_resolved":"/tmp/ae33bf33fd81477a1b614b6ba6ce9eed/node-env-resolver-dotenvx-2.0.0.tgz","_integrity":"sha512-ICil02t+RFC9iMoH3hwzFvnBCipVLqTUDV9XKLTaR6Jn41QWJch34AnEYCOR8VjlR/U140z+5vFwZDdlkOYBYg==","repository":{"url":"git+https://github.com/jagreehal/node-env-resolver.git","type":"git","directory":"packages/node-env-resolver-dotenvx"},"_npmVersion":"11.12.1","description":"Dotenvx and OS Keychain resolvers for node-env-resolver (encrypted .env files, keychain:// secret references)","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@dotenvx/dotenvx":"^1.61.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["./dist/index.d.ts"],"handlers":["./dist/handlers.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.2.0","vitest":"^4.1.4","prettier":"^3.8.2","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^25.6.0","node-env-resolver":"6.5.0","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.58.1","@typescript-eslint/eslint-plugin":"^8.58.1"},"peerDependencies":{"node-env-resolver":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/node-env-resolver-dotenvx_2.0.0_1776837232315_0.6583078733470245","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"node-env-resolver-dotenvx","version":"1.0.1","keywords":["dotenvx","dotenv","encrypted","keychain","secrets","environment","env","config","node-env-resolver"],"author":{"url":"https://jagreehal.com","name":"Jagvinder Singh Reehal","email":"jag@jagreehal.com"},"license":"MIT","_id":"node-env-resolver-dotenvx@1.0.1","maintainers":[{"name":"jagreehal","email":"jag.reehal@gmail.com"}],"dist":{"shasum":"f57005d993f3648baef94c85a4ec3af05eca1dcc","tarball":"https://registry.npmjs.org/node-env-resolver-dotenvx/-/node-env-resolver-dotenvx-1.0.1.tgz","fileCount":20,"integrity":"sha512-yPjwIopPtsznU1nYbS9JbOZCaKdC6QMTF5E7IcUEmyqXOgNmmfwlYCOAgIcElTVewk6wr7HqrciLLDczevT/XA==","signatures":[{"sig":"MEQCIEeuagPVJmiFhvDCtw3ix3uR5s4NmnHPaTjFKsFDduBtAiBkbQ9fZHI6drsZOdPocLWdAeaRzp4bMHO74EHV3CGmMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/node-env-resolver-dotenvx@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4566349},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./handlers":{"types":"./dist/handlers.d.ts","import":"./dist/handlers.js","default":"./dist/handlers.js","require":"./dist/handlers.cjs"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"NODE_ENV=production tsup","format":"prettier --write \"**/*.{ts,tsx,md}\"","build:dev":"tsup","build:dts":"tsc --emitDeclarationOnly","type-check":"tsc -p tsconfig.json --noEmit","prepublishOnly":"pnpm build && pnpm type-check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e734b3ea-a867-40bd-992e-2ae8247ee018"}},"deprecated":"SECURITY: compromised supply-chain build (2026-06-04 worm) — do not use; upgrade to a known-good release.","repository":{"url":"https://github.com/jagreehal/node-env-resolver.git","type":"git","directory":"packages/node-env-resolver-dotenvx"},"description":"Dotenvx and OS Keychain resolvers for node-env-resolver (encrypted .env files, keychain:// secret references)","directories":{},"sideEffects":false,"dependencies":{"@dotenvx/dotenvx":"^1.61.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["./dist/index.d.ts"],"handlers":["./dist/handlers.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.2.0","vitest":"^4.1.4","prettier":"^3.8.2","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^25.6.0","node-env-resolver":"workspace:*","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.58.1","@typescript-eslint/eslint-plugin":"^8.58.1"},"peerDependencies":{"node-env-resolver":"^6.4.0"},"_npmOperationalInternal":{"tmp":"tmp/node-env-resolver-dotenvx_1.0.1_1780532817689_0.6206914265603722","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"node-env-resolver-dotenvx","version":"2.0.1","keywords":["dotenvx","dotenv","encrypted","keychain","secrets","environment","env","config","node-env-resolver"],"author":{"url":"https://jagreehal.com","name":"Jagvinder Singh Reehal","email":"jag@jagreehal.com"},"license":"MIT","_id":"node-env-resolver-dotenvx@2.0.1","maintainers":[{"name":"jagreehal","email":"jag.reehal@gmail.com"}],"dist":{"shasum":"34da3bd784fc44a269ab4d4f426215599a7f6f46","tarball":"https://registry.npmjs.org/node-env-resolver-dotenvx/-/node-env-resolver-dotenvx-2.0.1.tgz","fileCount":16,"integrity":"sha512-RoF76XKqRDi+Jee4FK/tFmjp+mdcWR++awOht+ynDcI8qHOIKAtymxoa6M3FtQhLy7ODfqPFYlVbZclRMo5rVw==","signatures":[{"sig":"MEYCIQDlUidh2VZ9o1KJbT8X+Nr7KTQxqUJIVgi9CmXZ14FSGQIhAPaIdswi+da9djLo9tp2xFX3ne+nKfKas9aHC3216XI/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/node-env-resolver-dotenvx@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4555382},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./handlers":{"types":"./dist/handlers.d.ts","import":"./dist/handlers.js","default":"./dist/handlers.js","require":"./dist/handlers.cjs"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"NODE_ENV=production tsup","format":"prettier --write \"**/*.{ts,tsx,md}\"","build:dev":"tsup","build:dts":"tsc --emitDeclarationOnly","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e734b3ea-a867-40bd-992e-2ae8247ee018"}},"deprecated":"SECURITY: compromised supply-chain build (2026-06-04 worm) — do not use; upgrade to a known-good release.","repository":{"url":"https://github.com/jagreehal/node-env-resolver.git","type":"git","directory":"packages/node-env-resolver-dotenvx"},"description":"Dotenvx and OS Keychain resolvers for node-env-resolver (encrypted .env files, keychain:// secret references)","directories":{},"sideEffects":false,"dependencies":{"@dotenvx/dotenvx":"^1.61.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["./dist/index.d.ts"],"handlers":["./dist/handlers.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.2.0","vitest":"^4.1.4","prettier":"^3.8.2","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^25.6.0","node-env-resolver":"6.5.0","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.58.1","@typescript-eslint/eslint-plugin":"^8.58.1"},"peerDependencies":{"node-env-resolver":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/node-env-resolver-dotenvx_2.0.1_1780532828872_0.6374009639061593","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"node-env-resolver-dotenvx","version":"2.0.2","keywords":["dotenvx","dotenv","encrypted","keychain","secrets","environment","env","config","node-env-resolver"],"author":{"url":"https://jagreehal.com","name":"Jagvinder Singh Reehal","email":"jag@jagreehal.com"},"license":"MIT","_id":"node-env-resolver-dotenvx@2.0.2","maintainers":[{"name":"jagreehal","email":"jag.reehal@gmail.com"}],"homepage":"https://github.com/jagreehal/node-env-resolver#readme","bugs":{"url":"https://github.com/jagreehal/node-env-resolver/issues"},"dist":{"shasum":"6d0c4324cba70957b0488eb1de7ec68526f1bff0","tarball":"https://registry.npmjs.org/node-env-resolver-dotenvx/-/node-env-resolver-dotenvx-2.0.2.tgz","fileCount":12,"integrity":"sha512-8Zzs87+83Ae327GAWwkZKugGDq0FS+1jUxY76k29MpwR+a6rz8YCVaaASBoI/oWxUcSaiFKqtUC5P5DlqHfw7A==","signatures":[{"sig":"MEYCIQC1Vjdt1gbOSc7Y+oQXBeKFDHPKYqtD43NvSqsLDThJUQIhAPGfo884VFPTxwKmE+M9TtsPqFy+n2Y2P+ceDidy+caJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36530},"main":"./dist/index.js","type":"module","_from":"file:node-env-resolver-dotenvx-2.0.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./handlers":{"types":"./dist/handlers.d.ts","import":"./dist/handlers.js","default":"./dist/handlers.js","require":"./dist/handlers.cjs"}},"scripts":{"lint":"eslint src/","test":"vitest run","build":"NODE_ENV=production tsup","format":"prettier --write \"**/*.{ts,tsx,md}\"","build:dev":"tsup","build:dts":"tsc --emitDeclarationOnly","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"jagreehal","email":"jag.reehal@gmail.com"},"_resolved":"/private/var/folders/sp/__ydkqk53ss4hb4k3wbv1wbc0000gn/T/676f0c81b9938c73ee3cdc3af2d1aef4/node-env-resolver-dotenvx-2.0.2.tgz","_integrity":"sha512-8Zzs87+83Ae327GAWwkZKugGDq0FS+1jUxY76k29MpwR+a6rz8YCVaaASBoI/oWxUcSaiFKqtUC5P5DlqHfw7A==","repository":{"url":"git+https://github.com/jagreehal/node-env-resolver.git","type":"git","directory":"packages/node-env-resolver-dotenvx"},"_npmVersion":"11.13.0","description":"Dotenvx and OS Keychain resolvers for node-env-resolver (encrypted .env files, keychain:// secret references)","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"@dotenvx/dotenvx":"^1.61.1"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"*":["./dist/index.d.ts"],"handlers":["./dist/handlers.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.2.0","vitest":"^4.1.4","prettier":"^3.8.2","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^25.6.0","node-env-resolver":"6.5.2","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.58.1","@typescript-eslint/eslint-plugin":"^8.58.1"},"peerDependencies":{"node-env-resolver":"^6.5.0"},"_npmOperationalInternal":{"tmp":"tmp/node-env-resolver-dotenvx_2.0.2_1780866123621_0.8439562682831669","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"node-env-resolver-dotenvx","version":"3.0.0","description":"Dotenvx and OS Keychain resolvers for node-env-resolver (encrypted .env files, keychain:// secret references)","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","default":"./dist/index.js"},"./handlers":{"types":"./dist/handlers.d.ts","import":"./dist/handlers.js","require":"./dist/handlers.cjs","default":"./dist/handlers.js"}},"typesVersions":{"*":{"*":["./dist/index.d.ts"],"handlers":["./dist/handlers.d.ts"]}},"keywords":["dotenvx","dotenv","encrypted","keychain","secrets","environment","env","config","node-env-resolver"],"author":{"name":"Jagvinder Singh Reehal","email":"jag@jagreehal.com","url":"https://jagreehal.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/jagreehal/node-env-resolver.git","directory":"packages/node-env-resolver-dotenvx"},"sideEffects":false,"engines":{"node":">=18"},"dependencies":{"@dotenvx/dotenvx":"^1.71.0"},"peerDependencies":{"node-env-resolver":"^6.6.0"},"publishConfig":{"access":"public"},"devDependencies":{"@eslint/js":"^10.0.1","@types/node":"^25.9.2","@typescript-eslint/eslint-plugin":"^8.60.1","@typescript-eslint/parser":"^8.60.1","eslint":"^10.4.1","eslint-config-prettier":"^10.1.8","prettier":"^3.8.3","tsup":"^8.5.1","typescript":"^6.0.3","vitest":"^4.1.8","node-env-resolver":"6.6.0"},"scripts":{"build":"NODE_ENV=production tsup","build:dev":"tsup","build:dts":"tsc --emitDeclarationOnly","type-check":"tsc -p tsconfig.json --noEmit","lint":"eslint src/","test":"vitest run","format":"prettier --write \"**/*.{ts,tsx,md}\""},"_id":"node-env-resolver-dotenvx@3.0.0","bugs":{"url":"https://github.com/jagreehal/node-env-resolver/issues"},"homepage":"https://github.com/jagreehal/node-env-resolver#readme","_integrity":"sha512-Bc5+xhNM6nVMpkCbC0j5TkdgKlkIsTrMVYGQto8M2yDENkizESSLntU8oqEFgEHE+4y2XeVW93lTRsk2SaqeOg==","_resolved":"/tmp/f3d25812c6f6c97fccc6c0b63992d77f/node-env-resolver-dotenvx-3.0.0.tgz","_from":"file:node-env-resolver-dotenvx-3.0.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.16.0","dist":{"integrity":"sha512-Bc5+xhNM6nVMpkCbC0j5TkdgKlkIsTrMVYGQto8M2yDENkizESSLntU8oqEFgEHE+4y2XeVW93lTRsk2SaqeOg==","shasum":"82f147832746be215a510be27d8043703c3a228a","tarball":"https://registry.npmjs.org/node-env-resolver-dotenvx/-/node-env-resolver-dotenvx-3.0.0.tgz","fileCount":12,"unpackedSize":36530,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/node-env-resolver-dotenvx@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCWHpr9T+OFZG/A4jfbtbG1PUWxj0O1zkyTw5hLxzZT5QIgToC0cipD8Cvw9mHAvxQ3s7sQh/7IoGQgRqYOV6N/2FI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9592c85f-644c-4af4-93b1-3586a4466d7e"}},"directories":{},"maintainers":[{"name":"jagreehal","email":"jag.reehal@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-env-resolver-dotenvx_3.0.0_1781161200750_0.62449554961995"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-19T19:54:57.289Z","modified":"2026-06-11T07:00:01.164Z","1.0.0":"2026-04-19T19:54:57.523Z","2.0.0":"2026-04-22T05:53:52.449Z","1.0.1":"2026-06-04T00:26:57.948Z","2.0.1":"2026-06-04T00:27:09.049Z","2.0.2":"2026-06-07T21:02:03.786Z","3.0.0":"2026-06-11T07:00:00.887Z"},"bugs":{"url":"https://github.com/jagreehal/node-env-resolver/issues"},"author":{"name":"Jagvinder Singh Reehal","email":"jag@jagreehal.com","url":"https://jagreehal.com"},"license":"MIT","homepage":"https://github.com/jagreehal/node-env-resolver#readme","keywords":["dotenvx","dotenv","encrypted","keychain","secrets","environment","env","config","node-env-resolver"],"repository":{"type":"git","url":"git+https://github.com/jagreehal/node-env-resolver.git","directory":"packages/node-env-resolver-dotenvx"},"description":"Dotenvx and OS Keychain resolvers for node-env-resolver (encrypted .env files, keychain:// secret references)","maintainers":[{"name":"jagreehal","email":"jag.reehal@gmail.com"}],"readme":"# node-env-resolver-dotenvx\n\nDotenvx and OS Keychain integration for node-env-resolver. Load encrypted `.env` files and resolve secrets from OS credential stores.\n\n[![npm version](https://img.shields.io/npm/v/node-env-resolver-dotenvx)](https://www.npmjs.com/package/node-env-resolver-dotenvx)\n\n## Install\n\n```bash\nnpm install node-env-resolver-dotenvx\n```\n\n`@dotenvx/dotenvx` is included as a package dependency.\n\n## Why\n\nLocal `.env` files are plaintext — any malicious dependency, editor extension, or AI tool that can read your workspace gets your secrets. This package helps by:\n\n- Encrypting secrets at rest (dotenvx-encrypted `.env` files)\n- Supporting decryption keys from code/env/`.env.keys` for dotenvx files\n- Resolving `keychain://` references from macOS Keychain, Linux secret-tool, or Windows Credential Manager\n\nThis follows the pattern from the [dotenvx keychain blog post](https://dotenvx.com/blog/2026/04/02/dotenvx-keychain.html).\n\n## Quick start\n\n### One-line convenience functions\n\n```ts\nimport { resolveDotenvx } from 'node-env-resolver-dotenvx';\n\nconst config = await resolveDotenvx(\n  { path: '.env.local.secrets' },\n  { DATABASE_URL: postgres(), API_KEY: string() },\n);\n```\n\n### With resolveAsync() (combining sources)\n\n```ts\nimport { resolveAsync } from 'node-env-resolver';\nimport { processEnv } from 'node-env-resolver/resolvers';\nimport { dotenvx } from 'node-env-resolver-dotenvx';\n\nconst config = await resolveAsync({\n  resolvers: [\n    [processEnv(), { PORT: 3000 }],\n    [dotenvx('.env.local.secrets'), { DATABASE_URL: postgres() }],\n  ],\n});\n```\n\n### The keychain pattern (plain config + encrypted secrets)\n\n```ts\nimport { resolveAsync } from 'node-env-resolver';\nimport { processEnv } from 'node-env-resolver/resolvers';\nimport { dotenvxKeychain } from 'node-env-resolver-dotenvx';\nimport { createKeychainHandler } from 'node-env-resolver-dotenvx/handlers';\n\nconst config = await resolveAsync({\n  resolvers: [\n    [processEnv(), { PORT: 3000 }],\n    [dotenvxKeychain(), { DATABASE_URL: postgres() }],\n  ],\n  references: {\n    handlers: { keychain: createKeychainHandler() },\n  },\n});\n```\n\nThis loads:\n1. `.env.local` (plain config, feature flags, non-secrets)\n2. `.env.local.secrets` (encrypted, decrypted via dotenvx with key from `privateKey`, env, or `.env.keys`)\n\nAny schema value set to `keychain://<name>` resolves from your OS credential store.\n\nNote: `createKeychainHandler()` resolves `keychain://` references in config values. It does not automatically fetch and inject the dotenvx decryption key for `dotenvx()`/`dotenvxKeychain()`.\n\n## Features\n\n- Load encrypted `.env` files via `@dotenvx/dotenvx`\n- `dotenvxKeychain()` resolver for the plain + encrypted pattern\n- `keychain://` reference handler (macOS Keychain, Linux secret-tool, Windows Credential Manager)\n- One-line convenience functions (`resolveDotenvx`, `safeResolveDotenvx`)\n- Full TypeScript support\n- Sync and async loading\n\n## Resolvers\n\n### `dotenvx(options?)`\n\nLoad an encrypted `.env` file and decrypt it.\n\n```ts\nimport { dotenvx } from 'node-env-resolver-dotenvx';\n\n// Default path\nconst resolver = dotenvx();\n\n// Custom path\nconst resolver = dotenvx('.env.local.secrets');\n\n// With options\nconst resolver = dotenvx({\n  path: '.env.local.secrets',\n  overload: true,            // Override existing env vars (default: false)\n  privateKey: 'abc123...',   // Decryption key (or set DOTENV_PRIVATE_KEY env var)\n  envKeysFile: '../../.env.keys', // Custom keys file path\n});\n```\n\nThe decryption key can come from:\n1. `privateKey` option\n2. `DOTENV_PRIVATE_KEY` (or `DOTENV_PRIVATE_KEY_*`) environment variable\n3. `.env.keys` file (default or custom path via `envKeysFile`)\n\n### `dotenvxKeychain(options?)`\n\nLoad plain `.env.local` then encrypted `.env.local.secrets`. Secrets override plain values by default.\n\n```ts\nimport { dotenvxKeychain } from 'node-env-resolver-dotenvx';\n\n// Default: .env.local + .env.local.secrets\nconst resolver = dotenvxKeychain();\n\n// Custom paths\nconst resolver = dotenvxKeychain({\n  plainPath: '.env',\n  secretsPath: '.env.encrypted',\n  overload: true,\n  privateKey: 'abc123...',\n});\n```\n\n## Keychain Reference Handler\n\nUse `keychain://<name>` in your `.env` files to resolve values from OS credential stores:\n\n```dotenv\n# .env\nDATABASE_URL=keychain://prod/database-url\nAPI_KEY=keychain://prod/api-key\n```\n\n```ts\nimport { resolveAsync } from 'node-env-resolver';\nimport { processEnv } from 'node-env-resolver/resolvers';\nimport { createKeychainHandler } from 'node-env-resolver-dotenvx/handlers';\n\nconst config = await resolveAsync({\n  resolvers: [[processEnv(), schema]],\n  references: {\n    handlers: { keychain: createKeychainHandler() },\n  },\n});\n```\n\n### Platform support\n\n| Platform | Tool | Command |\n|----------|------|---------|\n| macOS | Keychain Access | `security find-generic-password` |\n| Linux | libsecret | `secret-tool lookup` |\n| Windows | Credential Manager | `Get-StoredCredential` (PowerShell) |\n\n### Storing secrets\n\n**macOS:**\n\n```bash\nsecurity add-generic-password -a \"prod/database-url\" -s \"node-env-resolver\" -w\n```\n\n**Linux:**\n\n```bash\nsecret-tool store --label=\"node-env-resolver\" service \"node-env-resolver\" account \"prod/database-url\"\n```\n\n**Windows (PowerShell):**\n\n```powershell\ncmdkey /generic:\"node-env-resolver\\prod\\database-url\" /user:\"prod/database-url\" /pass\n```\n\n### Handler options\n\n```ts\nconst handler = createKeychainHandler({\n  servicePrefix: 'myapp',          // Keychain service name (default: 'node-env-resolver')\n  platform: 'macos',               // Force platform: 'macos' | 'linux' | 'windows' | 'auto'\n});\n```\n\n### Pre-configured handler\n\n```ts\nimport { keychainHandler } from 'node-env-resolver-dotenvx/handlers';\n\n// Auto-detects platform\nconst config = await resolveAsync({\n  resolvers: [[processEnv(), schema]],\n  references: {\n    handlers: { keychain: keychainHandler },\n  },\n});\n```\n\n## Convenience functions\n\n### `resolveDotenvx(dotenvxOptions, schema, resolveOptions?)`\n\n```ts\nimport { resolveDotenvx } from 'node-env-resolver-dotenvx';\n\nconst config = await resolveDotenvx(\n  { path: '.env.local.secrets' },\n  { DATABASE_URL: postgres(), API_KEY: string() },\n);\n```\n\n### `safeResolveDotenvx(dotenvxOptions, schema, resolveOptions?)`\n\nNon-throwing version:\n\n```ts\nimport { safeResolveDotenvx } from 'node-env-resolver-dotenvx';\n\nconst result = await safeResolveDotenvx(\n  { path: '.env.local.secrets' },\n  { DATABASE_URL: string() },\n);\n\nif (result.success) {\n  console.log(result.data.DATABASE_URL);\n} else {\n  console.error(result.error);\n}\n```\n\n## Encryption workflow\n\n```bash\n# 1. Create your secrets file\ncat > .env.local.secrets <<EOF\nDATABASE_URL=postgres://localhost:5432/mydb\nAPI_KEY=secret-key-123\nEOF\n\n# 2. Encrypt it with dotenvx\nnpx dotenvx encrypt -f .env.local.secrets\n\n# 3. Store the decryption key in your OS keychain (macOS)\n# The key is in .env.keys after encryption\nsecurity add-generic-password -a \"LOCAL_SECRETS_DOTENVX_KEY\" -s \"node-env-resolver\" -w\n\n# 4. Delete the plaintext key file (keep a backup!)\nrm .env.keys\n\n# 5. Add to .gitignore\necho \".env.local\\n.env.local.secrets\\n.env.keys\" >> .gitignore\n```\n\nThen at app startup (manual key lookup + dotenvx):\n\n```ts\nimport { resolveDotenvx } from 'node-env-resolver-dotenvx';\nimport { createKeychainHandler } from 'node-env-resolver-dotenvx/handlers';\nimport { postgres } from 'node-env-resolver/validators';\n\nconst keychain = createKeychainHandler();\nconst keyRef = keychain.resolveSync('keychain://LOCAL_SECRETS_DOTENVX_KEY');\n\nconst config = await resolveDotenvx(\n  { path: '.env.local.secrets', privateKey: keyRef.value },\n  { DATABASE_URL: postgres() },\n);\n```\n\n## Configuration\n\n### dotenvx options\n\n```ts\ninterface DotenvxOptions {\n  path?: string;        // Path to encrypted .env file (default: '.env')\n  overload?: boolean;   // Override existing env vars (default: false)\n  privateKey?: string;  // Decryption key (or set DOTENV_PRIVATE_KEY env var)\n  envKeysFile?: string; // Custom path to .env.keys file\n}\n```\n\n### dotenvxKeychain options\n\n```ts\ninterface DotenvxKeychainOptions {\n  plainPath?: string;    // Path to plain env file (default: '.env.local')\n  secretsPath?: string;  // Path to encrypted secrets (default: '.env.local.secrets')\n  overload?: boolean;    // Secrets override plain values (default: true)\n  privateKey?: string;  // Decryption key\n  envKeysFile?: string;  // Custom path to .env.keys file\n}\n```\n\n### KeychainHandler options\n\n```ts\ninterface KeychainHandlerOptions {\n  servicePrefix?: string;  // Keychain service name (default: 'node-env-resolver')\n  platform?: 'macos' | 'linux' | 'windows' | 'auto'; // Platform (default: 'auto')\n}\n```\n\n## Troubleshooting\n\n**`dotenvx: failed to load`**\n\n- Ensure `.env.keys` is present or `DOTENV_PRIVATE_KEY` env var is set\n- Check the file path is correct\n\n**`Failed to read from macOS Keychain`**\n\n- Run: `security add-generic-password -a \"<account>\" -s \"node-env-resolver\" -w`\n- Verify: `security find-generic-password -a \"<account>\" -s \"node-env-resolver\" -w`\n\n**`Failed to read from Linux keyring`**\n\n- Install libsecret: `sudo apt install libsecret-1-0`\n- Install secret-tool: `sudo apt install libsecret-tools`\n- Store: `secret-tool store --label=\"node-env-resolver\" service \"node-env-resolver\" account \"<key-name>\"`\n\n**`Invalid keychain reference`**\n\n- Format must be `keychain://<key-name>` (e.g., `keychain://prod/database-url`)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}