{"_id":"@feedmepos/hrm-actionguard","_rev":"39-a72477a267cd8cecce9a9df9c6899782","name":"@feedmepos/hrm-actionguard","dist-tags":{"latest":"1.3.0","dev":"1.2.1-dev"},"versions":{"0.0.1-beta":{"name":"@feedmepos/hrm-actionguard","version":"0.0.1-beta","_id":"@feedmepos/hrm-actionguard@0.0.1-beta","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"27bf238d6e65d581d231d6d0722faacdce7fe929","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.1-beta.tgz","fileCount":2,"integrity":"sha512-e9R55Aha/xwa5/+c/jMYlLSrSEni0sk2Y0nhQEif0HygLP7yzV2tmHqQY5wTtTdyCxuuwzEfYr0iuziTwMFSmg==","signatures":[{"sig":"MEUCID1ErX6DpR1F4mDIl+z4fNjAp3HHj0xcupAwwWr2mZdkAiEAn70x5qp/e/sIdTDDNJuaxuA9DjJFj+XsIcjDGTYPjew=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5603},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"gitHead":"651d01f8706371fdbeaf52698def2f01f01b7604","scripts":{"test":"vitest run","build":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json"},"_npmUser":{"name":"lokingwei","email":"kingwei@feedme.cc"},"_npmVersion":"11.6.2","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"25.2.1","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"workspace:*"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.1-beta_1772530456606_0.4231655082701302","host":"s3://npm-registry-packages-npm-production"}},"0.0.1-dev.1":{"name":"@feedmepos/hrm-actionguard","version":"0.0.1-dev.1","_id":"@feedmepos/hrm-actionguard@0.0.1-dev.1","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"d7d77fef3d69639f69e67c2fb899a8ab0f0ad446","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.1-dev.1.tgz","fileCount":16,"integrity":"sha512-jAjddYmQaY233YQe1amzbUkTip27c8Ldyn8AjrAnmnkWIF5kethRX8ywdEDdnrAZyUR6oEYrOyDoZL/Umxw8ag==","signatures":[{"sig":"MEYCIQDYaoZub3y86Ms0JtdvYlTpvYRVJh166Tc4C1Ff6bfzbQIhANwB49+897tAo4i/pJ+0NslZ/xaF1jBs6TaKTLP/Q6SQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22528},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.1-dev.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/a94019e8e647975b8e22dae6f379d665/feedmepos-hrm-actionguard-0.0.1-dev.1.tgz","_integrity":"sha512-jAjddYmQaY233YQe1amzbUkTip27c8Ldyn8AjrAnmnkWIF5kethRX8ywdEDdnrAZyUR6oEYrOyDoZL/Umxw8ag==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.1-beta"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.1-beta"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.1-dev.1_1772530623594_0.14224316073889987","host":"s3://npm-registry-packages-npm-production"}},"0.0.3-dev":{"name":"@feedmepos/hrm-actionguard","version":"0.0.3-dev","_id":"@feedmepos/hrm-actionguard@0.0.3-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"3316964dadfebe8dd86c678d542db8fe9e8302c0","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.3-dev.tgz","fileCount":16,"integrity":"sha512-LHsSC0jsR0HE+3bqSWGAh8x8J5BbyAJRPHKNe+dOQxwe1cqGX0DPdP8UJ2bCHo75dBI6MsPpd4SV+ljgttLvFA==","signatures":[{"sig":"MEUCIQCPAwOVhUEMcjZU8mpcgtlbKyFqcf9zkiQHaWOjIaG3JgIgMwiorSomYwst4ki0aTA5NmgOBJ5wBNb/vk/k9X3+SuA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22526},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.3-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/5cb04b93c6402576f1f0c13531d0bf51/feedmepos-hrm-actionguard-0.0.3-dev.tgz","_integrity":"sha512-LHsSC0jsR0HE+3bqSWGAh8x8J5BbyAJRPHKNe+dOQxwe1cqGX0DPdP8UJ2bCHo75dBI6MsPpd4SV+ljgttLvFA==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.1-beta"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.1-beta"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.3-dev_1772531702878_0.594247817647876","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-dev":{"name":"@feedmepos/hrm-actionguard","version":"0.0.4-dev","_id":"@feedmepos/hrm-actionguard@0.0.4-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"f63775c0cceaef4fa5b1f766610aed038b91ab9a","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.4-dev.tgz","fileCount":16,"integrity":"sha512-3OyeYfAs27ZkC/rWXKZVTV2N/2Q6yrn0jfN51qKxT0S1NFzyTUhEx+Pfa4mTujsbDY6xTN9RFIQROcyCnGo0Bw==","signatures":[{"sig":"MEQCIAerqZxho0Bd0OSS0wbwQlZZAgN05rbquAaBXQoBwnDhAiAwOQRzZ2BAIWyxF+ICUZf1AnXt+RxHn9J8DgZZSHr9aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21908},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.4-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/c4600d26772f649112ba9241276e8416/feedmepos-hrm-actionguard-0.0.4-dev.tgz","_integrity":"sha512-3OyeYfAs27ZkC/rWXKZVTV2N/2Q6yrn0jfN51qKxT0S1NFzyTUhEx+Pfa4mTujsbDY6xTN9RFIQROcyCnGo0Bw==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.3-dev"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.3-dev"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.4-dev_1772694538102_0.3181296925589874","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-dev.1":{"name":"@feedmepos/hrm-actionguard","version":"0.0.4-dev.1","_id":"@feedmepos/hrm-actionguard@0.0.4-dev.1","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"fdb55594316766faabcc7a1294b4c4f5c8a5cc1f","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.4-dev.1.tgz","fileCount":16,"integrity":"sha512-rYbu1DX63rzWDtxjv3w11DzlHRWcLEEBpN/SjINwM4UKeh4mhs8ZOkXmuHGSedngiyLk8jaF+r8/vZnjj0V4rA==","signatures":[{"sig":"MEUCIG5PKl9qyPo3JrwLXHQNlF1Nlt3rRVB1ya2RekbNat5wAiEAlcQeXkGXtPWiEGVJuzgIg9JimPmN3G6G26cJfzOnc1g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21902},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.4-dev.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/69559a952874dd7743480f50cf35cbf3/feedmepos-hrm-actionguard-0.0.4-dev.1.tgz","_integrity":"sha512-rYbu1DX63rzWDtxjv3w11DzlHRWcLEEBpN/SjINwM4UKeh4mhs8ZOkXmuHGSedngiyLk8jaF+r8/vZnjj0V4rA==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.3"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.3"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.4-dev.1_1773226002344_0.3590706770502252","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-dev.2":{"name":"@feedmepos/hrm-actionguard","version":"0.0.4-dev.2","_id":"@feedmepos/hrm-actionguard@0.0.4-dev.2","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"40d4d8f1c8afe352af9a6de92f4c88018611ac56","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.4-dev.2.tgz","fileCount":19,"integrity":"sha512-BzpHW7RaFsR9dCkFsRIKxIO1DeO6m9iVSNXVL/sn+H0CPEO9gJlo57S+b5aD2Cd52koguRvkh7W8MLSIEe7MLA==","signatures":[{"sig":"MEYCIQDG5l1bJ/cWLg/8qAlmJ+9R7ttG0+lnA0Ix7B6ItMEjUwIhAO5Z9ytm/HkwPrvJvujttkd35RBNnMxzjeO89oSxv9nj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29622},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.4-dev.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/fc0191d05c5db870131ce2c4b86fa79d/feedmepos-hrm-actionguard-0.0.4-dev.2.tgz","_integrity":"sha512-BzpHW7RaFsR9dCkFsRIKxIO1DeO6m9iVSNXVL/sn+H0CPEO9gJlo57S+b5aD2Cd52koguRvkh7W8MLSIEe7MLA==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.3"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.3"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.4-dev.2_1773917450886_0.7823972302702533","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-dev.3":{"name":"@feedmepos/hrm-actionguard","version":"0.0.4-dev.3","_id":"@feedmepos/hrm-actionguard@0.0.4-dev.3","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"3da6a3e164172220a061b2b963c46b4a52ea10b9","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.4-dev.3.tgz","fileCount":19,"integrity":"sha512-9TOK+Be/ep32R2O8TaUchqrcm3VxszsxxC6cdPN6YY3DnRhFIWfloYZzt5No8SCE+U/zrvFnFIc4z1WfEBSHlg==","signatures":[{"sig":"MEQCIEk+93k4BRCcJVEQDgC2YrDfbmt0C6cs8VuRHMxrHQP3AiAfQvAM9E/jrINFn/Ta/yI+TNOPKF6ts3TL09uw2wJ5OQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29622},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.4-dev.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/e76fed9dfd166ec3b831ff868f9b4c1b/feedmepos-hrm-actionguard-0.0.4-dev.3.tgz","_integrity":"sha512-9TOK+Be/ep32R2O8TaUchqrcm3VxszsxxC6cdPN6YY3DnRhFIWfloYZzt5No8SCE+U/zrvFnFIc4z1WfEBSHlg==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.8"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.8"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.4-dev.3_1774602829966_0.7478970024019513","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-dev.4":{"name":"@feedmepos/hrm-actionguard","version":"0.0.4-dev.4","_id":"@feedmepos/hrm-actionguard@0.0.4-dev.4","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"42e6acd17b2160d6a3de2d8f7996602e6f1a9efe","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.4-dev.4.tgz","fileCount":19,"integrity":"sha512-PnnhoQxMqe923MUp4QmT0Qeg6vGDUVV2AHVZrULONAorWLyucx6cxx9547km38M5azhyhDM2vv/5gATQ48ZL1A==","signatures":[{"sig":"MEYCIQD8eN2wxnxaYbZIS92bhINyrJt447glwvc9Y0OXr6FurwIhAKJVJX3Sxi0/aJmpfy2aGjFbm5hN+5T2UrSwqfnwPqFE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34730},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.4-dev.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/160492dccb7c4763d1a71f8b5309371c/feedmepos-hrm-actionguard-0.0.4-dev.4.tgz","_integrity":"sha512-PnnhoQxMqe923MUp4QmT0Qeg6vGDUVV2AHVZrULONAorWLyucx6cxx9547km38M5azhyhDM2vv/5gATQ48ZL1A==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.9"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.9"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.4-dev.4_1774840777490_0.35945922201598224","host":"s3://npm-registry-packages-npm-production"}},"0.0.4-dev.5":{"name":"@feedmepos/hrm-actionguard","version":"0.0.4-dev.5","_id":"@feedmepos/hrm-actionguard@0.0.4-dev.5","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"5424bc5d197c8ad2825ae739bd26e551bea8f841","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-0.0.4-dev.5.tgz","fileCount":19,"integrity":"sha512-ZPeJUA7WmpxGERMa+cqT4hkdjH4CoJUD3WScp3tTqFblw4xJhhuK6i20n/RyQr9ILrdedHyZf3btPz0doJCgMQ==","signatures":[{"sig":"MEQCICHrz6SjdRYrYtFtrdfXYX+JBRUUEzKmqKJYURFMEhN6AiAMTCbQQcFgTCK4i3JjjhEhIi0tQ18hyhW7nkmYsT+LSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35052},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-0.0.4-dev.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/d28ec504801ed83aa73f281230257d43/feedmepos-hrm-actionguard-0.0.4-dev.5.tgz","_integrity":"sha512-ZPeJUA7WmpxGERMa+cqT4hkdjH4CoJUD3WScp3tTqFblw4xJhhuK6i20n/RyQr9ILrdedHyZf3btPz0doJCgMQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.11"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"0.0.4-dev.11"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_0.0.4-dev.5_1774948149407_0.28406842082165773","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@feedmepos/hrm-actionguard","version":"1.0.0","_id":"@feedmepos/hrm-actionguard@1.0.0","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"eb6fe987c653b9b7619933566d4c64599c1ac798","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.0.tgz","fileCount":19,"integrity":"sha512-hTCzJiFf/SCMb6p6LtlfpzyZVCpjGdkgEv2zIXv1jLlXPSqf7vFxiDo9J4ls8r3/FkHtlILei37W514LOLd5DA==","signatures":[{"sig":"MEQCID7cKYOMJQbx1hba3UB/feOHzbwO/wdd7P/YBgBhw1iuAiA2Kgq6GVMAQLGEEKa7ySNcsGY0oaIuuoVqvPvfK77Ldg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35032},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/7e13dd755c6800b71b946f428c34e121/feedmepos-hrm-actionguard-1.0.0.tgz","_integrity":"sha512-hTCzJiFf/SCMb6p6LtlfpzyZVCpjGdkgEv2zIXv1jLlXPSqf7vFxiDo9J4ls8r3/FkHtlILei37W514LOLd5DA==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.0_1775032541293_0.9954976388939338","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-dev":{"name":"@feedmepos/hrm-actionguard","version":"1.0.1-dev","_id":"@feedmepos/hrm-actionguard@1.0.1-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"bad0fe3986015f11502b2f644ac6e21b696e952f","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.1-dev.tgz","fileCount":19,"integrity":"sha512-mXMZSRJ5aucvF8T9xWEN88wJ5/F6kRna1tx87BgVEki/W6Tt2+Lev7DrB32eDkEkPricYPDi/EM1zwCmDcfNGw==","signatures":[{"sig":"MEYCIQCjV12KZkYMC13kHogmJYMXXsS+XqblOEVt/uObcG/79QIhAKfpb4AXzH4F15tITsTIzqbGwP/MFZ0I/bgzwBD08iV8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35480},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.1-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/3196825dd3e14b7044a5cd4eb1b0435b/feedmepos-hrm-actionguard-1.0.1-dev.tgz","_integrity":"sha512-mXMZSRJ5aucvF8T9xWEN88wJ5/F6kRna1tx87BgVEki/W6Tt2+Lev7DrB32eDkEkPricYPDi/EM1zwCmDcfNGw==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.2-dev"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.2-dev"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.1-dev_1776240805650_0.21301635908952732","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@feedmepos/hrm-actionguard","version":"1.0.1","_id":"@feedmepos/hrm-actionguard@1.0.1","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"da930a14f8021b822004605838f8f172363ebdc3","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.1.tgz","fileCount":19,"integrity":"sha512-d0m+bIB5IkixtbMLuRmF1tiquar1O9gTNqoZHJZrsJkdLSe5XDpD3/w9pNN1ng3SH45ibeZOStXpAodNIAZYUg==","signatures":[{"sig":"MEYCIQD0vu82hoywkUTHoOBWECgfq3dp3X3Uy9AO5XdQky1dTAIhANYIsyigU3GjDi3uCtGZIHP51aEKEUrroX/++wC7DnXi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35468},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/4375a8127c21b73e55afb8b5186ae13e/feedmepos-hrm-actionguard-1.0.1.tgz","_integrity":"sha512-d0m+bIB5IkixtbMLuRmF1tiquar1O9gTNqoZHJZrsJkdLSe5XDpD3/w9pNN1ng3SH45ibeZOStXpAodNIAZYUg==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.2"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.1_1776321240177_0.028050375481306178","host":"s3://npm-registry-packages-npm-production"}},"1.0.2-dev":{"name":"@feedmepos/hrm-actionguard","version":"1.0.2-dev","_id":"@feedmepos/hrm-actionguard@1.0.2-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"309eb960e1a1786ebcadb3c5f3269c09a526efff","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.2-dev.tgz","fileCount":19,"integrity":"sha512-lfHMSz7rl3DvFMayhBx8jYfe+NxiGqO4+TtmKwEkCPCXsI7/EUkONx+ROnYq7iFCLBX1AyElJOwX/9KD62GM3A==","signatures":[{"sig":"MEUCIChtRdMfGSsv4wZ01cSYBYJlXzfp8U1OOY/yBBD2VtRJAiEAqIhA577oda1PEZVBks9eoH0DWkWkGAHhpr7QlWpOo6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38573},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.2-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/c542ad02212ba4a536282441f5e7ae20/feedmepos-hrm-actionguard-1.0.2-dev.tgz","_integrity":"sha512-lfHMSz7rl3DvFMayhBx8jYfe+NxiGqO4+TtmKwEkCPCXsI7/EUkONx+ROnYq7iFCLBX1AyElJOwX/9KD62GM3A==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.2-dev_1776847310984_0.19393476626409822","host":"s3://npm-registry-packages-npm-production"}},"1.0.2-dev.2":{"name":"@feedmepos/hrm-actionguard","version":"1.0.2-dev.2","_id":"@feedmepos/hrm-actionguard@1.0.2-dev.2","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"5c55f0dbfc9750a6a6c7ff80fb7177a40eddef16","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.2-dev.2.tgz","fileCount":19,"integrity":"sha512-0H89IvuqGsHL1t25Z9S0WB7WFVWzarAgpMeh+88SCCmi+scgitdR/7PW0nAgnbDEIPlADWLWtnggomItZ3LkDQ==","signatures":[{"sig":"MEUCIHncm87jxhl25EfXDzJRX/x9ph2OVqD/1adtw1AZKjPlAiEAjNMVU299xiNvC8+fqIrZ4Nbp+lm2/85bbbtTcDOP7n8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39235},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.2-dev.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/0ae40cad899dc5b43754d6280af69a9a/feedmepos-hrm-actionguard-1.0.2-dev.2.tgz","_integrity":"sha512-0H89IvuqGsHL1t25Z9S0WB7WFVWzarAgpMeh+88SCCmi+scgitdR/7PW0nAgnbDEIPlADWLWtnggomItZ3LkDQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.2-dev.2_1776911755588_0.2825271028892147","host":"s3://npm-registry-packages-npm-production"}},"1.0.2-dev.3":{"name":"@feedmepos/hrm-actionguard","version":"1.0.2-dev.3","_id":"@feedmepos/hrm-actionguard@1.0.2-dev.3","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"85d9308c799efbcba120bfd6b5062b8831cf916d","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.2-dev.3.tgz","fileCount":19,"integrity":"sha512-svGpa5KiYsWdmfqGBJ1Qkw7i590WARXDbWmyA4YPstigscs/Mvm13Pb/SzjoVAdVsWUCxgSJiy7rUzXhNX7g0Q==","signatures":[{"sig":"MEYCIQDn885Fkf0/RYzzs64pcCZsEOP6pVqy8/lD2soZsapuNgIhALeEJXoMvvb1iFInooqTFm+NVi/FAEC1/8K2UDxFbk6f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39235},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.2-dev.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/b1ba4ef1483b081254d26027a70f50a7/feedmepos-hrm-actionguard-1.0.2-dev.3.tgz","_integrity":"sha512-svGpa5KiYsWdmfqGBJ1Qkw7i590WARXDbWmyA4YPstigscs/Mvm13Pb/SzjoVAdVsWUCxgSJiy7rUzXhNX7g0Q==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.2-dev.3_1776927580516_0.6056523945055541","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@feedmepos/hrm-actionguard","version":"1.0.2","_id":"@feedmepos/hrm-actionguard@1.0.2","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"54448491f8dc3b2473b2427b143eaa3eb90c9cc5","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.2.tgz","fileCount":19,"integrity":"sha512-+/JnbAbLibi0KMY87LJoUV+ouBlzr/AVHeQEX1JCxa2jqhs6gv3BCwhKtT3Bk3VOYydIb86WeFlZ0GBQhe1N4w==","signatures":[{"sig":"MEQCIB8pCGxD+8Zz/9I+3UbHgmOxRMonunl6URzQuYlxYljZAiBjfLAyxlNlfFOShizVwBxJTrfEyKwnrn8Qg/F29lolMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45052},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/d383bfeb10fdafab8182fe4f3e14bcf6/feedmepos-hrm-actionguard-1.0.2.tgz","_integrity":"sha512-+/JnbAbLibi0KMY87LJoUV+ouBlzr/AVHeQEX1JCxa2jqhs6gv3BCwhKtT3Bk3VOYydIb86WeFlZ0GBQhe1N4w==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@feedmepos/hrm-permission":"1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.2_1777015873596_0.4815733054826372","host":"s3://npm-registry-packages-npm-production"}},"1.0.3-dev.3":{"name":"@feedmepos/hrm-actionguard","version":"1.0.3-dev.3","_id":"@feedmepos/hrm-actionguard@1.0.3-dev.3","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"66debbb667831f41d3618dc6265b1fd54100ebdd","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.3-dev.3.tgz","fileCount":21,"integrity":"sha512-umGtAQp9k93KChNHGI19GBCF6ar0jdJSZmeLwPTFViOH9RX4a8DAU2NQC7xqX4TlO1oomUh9ToI1axlVvNkkEQ==","signatures":[{"sig":"MEUCIQCRF4TLK2R7ifjKx4qMAdKqpEyVlAuUQLrWNHAymiBeLQIgXVAN77xPu/1n6i8Ynu8Ga+dwckvBt1LIXJp30Fc5ey4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55561},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.3-dev.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/6fa1e967c5ee2ea1aaa963073e411f33/feedmepos-hrm-actionguard-1.0.3-dev.3.tgz","_integrity":"sha512-umGtAQp9k93KChNHGI19GBCF6ar0jdJSZmeLwPTFViOH9RX4a8DAU2NQC7xqX4TlO1oomUh9ToI1axlVvNkkEQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.3-dev.3_1777036401138_0.3068066940493863","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@feedmepos/hrm-actionguard","version":"1.0.3","_id":"@feedmepos/hrm-actionguard@1.0.3","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"40c3f3656323d4d1110d970e8199dc8844d92d1c","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.3.tgz","fileCount":21,"integrity":"sha512-MV7fr34cMIVbQC19LFdaZHg/K0x0Fw+dZ0aANAdDCv6cM6XYRnF7MP4gBrsIzGzE14fhrvoLtlwupFaTZVDg+w==","signatures":[{"sig":"MEUCIFlBJlo6dA/G4ROmHxcOMin4+3NBLq99EzH1d5K6RtefAiEAh3acUDoIXBu9iNeGrR/lPVrVympTS0Tm905kX8bOaxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55926},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/cdd05346224878261b4e7b46fdfb3cfd/feedmepos-hrm-actionguard-1.0.3.tgz","_integrity":"sha512-MV7fr34cMIVbQC19LFdaZHg/K0x0Fw+dZ0aANAdDCv6cM6XYRnF7MP4gBrsIzGzE14fhrvoLtlwupFaTZVDg+w==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.3_1777520546299_0.36278077765835914","host":"s3://npm-registry-packages-npm-production"}},"1.0.4-dev.1":{"name":"@feedmepos/hrm-actionguard","version":"1.0.4-dev.1","_id":"@feedmepos/hrm-actionguard@1.0.4-dev.1","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"4f6e10ca7d34431b07289e10565c6ca7b099f0df","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.4-dev.1.tgz","fileCount":21,"integrity":"sha512-c0gPUGRYeh/yqy7OZj/y23McYp7aGwjbKbqVJ4w2z+QqRifqi/DiHI8cyEA0grl5YmPodyl/1MIWAz3YzZguWg==","signatures":[{"sig":"MEQCIHb/EC6L8KjRAWxP7ZyD2q0dGgaSsdq7sjHy0NX3DL6XAiAll6/JnIoD3kFL7hFyzzi0F8Qtjeu5p+9ZiX6B7iMw/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63077},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.4-dev.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/d4479a44a0c114263d0f7f69e1786001/feedmepos-hrm-actionguard-1.0.4-dev.1.tgz","_integrity":"sha512-c0gPUGRYeh/yqy7OZj/y23McYp7aGwjbKbqVJ4w2z+QqRifqi/DiHI8cyEA0grl5YmPodyl/1MIWAz3YzZguWg==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.4-dev.1_1778054470281_0.20999863459106294","host":"s3://npm-registry-packages-npm-production"}},"1.0.4-dev.2":{"name":"@feedmepos/hrm-actionguard","version":"1.0.4-dev.2","_id":"@feedmepos/hrm-actionguard@1.0.4-dev.2","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"44ebc2b0b666b846c4f18881fd5790ee43543e09","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.4-dev.2.tgz","fileCount":21,"integrity":"sha512-pRtvWzVbDKR14c96IluWkCarKPZvzyxYPbykJUU+f2FkrnAo4jcDygSp5U3VyVX9uzurUW9vjQUowOPGAN3pjg==","signatures":[{"sig":"MEUCIQC5+eetiC3KiE5VrlZj9Lou4BZ42buAXZUEvjUCWfH0DAIgG3KSXfD259fq4RUgrxyeY6nWfCI6SCaHXwFNmj7JtUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66031},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.4-dev.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/15ba9ae15ac588a3b7dba6d3d27f1fc9/feedmepos-hrm-actionguard-1.0.4-dev.2.tgz","_integrity":"sha512-pRtvWzVbDKR14c96IluWkCarKPZvzyxYPbykJUU+f2FkrnAo4jcDygSp5U3VyVX9uzurUW9vjQUowOPGAN3pjg==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.4-dev.2_1778056814043_0.6226153068573423","host":"s3://npm-registry-packages-npm-production"}},"1.0.4-dev.3":{"name":"@feedmepos/hrm-actionguard","version":"1.0.4-dev.3","_id":"@feedmepos/hrm-actionguard@1.0.4-dev.3","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"58ae343928b11c7b5603bfecbc38d55a90531774","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.4-dev.3.tgz","fileCount":21,"integrity":"sha512-chuxWtB6os5mgBsusZkEE2C9QWU0i30P/fYkBrAo9fzyGVPBP5rtB87PVT7uSrogaIhO9LXQYIBjRj/VTSRG/Q==","signatures":[{"sig":"MEYCIQCczCb3GeHcWLGSnoAkHYUaR145WoyAYQ4MXbbWw9T2jgIhANeUNiiemu1U8aY0dE16a5Z27aoflYCGh/K+KwMoF1uQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66883},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.4-dev.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/7499a80ee0469e1d0faa7b1b5ae4f55c/feedmepos-hrm-actionguard-1.0.4-dev.3.tgz","_integrity":"sha512-chuxWtB6os5mgBsusZkEE2C9QWU0i30P/fYkBrAo9fzyGVPBP5rtB87PVT7uSrogaIhO9LXQYIBjRj/VTSRG/Q==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.4-dev.3_1778059608929_0.2539413247581972","host":"s3://npm-registry-packages-npm-production"}},"1.0.4-dev.4":{"name":"@feedmepos/hrm-actionguard","version":"1.0.4-dev.4","_id":"@feedmepos/hrm-actionguard@1.0.4-dev.4","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"1c10ade2a073c7118e332ea077925408ebffbbf7","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.4-dev.4.tgz","fileCount":21,"integrity":"sha512-yiIaygogxHQlMAwaZkQG91GJ9Cp68TgbgWGtbIPvJA+TrBnPdC36yoPwN+md4//lSGs3M4aWkAU6oKy/Z7NHew==","signatures":[{"sig":"MEUCIQCcfN4hBKtYFNrEwXCh/hg3hMo5U+9KNU/glsx5mgufvAIgWEuk58qMrb/FsmZncSbHb+tUImDKIRRdQ6pWhDzfJ88=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65044},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.4-dev.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/fcc3035d9a366615db6aab29ac76b2c8/feedmepos-hrm-actionguard-1.0.4-dev.4.tgz","_integrity":"sha512-yiIaygogxHQlMAwaZkQG91GJ9Cp68TgbgWGtbIPvJA+TrBnPdC36yoPwN+md4//lSGs3M4aWkAU6oKy/Z7NHew==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.4-dev.4_1778206286247_0.28627731146818336","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@feedmepos/hrm-actionguard","version":"1.0.4","_id":"@feedmepos/hrm-actionguard@1.0.4","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"825be5e4d08bfbc36a8398f305c00dd1fc881197","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.4.tgz","fileCount":21,"integrity":"sha512-ARoGbXQh+gWiSJ1lZDt18N2NVPcEL0/Frx61jPETwlqeRLaLKWh4ZxJD/K7IP/nF/n7CKwIkjL8/8D6u4JVWjQ==","signatures":[{"sig":"MEUCIQCYesAXtw7M4AdjZqIM23koJkELUFXMhUXt9eQ7JcUCIQIgR7e6i49xoKmsZGwoUeODjipG1Pn7Q879NlKCt7bzGjQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65038},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/b16d653b87986e8e7abe0e82bfd5e8a6/feedmepos-hrm-actionguard-1.0.4.tgz","_integrity":"sha512-ARoGbXQh+gWiSJ1lZDt18N2NVPcEL0/Frx61jPETwlqeRLaLKWh4ZxJD/K7IP/nF/n7CKwIkjL8/8D6u4JVWjQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.4_1778207514096_0.41945151795546587","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@feedmepos/hrm-actionguard","version":"1.0.5","_id":"@feedmepos/hrm-actionguard@1.0.5","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"009ae4515cce23197387c8c1ff5a3ea55ee3c78b","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.5.tgz","fileCount":21,"integrity":"sha512-hyMU69OLlpo0bhIpoAHCifaMM3g0TyAJyUy7NDlxJhEQ3pQjP7KNLlbUADEalV3KZCmJvN2tWXCwgrccrizuyw==","signatures":[{"sig":"MEUCIQDISoTtg/pKZ7jBByTnEDGPhhyyYOlNZdlQ3Wjf9ZIu5QIgWtnMidYHVJc23or3Oy5MIk+g8bgoNwrIIptgFBpsuDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65886},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/bf7f359477fd013c0d2431b9a355ce63/feedmepos-hrm-actionguard-1.0.5.tgz","_integrity":"sha512-hyMU69OLlpo0bhIpoAHCifaMM3g0TyAJyUy7NDlxJhEQ3pQjP7KNLlbUADEalV3KZCmJvN2tWXCwgrccrizuyw==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.5_1778648835531_0.038543413928913584","host":"s3://npm-registry-packages-npm-production"}},"1.0.6-dev.1":{"name":"@feedmepos/hrm-actionguard","version":"1.0.6-dev.1","_id":"@feedmepos/hrm-actionguard@1.0.6-dev.1","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"aee044f5929cb69c132952483934582f380471c6","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.6-dev.1.tgz","fileCount":21,"integrity":"sha512-9LO7AgK+j7gXo1ewBuahMWPX03LrZ0jKCv3YBI4encKNIo+SSCsacS9cWbCAdVjGh5hK9Mef0KLHp9PkHWlqIw==","signatures":[{"sig":"MEYCIQCC/gwFvXwc3tQptvSL+EauMaGAsZoOzQYqFR+rEsevogIhANfe0XSDvo6eje7IegOaETny809wMya/Y/98W9j49JuE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69096},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.6-dev.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/0866b193efc6c568889b234fc3a854f1/feedmepos-hrm-actionguard-1.0.6-dev.1.tgz","_integrity":"sha512-9LO7AgK+j7gXo1ewBuahMWPX03LrZ0jKCv3YBI4encKNIo+SSCsacS9cWbCAdVjGh5hK9Mef0KLHp9PkHWlqIw==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.6-dev.1_1779854165048_0.8650773310054869","host":"s3://npm-registry-packages-npm-production"}},"1.0.6-dev.2":{"name":"@feedmepos/hrm-actionguard","version":"1.0.6-dev.2","_id":"@feedmepos/hrm-actionguard@1.0.6-dev.2","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"e96abbe76da32e28a30b6bd6bdc26f0973b0e1ae","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.6-dev.2.tgz","fileCount":33,"integrity":"sha512-wwx66RW5OS931X774TmaZ1XWiOP2YomAi/FBw6fbJaPQoiDPM0UmGZ4N7/EO48ZD9k3tSO7ZsWvtLZb6SQhZpQ==","signatures":[{"sig":"MEQCIG3f9odfiQOx0x65fjERl3eKrwufOf2BYYt54dv4Cf25AiAvwcjG/kb8FhaX1oCKgbfqY6OUXlUQjWKeOtGQ8c4igw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87436},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.6-dev.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/6f849686d0cc4cdf184b19384e577174/feedmepos-hrm-actionguard-1.0.6-dev.2.tgz","_integrity":"sha512-wwx66RW5OS931X774TmaZ1XWiOP2YomAi/FBw6fbJaPQoiDPM0UmGZ4N7/EO48ZD9k3tSO7ZsWvtLZb6SQhZpQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"2.0.1-rc.22","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.6-dev.2_1779964589066_0.5863885815239829","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@feedmepos/hrm-actionguard","version":"1.0.6","_id":"@feedmepos/hrm-actionguard@1.0.6","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"f48cf199ee7a12b5e08bc0978beecdf90b58ebb0","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.6.tgz","fileCount":21,"integrity":"sha512-W+Gds+hqQXwRkiTKeHEcBGYM8Cw/Ag7JXIlJAqH7cqizqGm70FV+Hh3jwrIEe0ZWxtkrIJ7Z+5l8IueTyn5wgQ==","signatures":[{"sig":"MEUCIQD3+5XtVMSkU5YLHB/tWg8gHvOgPgh7+7MvuBWmtlBvtwIgIKgijCOQq8cW6XpCnLrTdpkfDIvk/gRRT2++VP5qzw4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71846},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/67d8c6840678b483ce0580359105bf8d/feedmepos-hrm-actionguard-1.0.6.tgz","_integrity":"sha512-W+Gds+hqQXwRkiTKeHEcBGYM8Cw/Ag7JXIlJAqH7cqizqGm70FV+Hh3jwrIEe0ZWxtkrIJ7Z+5l8IueTyn5wgQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.6_1779977254682_0.47871949073670894","host":"s3://npm-registry-packages-npm-production"}},"1.0.7-dev":{"name":"@feedmepos/hrm-actionguard","version":"1.0.7-dev","_id":"@feedmepos/hrm-actionguard@1.0.7-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"5a2008c7c692aeb8790728f8f80c7531c0340c8a","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.7-dev.tgz","fileCount":33,"integrity":"sha512-u9iubCTp+PegfcCAQ638oKsXUJLS4hPjDpvnsbkBpVWQzc4LFIaPQfvvmiLNlgA0Q+7bMuCKvmxHdXyJh5+35Q==","signatures":[{"sig":"MEYCIQDh32w5ypsu8VJVHXrgijVs8yb8mnfBmGS1cJquKfHC/QIhAKF31FIyOqu7Ad95lfiKq695qUiLFQntCdEI3uRn6uCE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93990},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.7-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/d6d463bf4d2d1e9c3423f4270a59e906/feedmepos-hrm-actionguard-1.0.7-dev.tgz","_integrity":"sha512-u9iubCTp+PegfcCAQ638oKsXUJLS4hPjDpvnsbkBpVWQzc4LFIaPQfvvmiLNlgA0Q+7bMuCKvmxHdXyJh5+35Q==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"2.0.1-rc.22","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.7-dev_1780461294512_0.5787063247577062","host":"s3://npm-registry-packages-npm-production"}},"1.0.7-dev.2":{"name":"@feedmepos/hrm-actionguard","version":"1.0.7-dev.2","_id":"@feedmepos/hrm-actionguard@1.0.7-dev.2","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"b853089d30f1c6bffaf6a3484e9d909ca6dd8aaa","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.0.7-dev.2.tgz","fileCount":33,"integrity":"sha512-JM3juMWURkSe0KYI39XoGcnIO2g8IwSSEJnP8yHef6O6ziVLWGBWa3kUu3jH760L9Wfo82izHn4wdgsI//tPFg==","signatures":[{"sig":"MEQCIFo/s76CjTP46Zz+K06MrjWXSL1ku9WgFgmGPssQwMgoAiAZmZvEcUfMtIhmbOA7N3DTaKuYrvTm5CIEyLYIkvC2Dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":151943},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.0.7-dev.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/a0938f67da680a78b1e69894d664eecd/feedmepos-hrm-actionguard-1.0.7-dev.2.tgz","_integrity":"sha512-JM3juMWURkSe0KYI39XoGcnIO2g8IwSSEJnP8yHef6O6ziVLWGBWa3kUu3jH760L9Wfo82izHn4wdgsI//tPFg==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"2.0.1-rc.22","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.0.7-dev.2_1780563046141_0.4628483854924239","host":"s3://npm-registry-packages-npm-production"}},"1.1.0-dev":{"name":"@feedmepos/hrm-actionguard","version":"1.1.0-dev","_id":"@feedmepos/hrm-actionguard@1.1.0-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"67ce1465abf437d0fc99057ae804368c7d59dab4","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.1.0-dev.tgz","fileCount":33,"integrity":"sha512-hwGH0/eoLNWBrbWON3cgI9bV2SiNRBfVZq5/+wpibIkcqx470HDSiUKMdN0ZHvxGXT5fDl3hQpITraVnzquXDQ==","signatures":[{"sig":"MEQCIGSwaP7FZGT42GDu2XiCX6NHVKE4AC2kUuqpI5vvXv7cAiBtD2co+rS+GPtDJ1TY2zYbPzFlC3swa5j414FFdUaMsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152554},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.1.0-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/d36ce1e008565044a42cc1bae9f9cc45/feedmepos-hrm-actionguard-1.1.0-dev.tgz","_integrity":"sha512-hwGH0/eoLNWBrbWON3cgI9bV2SiNRBfVZq5/+wpibIkcqx470HDSiUKMdN0ZHvxGXT5fDl3hQpITraVnzquXDQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"1.11.1","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.1.0-dev_1781152556192_0.8547772614406441","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@feedmepos/hrm-actionguard","version":"1.1.0","_id":"@feedmepos/hrm-actionguard@1.1.0","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"063fdf0b469bd1003d4aeda05d5425c80242773b","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.1.0.tgz","fileCount":33,"integrity":"sha512-V0zth5CYHXdsjRnGNKAyM1T57Utrwf2bar7iLEUc5A6yzN6uq+B3c8PVBiacU982tfEKfbCMDA3lVWwOti8vvQ==","signatures":[{"sig":"MEQCIGTSBQhKlzm6pVDiRPy8gEFnX7vxO/DBMHUV9MqX4g8UAiBkEoAuPHIJCgvnU/0RVuxjzFURHTMqn9nQPhzW1SqxLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152550},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/4d389f8b8370e1dc095f5cd93ce28572/feedmepos-hrm-actionguard-1.1.0.tgz","_integrity":"sha512-V0zth5CYHXdsjRnGNKAyM1T57Utrwf2bar7iLEUc5A6yzN6uq+B3c8PVBiacU982tfEKfbCMDA3lVWwOti8vvQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"h3":"1.11.1","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.1.0_1781159473368_0.2804368442747742","host":"s3://npm-registry-packages-npm-production"}},"1.1.1-dev":{"name":"@feedmepos/hrm-actionguard","version":"1.1.1-dev","_id":"@feedmepos/hrm-actionguard@1.1.1-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"6531a050129b1313168e9a74b9838d5dabc4c27a","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.1.1-dev.tgz","fileCount":33,"integrity":"sha512-NSZayMTN1Of3ipasgeOJXCvMTxWmkerX7oio130mw3GVl1hNll3shwd9y0II0Cm9Dnir6FOoVAxt3cAPan//2Q==","signatures":[{"sig":"MEUCIQC18CmgFNS8NBGEhlYyq63pdyBqJIKjhrBn1ZiempMPrAIgdT3wWPV4P3c7GObYFM0leyYTfdTk5yEjSSz+l5ZoBm4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158279},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.1.1-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/9b8ffdeed38eb7d2993cb60423d9a2f9/feedmepos-hrm-actionguard-1.1.1-dev.tgz","_integrity":"sha512-NSZayMTN1Of3ipasgeOJXCvMTxWmkerX7oio130mw3GVl1hNll3shwd9y0II0Cm9Dnir6FOoVAxt3cAPan//2Q==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"1.11.1","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.1.1-dev_1782904917953_0.8856892215544139","host":"s3://npm-registry-packages-npm-production"}},"1.1.1-dev.1":{"name":"@feedmepos/hrm-actionguard","version":"1.1.1-dev.1","_id":"@feedmepos/hrm-actionguard@1.1.1-dev.1","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"ac4016a419edd3e9d0fdcb2bda892dea470b93dd","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.1.1-dev.1.tgz","fileCount":33,"integrity":"sha512-4NiHKE/nSP9Lh+nLgvGtR+9Z3UiJh5KKivs3j7XLpPCilJAKhbFPNN5d3kT4/Kj+gB2LsNA4XJ2AVHAbFrK6kg==","signatures":[{"sig":"MEQCIFBGBTap1CEU8JMV7ZwYkg7luVBuvR8/oGNZPQGotCHZAiAJhvje/ytxCOu9fvaYGCK+10sTXaR8aDLjDQuEzSHD5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158371},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.1.1-dev.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/4d723a2485313d36b2e7240f064840a3/feedmepos-hrm-actionguard-1.1.1-dev.1.tgz","_integrity":"sha512-4NiHKE/nSP9Lh+nLgvGtR+9Z3UiJh5KKivs3j7XLpPCilJAKhbFPNN5d3kT4/Kj+gB2LsNA4XJ2AVHAbFrK6kg==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"1.11.1","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.1.1-dev.1_1782970403823_0.4808008167003244","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@feedmepos/hrm-actionguard","version":"1.1.1","_id":"@feedmepos/hrm-actionguard@1.1.1","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"ce725aa44edc21ff77b66c46fef7cb3feb1a318a","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.1.1.tgz","fileCount":33,"integrity":"sha512-oAUQuGVvdf2gEzheN+zGAjKMZPG/N2rhf0Cri6rrlzQMtSIODOwrzKiyobyQsb24CY0WnTZ7YIPhvVL13q4tLQ==","signatures":[{"sig":"MEQCIG6EZFkT/cY41XWdPau713lHGCTAXyv70WOdwecYqi/SAiArx9zfIoFlHHC5po/qFZEFXzgyy0e/zrAKXgPHh5OTDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154794},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/b9673753e45dd919faaded84a67ba091/feedmepos-hrm-actionguard-1.1.1.tgz","_integrity":"sha512-oAUQuGVvdf2gEzheN+zGAjKMZPG/N2rhf0Cri6rrlzQMtSIODOwrzKiyobyQsb24CY0WnTZ7YIPhvVL13q4tLQ==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"h3":"1.11.1","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.1.1_1783346312485_0.9237199384761321","host":"s3://npm-registry-packages-npm-production"}},"1.2.0-dev":{"name":"@feedmepos/hrm-actionguard","version":"1.2.0-dev","_id":"@feedmepos/hrm-actionguard@1.2.0-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"af41e5ecd87a51d432b8f308c8bc2c5e3dc63359","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.2.0-dev.tgz","fileCount":43,"integrity":"sha512-FBexy+GM0e6vsoUpMJpZUdt1cKt46LQ4a2nL7i8sn5RoWeEXJ+EpFrYI3zDxxiGqxcxLKhfOwjqpTMMxKyhuig==","signatures":[{"sig":"MEYCIQCVK58B/x97NRe3HJXCkH626QMIkv/oxhVZA7daORaWZgIhAMWmLtHp/Yjk1l3ig2kVOZJJRLsc/FuyIokesD2Hjo3R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":203877},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.2.0-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/8ab321630d1703bce17756e3a6234c76/feedmepos-hrm-actionguard-1.2.0-dev.tgz","_integrity":"sha512-FBexy+GM0e6vsoUpMJpZUdt1cKt46LQ4a2nL7i8sn5RoWeEXJ+EpFrYI3zDxxiGqxcxLKhfOwjqpTMMxKyhuig==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13","@opentelemetry/api":"^1.9.0"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"1.11.1","rxjs":"^7.8.0","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","rxjs":"^7.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"rxjs":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.2.0-dev_1784779841445_0.6352101063854594","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@feedmepos/hrm-actionguard","version":"1.2.0","_id":"@feedmepos/hrm-actionguard@1.2.0","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"}],"dist":{"shasum":"7aef4be67d9c579be908e01d08d7710500da3c81","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.2.0.tgz","fileCount":33,"integrity":"sha512-tR4SksJwPSPxcLlBM2B9xeHfR5i9InIeWpK07vfkwL0djXnJV9g+JkEzRJQZEKXpZ1oPViaIlJzdCTHygevgDw==","signatures":[{"sig":"MEUCIQD1W5hhQWsi4MBphCg5pqIMEyc89qoHxnvccQuIA6K/pwIgOuOUCDxKv++vTr0bpHwsjW8IxkIN2pl9bGq1B0KDwFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166786},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/16229aeecf8cd0770fa1feada10ae832/feedmepos-hrm-actionguard-1.2.0.tgz","_integrity":"sha512-tR4SksJwPSPxcLlBM2B9xeHfR5i9InIeWpK07vfkwL0djXnJV9g+JkEzRJQZEKXpZ1oPViaIlJzdCTHygevgDw==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"h3":"1.11.1","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.2.0_1785249749732_0.5940041436206882","host":"s3://npm-registry-packages-npm-production"}},"1.2.1-dev":{"name":"@feedmepos/hrm-actionguard","version":"1.2.1-dev","_id":"@feedmepos/hrm-actionguard@1.2.1-dev","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"},{"name":"fm_mebot","email":"mebot@feedme.cc"}],"dist":{"shasum":"bd21c3f813ef13cca64de0b68a06f20136417c25","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.2.1-dev.tgz","fileCount":43,"integrity":"sha512-41iWke/nJV8HOWspHYz/uAeFAxZXEVKlvzImma6tz/E0t/nPSZsRs+vF53UPADqAV2Ld/ttk3BU0jANTKrKYxw==","signatures":[{"sig":"MEYCIQDddIPxF659lHiCThHj05n6igJcizCWIGblxVTbOGGgFwIhANp0zglQ1NKGy/iKkH23UJbIOCmtkXaB+hNSqqJ7Ck6g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208686},"main":"./dist/index.cjs","type":"module","_from":"file:feedmepos-hrm-actionguard-1.2.1-dev.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"}},"scripts":{"dev":"vite","test":"vitest run","build":"vite build","build-only":"vite build","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"_resolved":"/tmp/fb85851d781539178b5aac6cb446bd9a/feedmepos-hrm-actionguard-1.2.1-dev.tgz","_integrity":"sha512-41iWke/nJV8HOWspHYz/uAeFAxZXEVKlvzImma6tz/E0t/nPSZsRs+vF53UPADqAV2Ld/ttk3BU0jANTKrKYxw==","_npmVersion":"11.5.1","description":"NestJS Action Guard for HRM permission system","directories":{},"_nodeVersion":"24.5.0","dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13","@opentelemetry/api":"^1.9.0"},"typesVersions":{"*":{"nuxt":["./dist/nuxt/index.d.ts"],"nestjs":["./dist/nestjs/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"h3":"1.11.1","rxjs":"^7.8.0","vite":"^5.1.4","vitest":"^1.3.0","express":"^4.18.0","typescript":"^5.9.3","@types/node":"^18.17.17","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","vite-plugin-dts":"^3.6.0","reflect-metadata":"^0.2.0"},"peerDependencies":{"h3":">=1.0.0","rxjs":"^7.0.0","express":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0"},"peerDependenciesMeta":{"h3":{"optional":true},"rxjs":{"optional":true},"express":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hrm-actionguard_1.2.1-dev_1786704220110_0.6750707275632217","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@feedmepos/hrm-actionguard","version":"1.3.0","type":"module","description":"NestJS Action Guard for HRM permission system","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./nestjs":{"types":"./dist/nestjs/index.d.ts","import":"./dist/nestjs/index.js","require":"./dist/nestjs/index.cjs"},"./nuxt":{"types":"./dist/nuxt/index.d.ts","import":"./dist/nuxt/index.js","require":"./dist/nuxt/index.cjs"}},"typesVersions":{"*":{"nestjs":["./dist/nestjs/index.d.ts"],"nuxt":["./dist/nuxt/index.d.ts"]}},"dependencies":{"@casl/ability":"^3.2.0","@grpc/grpc-js":"^1.12.6","@grpc/proto-loader":"^0.7.13","@opentelemetry/api":"^1.9.0"},"peerDependencies":{"@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0","express":"^4.0.0","h3":">=1.0.0","reflect-metadata":"^0.2.0","rxjs":"^7.0.0"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/core":{"optional":true},"reflect-metadata":{"optional":true},"rxjs":{"optional":true},"express":{"optional":true},"h3":{"optional":true}},"devDependencies":{"@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0","@types/express":"^4.17.0","@types/node":"^18.17.17","express":"^4.18.0","h3":"1.11.1","reflect-metadata":"^0.2.0","rxjs":"^7.8.0","typescript":"^5.9.3","vite":"^5.1.4","vite-plugin-dts":"^3.6.0","vitest":"^1.3.0"},"scripts":{"dev":"vite","build":"vite build","build-only":"vite build","test":"vitest run","test:watch":"vitest","type-check":"tsc --noEmit -p tsconfig.app.json","build:check":"tsc --noEmit -p tsconfig.app.json && vite build"},"_id":"@feedmepos/hrm-actionguard@1.3.0","_integrity":"sha512-WUgUEs+PiGP5E4pR8B/dVYfr0fEeXamJW1laMmbu+mqigwCQCv6HgBgofB5ThHLasRhL5by8ZIDE1hehcjaLBA==","_resolved":"/tmp/e7c90ac1ebb1f1bca549ec37f042353b/feedmepos-hrm-actionguard-1.3.0.tgz","_from":"file:feedmepos-hrm-actionguard-1.3.0.tgz","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-WUgUEs+PiGP5E4pR8B/dVYfr0fEeXamJW1laMmbu+mqigwCQCv6HgBgofB5ThHLasRhL5by8ZIDE1hehcjaLBA==","shasum":"bea7b1aedd1df816df358ecf770911f23e09fb71","tarball":"https://registry.npmjs.org/@feedmepos/hrm-actionguard/-/hrm-actionguard-1.3.0.tgz","fileCount":43,"unpackedSize":217051,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDWZ066rkN1+KzQjFm/30NONQ/rcCf/k9IYGYEear1i0wIgJviGR4AUmbISV30ufZ5Q7yuIh1SgvQ0fFQ6corOa9Ww="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c095a61b-d2e3-474e-a4cf-c8c93d2b07d5"}},"directories":{},"maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"},{"name":"fm_mebot","email":"mebot@feedme.cc"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hrm-actionguard_1.3.0_1788340787846_0.9062394848152093"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-03T09:34:16.531Z","modified":"2026-09-02T09:19:48.170Z","0.0.1-beta":"2026-03-03T09:34:16.766Z","0.0.1-dev.1":"2026-03-03T09:37:03.821Z","0.0.3-dev":"2026-03-03T09:55:03.030Z","0.0.4-dev":"2026-03-05T07:08:58.242Z","0.0.4-dev.1":"2026-03-11T10:46:42.471Z","0.0.4-dev.2":"2026-03-19T10:50:51.029Z","0.0.4-dev.3":"2026-03-27T09:13:50.094Z","0.0.4-dev.4":"2026-03-30T03:19:37.635Z","0.0.4-dev.5":"2026-03-31T09:09:09.553Z","1.0.0":"2026-04-01T08:35:41.465Z","1.0.1-dev":"2026-04-15T08:13:25.826Z","1.0.1":"2026-04-16T06:34:00.320Z","1.0.2-dev":"2026-04-22T08:41:51.104Z","1.0.2-dev.2":"2026-04-23T02:35:55.721Z","1.0.2-dev.3":"2026-04-23T06:59:40.659Z","1.0.2":"2026-04-24T07:31:13.812Z","1.0.3-dev.3":"2026-04-24T13:13:21.298Z","1.0.3":"2026-04-30T03:42:26.449Z","1.0.4-dev.1":"2026-05-06T08:01:10.442Z","1.0.4-dev.2":"2026-05-06T08:40:14.179Z","1.0.4-dev.3":"2026-05-06T09:26:49.081Z","1.0.4-dev.4":"2026-05-08T02:11:26.392Z","1.0.4":"2026-05-08T02:31:54.251Z","1.0.5":"2026-05-13T05:07:15.810Z","1.0.6-dev.1":"2026-05-27T03:56:05.186Z","1.0.6-dev.2":"2026-05-28T10:36:29.211Z","1.0.6":"2026-05-28T14:07:34.839Z","1.0.7-dev":"2026-06-03T04:34:54.735Z","1.0.7-dev.2":"2026-06-04T08:50:46.341Z","1.1.0-dev":"2026-06-11T04:35:56.360Z","1.1.0":"2026-06-11T06:31:13.502Z","1.1.1-dev":"2026-07-01T11:21:58.106Z","1.1.1-dev.1":"2026-07-02T05:33:23.966Z","1.1.1":"2026-07-06T13:58:32.621Z","1.2.0-dev":"2026-07-23T04:10:41.586Z","1.2.0":"2026-07-28T14:42:29.890Z","1.2.1-dev":"2026-08-14T10:43:40.267Z","1.3.0":"2026-09-02T09:19:47.982Z"},"description":"NestJS Action Guard for HRM permission system","maintainers":[{"name":"victor.chai","email":"victor.chai@feedme.cc"},{"name":"lokingwei","email":"kingwei@feedme.cc"},{"name":"danielmcfluffy","email":"daniel001.dhf@gmail.com"},{"name":"fm_mebot","email":"mebot@feedme.cc"}],"readme":"# @feedmepos/hrm-actionguard\n\nNestJS Guard + Decorator for declarative permission control, built on CASL.\n\nSends a gRPC `CheckPermission` call to hrm-backend for permission verification and audit logging. By default, the package connects to the internal `hr-backend:5001` over insecure gRPC; set `PERMISSION_CHECK_TARGET=hr-backend` to route through the remote SSL endpoint instead, or `PERMISSION_CHECK_TARGET=internal` to explicitly opt into the default insecure path.\n\n## Installation\n\n```bash\npnpm add @feedmepos/hrm-actionguard\n```\n\n## Usage\n\n### Module Setup\n\n```typescript\nimport { ActionGuardModule } from '@feedmepos/hrm-actionguard/nestjs';\n\n@Module({\n\timports: [\n\t\tActionGuardModule.forRoot({\n\t\t\t// grpcUrl defaults to:\n\t\t\t// - PERMISSION_CHECK_GRPC_URL env, if set\n\t\t\t// - otherwise PERMISSION_CHECK_TARGET=hr-backend: 'hr-backend-grpc.feedmeapidev.com:443'\n\t\t\t// - otherwise PERMISSION_CHECK_TARGET=internal (or unset): 'hr-backend:5001'\n\t\t\t//\n\t\t\t// grpcMode defaults to:\n\t\t\t// - PERMISSION_CHECK_GRPC_MODE env, if set ('ssl' | 'insecure')\n\t\t\t// - otherwise PERMISSION_CHECK_TARGET=hr-backend: 'ssl'\n\t\t\t// - otherwise PERMISSION_CHECK_TARGET=internal (or unset): 'insecure'\n\t\t\t//\n\t\t\t// token defaults to HRM_INTERNAL_TOKEN env → PERMISSION_CHECK_TOKEN_DEFAULT\n\t\t}),\n\t],\n})\nexport class AppModule {}\n```\n\nThat's it. Inside the cluster (and any environment where `hr-backend:5001` is reachable) the default is correct. Set `PERMISSION_CHECK_TARGET=hr-backend` when the caller has no internal `hr-backend` service and needs to use the shared dev endpoint.\n\n#### Environment variables\n\n| Variable                     | Purpose                                                                                                              | Default                                                   |\n| ---------------------------- | -------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |\n| `HRM_INTERNAL_TOKEN`         | Authenticates gRPC calls to hrm-backend. Auto-read when not passed explicitly.                                       | `PERMISSION_CHECK_TOKEN_DEFAULT` (`'Greetings_from_hrm'`) |\n| `PERMISSION_CHECK_TARGET`    | Selects the preset endpoint: `hr-backend` (remote SSL) or `internal` (insecure `hr-backend:5001`). Unset = internal. | unset                                                     |\n| `PERMISSION_CHECK_GRPC_URL`  | Manual override for the gRPC server address. Wins over the target default.                                           | derived from `PERMISSION_CHECK_TARGET`                    |\n| `PERMISSION_CHECK_GRPC_MODE` | Manual override for the gRPC channel credentials mode. Must be `ssl` or `insecure`.                                  | derived from `PERMISSION_CHECK_TARGET`                    |\n\nTarget defaults:\n\n| `PERMISSION_CHECK_TARGET` | URL                                    | gRPC mode  |\n| ------------------------- | -------------------------------------- | ---------- |\n| _(unset)_                 | `hr-backend:5001`                      | `insecure` |\n| `internal`                | `hr-backend:5001`                      | `insecure` |\n| `hr-backend`              | `hr-backend-grpc.feedmeapidev.com:443` | `ssl`      |\n\nAny other non-empty value throws on startup so typos fail loudly. An empty string is treated the same as unset.\n\nPrecedence is:\n\n1. `ActionGuardModule.forRoot({ grpcUrl, grpcMode })`\n2. `PERMISSION_CHECK_GRPC_URL` / `PERMISSION_CHECK_GRPC_MODE`\n3. `PERMISSION_CHECK_TARGET` default\n\nFor local HRM development where you run hrm-backend on your own machine, set `PERMISSION_CHECK_GRPC_URL=localhost:5001`. The default mode is `insecure`, so no `PERMISSION_CHECK_GRPC_MODE` override is needed — provided `PERMISSION_CHECK_TARGET` is unset or `internal`. If `PERMISSION_CHECK_TARGET=hr-backend` is also set, the resolved mode stays `ssl`, so also set `PERMISSION_CHECK_GRPC_MODE=insecure`.\n\n#### Overriding defaults\n\n```typescript\n// Synchronous override\nActionGuardModule.forRoot({\n\ttoken: 'override-token',\n\tgrpcUrl: 'custom-host:5001',\n\tgrpcMode: 'insecure',\n});\n```\n\n#### Async Configuration\n\n```typescript\nActionGuardModule.forRootAsync({\n\timports: [ConfigModule],\n\tinject: [ConfigService],\n\tuseFactory: (config: ConfigService) => ({\n\t\ttoken: config.get('HRM_INTERNAL_TOKEN'),\n\t\t// Optional explicit overrides:\n\t\tgrpcUrl: config.get('PERMISSION_CHECK_GRPC_URL'),\n\t\tgrpcMode: config.get<'ssl' | 'insecure'>('PERMISSION_CHECK_GRPC_MODE'),\n\t\ttimeoutMs: 8000,\n\t\tmaxRetries: 3,\n\t}),\n});\n```\n\n### Declare Permissions at Controller / Method Level\n\n```typescript\nimport { ActionGuard, Action } from '@feedmepos/hrm-actionguard/nestjs';\n\n// Controller level — all methods inherit\n@Action({\n\tlevel: 1, // 0=FeedMe, 1=Business, 2=Restaurant\n\tsubject: 'permission',\n\taction: 'manage',\n})\n@UseGuards(AuthGuard('firebase'), ActionGuard)\n@Controller('portal/businesses/:businessId/users')\nexport class UserController {\n\t@Get()\n\tasync getUsers() {}\n}\n```\n\n### Access Ability in Controller\n\nAfter the guard passes, ability is injected into `request.user.ability`:\n\n```typescript\n@Get()\nasync getData(@Req() req: Request) {\n  const ability = req.user?.ability[1]; // business level\n  const canDelete = ability?.can('delete', { subjectType: 'role' });\n}\n```\n\n## API\n\n### `@Action(metadata)`\n\n| Param               | Type                                                                                                            | Description                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| ------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `level`             | <code>0 &#124; 1 &#124; 2</code>                                                                                | Permission level: 0=FeedMe, 1=Business, 2=Restaurant                                                                                                                                                                                                                                                                                                                                                                          |\n| `subject`           | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code>                                               | Permission subject, e.g. `Permission.Subject.Business.hrm_teamMember`. Pass a function for dynamic subjects resolved from request context.                                                                                                                                                                                                                                                                                    |\n| `action`            | `string`                                                                                                        | CASL action: `\"manage\"`, `\"read\"`, `\"create\"`, `\"update\"`, `\"delete\"`                                                                                                                                                                                                                                                                                                                                                         |\n| `field?`            | `string`                                                                                                        | Optional field-level permission                                                                                                                                                                                                                                                                                                                                                                                               |\n| `coverSubject?`     | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code>                                               | Optional OR fallback subject — access granted if user can perform `action` on either `subject` **or** `coverSubject`. Accepts a resolver function same as `subject`.                                                                                                                                                                                                                                                          |\n| `coverSubjectMode?` | <code>'or' &#124; 'directOverride'</code>                                                                       | Optional cover fallback strategy. Defaults to `or`. Use `directOverride` for report access defaults where a direct per-report rule should override the all-report cover rule.                                                                                                                                                                                                                                                 |\n| `skipValidation?`   | `boolean`                                                                                                       | Skip permission check (allow through regardless — logs a warning)                                                                                                                                                                                                                                                                                                                                                             |\n| `skipAudit?`        | `boolean`                                                                                                        | Skip writing the audit log row. Defaults to `false` (row written). The permission check always runs regardless — set `true` only to suppress logging for high-frequency, low-value reads (e.g. list/refresh GETs). Mutations and security-sensitive operations should keep the default.                                                                                                                                        |\n| `eventKey?`         | <code>AuditEventKey &#124; ((ctx: OperationContext) =&gt; AuditEventKey)</code>                                  | Stable, domain-owned request-intent key in `<entity>.<verb>` form, for example `inventory-item.adjust-stock`. Domains may introduce keys without changing ActionGuard. Pass a resolver function for endpoints that handle multiple distinct events and need request data to determine which one occurred.                                                                                                                                                                                                                                                                                                                                                      |\n| `eventParams?`      | <code>EventParams &#124; ((ctx: OperationContext) =&gt; EventParams)</code>                           | Flat string/number values stored with the event. Use `label` as the preferred human-readable entity anchor; domain-specific values are available to matching portal translations.                                                                                                                                                                                                                                                                                                                                                        |\n| `entityId?`         | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code>                                               | Target record identifier, promoted for entity timeline queries                                                                                                                                                                                                                                                                                                                                                                |\n| `operationLabel?`   | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code>                                               | Deprecated human-readable fallback for unmigrated external consumers                                                                                                                                                                                                                                                                                                                                                                           |\n| `requestBody?`      | <code>Record&lt;string, unknown&gt; &#124; ((ctx: OperationContext) =&gt; Record&lt;string, unknown&gt;)</code> | Override for the request body forwarded to hr-backend for audit logging. Defaults to `request.body`. Use a function to send only the fields relevant to auditing. Errors are caught — nothing is sent on throw (fail-safe).                                                                                                                                                                                                   |\n| `context?`          | <code>Record&lt;string, unknown&gt; &#124; ((ctx: OperationContext) =&gt; Record&lt;string, unknown&gt;)</code> | Evaluation context for a condition-matched subject — computes the scalar fields the subject's `ConditionBuilder.contextSchema` declares (e.g. `reportAgeDays` for report access-window rules). See `@feedmepos/hrm-permission` → \"condition builders\". Errors are caught — nothing is sent on throw; the backend then decides fail-open vs fail-closed based on whether a real restriction is configured (see `checkAccess`). |\n\n#### Dynamic Subjects\n\n`subject` and `coverSubject` accept a resolver function `(ctx: OperationContext) => string` for cases where the subject depends on request context:\n\n```typescript\n// Static subject\n@Action({\n  level: Permission.Level.business,\n  subject: Permission.Subject.Business.hrm_teamMember,\n  action: Permission.Action.read,\n})\n\n// Dynamic subject resolved from route params\n@Action({\n  level: Permission.Level.business,\n  subject: ({ params }) => `business::report::reports::${params.permissionKey}`,\n  action: Permission.Action.read,\n})\n\n// Dynamic coverSubject as fallback\n@Action({\n  level: Permission.Level.business,\n  subject: ({ params }) => `business::report::reports::${params.permissionKey}`,\n  coverSubject: 'business::report::accessInsight',\n  action: Permission.Action.read,\n})\n\n// Dynamic report subject with all-report fallback only when no direct report rule exists\n@Action({\n\tlevel: Permission.Level.business,\n\tsubject: ({ params }) => `business::report::reports::${params.permissionKey}`,\n\tcoverSubject: Permission.Subject.Business.report_reports_allDefaultReports,\n\tcoverSubjectMode: 'directOverride',\n\taction: Permission.Action.read,\n})\n```\n\nThe resolver receives the same `OperationContext` as `operationLabel`. See the [Operation Labels](#operation-labels) section for the full context shape.\n\n### `ActionGuardModule.forRoot(config?)` / `forRootAsync(config)`\n\n| Config          | Type                                 | Default                                                                                                                 | Description                                                            |\n| --------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |\n| `token?`        | `string`                             | `HRM_INTERNAL_TOKEN` env → `PERMISSION_CHECK_TOKEN_DEFAULT`                                                             | HRM internal token for gRPC auth                                       |\n| `grpcUrl?`      | `string`                             | `PERMISSION_CHECK_GRPC_URL` env → target default URL                                                                    | gRPC server address                                                    |\n| `grpcMode?`     | <code>'ssl' &#124; 'insecure'</code> | `PERMISSION_CHECK_GRPC_MODE` env → `ssl` when `PERMISSION_CHECK_TARGET=hr-backend`, `insecure` when `internal` or unset | gRPC channel credentials mode                                          |\n| `timeoutMs?`    | `number`                             | `5000`                                                                                                                  | Per-call gRPC deadline in milliseconds                                 |\n| `maxRetries?`   | `number`                             | `2`                                                                                                                     | Max retry attempts for transient gRPC errors (DEADLINE_EXCEEDED, etc)  |\n| `retryDelayMs?` | `number`                             | `500`                                                                                                                   | Initial retry delay in ms (doubles each attempt — exponential backoff) |\n\n### Retry Behavior\n\nTransient gRPC errors are retried automatically with exponential backoff. The following status codes trigger retries:\n\n- `DEADLINE_EXCEEDED` (4)\n- `UNAVAILABLE` (14)\n- `RESOURCE_EXHAUSTED` (8)\n- `ABORTED` (10)\n\nNon-retryable errors (e.g. `PERMISSION_DENIED`, `NOT_FOUND`, `INVALID_ARGUMENT`) fail immediately.\n\nWith defaults (`maxRetries: 2`, `retryDelayMs: 500`), a failing call will attempt up to 3 times total with delays of 500ms and 1000ms between attempts.\n\n### Execution Flow\n\n```\nAuthGuard → ActionGuard\n  1. Read @Action metadata from controller/method\n  2. Resolve subject/coverSubject functions (if any)\n  3. Resolve operationLabel function (if any)\n  4. Resolve requestBody: use @Action override when set, else request.body\n  5. Serialize requestBody:\n       ≤ 1 MB → plain JSON string\n       > 1 MB → gzip-compressed, base64-encoded with \"gzip:\" prefix\n  6. Resolve traceId: active OTel span's traceId when the process runs\n     instrumented, else a random 32-hex-char id in the same shape\n     (correlates audit events of one request). Which path was taken is logged\n     once per process — grep an environment's logs for \"[ActionGuard] trace ids\"\n     to see whether its ids are real span ids\n  7. gRPC CheckPermission → hrm-backend (8 MB send limit)\n     (constructAbility + checkAccess + audit access event)\n  8. Retry on transient errors (with exponential backoff)\n  9. Reconstruct CASL Ability from gRPC response\n 10. Inject request.user.ability = { [level]: Ability }\n 11. Stash audit context (traceId, actor, subject…) for the completion\n     interceptor (granted, non-skipAudit requests only)\n 12. Return granted/denied\n\nAfter the handler settles (mutations only — POST/PUT/PATCH/DELETE):\n 13. Completion interceptor composes status (success, or failed + error\n     message), duration, and any staged entity records\n 14. gRPC RecordOperation → hrm-backend writes the operation event\n     (fire-and-forget: audit failure never affects the response)\n```\n\n## Operation Labels\n\n> **Deprecated.** `operationLabel` is a display fallback kept for consumers that\n> have not migrated yet. New code should use `eventKey`, `eventParams`, and\n> `entityId` (see the [`@Action(metadata)`](#actionmetadata) table above) —\n> they give the audit portal a stable, structured identity to render instead\n> of a free-text string. The `OperationContext` shape documented below is\n> still current: `eventKey`, `eventParams`, and `entityId` resolver functions\n> receive the same context object.\n\nThe optional `operationLabel` field provides a human-readable description of the operation. The resolved string is stored in `metadata.operationLabel` in the ClickHouse audit log.\n\n### Static Label\n\n```typescript\n@Action({\n  level: Permission.Level.business,\n  subject: Permission.Subject.Business.inventory,\n  action: Permission.Action.update,\n  operationLabel: 'Update inventory stock',\n})\n```\n\n### Dynamic Label\n\nPass a function to build the label from request context. The function receives an `OperationContext`:\n\n| Field    | Type                                                                       | Description                                           |\n| -------- | -------------------------------------------------------------------------- | ----------------------------------------------------- |\n| `params` | `Record<string, string>`                                                   | Route params, e.g. `{ businessId, restaurantId }`     |\n| `body`   | <code>Record&lt;string, unknown&gt; &#124; undefined</code>                | Parsed request body                                   |\n| `query`  | <code>Record&lt;string, string &#124; string[]&gt; &#124; undefined</code> | Query string params                                   |\n| `path`   | `string`                                                                   | Full request path, e.g. `\"/api/businesses/123/users\"` |\n| `method` | `string`                                                                   | HTTP method, e.g. `\"GET\"`, `\"PUT\"`                    |\n| `user`   | `{ uid: string; role?: string }`                                           | Authenticated user                                    |\n\n```typescript\n@Action({\n  level: Permission.Level.restaurant,\n  subject: Permission.Subject.Restaurant.inventory_stock,\n  action: Permission.Action.update,\n  operationLabel: ({ params }) => `Update stock for outlet ${params.restaurantId}`,\n})\n\n@Action({\n  level: Permission.Level.business,\n  subject: Permission.Subject.Business.hrm_employee,\n  action: Permission.Action.update,\n  operationLabel: ({ body, params }) =>\n    `Update employee ${body?.name ?? params.employeeId}`,\n})\n```\n\n> **Note**: The label function runs before the user check. `ctx.user` may be `undefined` on unauthenticated requests — always guard with optional chaining.\n\n## Request Body Forwarding\n\nBy default, the full `request.body` is forwarded to hr-backend and stored in the ClickHouse audit log. Use `requestBody` in `@Action` to override which fields are sent.\n\n### Gzip Compression\n\nThe request body is serialized before being sent over gRPC:\n\n- **≤ 1 MB**: sent as a plain JSON string.\n- **> 1 MB**: gzip-compressed and base64-encoded with a `\"gzip:\"` prefix — e.g. `\"gzip:<base64>\"`.\n\nThe hrm-portal audit log detail view detects the prefix and decompresses transparently. Legacy audit records that stored `requestBody` as a raw object are also handled.\n\n### Overriding the Body\n\n```typescript\n// Send a static subset\n@Action({\n  level: Permission.Level.business,\n  subject: Permission.Subject.Business.hrm_employee,\n  action: Permission.Action.update,\n  requestBody: { action: 'bulk-import' },\n})\n\n// Send only the fields relevant for auditing\n@Action({\n  level: Permission.Level.restaurant,\n  subject: Permission.Subject.Restaurant.inventory_stock,\n  action: Permission.Action.update,\n  requestBody: ({ body }) => ({ name: body?.name, count: body?.items?.length }),\n})\n```\n\nIf the function throws, nothing is sent — this prevents raw body leakage when you intended to strip fields.\n\n---\n\n## Nuxt / Nitro Integration\n\n`@feedmepos/hrm-actionguard/nuxt` provides the same permission control for Nuxt backends (Nitro/H3). The gRPC call, ability reconstruction, audit logging, and env var defaults are identical to the NestJS integration — only the wiring differs.\n\n### Architecture\n\n```\nFrontend request\n  → 01.auth.ts          (sets event.context.user from Firebase JWT)\n  → withActionGuard     (gRPC CheckPermission → hrm-backend)\n       ├─ 403 if denied\n       └─ event.context.user.ability = rebuilt CASL abilities\n  → handler             (runs only when granted)\n```\n\n### Setup\n\n#### 1. Initialize the client once at startup\n\nCreate a Nitro server plugin. It runs once when the server boots, same as `ActionGuardModule.forRoot()` in NestJS.\n\n```typescript\n// server/plugins/actionguard.ts\nimport { initActionGuardClient } from '@feedmepos/hrm-actionguard/nuxt';\n\nexport default defineNitroPlugin(() => {\n\t// Zero config — reads the same env vars as the NestJS module:\n\t// PERMISSION_CHECK_TARGET, PERMISSION_CHECK_GRPC_URL, HRM_INTERNAL_TOKEN, etc.\n\tinitActionGuardClient();\n});\n```\n\nTo override specific settings:\n\n```typescript\ninitActionGuardClient({\n\tgrpcUrl: 'localhost:5001',\n\tgrpcMode: 'insecure',\n\ttoken: 'my-token',\n\ttimeoutMs: 8000,\n});\n```\n\n#### 2. Protect API routes with `withActionGuard`\n\nReplace `defineEventHandler` with `withActionGuard`. It requires `event.context.user` to already be set by a prior auth middleware.\n\n```typescript\n// server/api/businesses/[businessId]/members.get.ts\nimport { withActionGuard } from '@feedmepos/hrm-actionguard/nuxt';\nimport { Permission } from '@feedmepos/hrm-permission';\n\nexport default withActionGuard(\n\t{\n\t\tlevel: Permission.Level.business,\n\t\taction: Permission.Action.read,\n\t\tsubject: Permission.Subject.Business.hrm_teamMember,\n\t\teventKey: 'team-member.list',\n\t},\n\tasync (event) => {\n\t\tconst businessId = event.context.params.businessId;\n\t\treturn Services.member.list(businessId);\n\t}\n);\n```\n\n### Action Metadata\n\n`withActionGuard` accepts the same `Action` shape as the NestJS `@Action()` decorator.\n\n| Field               | Type                                                              | Description                                                                                                               |\n| ------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| `level`             | <code>0 &#124; 1 &#124; 2</code>                                  | Permission level: 0=FeedMe, 1=Business, 2=Restaurant                                                                      |\n| `subject`           | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code> | Permission subject. Pass a function for dynamic subjects resolved from request context.                                   |\n| `action`            | `string`                                                          | CASL action: `\"manage\"`, `\"read\"`, `\"create\"`, `\"update\"`, `\"delete\"`                                                     |\n| `field?`            | `string`                                                          | Optional field-level permission                                                                                           |\n| `coverSubject?`     | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code> | OR fallback subject — access granted if user can perform `action` on either `subject` or `coverSubject`                   |\n| `coverSubjectMode?` | <code>'or' &#124; 'directOverride'</code>                         | Cover fallback strategy. Defaults to `or`; use `directOverride` when a direct report rule should override the cover rule. |\n| `skipValidation?`   | `boolean`                                                         | Skip permission check (allow through — logs outcome as `skipped` in audit log)                                            |\n| `skipAudit?`        | `boolean`                                                         | Skip writing the audit log row. Defaults to `false`. Permission check always runs — set `true` to suppress logging for high-frequency, low-value reads.                                                                                    |\n| `eventKey?`         | <code>AuditEventKey &#124; ((ctx: OperationContext) =&gt; AuditEventKey)</code> | Stable, domain-owned request-intent key in `<entity>.<verb>` form, for example `inventory-item.adjust-stock`. Domains may introduce keys without changing ActionGuard. Pass a resolver function for endpoints that handle multiple distinct events and need request data to determine which one occurred. |\n| `eventParams?`      | <code>EventParams &#124; ((ctx: OperationContext) =&gt; EventParams)</code> | Flat string/number values stored with the event. Use `label` as the preferred human-readable entity anchor; domain-specific values are available to matching portal translations. |\n| `entityId?`         | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code> | Target record identifier, promoted for entity timeline queries                                                            |\n| `operationLabel?`   | <code>string &#124; ((ctx: OperationContext) =&gt; string)</code> | Deprecated human-readable fallback for unmigrated consumers — prefer `eventKey`/`eventParams`/`entityId`                  |\n\n#### Dynamic subjects and event metadata\n\n```typescript\n// server/api/businesses/[businessId]/reports/[reportKey].get.ts\nimport { withActionGuard } from '@feedmepos/hrm-actionguard/nuxt';\nimport { Permission } from '@feedmepos/hrm-permission';\n\nexport default withActionGuard(\n  {\n    level: Permission.Level.business,\n    action: Permission.Action.read,\n    // Each custom report has its own subject: business::report::reports::<reportKey>\n    subject: ({ params }) => `business::report::reports::${params.reportKey}`,\n    // Fallback: grant access if user has access to all custom reports\n    coverSubject: Permission.Subject.Business.report_reports_allCustomReports,\n\t\tcoverSubjectMode: 'directOverride',\n    eventKey: 'custom-report.view',\n    entityId: ({ params }) => params.reportKey,\n  },\n  async (event) => { ... }\n)\n```\n\n### Accessing Ability in the Handler\n\nAfter `withActionGuard` passes, `event.context.user.ability` contains reconstructed CASL `Ability` objects keyed by level, identical to `req.user.ability` in NestJS.\n\n```typescript\nimport { withActionGuard } from '@feedmepos/hrm-actionguard/nuxt';\nimport type { ActionGuardUser } from '@feedmepos/hrm-actionguard/nuxt';\nimport { Permission } from '@feedmepos/hrm-permission';\n\nexport default withActionGuard(\n  {\n    level: Permission.Level.business,\n    action: Permission.Action.read,\n    subject: Permission.Subject.Business.hrm_teamMember,\n    operationLabel: 'List team members', // deprecated legacy fallback — prefer eventKey/eventParams/entityId (see above)\n  },\n  async (event) => {\n    const user = event.context.user as ActionGuardUser;\n    const ability = user.ability?.[Permission.Level.business];\n\n    // Fine-grained check beyond what withActionGuard already enforced\n    const canDelete = ability?.can(Permission.Action.delete, Permission.Subject.Business.hrm_teamMember);\n\n    // Parsed body is cached on context — no need to call readBody() again\n    const body = event.context.parsedBody;\n    ...\n  }\n);\n```\n\n### Frontend Route Guard (Vue Router)\n\nFor `mf-billing` or any Vue Router based frontend, add a `validationManifest` to route meta and check it in `router.beforeEach`. This is a UX guard only — the real security boundary is `withActionGuard` on the server.\n\n#### 1. Add permission meta to routes\n\n```typescript\n// router/merchant.ts\n{\n  path: '/businesses/:businessId/members',\n  name: 'Team Members',\n  meta: {\n    validationManifest: {\n      level: 1,\n      action: 'read',\n      subject: 'business::hrm::teamMember',\n    }\n  },\n  component: () => import('@/views/members/index.vue')\n}\n```\n\n#### 2. Check in `router.beforeEach`\n\n```typescript\n// router/index.ts\nrouter.beforeEach(async (to) => {\n\tconst manifest = to.meta?.validationManifest;\n\tif (!manifest) return;\n\n\ttry {\n\t\tawait $fetch('/api/authz/can', {\n\t\t\tmethod: 'POST',\n\t\t\tbody: {\n\t\t\t\t...manifest,\n\t\t\t\trouteParams: to.params,\n\t\t\t\troutePath: to.path,\n\t\t\t},\n\t\t});\n\t} catch (e: any) {\n\t\tif (e?.response?.status === 403) return navigateTo('/403');\n\t}\n});\n```\n\n#### 3. Expose a lightweight `/api/authz/can` endpoint on the backend\n\n```typescript\n// server/api/authz/can.post.ts\nimport { getActionGuardClient } from '@feedmepos/hrm-actionguard/nuxt';\nimport type { ActionGuardUser } from '@feedmepos/hrm-actionguard/nuxt';\n\nexport default defineEventHandler(async (event) => {\n\tconst user = event.context.user as ActionGuardUser;\n\tif (!user?.uid) throw createError({ statusCode: 401 });\n\n\tconst body = await readBody(event);\n\tconst result = await getActionGuardClient().checkPermission({\n\t\tuserId: user.uid,\n\t\trole: user.role ?? '',\n\t\tbusinessId: (body.routeParams?.businessId as string) ?? '',\n\t\trestaurantId: (body.routeParams?.restaurantId as string) ?? '',\n\t\tlevel: body.level,\n\t\taction: body.action,\n\t\tsubject: body.subject,\n\t\trequestPath: body.routePath ?? '',\n\t\trequestMethod: 'GET',\n\t\tcountry: process.env.FEEDME_COUNTRY ?? 'unknown',\n\t\teventKey: 'route-guard.check',\n\t});\n\n\tif (!result.granted) throw createError({ statusCode: 403, statusMessage: 'Forbidden' });\n\treturn { granted: true };\n});\n```\n\n### Environment Variables\n\nSame env vars as the NestJS module — no extra configuration required for internal cluster deployments.\n\n| Variable                     | Default                | Description                                                            |\n| ---------------------------- | ---------------------- | ---------------------------------------------------------------------- |\n| `HRM_INTERNAL_TOKEN`         | `'Greetings_from_hrm'` | Bearer token for gRPC auth                                             |\n| `PERMISSION_CHECK_TARGET`    | _(unset = internal)_   | `hr-backend` (SSL, remote) or `internal` (insecure, `hr-backend:5001`) |\n| `PERMISSION_CHECK_GRPC_URL`  | derived from target    | Manual URL override                                                    |\n| `PERMISSION_CHECK_GRPC_MODE` | derived from target    | Manual mode override: <code>ssl &#124; insecure</code>                 |\n\n---\n\n## Exports\n\n```typescript\n// Types only\nimport type { Action } from '@feedmepos/hrm-actionguard';\n\n// NestJS Guard, Decorator & Module\nimport {\n\tActionGuard,\n\tAction,\n\tActionGuardModule,\n\taudit,\n\tPERMISSION_CHECK_PROTO_PATH,\n\tPERMISSION_CHECK_PACKAGE_NAME,\n} from '@feedmepos/hrm-actionguard/nestjs';\n\nimport type { ActionMetadata, OperationRecordPayload, ChangeNode } from '@feedmepos/hrm-actionguard/nestjs';\n\n// Nuxt / Nitro integration\nimport {\n\twithActionGuard,\n\taudit,\n\tinitActionGuardClient,\n\tgetActionGuardClient,\n\tcloseActionGuardClient,\n} from '@feedmepos/hrm-actionguard/nuxt';\n\nimport type { ActionGuardUser, ActionGuardConfig } from '@feedmepos/hrm-actionguard/nuxt';\n```\n\n`audit.record({ eventKey, entityId, params, before, after, changeNodes })` stages an entity snapshot\ninside a guarded mutation handler (any call depth, synchronous, no I/O); it is sent\nwith the request's operation event when the handler settles. Credential-shaped keys\n(password, token, secret, …) are redacted automatically; `before`, `after`, and\n`changeNodes` are each gzipped individually (same `\"gzip:\"` convention as the request\nbody) once their JSON exceeds 1 MB.\nConvention: fetch before you mutate, record what you fetched.\n\n`changeNodes` is an optional array of display-ready change summaries (`ChangeNode[]`), where\neach node represents a human-readable diff row (e.g. \"Role: Manager → Staff\"). Producers\nresolve IDs to display names at write time; the portal renders them as a dumb table,\nfalling back to raw `before`/`after` JSON diff when `changeNodes` is absent.\n\n### Whole-Request Size Budget\n\nA single `RecordOperation` gRPC call carries every record staged during the mutation\n(one per `audit.record()` call), so fields that are individually under the per-field\ncap above can still sum past the gRPC channel's whole-message send limit (8 MB). Before\nsending, `recordOperation()` sums the byte length of every string field already built\nand, if the total exceeds that budget (minus headroom for protobuf framing), repeatedly\nreplaces the single largest `before`/`after`/`changeNodes` field across all records with\nthe same oversized-field placeholder used for individually oversized fields — never\n`eventKey`/`entityId`/`params`/`status`, which are required for correlation. This trades\na few large snapshots for still delivering the operation event, instead of losing the\nwhole request to a `RESOURCE_EXHAUSTED` gRPC error.\n\n## Build Notes\n\nThis package is built with Vite (esbuild). Three critical configurations:\n\n- **`minify: false`** — esbuild minifies class names to empty strings, causing NestJS to silently skip the guard. Minification must be disabled to preserve `ActionGuard.name`.\n- **`@Inject()` decorators** — esbuild does not support `emitDecoratorMetadata`, so `design:paramtypes` is not emitted. Constructor params must use explicit `@Inject()`.\n- **`zlib` externalized** — `zlib` is a Node.js built-in used for gzip compression. It must be listed in `build.rollupOptions.external` so Vite does not attempt to bundle it.\n\n## Related Packages\n\n- [@feedmepos/hrm-permission](../permission) — Permission service and CASL integration\n- [@casl/ability](https://casl.js.org/) — Authorization library\n","readmeFilename":"README.md"}