{"_id":"@david.uhlir/permissions-guard","_rev":"13-4fc416e78c264992a933f01cbcf15534","name":"@david.uhlir/permissions-guard","dist-tags":{"latest":"0.0.14"},"versions":{"0.0.2":{"name":"@david.uhlir/permissions-guard","version":"0.0.2","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.2","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"d1b692179a7c53f3067c770824fc6d0b9935d4c3","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.2.tgz","fileCount":13,"integrity":"sha512-QBaNRbTkfvB1hhuLv3eev8XgNuLtsS2nNumpyHeZKl71JoXa5nqrI1Sfztg8WKYyVd5dd3yN1GMX8PeoMP7iCw==","signatures":[{"sig":"MEUCIGKQvw0UMvFn7Bes4n5ZFGXb4OLrDBSDD4vXCbbxXjpnAiEAxDqn0tP9sdtDVHyJ2BqIU6cUMkiM8ZOUvzL0ouZUI+Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17923},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ea1e0c69a0a8d3574bb4d7090f28b9cbac35126b","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.2_1744471127892_0.28513765605048236","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@david.uhlir/permissions-guard","version":"0.0.3","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.3","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"6b78936ed1c23d09f4708d81890a95ab3f718ce1","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.3.tgz","fileCount":13,"integrity":"sha512-bAmlU1tUryOoe2XkfbpWQswEVPAG2BfvmKBKESbzvTZDgX3NZ9Y0NZLxFp7hlsBRTqCDYN6plDBOD2Yhjs+ssw==","signatures":[{"sig":"MEYCIQCORVaEYstCbK59N+/6dCe4ep5ewiLJ8VD+Fk7NQSv9MQIhANbmg4E6K8Ng9u2Zal0z991f4878WuUmMO4KuMeBV0Jg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18085},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"94bc10dc1c9cb4a0ffcfe4e1692460951b05e8b0","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.3_1744471439738_0.11769676166349674","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@david.uhlir/permissions-guard","version":"0.0.4","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.4","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"be997b56f67599873b2c9ce91e872c23e3414637","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.4.tgz","fileCount":13,"integrity":"sha512-m659Spfn/9Nza6S7TIDoDDGiMs69KmoxP/Umv299JEFOR00C8dnbbupUB4hC9OwQ4NhQtP/bxq2OYV26X6+7sw==","signatures":[{"sig":"MEUCIQDYjavhukpFC9XcSxgOb1ZtYe7CexKtoQCdG8nSiKqdNwIgYz73toyB61C9qIZgZdgjlZ7a5n7PIi8dZvzdLUOkTbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19400},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"884953136f6f0df61dd5ffd9ad1142fe5ea84d88","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.4_1744476341284_0.31907522655805143","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@david.uhlir/permissions-guard","version":"0.0.5","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.5","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"b6896ce1a244bdaba26ca6af59f26697fbc16996","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.5.tgz","fileCount":13,"integrity":"sha512-8MbjI5c+JoQsa2ZWCC1qSjANzWGtpwEfIl5TfJx8UZWrlJcvOK0y1hz/BeB/1L2uNLWgDYWqcy/60fTfv63tLA==","signatures":[{"sig":"MEUCIQC56p/uNtkQsO2e8o0DaUfd15UleBFR2EEwfOkivHLVWQIga9JKxethVwQ0/pETnF3Q+FJJLjJsw98PtHygHYztLKQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19037},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"4ae7687444c8f90ae9319dd75b6e801afa3469b2","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.5_1744480172166_0.9989447592138458","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@david.uhlir/permissions-guard","version":"0.0.6","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.6","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"2acd7eccabe3707db165dab2849de88727cd7aea","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.6.tgz","fileCount":13,"integrity":"sha512-fQwjfO9+lHCOEbZo9e0h1hn73VZ66J6j+oYFbKHYXFMm0uRXH1JVzdlf5KnUP06IShge8DGTDCFPUjFoHPrMPQ==","signatures":[{"sig":"MEUCIGICBWWzZJHf/UurkWmE2WQMQ/KR1TUZScwpHEy6587QAiEAhxdT+vW99cL3/feE0VOWBK9pvFDf07vMcxw/M4mV0a0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19285},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"1d737f35bad53b34a7e99b675216fe4eaeba078b","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.6_1748881058735_0.989467106491684","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@david.uhlir/permissions-guard","version":"0.0.7","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.7","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"d4ba0cfa0e262cfe1ac68d746625d5264a790195","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.7.tgz","fileCount":13,"integrity":"sha512-Gf7YYEf/zWMFufREzW+2++XB2t4UFtHkW/4j5pKbFgrJzKmWmFNKYDkcsOnvSVXtQCQ/znMnVHt7EmvURbzUtA==","signatures":[{"sig":"MEUCIQC0fxg3gq+1aPnHBo+ZHgL8s0KOret6lLhmWp5Q6CbEbgIgJclMAuS9Wfj6RYcwijFWhH6sPcjizj15jmG22/irtvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19605},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"486b21dc8ab030ee3b0691931a0b9d5859ac81f5","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.7_1756454614322_0.18281498022368603","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@david.uhlir/permissions-guard","version":"0.0.8","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.8","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"ae7e38c20caa7837c05c4251f8acbf97a1d81cfa","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.8.tgz","fileCount":13,"integrity":"sha512-/U4o9MjMDPLp6Bc/Lgb+DhQCMP2PVw88o0vkKEi/ABgv4J18JOEGcoNQ0njbkL7rNDYKEIjAhdgR0+bDbl7Qew==","signatures":[{"sig":"MEUCIAmjjzlFBLPhUcrbO1zcIfEzjguikpQle4z3rABFaxugAiEAowrkQ7osQMA+LuH3Cs5tTYlOC6v4Gn5fRb3GXrewJPY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19494},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"cb1b5f117d8d67d40ecc6f3b2e8e4cd4f19b8b5d","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.8_1756486995243_0.939137163460684","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@david.uhlir/permissions-guard","version":"0.0.9","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.9","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"1f564b8fa2014926903414606c9c3e8faa6945ce","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.9.tgz","fileCount":13,"integrity":"sha512-hjURnf/4uGzfYJ+X890unUMVI9GWXm042xtcKQBwCCG+XVBLn9Zw+uUPfIJ7YXNdSr86dNZTC+0H9toA27Khig==","signatures":[{"sig":"MEUCIAEURWxDt3iO5Dr87wjEPox+mIRQgo+Ot1WMMSfuOJwhAiEA59vEVmiB6QkU+L0KdH5Y05oTNKS2KPhLDq4pyqs5MTQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19769},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"40eb7cbeb11da1d588be25a18820f1e4547786cb","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.9_1756502946177_0.2961201362996384","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@david.uhlir/permissions-guard","version":"0.0.10","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.10","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"9a09873db39cb56610dd862e9c6faa7c1b2672d5","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.10.tgz","fileCount":13,"integrity":"sha512-KR7S4Pa41B1xOWbafq9T7gThBFwCZ+gdWYMwsfv5BWBB+v6UQZ+QLUJ2qRmMfvYy/FDAwsEG+m8NycpqcycDcw==","signatures":[{"sig":"MEUCIQDXsNgoW2FmDOWsLJgTQDVvGoDokQTopF6RKJpGEO3DBwIgXr6iRwq6V2yJXxQ2DMmF5VIWk4ZM76Lm44TUEF8yWqE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20283},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"aa14de4c0d4d1f33cdb7d2f78613268757979824","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.10_1756503278071_0.5588206893187058","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@david.uhlir/permissions-guard","version":"0.0.11","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.11","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"eebe3cc24fd5f33c9311d30321bcb85dadcea35f","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.11.tgz","fileCount":15,"integrity":"sha512-sermrsUsfok3VLO60D3pImn1aBDzwyi2LWawgeY/6Z0Dh3FTrR7/WEGsChE6lHa+GKe9tf36oHyTV60Gfmnitg==","signatures":[{"sig":"MEYCIQC5frevxP/8XINuJWHvwRgz4fJLHwb8uf+9wq5YvuSIOQIhANIqXVpALisZ9+F58cEleymDd9VaxgwKZRFnwEJEdEX4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22929},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2c8b72e12d6519dff9a655e18301ed8bf2a7fede","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","dependencies":{"reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.11_1756539786161_0.32511167832706267","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@david.uhlir/permissions-guard","version":"0.0.12","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.12","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"576c7488ef6e6b2726a22c796b2d18cda03d3ac9","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.12.tgz","fileCount":15,"integrity":"sha512-vp2k9alAvnrgqPI0RUohq+1M+Rqj9IImQDG8NPDWbMm3PsWvKkDpg8NGXZZE1urA0SYERGUVxyKEiClHn0wuyw==","signatures":[{"sig":"MEQCIDEh+lHyNqsyO9R2JcO9plACKqMD/9fofNGvkzlOb9DDAiANwLkYQX19P+PRC5MuvfGP5vBoZr5krxloMuYG9wV0Og==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23190},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"d36c0631443347c20e101372a2779ee38347fc15","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","dependencies":{"reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.12_1756543887522_0.7426282145941192","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@david.uhlir/permissions-guard","version":"0.0.13","keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/permissions-guard@0.0.13","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/permissions-guard#readme","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"dist":{"shasum":"67bb026d61a96e9cbab4edf90ce4e6abeb041ebb","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.13.tgz","fileCount":15,"integrity":"sha512-DpkPP+YiZ4cLBQZ2cnwbgZgU5ZBLBY9kaiGG7hDcrKeTL9o1RJsuK/dvwQRwMW/WHbTnDIHJeJcA/luQxIXXgQ==","signatures":[{"sig":"MEUCIQDJIMKFMTM8nID1+MM3xBtiaiOas0gD9naWCHUvL9uRwwIgY+H/autTl1z+Fx5ssz1Et8pUNQHa8ZQQ5BHQ36w12EM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23272},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"fb45d5c6197e0a1f8369c69ced127f55752b720a","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/permissions-guard.git","type":"git"},"_npmVersion":"11.1.0","description":"Permissions guard using async context","directories":{},"_nodeVersion":"22.14.0","dependencies":{"reflect-metadata":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0","prettier-check":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/permissions-guard_0.0.13_1756545459920_0.20096720965146964","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@david.uhlir/permissions-guard","version":"0.0.14","description":"Permissions guard using async context","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"rimraf ./dist && tsc","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier-check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write","test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","release":"./scripts/release.sh"},"repository":{"type":"git","url":"git+https://github.com/daviduhlir/permissions-guard.git"},"keywords":["async_hook","node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","devDependencies":{"@types/mocha":"^10.0.0","@types/node":"^18.11.9","chai":"^4.3.6","mocha":"^10.0.0","prettier":"^2.6.2","prettier-check":"^2.0.0","rimraf":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4"},"dependencies":{"reflect-metadata":"^0.2.2"},"_id":"@david.uhlir/permissions-guard@0.0.14","gitHead":"f20cb6b4b25e75f1f257c73605711fbd7f892f38","bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"homepage":"https://github.com/daviduhlir/permissions-guard#readme","_nodeVersion":"22.14.0","_npmVersion":"11.1.0","dist":{"integrity":"sha512-wPKgF1Kb1reo0q04RKFVn861slwiQnpehzXlY+KbgPeY/qBRbaPwjNmPNuX27eL2aCdue/l8cs0xw50AaV32Nw==","shasum":"0cab25c55075b0c4f57d9d0fa6cafd5d6dfc6819","tarball":"https://registry.npmjs.org/@david.uhlir/permissions-guard/-/permissions-guard-0.0.14.tgz","fileCount":15,"unpackedSize":23311,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDmCN0ehCRK/6f0uqGgXLt4/PODHDy6mww5bmPYRyjsIwIhAL/gEr2YhBUkGF2pQ+2nHTeXVDjP2vCqKp7iKGEFRzjV"}]},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"directories":{},"maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/permissions-guard_0.0.14_1756557946626_0.3597613461704081"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-12T15:18:47.821Z","modified":"2025-08-30T12:45:47.019Z","0.0.2":"2025-04-12T15:18:48.083Z","0.0.3":"2025-04-12T15:23:59.911Z","0.0.4":"2025-04-12T16:45:41.487Z","0.0.5":"2025-04-12T17:49:32.334Z","0.0.6":"2025-06-02T16:17:38.889Z","0.0.7":"2025-08-29T08:03:34.487Z","0.0.8":"2025-08-29T17:03:15.474Z","0.0.9":"2025-08-29T21:29:06.380Z","0.0.10":"2025-08-29T21:34:38.267Z","0.0.11":"2025-08-30T07:43:06.348Z","0.0.12":"2025-08-30T08:51:27.718Z","0.0.13":"2025-08-30T09:17:40.114Z","0.0.14":"2025-08-30T12:45:46.835Z"},"bugs":{"url":"https://github.com/daviduhlir/permissions-guard/issues"},"author":{"name":"David Uhlíř"},"license":"ISC","homepage":"https://github.com/daviduhlir/permissions-guard#readme","keywords":["async_hook","node","typescript"],"repository":{"type":"git","url":"git+https://github.com/daviduhlir/permissions-guard.git"},"description":"Permissions guard using async context","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"readme":"# Permissions Guard\n\n`PermissionsGuard` is a utility for managing and enforcing permission rules in an application. It provides a flexible way to define, check, and enforce permissions using `AsyncLocalStorage` to maintain context for the current execution flow. This package is ideal for applications that require fine-grained access control.\n\n## Features\n\n- Define and enforce permission rules.\n- Run code within a permission context.\n- Validate ownership of entities.\n- Decorators for enforcing permissions on methods.\n- Flexible rule matching with wildcard and hierarchical path support.\n\n## Permission Rules\n\nPermission rules are defined as hierarchical paths, similar to file system paths. This allows for fine-grained control over permissions. For example:\n\n- `*`: Matches any single segment of a rule (e.g., `entity/*` matches `entity/read` but not `entity/sub/read`).\n- `**`: Matches zero or more segments of a rule (e.g., `entity/**` matches `entity/read`, `entity/sub/read`, and `entity`).\n- `/`: Matches only when no specific permissions are required (disabled for security reasons in most cases).\n- `entity`: Matches only the exact `entity` rule.\n- `entity/*`: Matches any single action under `entity`, such as `entity/read` or `entity/write`.\n- `entity/**`: Matches all actions and sub-actions under `entity`, such as `entity/read`, `entity/write`, or `entity/sub/action`.\n\n### Wildcard Support\n\nWildcard rules allow for flexible matching:\n\n- `*`: Matches exactly one segment of a rule.\n- `**`: Matches zero or more segments of a rule.\n\n### Examples\n\n```typescript\nconst rules = ['entity/*', 'entity/**', 'admin/**']\n\nawait PermissionsGuard.runWithPermissions(rules, 'user123', async () => {\n  await PermissionsGuard.checkRequiredPermissions(['entity/read']) // Matches 'entity/*'\n  await PermissionsGuard.checkRequiredPermissions(['entity/sub/read']) // Matches 'entity/**'\n  await PermissionsGuard.checkRequiredPermissions(['admin/manage']) // Matches 'admin/**'\n\n  try {\n    await PermissionsGuard.checkRequiredPermissions(['otherEntity/action']) // Does NOT match\n  } catch (err) {\n    console.error('Permission denied for otherEntity/action') // Expected behavior\n  }\n})\n```\n\n## Installation\n\nInstall the package using npm or yarn:\n\n```bash\nnpm install @david.uhlir/permissions-guard\n# or\nyarn add @david.uhlir/permissions-guard\n```\n\n## Usage\n\n### Basic Example\n\n```typescript\nimport { PermissionsGuard } from '@david.uhlir/permissions-guard'\n\n// Define permission rules\nconst rules = ['entity/read', 'entity/write']\nconst owner = 'user123'\n\n// Run a function within a permission context\nawait PermissionsGuard.runWithPermissions(rules, owner, async () => {\n  // Check if the current context has the required permissions\n  await PermissionsGuard.checkRequiredPermissions(['entity/read'])\n\n  // Check if the current context's owner matches a specific owner\n  await PermissionsGuard.checkRequiredOwner('user123')\n\n  console.log('Permissions validated successfully!')\n})\n```\n\n### Using the `@PermissionRequired` Decorator\n\n```typescript\nimport { PermissionsGuard } from '@david.uhlir/permissions-guard'\n\nclass ExampleService {\n  @PermissionsGuard.PermissionRequired(['entity/write'])\n  async updateEntity() {\n    console.log('Entity updated!')\n  }\n}\n\n// Run the method within a permission context\nawait PermissionsGuard.runWithPermissions(['entity/write'], 'user123', async () => {\n  const service = new ExampleService()\n  await service.updateEntity() // This will succeed\n})\n```\n\n### Rule Matching with Wildcards and Hierarchical Paths\n\nPermission rules support wildcards (`*`) and hierarchical paths for flexible matching:\n\n```typescript\nconst rules = ['entity/*'] // Grants all permissions under \"entity\"\n\nawait PermissionsGuard.runWithPermissions(rules, 'user123', async () => {\n  await PermissionsGuard.checkRequiredPermissions(['entity/read']) // Matches\n  await PermissionsGuard.checkRequiredPermissions(['entity/write']) // Matches\n  try {\n    await PermissionsGuard.checkRequiredPermissions(['otherEntity/action']) // Does NOT match\n  } catch (err) {\n    console.error('Permission denied for otherEntity/action') // Expected behavior\n  }\n})\n```\n\n### Using rule parameters\n\nPermissions can also use context variables. Its useful for checking ownership of entities.\n\nExample:\n```typescript\n// Define permission rules\nconst ownerPermissions = ['entity/read', 'entity/:ownedEntities/read']\nconst owner = 'user123'\n\nconst ownedEntities = [\n  'entity1',\n  'entity2',\n]\n\n// Run a function within a permission context\nawait PermissionsGuard.runWithPermissions(ownerPermissions, owner, async () => {\n  const readingId = 'entity1'\n  await PermissionsGuard.checkRequiredPermissions([`entity/${readingId}/read`])\n}, { ownedEntities } )\n```\n\n## API Documentation\n\n### `PermissionsGuard`\n\n#### `PermissionRequired(required: PermissionRule[])`\n\nA decorator to enforce required permissions on a method.\n\n- **Parameters**:\n  - `required` (PermissionRule[]): Array of required permission rules.\n- **Usage**:\n  ```typescript\n  @PermissionsGuard.PermissionRequired(['entity/write'])\n  async updateEntity() {\n    // ...\n  }\n  ```\n\n#### `runWithPermissions<T>(rules: PermissionRule[], owner: OwnerType, callback: () => Promise<T>, variables: Record<string, string[]> = {}, inheritRule?: boolean): Promise<T>`\n\nRuns a callback within a permission context.\n\n- **Parameters**:\n  - `rules` (PermissionRule[]): Array of permission rules to set in the context.\n  - `owner` (OwnerType): Owner of the context.\n  - `callback` (Function): Callback function to execute within the context.\n  - `variables` Context variables that can be used in rules\n  - `inheritRule` Allows nested rules to extend actual context\n- **Returns**: The result of the callback function.\n\n#### `runWithPermissionsBypassOwner<T>(rules: PermissionRule[], callback: () => Promise<T>, variables: Record<string, string[]> = {}): Promise<T>`\n\nRuns a callback within an administrative permission context. This allows access to entities or actions that are typically restricted to administrators.\n\n- **Parameters**:\n  - `rules` (PermissionRule[]): Array of permission rules to set in the context.\n  - `callback` (Function): Callback function to execute within the administrative context.\n  - `variables` Context variables that can be used in rules\n- **Returns**: The result of the callback function.\n\n- **Example**:\n  ```typescript\n  const adminRules = ['entity/read', 'entity/write', 'admin/manage']\n\n  await PermissionsGuard.runWithPermissionsBypassOwner(adminRules, async () => {\n    // Admin can access restricted resources\n    await PermissionsGuard.checkRequiredPermissions(['admin/manage'])\n    await PermissionsGuard.checkRequiredOwner('user456') // Admin can access entities owned by others\n  })\n  ```\n\n#### `getContext(): PermissionsGuardContextMetadata<OwnerType> | undefined`\n\nRetrieves the current permission context, including both the rules and the owner.\n\n- **Returns**: An object containing the current context's permission rules and owner, or `undefined` if no context exists.\n\n- **Example**:\n  ```typescript\n  const context = PermissionsGuard.getContext()\n  if (context) {\n    console.log('Rules:', context.rules)\n    console.log('Owner:', context.owner)\n  } else {\n    console.log('No context exists.')\n  }\n\n#### `checkRequiredPermissions(required: PermissionRule[]): Promise<void>`\n\nChecks if the current context has the required permissions.\n\n- **Parameters**:\n  - `required` (PermissionRule[]): Array of required permission rules.\n- **Throws**: `PermissionError` if no context exists or required permissions are not matched.\n\n#### `checkRequiredOwner(entityOwner: OwnerType): Promise<void>`\n\nChecks if the current context's owner matches the specified entity owner.\n\n- **Parameters**:\n  - `entityOwner` (OwnerType): The owner of the entity to check against.\n- **Throws**: `PermissionError` if the owners do not match.\n\n## Error Handling\n\n### `PermissionError`\n\nThrown when a user is unauthorized or lacks the required permissions.\n\n### `PermissionRuleError`\n\nThrown when required permission rules are not matched.\n\n- **Details**:\n  - `required`: Array of required rules.\n  - `notMatched`: Array of unmatched rules.\n\n## License\n\nThis package is licensed under the MIT License.\n","readmeFilename":"README.md"}